From 3df8b8d170457918eab55f48c0f72c30447108ab Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sun, 24 Jan 2021 09:58:21 +0200 Subject: [PATCH] Update preferences --- app/src/main/AndroidManifest.xml | 1 + .../kotatsu/core/prefs/AppSettings.kt | 1 + .../kotatsu/settings/MainSettingsFragment.kt | 25 ------ .../settings/TrackerSettingsFragment.kt | 86 +++++++++++++++++++ app/src/main/res/values-ru/strings.xml | 4 + app/src/main/res/values/strings.xml | 4 + app/src/main/res/xml/pref_main.xml | 59 ++----------- app/src/main/res/xml/pref_tracker.xml | 37 ++++++++ 8 files changed, 139 insertions(+), 78 deletions(-) create mode 100644 app/src/main/java/org/koitharu/kotatsu/settings/TrackerSettingsFragment.kt create mode 100644 app/src/main/res/xml/pref_tracker.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d3198abc1..3a3428a9a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ + (AppSettings.KEY_ZOOM_MODE)?.run { - entryValues = ZoomMode.values().names() - setDefaultValueCompat(ZoomMode.FIT_CENTER.name) - } preferenceScreen?.findPreference(AppSettings.KEY_LIST_MODE)?.run { entryValues = ListMode.values().names() setDefaultValueCompat(ListMode.GRID.name) } - findPreference(AppSettings.KEY_READER_SWITCHERS)?.summaryProvider = - MultiSummaryProvider(R.string.gestures_only) - findPreference(AppSettings.KEY_TRACK_SOURCES)?.summaryProvider = - MultiSummaryProvider(R.string.dont_check) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -106,17 +92,6 @@ class MainSettingsFragment : BasePreferenceFragment(R.string.settings), override fun onPreferenceTreeClick(preference: Preference?): Boolean { return when (preference?.key) { - AppSettings.KEY_NOTIFICATIONS_SETTINGS -> { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS) - .putExtra(Settings.EXTRA_APP_PACKAGE, requireContext().packageName) - .putExtra(Settings.EXTRA_CHANNEL_ID, TrackWorker.CHANNEL_ID) - startActivity(intent) - } else { - (activity as? SettingsActivity)?.openNotificationSettingsLegacy() - } - true - } AppSettings.KEY_LOCAL_STORAGE -> { val ctx = context ?: return false StorageSelectDialog.Builder(ctx, settings.getStorageDir(ctx), this) diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/TrackerSettingsFragment.kt b/app/src/main/java/org/koitharu/kotatsu/settings/TrackerSettingsFragment.kt new file mode 100644 index 000000000..a8e045a98 --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/settings/TrackerSettingsFragment.kt @@ -0,0 +1,86 @@ +package org.koitharu.kotatsu.settings + +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.Bundle +import android.os.PowerManager +import android.provider.Settings +import androidx.preference.MultiSelectListPreference +import androidx.preference.Preference +import com.google.android.material.snackbar.Snackbar +import org.koitharu.kotatsu.R +import org.koitharu.kotatsu.base.ui.BasePreferenceFragment +import org.koitharu.kotatsu.core.prefs.AppSettings +import org.koitharu.kotatsu.settings.utils.MultiSummaryProvider +import org.koitharu.kotatsu.tracker.work.TrackWorker + +class TrackerSettingsFragment : BasePreferenceFragment(R.string.new_chapters_checking) { + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + addPreferencesFromResource(R.xml.pref_tracker) + + findPreference(AppSettings.KEY_TRACK_SOURCES) + ?.summaryProvider = MultiSummaryProvider(R.string.dont_check) + findPreference(AppSettings.KEY_DOZE_WHITELIST) + ?.isVisible = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M + } + + override fun onPreferenceTreeClick(preference: Preference?): Boolean { + return when (preference?.key) { + AppSettings.KEY_NOTIFICATIONS_SETTINGS -> { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS) + .putExtra(Settings.EXTRA_APP_PACKAGE, requireContext().packageName) + .putExtra(Settings.EXTRA_CHANNEL_ID, TrackWorker.CHANNEL_ID) + startActivity(intent) + } else { + (activity as? SettingsActivity)?.openNotificationSettingsLegacy() + } + true + } + AppSettings.KEY_DOZE_WHITELIST -> { + disablePowerOptimization() + true + } + else -> super.onPreferenceTreeClick(preference) + } + } + + @SuppressLint("BatteryLife") + private fun disablePowerOptimization() { + val context = context ?: return + val powerManager = context.getSystemService(Context.POWER_SERVICE) as? PowerManager + if (powerManager == null || Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + Snackbar.make( + listView ?: return, + R.string.operation_not_supported, + Snackbar.LENGTH_LONG + ).show() + return + } + val packageName = context.packageName + if (!powerManager.isIgnoringBatteryOptimizations(packageName)) { + val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) + .setData(Uri.parse("package:$packageName")) + try { + startActivity(intent) + } catch (e: ActivityNotFoundException) { + Snackbar.make( + listView ?: return, + R.string.operation_not_supported, + Snackbar.LENGTH_LONG + ).show() + } + } else { + Snackbar.make( + listView ?: return, + R.string.power_optimization_already_disabled, + Snackbar.LENGTH_LONG + ).show() + } + } +} \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 9684800c4..db68f9eba 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -195,4 +195,8 @@ Проверка новых глав: %1$d из %2$d Очистить ленту Вся история обновлений будет очищена и её нельзя будет вернуть. Вы уверены? + Может помочь с фоновыми операциями. Используйте только если фоновая проверка новых глав не работает + Отключить оптимизацию батареи + Отпимизация батареи уже отключена + Проверка новых глав \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ca4f78f7b..684899d15 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -197,4 +197,8 @@ Checking for new chapters: %1$d of %2$d Clear feed All updates history will be cleared and this action cannot be undone. Are you sure? + Power optimization is already disabled + Helps with background operations such as checking for new chapters. Use only if you have a troubles with it + Disable power optimization + New chapters checking \ No newline at end of file diff --git a/app/src/main/res/xml/pref_main.xml b/app/src/main/res/xml/pref_main.xml index e6c10b869..9d69e6c5f 100644 --- a/app/src/main/res/xml/pref_main.xml +++ b/app/src/main/res/xml/pref_main.xml @@ -63,63 +63,16 @@ android:title="@string/protect_application" app:iconSpaceReserved="false" /> - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/xml/pref_tracker.xml b/app/src/main/res/xml/pref_tracker.xml new file mode 100644 index 000000000..74f3c8361 --- /dev/null +++ b/app/src/main/res/xml/pref_tracker.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + \ No newline at end of file