From ce7960e5e9f7099a618ad2e96fd6feaa26223334 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Tue, 17 May 2022 13:23:03 +0300 Subject: [PATCH] Recreate all activities on theme changed --- .../java/org/koitharu/kotatsu/KotatsuApp.kt | 2 ++ .../base/ui/util/ActivityRecreationHandle.kt | 34 +++++++++++++++++++ .../org/koitharu/kotatsu/main/MainModule.kt | 2 ++ .../settings/AppearanceSettingsFragment.kt | 8 +++-- app/src/main/res/values-be/strings.xml | 1 - app/src/main/res/values-de/strings.xml | 1 - app/src/main/res/values-es/strings.xml | 1 - app/src/main/res/values-fi/strings.xml | 1 - app/src/main/res/values-fr/strings.xml | 1 - app/src/main/res/values-it/strings.xml | 1 - app/src/main/res/values-ja/strings.xml | 1 - app/src/main/res/values-nb-rNO/strings.xml | 1 - app/src/main/res/values-pt-rBR/strings.xml | 1 - app/src/main/res/values-pt/strings.xml | 1 - app/src/main/res/values-ru/strings.xml | 1 - app/src/main/res/values-sv/strings.xml | 1 - app/src/main/res/values-tr/strings.xml | 1 - app/src/main/res/values-uk/strings.xml | 1 - app/src/main/res/values/strings.xml | 1 - 19 files changed, 43 insertions(+), 18 deletions(-) create mode 100644 app/src/main/java/org/koitharu/kotatsu/base/ui/util/ActivityRecreationHandle.kt diff --git a/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt b/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt index 4ae7a438f..e00dd1680 100644 --- a/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt +++ b/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt @@ -7,6 +7,7 @@ import androidx.fragment.app.strictmode.FragmentStrictMode import org.koin.android.ext.android.get import org.koin.android.ext.koin.androidContext import org.koin.core.context.startKoin +import org.koitharu.kotatsu.base.ui.util.ActivityRecreationHandle import org.koitharu.kotatsu.bookmarks.bookmarksModule import org.koitharu.kotatsu.core.db.databaseModule import org.koitharu.kotatsu.core.github.githubModule @@ -43,6 +44,7 @@ class KotatsuApp : Application() { Thread.setDefaultUncaughtExceptionHandler(AppCrashHandler(applicationContext)) AppCompatDelegate.setDefaultNightMode(get().theme) registerActivityLifecycleCallbacks(get()) + registerActivityLifecycleCallbacks(get()) val widgetUpdater = WidgetUpdater(applicationContext) widgetUpdater.subscribeToFavourites(get()) widgetUpdater.subscribeToHistory(get()) diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/util/ActivityRecreationHandle.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/util/ActivityRecreationHandle.kt new file mode 100644 index 000000000..f072da2fa --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/util/ActivityRecreationHandle.kt @@ -0,0 +1,34 @@ +package org.koitharu.kotatsu.base.ui.util + +import android.app.Activity +import android.app.Application.ActivityLifecycleCallbacks +import android.os.Bundle +import java.util.* + +class ActivityRecreationHandle : ActivityLifecycleCallbacks { + + private val activities = WeakHashMap() + + override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { + activities[activity] = Unit + } + + override fun onActivityStarted(activity: Activity) = Unit + + override fun onActivityResumed(activity: Activity) = Unit + + override fun onActivityPaused(activity: Activity) = Unit + + override fun onActivityStopped(activity: Activity) = Unit + + override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) = Unit + + override fun onActivityDestroyed(activity: Activity) { + activities.remove(activity) + } + + fun recreateAll() { + val snapshot = activities.keys.toList() + snapshot.forEach { it.recreate() } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/main/MainModule.kt b/app/src/main/java/org/koitharu/kotatsu/main/MainModule.kt index c6e11107b..7bcca45d6 100644 --- a/app/src/main/java/org/koitharu/kotatsu/main/MainModule.kt +++ b/app/src/main/java/org/koitharu/kotatsu/main/MainModule.kt @@ -3,6 +3,7 @@ package org.koitharu.kotatsu.main import org.koin.android.ext.koin.androidContext import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.dsl.module +import org.koitharu.kotatsu.base.ui.util.ActivityRecreationHandle import org.koitharu.kotatsu.core.os.ShortcutsRepository import org.koitharu.kotatsu.main.ui.MainViewModel import org.koitharu.kotatsu.main.ui.protect.AppProtectHelper @@ -11,6 +12,7 @@ import org.koitharu.kotatsu.main.ui.protect.ProtectViewModel val mainModule get() = module { single { AppProtectHelper(get()) } + single { ActivityRecreationHandle() } factory { ShortcutsRepository(androidContext(), get(), get(), get()) } viewModel { MainViewModel(get(), get()) } viewModel { ProtectViewModel(get(), get()) } diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/AppearanceSettingsFragment.kt b/app/src/main/java/org/koitharu/kotatsu/settings/AppearanceSettingsFragment.kt index 81817e8b5..11337c1b6 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/AppearanceSettingsFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/AppearanceSettingsFragment.kt @@ -8,15 +8,17 @@ import androidx.appcompat.app.AppCompatDelegate import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.TwoStatePreference +import java.util.* +import org.koin.android.ext.android.get import org.koitharu.kotatsu.R import org.koitharu.kotatsu.base.ui.BasePreferenceFragment +import org.koitharu.kotatsu.base.ui.util.ActivityRecreationHandle import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.prefs.ListMode import org.koitharu.kotatsu.parsers.util.names import org.koitharu.kotatsu.settings.protect.ProtectSetupActivity import org.koitharu.kotatsu.settings.utils.SliderPreference import org.koitharu.kotatsu.utils.ext.setDefaultValueCompat -import java.util.* class AppearanceSettingsFragment : BasePreferenceFragment(R.string.appearance), @@ -71,10 +73,10 @@ class AppearanceSettingsFragment : AppCompatDelegate.setDefaultNightMode(settings.theme) } AppSettings.KEY_DYNAMIC_THEME -> { - findPreference(key)?.setSummary(R.string.restart_required) + get().recreateAll() } AppSettings.KEY_THEME_AMOLED -> { - findPreference(key)?.setSummary(R.string.restart_required) + get().recreateAll() } AppSettings.KEY_APP_PASSWORD -> { findPreference(AppSettings.KEY_PROTECT_APP) diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 184acc744..c91af2b09 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -162,7 +162,6 @@ Зыходны памер Чорная цёмная тэма Карысна для AMOLED экранаў - Патрэбны перазапуск Рэзервовае капіяванне і аднаўленне Стварыць рэзервовую копію Аднавіць данныя diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 681a9ce9a..05d8c57b1 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -85,7 +85,6 @@ An Höhe anpassen Nützlich für AMOLED-Bildschirme Schwarzer dunkler Modus - Neustart erforderlich Von rechts nach links Neue Kategorie Sicherung und Wiederherstellung diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 78dc8e948..e43010431 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -162,7 +162,6 @@ Mantener al iniciar Tema oscuro auténtico Útil para pantallas AMOLED - Se requiere reinicio Respaldo y restauración Crear copia de seguridad de datos Restaurar desde la copia de seguridad diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 51e4c397f..6f27fcae2 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -53,7 +53,6 @@ Palauta varmuuskopiosta Luo tietojen varmuuskopio Varmuuskopiointi ja palautus - Uudelleenkäynnistys vaaditaan Hyödyllinen AMOLED-näytöille Musta tumma teema Pidä alussa diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index ea0879080..12629d2cb 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -42,7 +42,6 @@ Restaurer à partir d\'une sauvegarde Créer une sauvegarde des données Sauvegarde et restauration - Redémarrage nécessaire Utilise moins d\'énergie pour les écrans AMOLED Noir Garder au début diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 166a651d4..1a72f7f60 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -91,7 +91,6 @@ Ripristina da un backup Crea un backup dei dati Backup e ripristino - Riavvio richiesto Utile per gli schermi AMOLED Tema nero scuro Segnala un problema su GitHub diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 141909e39..4865c94eb 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -221,7 +221,6 @@ NSFW漫画を履歴から除外する キュー 全てのCookieが削除されました - 再起動が必要です 一部のデバイスはシステムでの動作が異なり、バックグラウンドタスクが中断される可能性があります。 ジャンル スケールモード diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 01af34997..5857f9580 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -102,7 +102,6 @@ Data gjenopprettet Gjenopprett fra sikkerhetskopi Opprett sikkerhetskopi - Omstart kreves Bruker mindre strøm på AMOLED-skjermer Svart Ny kategori diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index b9c94ef0c..d94f70c75 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -240,7 +240,6 @@ Criar backup de dados Salve-o de fontes online ou importe arquivos. Verifique se há atualizações - É necessário reiniciar Novos capítulos do que você está lendo são mostrados aqui Versão %s Ajustar à largura diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 6f2d53e66..0b92d414f 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -139,7 +139,6 @@ Modo de escala Centro de ajuste Ajustar à largura - É necessário reiniciar Backup e restauração Criar backup de dados Restaurar do backup diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index cd2f2e8a4..505aba081 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -167,7 +167,6 @@ Исходный размер Чёрная Потребляет меньше энергии на экранах AMOLED - Требуется перезапуск Резервное копирование и восстановление Создать резервную копию Восстановить данные diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 582683f3a..ca336dc58 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -247,7 +247,6 @@ Anpassa mot bredd Svart Använder mindre ström på AMOLED-skärmar - Omstart krävs Säkerhetskopiering och återställning Skapa säkerhetskopia Återställd diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index b0fe27dd5..458ff2d7b 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -202,7 +202,6 @@ Uzun zaman önce Bugün Güncelleme yok - Yeniden başlatma gerekli Yeni bölümler denetleniyor: %1$d / %2$d Dinamik tema Favorilerinizi düzenlemek için kategorileri kullanabilirsiniz. Kategori oluşturmak için «+» düğmesine basın diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index cea12d99c..9fd8db95a 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -143,7 +143,6 @@ Вихідний розмір Чорна Споживає менше енергії на екранах AMOLED - Потрібен перезапуск Резервне копіювання та відновлення Відновлено Підготовка… diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4c3749375..254f66818 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -168,7 +168,6 @@ Keep at start Black Uses less power on AMOLED screens - Restart required Backup and restore Create data backup Restore from backup