Browse Source

[android] add IntSetting for static theme and set green as default

pull/3655/head
PavelBARABANOV 5 days ago
parent
commit
016b9f88f8
  1. 1
      src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
  2. 19
      src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
  3. 6
      src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt
  4. 40
      src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt
  5. 1
      src/android/app/src/main/jni/android_settings.h
  6. 4
      src/android/app/src/main/res/values/strings.xml

1
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"),

19
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)
}
}

6
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<Int>(Settings.PREF_STATIC_THEME_COLOR)
if (staticThemeColor != null) {
IntSetting.STATIC_THEME_COLOR.setInt(staticThemeColor)
saveConfig = true
}
val blackBackgrounds =
preferences.migratePreference<Boolean>(Settings.PREF_BLACK_BACKGROUNDS)
if (blackBackgrounds != null) {

40
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)
}
}

1
src/android/app/src/main/jni/android_settings.h

@ -56,6 +56,7 @@ namespace AndroidSettings {
Settings::Setting<s32> theme{linkage, 0, "theme", Settings::Category::Android};
Settings::Setting<s32> theme_mode{linkage, -1, "theme_mode", Settings::Category::Android};
Settings::Setting<s32> static_theme_color{linkage, 5, "static_theme_color", Settings::Category::Android};
Settings::Setting<bool> black_backgrounds{linkage, false, "black_backgrounds",
Settings::Category::Android};
Settings::Setting<s32> app_language{linkage, 0, "app_language", Settings::Category::Android};

4
src/android/app/src/main/res/values/strings.xml

@ -1222,12 +1222,12 @@
<!-- Static Themes -->
<string name="static_theme_color">Theme Color</string>
<string name="eden_theme">Eden (Default)</string>
<string name="eden_theme">Eden</string>
<string name="violet">Violet</string>
<string name="blue">Blue</string>
<string name="cyan">Cyan</string>
<string name="red">Red</string>
<string name="green">Green</string>
<string name="green">Green (Default)</string>
<string name="yellow">Yellow</string>
<string name="orange">Orange</string>
<string name="pink">Pink</string>

Loading…
Cancel
Save