import AsyncStorage from '@react-native-async-storage/async-storage'; import {NativeStackScreenProps} from '@react-navigation/native-stack'; import React, {useEffect, useState} from 'react'; import {NativeModules, StyleSheet, Text, View} from 'react-native'; import {Button, Snackbar, Switch, TextInput} from 'react-native-paper'; import {RootStackParamList} from './App'; import {getDb} from './db'; import BatteryDialog from './BatteryDialog'; export default function Settings({ navigation, }: NativeStackScreenProps) { const [minutes, setMinutes] = useState(''); const [seconds, setSeconds] = useState(''); const [alarmEnabled, setAlarmEnabled] = useState(true); const [snackbar, setSnackbar] = useState(''); const [showBattery, setShowBattery] = useState(false); useEffect(() => { (async () => { setMinutes((await AsyncStorage.getItem('minutes')) || '3'); setSeconds((await AsyncStorage.getItem('seconds')) || ''); setAlarmEnabled((await AsyncStorage.getItem('alarmEnabled')) === 'true'); })(); }, [navigation]); useEffect(() => { if (minutes) AsyncStorage.setItem('minutes', minutes); if (seconds) AsyncStorage.setItem('seconds', seconds); AsyncStorage.setItem('alarmEnabled', alarmEnabled ? 'true' : 'false'); }, [minutes, seconds, alarmEnabled]); const clear = async () => { setSnackbar('Deleting all data...'); setTimeout(() => setSnackbar(''), 5000); const db = await getDb(); await db.executeSql(`DELETE FROM sets`); }; const exportSets = () => { NativeModules.ExportModule.sets(); }; const importSets = () => { NativeModules.ImportModule.sets(); }; const changeAlarmEnabled = (enabled: boolean) => { if (!enabled) return setAlarmEnabled(enabled); NativeModules.AlarmModule.ignoringBatteryOptimizations( (ignoring: boolean) => { if (ignoring) return setAlarmEnabled(true); setShowBattery(true); }, ); }; return ( Rest timers setSnackbar('')} action={{label: 'Close', onPress: () => setSnackbar('')}}> {snackbar} ); } const styles = StyleSheet.create({ container: { padding: 10, flex: 1, }, text: { marginBottom: 10, }, });