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 [minutes, setMinutes] = useState(''); const [maxSets, setMaxSets] = useState('3'); const [seconds, setSeconds] = useState(''); const [alarmEnabled, setAlarmEnabled] = useState(false); const [predictiveSets, setPredictiveSets] = useState(false); const [showBattery, setShowBattery] = useState(false); const [ignoring, setIgnoring] = useState(false); const refresh = useCallback(async () => { setMinutes((await getItem('minutes')) || ''); setSeconds((await getItem('seconds')) || ''); setAlarmEnabled((await getItem('alarmEnabled')) === 'true'); setPredictiveSets((await getItem('predictiveSets')) === 'true'); setMaxSets((await getItem('maxSets')) || ''); NativeModules.AlarmModule.ignoringBattery(setIgnoring); }, []); useEffect(() => { refresh(); }, [refresh]); const changeAlarmEnabled = useCallback( (enabled: boolean) => { setAlarmEnabled(enabled); if (enabled && !ignoring) setShowBattery(true); setItem('alarmEnabled', enabled ? 'true' : 'false'); }, [setShowBattery, ignoring], ); const changePredictive = useCallback( (enabled: boolean) => { setPredictiveSets(enabled); setItem('predictiveSets', enabled ? 'true' : 'false'); ToastAndroid.show( 'Predictive sets guess whats next based on todays plan.', ToastAndroid.LONG, ); }, [setPredictiveSets], ); return ( { setMinutes(text); setItem('minutes', text); }} style={styles.text} /> { setSeconds(s); setItem('seconds', s); }} style={styles.text} /> { setMaxSets(value); setItem('maxSets', value); }} style={styles.text} /> Rest timers { NativeModules.AlarmModule.openSettings(); setShowBattery(false); }}> Disable battery optimizations for Massive to use rest timers. Predictive sets ); } const styles = StyleSheet.create({ container: { padding: 10, flex: 1, }, text: { marginBottom: 10, }, });