mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-11-01 18:19:43 +00:00
Add E2EE unit tests and improve mobile UI
- Add comprehensive tests for encryption/decryption logic - Improve error messages for encrypted chat - Update profile danger zone UI with blur effect - Refactor typing indicator hook
This commit is contained in:
1 parent
0ffa7fa952
commit
365852c130
16 files changed
+591
-218
No files matched your search
@@ -3,7 +3,7 @@ import { View, StyleSheet, TouchableOpacity, KeyboardAvoidingView, Platform, Act
|
||||
import { Image } from "expo-image";
|
||||
import { Video, ResizeMode } from "expo-av";
|
||||
import { useLocalSearchParams, useRouter } from "expo-router";
|
||||
import { useFocusEffect } from "@react-navigation/native";
|
||||
import { useFocusEffect, useIsFocused } from "@react-navigation/native";
|
||||
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
||||
import { Ionicons } from "@expo/vector-icons";
|
||||
import { LinearGradient } from "expo-linear-gradient";
|
||||
@@ -56,10 +56,13 @@ export const ChatScreen: React.FC = () => {
|
||||
cameraVideoMaxDuration: 60, // 1 min for camera recording
|
||||
});
|
||||
|
||||
const isFocused = useIsFocused();
|
||||
|
||||
// Typing indicator hook
|
||||
const { partnerTyping, sendTypingEvent, clearTypingIndicator } = useTypingIndicator({
|
||||
channelName: `chat:${matchId}`,
|
||||
userId: user?.id,
|
||||
isFocused,
|
||||
});
|
||||
|
||||
// Message subscription hook
|
||||
@@ -188,7 +191,16 @@ export const ChatScreen: React.FC = () => {
|
||||
const errorMessage = err instanceof Error && err.message
|
||||
? err.message
|
||||
: "Failed to send message";
|
||||
Alert.alert("Error", errorMessage);
|
||||
|
||||
// Map technical/unknown errors to friendly ones
|
||||
let friendlyMessage = errorMessage;
|
||||
if (errorMessage.includes('Failed to send') && !errorMessage.includes('connection')) {
|
||||
friendlyMessage = "Couldn't send secure message. Please check your connection.";
|
||||
} else if (errorMessage.includes('verification failed')) {
|
||||
friendlyMessage = "Security check failed. Please restart the app.";
|
||||
}
|
||||
|
||||
Alert.alert("Delivery Failed", friendlyMessage);
|
||||
setInputText(content);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -189,7 +189,6 @@ export function MessageContent({
|
||||
) : (
|
||||
<View style={[styles.messageVideo, styles.messageImageLoading]}>
|
||||
<ActivityIndicator color={ACCENT} />
|
||||
<Text style={styles.decryptingText}>Loading...</Text>
|
||||
</View>
|
||||
)}
|
||||
{/* Viewed indicator for sender */}
|
||||
@@ -272,7 +271,6 @@ export function MessageContent({
|
||||
) : (
|
||||
<View style={[styles.messageImage, styles.messageImageLoading]}>
|
||||
<ActivityIndicator color={ACCENT} />
|
||||
<Text style={styles.decryptingText}>Loading...</Text>
|
||||
</View>
|
||||
)}
|
||||
</TouchableOpacity>
|
||||
@@ -323,7 +321,6 @@ export function MessageContent({
|
||||
return (
|
||||
<View style={styles.decryptingContainer}>
|
||||
<ActivityIndicator size="small" color={ACCENT} />
|
||||
<Text style={styles.decryptingText}>Loading...</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user