From a1cd4e8080f79bb10c0dd00f9a99e19c1d2d66a7 Mon Sep 17 00:00:00 2001 From: Brandon Presley Date: Tue, 30 Aug 2022 23:06:09 +1200 Subject: [PATCH] Improve requesting app runs in background --- SettingsPage.tsx | 2 +- .../src/main/java/com/massive/AlarmModule.kt | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/SettingsPage.tsx b/SettingsPage.tsx index e3d4906..3bbc03e 100644 --- a/SettingsPage.tsx +++ b/SettingsPage.tsx @@ -223,7 +223,7 @@ export default function SettingsPage() { show={battery} setShow={setBattery} onOk={() => { - NativeModules.AlarmModule.openSettings(); + NativeModules.AlarmModule.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 5601faf..6374733 100644 --- a/android/app/src/main/java/com/massive/AlarmModule.kt +++ b/android/app/src/main/java/com/massive/AlarmModule.kt @@ -1,5 +1,7 @@ package com.massive +import android.annotation.SuppressLint +import android.content.ActivityNotFoundException import android.content.Context import android.content.Intent import android.net.Uri @@ -7,7 +9,9 @@ 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 androidx.core.content.ContextCompat.startActivity import com.facebook.react.bridge.Callback import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReactContextBaseJavaModule @@ -45,12 +49,21 @@ class AlarmModule internal constructor(context: ReactApplicationContext?) : } } + @SuppressLint("BatteryLife") @RequiresApi(Build.VERSION_CODES.M) @ReactMethod - fun openSettings() { - val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) + 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 - reactApplicationContext.startActivity(intent) + try { + reactApplicationContext.startActivity(intent) + } catch (e: ActivityNotFoundException) { + Toast.makeText( + reactApplicationContext, + "Requests to ignore battery optimizations are disabled on your device.", + Toast.LENGTH_LONG + ).show() + } } }