From 704d1a0f2324a41b69b0e6d376ea5341c9111c1a Mon Sep 17 00:00:00 2001 From: Charles Lombardo Date: Sun, 23 Apr 2023 19:57:24 -0400 Subject: [PATCH] android: Fix black backgrounds bug Start using a specific night mode check because black backgrounds could apply incorrectly when using the light app mode, dark system mode, and black backgrounds. Launching the settings activity will show light mode colors/navigation bars but with black backgrounds. --- .../org/yuzu/yuzu_emu/utils/ThemeHelper.kt | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt index 7c8f1d80bb..1295b42577 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt @@ -33,7 +33,13 @@ object ThemeHelper { DEFAULT -> activity.setTheme(R.style.Theme_Yuzu_Main) MATERIAL_YOU -> activity.setTheme(R.style.Theme_Yuzu_Main_MaterialYou) } - if (preferences.getBoolean(Settings.PREF_BLACK_BACKGROUNDS, false)) { + + // Using a specific night mode check because this could apply incorrectly when using the + // light app mode, dark system mode, and black backgrounds. Launching the settings activity + // will then show light mode colors/navigation bars but with black backgrounds. + if (preferences.getBoolean(Settings.PREF_BLACK_BACKGROUNDS, false) + && isNightMode(activity) + ) { activity.setTheme(R.style.ThemeOverlay_Yuzu_Dark) } } @@ -84,18 +90,24 @@ object ThemeHelper { activity.window, activity.window.decorView ) - val systemReportedThemeMode = - activity.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK when (themeMode) { - AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM -> when (systemReportedThemeMode) { - Configuration.UI_MODE_NIGHT_NO -> setLightModeSystemBars(windowController) - Configuration.UI_MODE_NIGHT_YES -> setDarkModeSystemBars(windowController) + AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM -> when (isNightMode(activity)) { + false -> setLightModeSystemBars(windowController) + true -> setDarkModeSystemBars(windowController) } AppCompatDelegate.MODE_NIGHT_NO -> setLightModeSystemBars(windowController) AppCompatDelegate.MODE_NIGHT_YES -> setDarkModeSystemBars(windowController) } } + private fun isNightMode(activity: AppCompatActivity): Boolean { + return when (activity.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { + Configuration.UI_MODE_NIGHT_NO -> false + Configuration.UI_MODE_NIGHT_YES -> true + else -> false + } + } + private fun setLightModeSystemBars(windowController: WindowInsetsControllerCompat) { windowController.isAppearanceLightStatusBars = true windowController.isAppearanceLightNavigationBars = true