From be4098962e74f5c1c94dd50d6170274f00d96d98 Mon Sep 17 00:00:00 2001 From: Brandon Presley Date: Mon, 21 Nov 2022 18:15:43 +1300 Subject: [PATCH] Add settings module for android --- SettingsPage.tsx | 18 +++--- .../src/main/java/com/massive/AlarmModule.kt | 31 ---------- .../main/java/com/massive/MassivePackage.kt | 2 +- .../main/java/com/massive/SettingsModule.kt | 59 +++++++++++++++++++ 4 files changed, 70 insertions(+), 40 deletions(-) create mode 100644 android/app/src/main/java/com/massive/SettingsModule.kt diff --git a/SettingsPage.tsx b/SettingsPage.tsx index 12c2603..82f53fd 100644 --- a/SettingsPage.tsx +++ b/SettingsPage.tsx @@ -22,6 +22,8 @@ import Switch from './Switch' import {toast} from './toast' import {useTheme} from './use-theme' +const defaultFormats = ['P', 'Pp', 'ccc p', 'p'] + export default function SettingsPage() { const [battery, setBattery] = useState(false) const [ignoring, setIgnoring] = useState(false) @@ -37,12 +39,7 @@ export default function SettingsPage() { const {theme, setTheme, color, setColor} = useTheme() const [showDate, setShowDate] = useState(false) const [noSound, setNoSound] = useState(false) - const [formatOptions, setFormatOptions] = useState([ - 'P', - 'Pp', - 'ccc p', - 'p', - ]) + const [formatOptions, setFormatOptions] = useState(defaultFormats) const today = new Date() useFocusEffect( @@ -60,7 +57,12 @@ export default function SettingsPage() { setNoSound(settings.noSound) }) if (Platform.OS !== 'android') return - NativeModules.AlarmModule.ignoringBattery(setIgnoring) + NativeModules.SettingsModule.ignoringBattery(setIgnoring) + NativeModules.SettingsModule.is24().then((is24: boolean) => { + console.log(`${SettingsPage.name}.focus:`, {is24}) + if (is24) setFormatOptions(['P', 'P, k:m', 'ccc k:m', 'k:m']) + else setFormatOptions(defaultFormats) + }) }, []), ) @@ -267,7 +269,7 @@ export default function SettingsPage() { show={battery} setShow={setBattery} onOk={() => { - NativeModules.AlarmModule.ignoreBattery() + NativeModules.SettingsModule.ignoreBattery() setBattery(false) }}> Disable battery optimizations for Massive to use rest timers. diff --git a/android/app/src/main/java/com/massive/AlarmModule.kt b/android/app/src/main/java/com/massive/AlarmModule.kt index 5e4b13a..e6e3983 100644 --- a/android/app/src/main/java/com/massive/AlarmModule.kt +++ b/android/app/src/main/java/com/massive/AlarmModule.kt @@ -51,7 +51,6 @@ class AlarmModule constructor(context: ReactApplicationContext?) : } } - init { reactApplicationContext.registerReceiver(stopReceiver, IntentFilter(STOP_BROADCAST)) reactApplicationContext.registerReceiver(addReceiver, IntentFilter(ADD_BROADCAST)) @@ -123,36 +122,6 @@ class AlarmModule constructor(context: ReactApplicationContext?) : running = true } - @RequiresApi(Build.VERSION_CODES.M) - @ReactMethod - fun ignoringBattery(callback: Callback) { - val packageName = reactApplicationContext.packageName - val pm = reactApplicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - callback.invoke(pm.isIgnoringBatteryOptimizations(packageName)) - } else { - callback.invoke(true) - } - } - - @SuppressLint("BatteryLife") - @RequiresApi(Build.VERSION_CODES.M) - @ReactMethod - fun ignoreBattery() { - val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) - intent.data = Uri.parse("package:" + reactApplicationContext.packageName) - intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK - try { - reactApplicationContext.startActivity(intent) - } catch (e: ActivityNotFoundException) { - Toast.makeText( - reactApplicationContext, - "Requests to ignore battery optimizations are disabled on your device.", - Toast.LENGTH_LONG - ).show() - } - } - @RequiresApi(Build.VERSION_CODES.M) private fun getTimer( endMs: Int, diff --git a/android/app/src/main/java/com/massive/MassivePackage.kt b/android/app/src/main/java/com/massive/MassivePackage.kt index 6e123f5..acab341 100644 --- a/android/app/src/main/java/com/massive/MassivePackage.kt +++ b/android/app/src/main/java/com/massive/MassivePackage.kt @@ -4,7 +4,6 @@ import com.facebook.react.ReactPackage import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.uimanager.ViewManager -import com.massive.AlarmModule import java.util.ArrayList class MassivePackage : ReactPackage { @@ -18,6 +17,7 @@ class MassivePackage : ReactPackage { val modules: MutableList = ArrayList() modules.add(AlarmModule(reactContext)) modules.add(DownloadModule(reactContext)) + modules.add(SettingsModule(reactContext)) return modules } } diff --git a/android/app/src/main/java/com/massive/SettingsModule.kt b/android/app/src/main/java/com/massive/SettingsModule.kt new file mode 100644 index 0000000..c1e55e7 --- /dev/null +++ b/android/app/src/main/java/com/massive/SettingsModule.kt @@ -0,0 +1,59 @@ +package com.massive + +import android.annotation.SuppressLint +import android.content.ActivityNotFoundException +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Build +import android.os.PowerManager +import android.provider.Settings +import android.util.Log +import android.widget.Toast +import androidx.annotation.RequiresApi +import com.facebook.react.bridge.* +import java.text.DateFormat + +class SettingsModule constructor(context: ReactApplicationContext?) : + ReactContextBaseJavaModule(context) { + override fun getName(): String { + return "SettingsModule" + } + + @RequiresApi(Build.VERSION_CODES.M) + @ReactMethod + fun ignoringBattery(callback: Callback) { + val packageName = reactApplicationContext.packageName + val pm = reactApplicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + callback.invoke(pm.isIgnoringBatteryOptimizations(packageName)) + } else { + callback.invoke(true) + } + } + + @SuppressLint("BatteryLife") + @RequiresApi(Build.VERSION_CODES.M) + @ReactMethod + fun ignoreBattery() { + val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) + intent.data = Uri.parse("package:" + reactApplicationContext.packageName) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + try { + reactApplicationContext.startActivity(intent) + } catch (e: ActivityNotFoundException) { + Toast.makeText( + reactApplicationContext, + "Requests to ignore battery optimizations are disabled on your device.", + Toast.LENGTH_LONG + ).show() + } + } + + @ReactMethod + fun is24(promise: Promise) { + val is24 = android.text.format.DateFormat.is24HourFormat(reactApplicationContext) + Log.d("SettingsModule", "is24=$is24") + promise.resolve(is24) + } +} \ No newline at end of file