Просмотр исходного кода

android: Prevent editing non-savable settings in per-game settings

t895 2 лет назад
Родитель
Сommit
6ae4177b25

+ 3 - 0
src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractSetting.kt

@@ -22,6 +22,9 @@ interface AbstractSetting {
         get() = NativeConfig.usingGlobal(key)
         set(value) = NativeConfig.setGlobal(key, value)
 
+    val isSaveable: Boolean
+        get() = NativeConfig.getIsSaveable(key)
+
     fun getValueAsString(needsGlobal: Boolean = false): String
 
     fun reset()

+ 9 - 0
src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt

@@ -30,6 +30,11 @@ abstract class SettingsItem(
 
     val isEditable: Boolean
         get() {
+            // Can't edit settings that aren't saveable in per-game config even if they are switchable
+            if (NativeConfig.isPerGameConfigLoaded() && !setting.isSaveable) {
+                return false
+            }
+
             if (!NativeLibrary.isRunning()) return true
 
             // Prevent editing settings that were modified in per-game config while editing global
@@ -37,6 +42,7 @@ abstract class SettingsItem(
             if (!NativeConfig.isPerGameConfigLoaded() && !setting.global) {
                 return false
             }
+
             return setting.isRuntimeModifiable
         }
 
@@ -59,6 +65,7 @@ abstract class SettingsItem(
         val emptySetting = object : AbstractSetting {
             override val key: String = ""
             override val defaultValue: Any = false
+            override val isSaveable = true
             override fun getValueAsString(needsGlobal: Boolean): String = ""
             override fun reset() {}
         }
@@ -303,6 +310,8 @@ abstract class SettingsItem(
                         BooleanSetting.FASTMEM_EXCLUSIVES.global = value
                     }
 
+                override val isSaveable = true
+
                 override fun getValueAsString(needsGlobal: Boolean): String =
                     getBoolean().toString()
 

+ 2 - 0
src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/NativeConfig.kt

@@ -110,6 +110,8 @@ object NativeConfig {
     @Synchronized
     external fun setGlobal(key: String, global: Boolean)
 
+    external fun getIsSaveable(key: String): Boolean
+
     external fun getDefaultToString(key: String): String
 
     /**

+ 9 - 0
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
     }
 }
 
+jboolean Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getIsSaveable(JNIEnv* env, jobject obj,
+                                                                  jstring jkey) {
+    auto setting = getSetting<std::string>(env, jkey);
+    if (setting != nullptr) {
+        return setting->Save();
+    }
+    return false;
+}
+
 jstring Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getDefaultToString(JNIEnv* env, jobject obj,
                                                                       jstring jkey) {
     auto setting = getSetting<std::string>(env, jkey);