import React from 'react'; import { View, StyleSheet, ScrollView, Alert } from 'react-native'; import { List, Switch, Text, Card, Title, Button } from 'react-native-paper'; import { useAuth } from '../services/AuthContext'; import { useOffline } from '../services/OfflineContext'; import { useNotifications } from '../services/NotificationContext'; import { useCamera } from '../services/CameraContext'; import { useVoice } from '../services/VoiceContext'; const SettingsScreen: React.FC = () => { const { user, logout } = useAuth(); const { isOnline, syncNow } = useOffline(); const { hasPermission: hasNotificationPermission, requestPermission: requestNotificationPermission } = useNotifications(); const { hasPermission: hasCameraPermission, requestPermission: requestCameraPermission, scanDocument } = useCamera(); const { hasPermission: hasVoicePermission, requestPermission: requestVoicePermission, isRecording, startRecording, stopRecording } = useVoice(); const [notifications, setNotifications] = React.useState(true); const [darkMode, setDarkMode] = React.useState(false); const [autoSync, setAutoSync] = React.useState(true); const handleLogout = async () => { await logout(); }; const handleNotificationPermission = async () => { if (!hasNotificationPermission) { const granted = await requestNotificationPermission(); if (granted) { Alert.alert('Success', 'Notification permission granted!'); } else { Alert.alert('Permission Denied', 'Notification permission is required for reminders'); } } }; const handleCameraPermission = async () => { if (!hasCameraPermission) { const granted = await requestCameraPermission(); if (granted) { Alert.alert('Success', 'Camera permission granted!'); } else { Alert.alert('Permission Denied', 'Camera permission is required for document scanning'); } } }; const handleVoicePermission = async () => { if (!hasVoicePermission) { const granted = await requestVoicePermission(); if (granted) { Alert.alert('Success', 'Microphone permission granted!'); } else { Alert.alert('Permission Denied', 'Microphone permission is required for voice recording'); } } }; const handleTestNotification = () => { // This would use the notification service to show a test notification Alert.alert('Test Notification', 'This is a test notification!'); }; const handleTestCamera = async () => { try { const result = await scanDocument(); if (result) { Alert.alert('Success', 'Document scanned successfully!'); } } catch (error) { Alert.alert('Error', 'Failed to scan document'); } }; const handleTestVoice = async () => { if (isRecording) { const recording = await stopRecording(); if (recording) { Alert.alert('Success', `Voice recorded! Duration: ${recording.duration}s`); } } else { startRecording(); Alert.alert('Recording', 'Voice recording started...'); } }; return ( Account {user?.name} ({user?.email}) Preferences ( )} /> ( )} /> ( )} /> 📱 Mobile Features 🔔} right={() => ( {!hasNotificationPermission && ( )} {hasNotificationPermission && ( )} )} /> 📸} right={() => ( {!hasCameraPermission && ( )} {hasCameraPermission && ( )} )} /> 🎤} right={() => ( {!hasVoicePermission && ( )} {hasVoicePermission && ( )} )} /> Sync Status ( {isOnline ? '🟢' : '🔴'} )} /> About console.log('Open GitHub')} /> ); }; const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#f5f5f5', }, scrollView: { flex: 1, }, card: { margin: 16, elevation: 2, }, userInfo: { fontSize: 16, marginBottom: 16, color: '#666', }, logoutButton: { marginTop: 8, }, statusIcon: { fontSize: 16, width: 24, textAlign: 'center', }, syncButton: { marginTop: 8, }, featureIcon: { fontSize: 16, width: 24, textAlign: 'center', }, featureActions: { flexDirection: 'row', alignItems: 'center', }, }); export default SettingsScreen;