From 473135bfc53025958bb1e9db2a00573bc9c42e27 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Tue, 17 May 2022 14:10:40 +0300 Subject: [PATCH] Apply theme changing without restarting --- .../org/koitharu/kotatsu/base/ui/BaseActivity.kt | 8 ++++++-- .../koitharu/kotatsu/core/prefs/AppSettings.kt | 10 +--------- .../settings/AppearanceSettingsFragment.kt | 16 ++++++++++++---- .../kotatsu/settings/SettingsHeadersFragment.kt | 2 +- app/src/main/res/values-night/themes.xml | 9 ++++++--- app/src/main/res/values/themes.xml | 6 ++++-- 6 files changed, 30 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseActivity.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseActivity.kt index 2fcfeac76..9cdce9654 100644 --- a/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseActivity.kt @@ -43,9 +43,13 @@ abstract class BaseActivity : override fun onCreate(savedInstanceState: Bundle?) { val settings = get() + val isAmoled = settings.isAmoledTheme + val isDynamic = settings.isDynamicTheme + // TODO support DialogWhenLarge theme when { - settings.isAmoledTheme -> setTheme(R.style.ThemeOverlay_Kotatsu_AMOLED) - settings.isDynamicTheme -> setTheme(R.style.Theme_Kotatsu_Monet) + isAmoled && isDynamic -> setTheme(R.style.Theme_Kotatsu_Monet_Amoled) + isAmoled -> setTheme(R.style.Theme_Kotatsu_Amoled) + isDynamic -> setTheme(R.style.Theme_Kotatsu_Monet) } super.onCreate(savedInstanceState) WindowCompat.setDecorFitsSystemWindows(window, false) diff --git a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt index 64956277b..ffa294262 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt @@ -4,7 +4,6 @@ import android.content.Context import android.content.SharedPreferences import android.net.ConnectivityManager import android.net.Uri -import android.os.Build import android.provider.Settings import androidx.appcompat.app.AppCompatDelegate import androidx.collection.arraySetOf @@ -52,7 +51,7 @@ class AppSettings(context: Context) { get() = prefs.getString(KEY_THEME, null)?.toIntOrNull() ?: AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM val isDynamicTheme: Boolean - get() = prefs.getBoolean(KEY_DYNAMIC_THEME, false) + get() = DynamicColors.isDynamicColorAvailable() && prefs.getBoolean(KEY_DYNAMIC_THEME, false) val isAmoledTheme: Boolean get() = prefs.getBoolean(KEY_THEME_AMOLED, false) @@ -324,12 +323,5 @@ class AppSettings(context: Context) { private const val NETWORK_NEVER = 0 private const val NETWORK_ALWAYS = 1 private const val NETWORK_NON_METERED = 2 - - val isDynamicColorAvailable: Boolean - get() = DynamicColors.isDynamicColorAvailable() || - (isSamsung && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) - - private val isSamsung - get() = Build.MANUFACTURER.equals("samsung", ignoreCase = true) } } \ No newline at end of file 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 11337c1b6..50bb254df 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/AppearanceSettingsFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/AppearanceSettingsFragment.kt @@ -5,10 +5,11 @@ import android.content.SharedPreferences import android.os.Bundle import android.view.View import androidx.appcompat.app.AppCompatDelegate +import androidx.core.view.postDelayed import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.TwoStatePreference -import java.util.* +import com.google.android.material.color.DynamicColors import org.koin.android.ext.android.get import org.koitharu.kotatsu.R import org.koitharu.kotatsu.base.ui.BasePreferenceFragment @@ -19,6 +20,7 @@ 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), @@ -38,7 +40,7 @@ class AppearanceSettingsFragment : entryValues = ListMode.values().names() setDefaultValueCompat(ListMode.GRID.name) } - findPreference(AppSettings.KEY_DYNAMIC_THEME)?.isVisible = AppSettings.isDynamicColorAvailable + findPreference(AppSettings.KEY_DYNAMIC_THEME)?.isVisible = DynamicColors.isDynamicColorAvailable() findPreference(AppSettings.KEY_DATE_FORMAT)?.run { entryValues = resources.getStringArray(R.array.date_formats) val now = Date().time @@ -73,10 +75,10 @@ class AppearanceSettingsFragment : AppCompatDelegate.setDefaultNightMode(settings.theme) } AppSettings.KEY_DYNAMIC_THEME -> { - get().recreateAll() + postRestart() } AppSettings.KEY_THEME_AMOLED -> { - get().recreateAll() + postRestart() } AppSettings.KEY_APP_PASSWORD -> { findPreference(AppSettings.KEY_PROTECT_APP) @@ -100,4 +102,10 @@ class AppearanceSettingsFragment : else -> super.onPreferenceTreeClick(preference) } } + + private fun postRestart() { + view?.postDelayed(400) { + get().recreateAll() + } + } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/SettingsHeadersFragment.kt b/app/src/main/java/org/koitharu/kotatsu/settings/SettingsHeadersFragment.kt index bec03f017..052aba070 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/SettingsHeadersFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/SettingsHeadersFragment.kt @@ -33,7 +33,7 @@ class SettingsHeadersFragment : PreferenceHeaderFragmentCompat(), SlidingPaneLay fun setTitle(title: CharSequence?) { currentTitle = title - if (slidingPaneLayout.isSlideable && slidingPaneLayout.isOpen) { + if (slidingPaneLayout.isOpen) { activity?.title = title } } diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index 728707021..8696139cf 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -3,9 +3,12 @@ + + diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index f6addbe8f..69f2615b7 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -86,9 +86,11 @@