import AsyncStorage from '@react-native-async-storage/async-storage'; import React, {useCallback, useEffect, useState} from 'react'; import { NativeModules, StyleSheet, Text, ToastAndroid, View, } from 'react-native'; import {TextInput} from 'react-native-paper'; import ConfirmDialog from './ConfirmDialog'; import MassiveSwitch from './MassiveSwitch'; const {getItem, setItem} = AsyncStorage; export default function SettingsPage() { const [vibrate, setVibrate] = useState(true); const [minutes, setMinutes] = useState(''); const [maxSets, setMaxSets] = useState('3'); const [seconds, setSeconds] = useState(''); const [alarm, setAlarm] = useState(false); const [predictive, setPredictive] = useState(false); const [battery, setBattery] = useState(false); const [ignoring, setIgnoring] = useState(false); const refresh = useCallback(async () => { setMinutes((await getItem('minutes')) || ''); setSeconds((await getItem('seconds')) || ''); setAlarm((await getItem('alarmEnabled')) === 'true'); setPredictive((await getItem('predictiveSets')) === 'true'); setMaxSets((await getItem('maxSets')) || ''); NativeModules.AlarmModule.ignoringBattery(setIgnoring); }, []); useEffect(() => { refresh(); }, [refresh]); const changeAlarmEnabled = useCallback( (enabled: boolean) => { setAlarm(enabled); if (enabled && !ignoring) setBattery(true); setItem('alarmEnabled', enabled ? 'true' : 'false'); }, [setBattery, ignoring], ); const changePredictive = useCallback( (enabled: boolean) => { setPredictive(enabled); setItem('predictiveSets', enabled ? 'true' : 'false'); ToastAndroid.show( 'Predictive sets guess whats next based on todays plan.', ToastAndroid.LONG, ); }, [setPredictive], ); const textInputs = ( <> { setMinutes(text); setItem('minutes', text); }} style={styles.text} selectTextOnFocus /> { setSeconds(s); setItem('seconds', s); }} style={styles.text} selectTextOnFocus /> { setMaxSets(value); setItem('maxSets', value); }} style={styles.text} selectTextOnFocus /> ); const changeVibrate = useCallback( (value: boolean) => { setVibrate(value); setItem('vibrate', value ? 'true' : 'false'); }, [setVibrate], ); return ( {textInputs} Rest timers Vibrate { NativeModules.AlarmModule.openSettings(); setBattery(false); }}> Disable battery optimizations for Massive to use rest timers. Predictive sets ); } const styles = StyleSheet.create({ container: { padding: 10, flex: 1, }, text: { marginBottom: 10, }, });