Browse Source

Add shortcut to disabling battery optimization

arkon 5 years ago
parent
commit
2854fb5f6c

+ 1 - 0
app/src/main/AndroidManifest.xml

@@ -8,6 +8,7 @@
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WAKE_LOCK" />
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
     <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
     <uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

+ 28 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt

@@ -1,7 +1,14 @@
 package eu.kanade.tachiyomi.ui.setting
 
+import android.annotation.SuppressLint
 import android.app.Dialog
+import android.content.Context.POWER_SERVICE
+import android.content.Intent
+import android.net.Uri
+import android.os.Build
 import android.os.Bundle
+import android.os.PowerManager
+import android.provider.Settings
 import android.view.View
 import androidx.preference.PreferenceScreen
 import com.afollestad.materialdialogs.MaterialDialog
@@ -35,6 +42,7 @@ class SettingsAdvancedController : SettingsController() {
 
     private val db: DatabaseHelper by injectLazy()
 
+    @SuppressLint("BatteryLife")
     override fun setupPreferenceScreen(screen: PreferenceScreen) = with(screen) {
         titleRes = R.string.pref_category_advanced
 
@@ -81,6 +89,26 @@ class SettingsAdvancedController : SettingsController() {
 
             onClick { LibraryUpdateService.start(context, target = Target.TRACKING) }
         }
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            preference {
+                titleRes = R.string.pref_disable_battery_optimization
+                summaryRes = R.string.pref_disable_battery_optimization_summary
+
+                onClick {
+                    val packageName: String = context.packageName
+                    val pm = context.getSystemService(POWER_SERVICE) as PowerManager?
+                    if (!pm!!.isIgnoringBatteryOptimizations(packageName)) {
+                        val intent = Intent().apply {
+                            action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
+                            data = Uri.parse("package:$packageName")
+                        }
+                        startActivity(intent)
+                    } else {
+                        context.toast(R.string.battery_optimization_disabled)
+                    }
+                }
+            }
+        }
     }
 
     private fun clearChapterCache() {

+ 3 - 0
app/src/main/res/values/strings.xml

@@ -324,6 +324,9 @@
     <string name="pref_refresh_library_metadata_summary">Updates covers, genres, description and manga status information</string>
     <string name="pref_refresh_library_tracking">Refresh tracking metadata</string>
     <string name="pref_refresh_library_tracking_summary">Updates status, score and last chapter read from the tracking services</string>
+    <string name="pref_disable_battery_optimization">Disable battery optimization</string>
+    <string name="pref_disable_battery_optimization_summary">Helps with background library updates and backups</string>
+    <string name="battery_optimization_disabled">Battery optimization is already disabled</string>
 
       <!-- About section -->
     <string name="version">Version</string>