Recreate all activities on theme changed

pull/173/head
Koitharu 4 years ago
parent 17c440ee43
commit ce7960e5e9
No known key found for this signature in database
GPG Key ID: 8E861F8CE6E7CE27

@ -7,6 +7,7 @@ import androidx.fragment.app.strictmode.FragmentStrictMode
import org.koin.android.ext.android.get import org.koin.android.ext.android.get
import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidContext
import org.koin.core.context.startKoin import org.koin.core.context.startKoin
import org.koitharu.kotatsu.base.ui.util.ActivityRecreationHandle
import org.koitharu.kotatsu.bookmarks.bookmarksModule import org.koitharu.kotatsu.bookmarks.bookmarksModule
import org.koitharu.kotatsu.core.db.databaseModule import org.koitharu.kotatsu.core.db.databaseModule
import org.koitharu.kotatsu.core.github.githubModule import org.koitharu.kotatsu.core.github.githubModule
@ -43,6 +44,7 @@ class KotatsuApp : Application() {
Thread.setDefaultUncaughtExceptionHandler(AppCrashHandler(applicationContext)) Thread.setDefaultUncaughtExceptionHandler(AppCrashHandler(applicationContext))
AppCompatDelegate.setDefaultNightMode(get<AppSettings>().theme) AppCompatDelegate.setDefaultNightMode(get<AppSettings>().theme)
registerActivityLifecycleCallbacks(get<AppProtectHelper>()) registerActivityLifecycleCallbacks(get<AppProtectHelper>())
registerActivityLifecycleCallbacks(get<ActivityRecreationHandle>())
val widgetUpdater = WidgetUpdater(applicationContext) val widgetUpdater = WidgetUpdater(applicationContext)
widgetUpdater.subscribeToFavourites(get()) widgetUpdater.subscribeToFavourites(get())
widgetUpdater.subscribeToHistory(get()) widgetUpdater.subscribeToHistory(get())

@ -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<Activity, Unit>()
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() }
}
}

@ -3,6 +3,7 @@ package org.koitharu.kotatsu.main
import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidContext
import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.module import org.koin.dsl.module
import org.koitharu.kotatsu.base.ui.util.ActivityRecreationHandle
import org.koitharu.kotatsu.core.os.ShortcutsRepository import org.koitharu.kotatsu.core.os.ShortcutsRepository
import org.koitharu.kotatsu.main.ui.MainViewModel import org.koitharu.kotatsu.main.ui.MainViewModel
import org.koitharu.kotatsu.main.ui.protect.AppProtectHelper import org.koitharu.kotatsu.main.ui.protect.AppProtectHelper
@ -11,6 +12,7 @@ import org.koitharu.kotatsu.main.ui.protect.ProtectViewModel
val mainModule val mainModule
get() = module { get() = module {
single { AppProtectHelper(get()) } single { AppProtectHelper(get()) }
single { ActivityRecreationHandle() }
factory { ShortcutsRepository(androidContext(), get(), get(), get()) } factory { ShortcutsRepository(androidContext(), get(), get(), get()) }
viewModel { MainViewModel(get(), get()) } viewModel { MainViewModel(get(), get()) }
viewModel { ProtectViewModel(get(), get()) } viewModel { ProtectViewModel(get(), get()) }

@ -8,15 +8,17 @@ import androidx.appcompat.app.AppCompatDelegate
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.TwoStatePreference import androidx.preference.TwoStatePreference
import java.util.*
import org.koin.android.ext.android.get
import org.koitharu.kotatsu.R import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.base.ui.BasePreferenceFragment 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.AppSettings
import org.koitharu.kotatsu.core.prefs.ListMode import org.koitharu.kotatsu.core.prefs.ListMode
import org.koitharu.kotatsu.parsers.util.names import org.koitharu.kotatsu.parsers.util.names
import org.koitharu.kotatsu.settings.protect.ProtectSetupActivity import org.koitharu.kotatsu.settings.protect.ProtectSetupActivity
import org.koitharu.kotatsu.settings.utils.SliderPreference import org.koitharu.kotatsu.settings.utils.SliderPreference
import org.koitharu.kotatsu.utils.ext.setDefaultValueCompat import org.koitharu.kotatsu.utils.ext.setDefaultValueCompat
import java.util.*
class AppearanceSettingsFragment : class AppearanceSettingsFragment :
BasePreferenceFragment(R.string.appearance), BasePreferenceFragment(R.string.appearance),
@ -71,10 +73,10 @@ class AppearanceSettingsFragment :
AppCompatDelegate.setDefaultNightMode(settings.theme) AppCompatDelegate.setDefaultNightMode(settings.theme)
} }
AppSettings.KEY_DYNAMIC_THEME -> { AppSettings.KEY_DYNAMIC_THEME -> {
findPreference<Preference>(key)?.setSummary(R.string.restart_required) get<ActivityRecreationHandle>().recreateAll()
} }
AppSettings.KEY_THEME_AMOLED -> { AppSettings.KEY_THEME_AMOLED -> {
findPreference<Preference>(key)?.setSummary(R.string.restart_required) get<ActivityRecreationHandle>().recreateAll()
} }
AppSettings.KEY_APP_PASSWORD -> { AppSettings.KEY_APP_PASSWORD -> {
findPreference<TwoStatePreference>(AppSettings.KEY_PROTECT_APP) findPreference<TwoStatePreference>(AppSettings.KEY_PROTECT_APP)

@ -162,7 +162,6 @@
<string name="zoom_mode_keep_start">Зыходны памер</string> <string name="zoom_mode_keep_start">Зыходны памер</string>
<string name="black_dark_theme">Чорная цёмная тэма</string> <string name="black_dark_theme">Чорная цёмная тэма</string>
<string name="black_dark_theme_summary">Карысна для AMOLED экранаў</string> <string name="black_dark_theme_summary">Карысна для AMOLED экранаў</string>
<string name="restart_required">Патрэбны перазапуск</string>
<string name="backup_restore">Рэзервовае капіяванне і аднаўленне</string> <string name="backup_restore">Рэзервовае капіяванне і аднаўленне</string>
<string name="create_backup">Стварыць рэзервовую копію</string> <string name="create_backup">Стварыць рэзервовую копію</string>
<string name="restore_backup">Аднавіць данныя</string> <string name="restore_backup">Аднавіць данныя</string>

@ -85,7 +85,6 @@
<string name="zoom_mode_fit_height">An Höhe anpassen</string> <string name="zoom_mode_fit_height">An Höhe anpassen</string>
<string name="black_dark_theme_summary">Nützlich für AMOLED-Bildschirme</string> <string name="black_dark_theme_summary">Nützlich für AMOLED-Bildschirme</string>
<string name="black_dark_theme">Schwarzer dunkler Modus</string> <string name="black_dark_theme">Schwarzer dunkler Modus</string>
<string name="restart_required">Neustart erforderlich</string>
<string name="right_to_left">Von rechts nach links</string> <string name="right_to_left">Von rechts nach links</string>
<string name="create_category">Neue Kategorie</string> <string name="create_category">Neue Kategorie</string>
<string name="backup_restore">Sicherung und Wiederherstellung</string> <string name="backup_restore">Sicherung und Wiederherstellung</string>

@ -162,7 +162,6 @@
<string name="zoom_mode_keep_start">Mantener al iniciar</string> <string name="zoom_mode_keep_start">Mantener al iniciar</string>
<string name="black_dark_theme">Tema oscuro auténtico</string> <string name="black_dark_theme">Tema oscuro auténtico</string>
<string name="black_dark_theme_summary">Útil para pantallas AMOLED</string> <string name="black_dark_theme_summary">Útil para pantallas AMOLED</string>
<string name="restart_required">Se requiere reinicio</string>
<string name="backup_restore">Respaldo y restauración</string> <string name="backup_restore">Respaldo y restauración</string>
<string name="create_backup">Crear copia de seguridad de datos</string> <string name="create_backup">Crear copia de seguridad de datos</string>
<string name="restore_backup">Restaurar desde la copia de seguridad</string> <string name="restore_backup">Restaurar desde la copia de seguridad</string>

@ -53,7 +53,6 @@
<string name="restore_backup">Palauta varmuuskopiosta</string> <string name="restore_backup">Palauta varmuuskopiosta</string>
<string name="create_backup">Luo tietojen varmuuskopio</string> <string name="create_backup">Luo tietojen varmuuskopio</string>
<string name="backup_restore">Varmuuskopiointi ja palautus</string> <string name="backup_restore">Varmuuskopiointi ja palautus</string>
<string name="restart_required">Uudelleenkäynnistys vaaditaan</string>
<string name="black_dark_theme_summary">Hyödyllinen AMOLED-näytöille</string> <string name="black_dark_theme_summary">Hyödyllinen AMOLED-näytöille</string>
<string name="black_dark_theme">Musta tumma teema</string> <string name="black_dark_theme">Musta tumma teema</string>
<string name="zoom_mode_keep_start">Pidä alussa</string> <string name="zoom_mode_keep_start">Pidä alussa</string>

@ -42,7 +42,6 @@
<string name="restore_backup">Restaurer à partir d\'une sauvegarde</string> <string name="restore_backup">Restaurer à partir d\'une sauvegarde</string>
<string name="create_backup">Créer une sauvegarde des données</string> <string name="create_backup">Créer une sauvegarde des données</string>
<string name="backup_restore">Sauvegarde et restauration</string> <string name="backup_restore">Sauvegarde et restauration</string>
<string name="restart_required">Redémarrage nécessaire</string>
<string name="black_dark_theme_summary">Utilise moins d\'énergie pour les écrans AMOLED</string> <string name="black_dark_theme_summary">Utilise moins d\'énergie pour les écrans AMOLED</string>
<string name="black_dark_theme">Noir</string> <string name="black_dark_theme">Noir</string>
<string name="zoom_mode_keep_start">Garder au début</string> <string name="zoom_mode_keep_start">Garder au début</string>

@ -91,7 +91,6 @@
<string name="restore_backup">Ripristina da un backup</string> <string name="restore_backup">Ripristina da un backup</string>
<string name="create_backup">Crea un backup dei dati</string> <string name="create_backup">Crea un backup dei dati</string>
<string name="backup_restore">Backup e ripristino</string> <string name="backup_restore">Backup e ripristino</string>
<string name="restart_required">Riavvio richiesto</string>
<string name="black_dark_theme_summary">Utile per gli schermi AMOLED</string> <string name="black_dark_theme_summary">Utile per gli schermi AMOLED</string>
<string name="black_dark_theme">Tema nero scuro</string> <string name="black_dark_theme">Tema nero scuro</string>
<string name="report_github">Segnala un problema su GitHub</string> <string name="report_github">Segnala un problema su GitHub</string>

@ -221,7 +221,6 @@
<string name="exclude_nsfw_from_history">NSFW漫画を履歴から除外する</string> <string name="exclude_nsfw_from_history">NSFW漫画を履歴から除外する</string>
<string name="queued">キュー</string> <string name="queued">キュー</string>
<string name="cookies_cleared">全てのCookieが削除されました</string> <string name="cookies_cleared">全てのCookieが削除されました</string>
<string name="restart_required">再起動が必要です</string>
<string name="tracker_warning">一部のデバイスはシステムでの動作が異なり、バックグラウンドタスクが中断される可能性があります。</string> <string name="tracker_warning">一部のデバイスはシステムでの動作が異なり、バックグラウンドタスクが中断される可能性があります。</string>
<string name="genres">ジャンル</string> <string name="genres">ジャンル</string>
<string name="scale_mode">スケールモード</string> <string name="scale_mode">スケールモード</string>

@ -102,7 +102,6 @@
<string name="data_restored">Data gjenopprettet</string> <string name="data_restored">Data gjenopprettet</string>
<string name="restore_backup">Gjenopprett fra sikkerhetskopi</string> <string name="restore_backup">Gjenopprett fra sikkerhetskopi</string>
<string name="create_backup">Opprett sikkerhetskopi</string> <string name="create_backup">Opprett sikkerhetskopi</string>
<string name="restart_required">Omstart kreves</string>
<string name="black_dark_theme_summary">Bruker mindre strøm på AMOLED-skjermer</string> <string name="black_dark_theme_summary">Bruker mindre strøm på AMOLED-skjermer</string>
<string name="black_dark_theme">Svart</string> <string name="black_dark_theme">Svart</string>
<string name="create_category">Ny kategori</string> <string name="create_category">Ny kategori</string>

@ -240,7 +240,6 @@
<string name="create_backup">Criar backup de dados</string> <string name="create_backup">Criar backup de dados</string>
<string name="text_local_holder_secondary">Salve-o de fontes online ou importe arquivos.</string> <string name="text_local_holder_secondary">Salve-o de fontes online ou importe arquivos.</string>
<string name="check_for_updates">Verifique se há atualizações</string> <string name="check_for_updates">Verifique se há atualizações</string>
<string name="restart_required">É necessário reiniciar</string>
<string name="text_feed_holder">Novos capítulos do que você está lendo são mostrados aqui</string> <string name="text_feed_holder">Novos capítulos do que você está lendo são mostrados aqui</string>
<string name="app_version">Versão %s</string> <string name="app_version">Versão %s</string>
<string name="zoom_mode_fit_width">Ajustar à largura</string> <string name="zoom_mode_fit_width">Ajustar à largura</string>

@ -139,7 +139,6 @@
<string name="scale_mode">Modo de escala</string> <string name="scale_mode">Modo de escala</string>
<string name="zoom_mode_fit_center">Centro de ajuste</string> <string name="zoom_mode_fit_center">Centro de ajuste</string>
<string name="zoom_mode_fit_width">Ajustar à largura</string> <string name="zoom_mode_fit_width">Ajustar à largura</string>
<string name="restart_required">É necessário reiniciar</string>
<string name="backup_restore">Backup e restauração</string> <string name="backup_restore">Backup e restauração</string>
<string name="create_backup">Criar backup de dados</string> <string name="create_backup">Criar backup de dados</string>
<string name="restore_backup">Restaurar do backup</string> <string name="restore_backup">Restaurar do backup</string>

@ -167,7 +167,6 @@
<string name="zoom_mode_keep_start">Исходный размер</string> <string name="zoom_mode_keep_start">Исходный размер</string>
<string name="black_dark_theme">Чёрная</string> <string name="black_dark_theme">Чёрная</string>
<string name="black_dark_theme_summary">Потребляет меньше энергии на экранах AMOLED</string> <string name="black_dark_theme_summary">Потребляет меньше энергии на экранах AMOLED</string>
<string name="restart_required">Требуется перезапуск</string>
<string name="backup_restore">Резервное копирование и восстановление</string> <string name="backup_restore">Резервное копирование и восстановление</string>
<string name="create_backup">Создать резервную копию</string> <string name="create_backup">Создать резервную копию</string>
<string name="restore_backup">Восстановить данные</string> <string name="restore_backup">Восстановить данные</string>

@ -247,7 +247,6 @@
<string name="zoom_mode_fit_width">Anpassa mot bredd</string> <string name="zoom_mode_fit_width">Anpassa mot bredd</string>
<string name="black_dark_theme">Svart</string> <string name="black_dark_theme">Svart</string>
<string name="black_dark_theme_summary">Använder mindre ström på AMOLED-skärmar</string> <string name="black_dark_theme_summary">Använder mindre ström på AMOLED-skärmar</string>
<string name="restart_required">Omstart krävs</string>
<string name="backup_restore">Säkerhetskopiering och återställning</string> <string name="backup_restore">Säkerhetskopiering och återställning</string>
<string name="create_backup">Skapa säkerhetskopia</string> <string name="create_backup">Skapa säkerhetskopia</string>
<string name="data_restored">Återställd</string> <string name="data_restored">Återställd</string>

@ -202,7 +202,6 @@
<string name="long_ago">Uzun zaman önce</string> <string name="long_ago">Uzun zaman önce</string>
<string name="today">Bugün</string> <string name="today">Bugün</string>
<string name="no_update_available">Güncelleme yok</string> <string name="no_update_available">Güncelleme yok</string>
<string name="restart_required">Yeniden başlatma gerekli</string>
<string name="chapters_checking_progress">Yeni bölümler denetleniyor: %1$d / %2$d</string> <string name="chapters_checking_progress">Yeni bölümler denetleniyor: %1$d / %2$d</string>
<string name="dynamic_theme">Dinamik tema</string> <string name="dynamic_theme">Dinamik tema</string>
<string name="text_categories_holder">Favorilerinizi düzenlemek için kategorileri kullanabilirsiniz. Kategori oluşturmak için «+» düğmesine basın</string> <string name="text_categories_holder">Favorilerinizi düzenlemek için kategorileri kullanabilirsiniz. Kategori oluşturmak için «+» düğmesine basın</string>

@ -143,7 +143,6 @@
<string name="zoom_mode_keep_start">Вихідний розмір</string> <string name="zoom_mode_keep_start">Вихідний розмір</string>
<string name="black_dark_theme">Чорна</string> <string name="black_dark_theme">Чорна</string>
<string name="black_dark_theme_summary">Споживає менше енергії на екранах AMOLED</string> <string name="black_dark_theme_summary">Споживає менше енергії на екранах AMOLED</string>
<string name="restart_required">Потрібен перезапуск</string>
<string name="backup_restore">Резервне копіювання та відновлення</string> <string name="backup_restore">Резервне копіювання та відновлення</string>
<string name="data_restored">Відновлено</string> <string name="data_restored">Відновлено</string>
<string name="preparing_">Підготовка…</string> <string name="preparing_">Підготовка…</string>

@ -168,7 +168,6 @@
<string name="zoom_mode_keep_start">Keep at start</string> <string name="zoom_mode_keep_start">Keep at start</string>
<string name="black_dark_theme">Black</string> <string name="black_dark_theme">Black</string>
<string name="black_dark_theme_summary">Uses less power on AMOLED screens</string> <string name="black_dark_theme_summary">Uses less power on AMOLED screens</string>
<string name="restart_required">Restart required</string>
<string name="backup_restore">Backup and restore</string> <string name="backup_restore">Backup and restore</string>
<string name="create_backup">Create data backup</string> <string name="create_backup">Create data backup</string>
<string name="restore_backup">Restore from backup</string> <string name="restore_backup">Restore from backup</string>

Loading…
Cancel
Save