Add ignore battery optimization option

This commit is contained in:
Koitharu
2022-06-18 13:11:14 +03:00
parent 634ce0dddf
commit d2f3bfb2e3
5 changed files with 345 additions and 1 deletions

View File

@@ -9,6 +9,7 @@
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<application
android:name="org.koitharu.kotatsu.KotatsuApp"

View File

@@ -1,17 +1,23 @@
package org.koitharu.kotatsu.settings
import android.annotation.SuppressLint
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.PowerManager
import android.provider.Settings
import android.text.style.URLSpan
import android.view.View
import androidx.core.net.toUri
import androidx.core.text.buildSpannedString
import androidx.core.text.inSpans
import androidx.preference.MultiSelectListPreference
import androidx.preference.Preference
import com.google.android.material.snackbar.Snackbar
import kotlinx.coroutines.launch
import org.koin.android.ext.android.inject
import org.koitharu.kotatsu.R
@@ -23,6 +29,8 @@ import org.koitharu.kotatsu.tracker.domain.TrackingRepository
import org.koitharu.kotatsu.tracker.work.TrackerNotificationChannels
import org.koitharu.kotatsu.utils.ext.viewLifecycleScope
private const val KEY_IGNORE_DOZE = "ignore_dose"
class TrackerSettingsFragment :
BasePreferenceFragment(R.string.check_for_new_chapters),
SharedPreferences.OnSharedPreferenceChangeListener {
@@ -50,6 +58,9 @@ class TrackerSettingsFragment :
override fun onResume() {
super.onResume()
findPreference<Preference>(KEY_IGNORE_DOZE)?.run {
isVisible = isDozeIgnoreAvailable(context)
}
updateCategoriesSummary()
updateNotificationsSummary()
}
@@ -95,6 +106,10 @@ class TrackerSettingsFragment :
startActivity(CategoriesActivity.newIntent(preference.context))
true
}
KEY_IGNORE_DOZE -> {
startIgnoreDoseActivity(preference.context)
true
}
else -> super.onPreferenceTreeClick(preference)
}
}
@@ -122,4 +137,34 @@ class TrackerSettingsFragment :
pref.summary = getString(R.string.enabled_d_of_d, count[0], count[1])
}
}
@SuppressLint("BatteryLife")
private fun startIgnoreDoseActivity(context: Context) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
Snackbar.make(listView, R.string.operation_not_supported, Snackbar.LENGTH_SHORT).show()
return
}
val packageName = context.packageName
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
if (!powerManager.isIgnoringBatteryOptimizations(packageName)) {
try {
val intent = Intent(
Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
"package:$packageName".toUri(),
)
startActivity(intent)
} catch (e: ActivityNotFoundException) {
Snackbar.make(listView, R.string.operation_not_supported, Snackbar.LENGTH_SHORT).show()
}
}
}
private fun isDozeIgnoreAvailable(context: Context): Boolean {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return false
}
val packageName = context.packageName
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
return !powerManager.isIgnoringBatteryOptimizations(packageName)
}
}

View File

@@ -296,4 +296,6 @@
<string name="default_mode">Default mode</string>
<string name="detect_reader_mode">Autodetect reader mode</string>
<string name="detect_reader_mode_summary">Automatically detect if manga is webtoon</string>
<string name="disable_battery_optimization">Disable battery optimization</string>
<string name="disable_battery_optimization_summary">Helps with background updates checks</string>
</resources>

View File

@@ -22,11 +22,20 @@
android:title="@string/favourites_categories" />
<Preference
android:dependency="tracker_enabled"
android:fragment="org.koitharu.kotatsu.settings.NotificationSettingsLegacyFragment"
android:key="notifications_settings"
android:dependency="tracker_enabled"
android:title="@string/notifications_settings" />
<Preference
android:dependency="tracker_enabled"
android:key="ignore_dose"
android:persistent="false"
android:summary="@string/disable_battery_optimization_summary"
android:title="@string/disable_battery_optimization"
app:allowDividerAbove="true"
app:isPreferenceVisible="false" />
<org.koitharu.kotatsu.settings.utils.LinksPreference
android:icon="@drawable/ic_info_outline"
android:key="track_warning"