diff options
| author | 2023-12-12 14:53:37 -0500 | |
|---|---|---|
| committer | 2023-12-12 17:25:37 -0500 | |
| commit | 6ae4177b2520e0b48399615de5e964495fc2115d (patch) | |
| tree | 170fc314c895053eec1bcc17829dabc70b0ec12f /src/android/app | |
| parent | android: Pre-select custom config in game launch dialog (diff) | |
| download | yuzu-6ae4177b2520e0b48399615de5e964495fc2115d.tar.gz yuzu-6ae4177b2520e0b48399615de5e964495fc2115d.tar.xz yuzu-6ae4177b2520e0b48399615de5e964495fc2115d.zip | |
android: Prevent editing non-savable settings in per-game settings
Diffstat (limited to 'src/android/app')
4 files changed, 23 insertions, 0 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractSetting.kt index e384c78c2..3b78c7cf0 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractSetting.kt | |||
| @@ -22,6 +22,9 @@ interface AbstractSetting { | |||
| 22 | get() = NativeConfig.usingGlobal(key) | 22 | get() = NativeConfig.usingGlobal(key) |
| 23 | set(value) = NativeConfig.setGlobal(key, value) | 23 | set(value) = NativeConfig.setGlobal(key, value) |
| 24 | 24 | ||
| 25 | val isSaveable: Boolean | ||
| 26 | get() = NativeConfig.getIsSaveable(key) | ||
| 27 | |||
| 25 | fun getValueAsString(needsGlobal: Boolean = false): String | 28 | fun getValueAsString(needsGlobal: Boolean = false): String |
| 26 | 29 | ||
| 27 | fun reset() | 30 | fun reset() |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt index 28d8dea60..2e97aee2c 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt | |||
| @@ -30,6 +30,11 @@ abstract class SettingsItem( | |||
| 30 | 30 | ||
| 31 | val isEditable: Boolean | 31 | val isEditable: Boolean |
| 32 | get() { | 32 | get() { |
| 33 | // Can't edit settings that aren't saveable in per-game config even if they are switchable | ||
| 34 | if (NativeConfig.isPerGameConfigLoaded() && !setting.isSaveable) { | ||
| 35 | return false | ||
| 36 | } | ||
| 37 | |||
| 33 | if (!NativeLibrary.isRunning()) return true | 38 | if (!NativeLibrary.isRunning()) return true |
| 34 | 39 | ||
| 35 | // Prevent editing settings that were modified in per-game config while editing global | 40 | // Prevent editing settings that were modified in per-game config while editing global |
| @@ -37,6 +42,7 @@ abstract class SettingsItem( | |||
| 37 | if (!NativeConfig.isPerGameConfigLoaded() && !setting.global) { | 42 | if (!NativeConfig.isPerGameConfigLoaded() && !setting.global) { |
| 38 | return false | 43 | return false |
| 39 | } | 44 | } |
| 45 | |||
| 40 | return setting.isRuntimeModifiable | 46 | return setting.isRuntimeModifiable |
| 41 | } | 47 | } |
| 42 | 48 | ||
| @@ -59,6 +65,7 @@ abstract class SettingsItem( | |||
| 59 | val emptySetting = object : AbstractSetting { | 65 | val emptySetting = object : AbstractSetting { |
| 60 | override val key: String = "" | 66 | override val key: String = "" |
| 61 | override val defaultValue: Any = false | 67 | override val defaultValue: Any = false |
| 68 | override val isSaveable = true | ||
| 62 | override fun getValueAsString(needsGlobal: Boolean): String = "" | 69 | override fun getValueAsString(needsGlobal: Boolean): String = "" |
| 63 | override fun reset() {} | 70 | override fun reset() {} |
| 64 | } | 71 | } |
| @@ -303,6 +310,8 @@ abstract class SettingsItem( | |||
| 303 | BooleanSetting.FASTMEM_EXCLUSIVES.global = value | 310 | BooleanSetting.FASTMEM_EXCLUSIVES.global = value |
| 304 | } | 311 | } |
| 305 | 312 | ||
| 313 | override val isSaveable = true | ||
| 314 | |||
| 306 | override fun getValueAsString(needsGlobal: Boolean): String = | 315 | override fun getValueAsString(needsGlobal: Boolean): String = |
| 307 | getBoolean().toString() | 316 | getBoolean().toString() |
| 308 | 317 | ||
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/NativeConfig.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/NativeConfig.kt index 2d3d8ec79..7512d5eed 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/NativeConfig.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/NativeConfig.kt | |||
| @@ -110,6 +110,8 @@ object NativeConfig { | |||
| 110 | @Synchronized | 110 | @Synchronized |
| 111 | external fun setGlobal(key: String, global: Boolean) | 111 | external fun setGlobal(key: String, global: Boolean) |
| 112 | 112 | ||
| 113 | external fun getIsSaveable(key: String): Boolean | ||
| 114 | |||
| 113 | external fun getDefaultToString(key: String): String | 115 | external fun getDefaultToString(key: String): String |
| 114 | 116 | ||
| 115 | /** | 117 | /** |
diff --git a/src/android/app/src/main/jni/native_config.cpp b/src/android/app/src/main/jni/native_config.cpp index 9e0a33c0f..324d9e9cd 100644 --- a/src/android/app/src/main/jni/native_config.cpp +++ b/src/android/app/src/main/jni/native_config.cpp | |||
| @@ -249,6 +249,15 @@ void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setGlobal(JNIEnv* env, jobject o | |||
| 249 | } | 249 | } |
| 250 | } | 250 | } |
| 251 | 251 | ||
| 252 | jboolean Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getIsSaveable(JNIEnv* env, jobject obj, | ||
| 253 | jstring jkey) { | ||
| 254 | auto setting = getSetting<std::string>(env, jkey); | ||
| 255 | if (setting != nullptr) { | ||
| 256 | return setting->Save(); | ||
| 257 | } | ||
| 258 | return false; | ||
| 259 | } | ||
| 260 | |||
| 252 | jstring Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getDefaultToString(JNIEnv* env, jobject obj, | 261 | jstring Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getDefaultToString(JNIEnv* env, jobject obj, |
| 253 | jstring jkey) { | 262 | jstring jkey) { |
| 254 | auto setting = getSetting<std::string>(env, jkey); | 263 | auto setting = getSetting<std::string>(env, jkey); |