diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt index a24a2e1776..4c70d2b35b 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt @@ -34,6 +34,7 @@ enum class IntSetting(override val key: String) : AbstractIntSetting { MAX_ANISOTROPY("max_anisotropy"), THEME("theme"), THEME_MODE("theme_mode"), + STATIC_THEME_COLOR("static_theme_color"), APP_LANGUAGE("app_language"), OVERLAY_SCALE("control_scale"), OVERLAY_OPACITY("control_opacity"), diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt index 332617804e..0fc4fb0b7f 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt @@ -1124,23 +1124,24 @@ class SettingsFragmentPresenter( } val staticThemeColor: AbstractIntSetting = object : AbstractIntSetting { - val preferences = PreferenceManager.getDefaultSharedPreferences( - YuzuApplication.appContext - ) override fun getInt(needsGlobal: Boolean): Int = - preferences.getInt(Settings.PREF_STATIC_THEME_COLOR, 0) + IntSetting.STATIC_THEME_COLOR.getInt(needsGlobal) + override fun setInt(value: Int) { - preferences.edit() { putInt(Settings.PREF_STATIC_THEME_COLOR, value) } + IntSetting.STATIC_THEME_COLOR.setInt(value) settingsViewModel.setShouldRecreate(true) } - override val key: String = Settings.PREF_STATIC_THEME_COLOR + override val key: String = IntSetting.STATIC_THEME_COLOR.key override val isRuntimeModifiable: Boolean = true + override fun getValueAsString(needsGlobal: Boolean): String = - preferences.getInt(Settings.PREF_STATIC_THEME_COLOR, 0).toString() - override val defaultValue: Any = 0 + IntSetting.STATIC_THEME_COLOR.getValueAsString(needsGlobal) + + override val defaultValue: Any = IntSetting.STATIC_THEME_COLOR.defaultValue + override fun reset() { - preferences.edit() { putInt(Settings.PREF_STATIC_THEME_COLOR, 0) } + IntSetting.STATIC_THEME_COLOR.reset() settingsViewModel.setShouldRecreate(true) } } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt index 6318aa71f2..f47c60491b 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt @@ -61,6 +61,12 @@ object DirectoryInitialization { saveConfig = true } + val staticThemeColor = preferences.migratePreference(Settings.PREF_STATIC_THEME_COLOR) + if (staticThemeColor != null) { + IntSetting.STATIC_THEME_COLOR.setInt(staticThemeColor) + saveConfig = true + } + val blackBackgrounds = preferences.migratePreference(Settings.PREF_BLACK_BACKGROUNDS) if (blackBackgrounds != null) { 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 3e138c0244..c3f459e434 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 @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2025 Eden Emulator Project +// SPDX-FileCopyrightText: 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later package org.yuzu.yuzu_emu.utils @@ -51,22 +51,22 @@ object ThemeHelper { } } - private fun getSelectedStaticThemeColor(): Int { - val themeIndex = preferences.getInt(Settings.PREF_STATIC_THEME_COLOR, 0) - val themes = arrayOf( - R.style.Theme_Eden_Main, - R.style.Theme_Yuzu_Main_Violet, - R.style.Theme_Yuzu_Main_Blue, - R.style.Theme_Yuzu_Main_Cyan, - R.style.Theme_Yuzu_Main_Red, - R.style.Theme_Yuzu_Main_Green, - R.style.Theme_Yuzu_Main_Yellow, - R.style.Theme_Yuzu_Main_Orange, - R.style.Theme_Yuzu_Main_Pink, - R.style.Theme_Yuzu_Main_Gray - ) - return themes[themeIndex] - } +private fun getSelectedStaticThemeColor(): Int { + val themeIndex = IntSetting.STATIC_THEME_COLOR.getInt(false) + val themes = arrayOf( + R.style.Theme_Eden_Main, + R.style.Theme_Yuzu_Main_Violet, + R.style.Theme_Yuzu_Main_Blue, + R.style.Theme_Yuzu_Main_Cyan, + R.style.Theme_Yuzu_Main_Red, + R.style.Theme_Yuzu_Main_Green, + R.style.Theme_Yuzu_Main_Yellow, + R.style.Theme_Yuzu_Main_Orange, + R.style.Theme_Yuzu_Main_Pink, + R.style.Theme_Yuzu_Main_Gray + ) + return themes[themeIndex] +} @ColorInt fun getColorWithOpacity(@ColorInt color: Int, alphaFactor: Float): Int { @@ -122,16 +122,16 @@ object ThemeHelper { } fun ThemeChangeListener(activity: AppCompatActivity) { - listener = SharedPreferences.OnSharedPreferenceChangeListener { _, key -> + listener = SharedPreferences.OnSharedPreferenceChangeListener { _, key -> val relevantKeys = listOf( Settings.PREF_STATIC_THEME_COLOR, Settings.PREF_THEME_MODE, Settings.PREF_BLACK_BACKGROUNDS ) if (key in relevantKeys) { - activity.recreate() - } + activity.recreate() } + } preferences.registerOnSharedPreferenceChangeListener(listener) } } diff --git a/src/android/app/src/main/jni/android_settings.h b/src/android/app/src/main/jni/android_settings.h index 4090330d78..606ce2ce84 100644 --- a/src/android/app/src/main/jni/android_settings.h +++ b/src/android/app/src/main/jni/android_settings.h @@ -56,6 +56,7 @@ namespace AndroidSettings { Settings::Setting theme{linkage, 0, "theme", Settings::Category::Android}; Settings::Setting theme_mode{linkage, -1, "theme_mode", Settings::Category::Android}; + Settings::Setting static_theme_color{linkage, 5, "static_theme_color", Settings::Category::Android}; Settings::Setting black_backgrounds{linkage, false, "black_backgrounds", Settings::Category::Android}; Settings::Setting app_language{linkage, 0, "app_language", Settings::Category::Android}; diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index fc1334863d..7d094effcb 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -1222,12 +1222,12 @@ Theme Color - Eden (Default) + Eden Violet Blue Cyan Red - Green + Green (Default) Yellow Orange Pink