import AsyncStorage from '@react-native-async-storage/async-storage'; import {useFocusEffect, useNavigation} from '@react-navigation/native'; import React, {useEffect, useState} from 'react'; import {NativeModules, StyleSheet, Text, View} from 'react-native'; import {Button, Snackbar, Switch, TextInput} from 'react-native-paper'; import BatteryDialog from './BatteryDialog'; import {getDb} from './db'; export default function Settings() { const [minutes, setMinutes] = useState(''); const [seconds, setSeconds] = useState(''); const [alarmEnabled, setAlarmEnabled] = useState(true); const [snackbar, setSnackbar] = useState(''); const [showBattery, setShowBattery] = useState(false); const [ignoring, setIgnoring] = useState(false); const refresh = async () => { setMinutes((await AsyncStorage.getItem('minutes')) || '3'); setSeconds((await AsyncStorage.getItem('seconds')) || ''); setAlarmEnabled((await AsyncStorage.getItem('alarmEnabled')) === 'true'); NativeModules.AlarmModule.ignoringBatteryOptimizations(setIgnoring); }; useFocusEffect(() => { refresh(); }); 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) => { setAlarmEnabled(enabled); if (enabled && !ignoring) setShowBattery(true); }; return ( Rest timers setSnackbar('')} action={{label: 'Close', onPress: () => setSnackbar('')}}> {snackbar} ); } const styles = StyleSheet.create({ container: { padding: 10, flex: 1, }, text: { marginBottom: 10, }, });