diff options
| author | 2023-12-10 20:10:36 -0500 | |
|---|---|---|
| committer | 2023-12-12 17:25:36 -0500 | |
| commit | 70c3d36536ad98a5569d51f1d0f68a6f01890f11 (patch) | |
| tree | 19fa4ccec7477ca8b963885633004d76aaa00a52 | |
| parent | Merge pull request #12342 from FearlessTobi/fix-msvc (diff) | |
| download | yuzu-70c3d36536ad98a5569d51f1d0f68a6f01890f11.tar.gz yuzu-70c3d36536ad98a5569d51f1d0f68a6f01890f11.tar.xz yuzu-70c3d36536ad98a5569d51f1d0f68a6f01890f11.zip | |
android: Refactor settings to expose more options
In AbstractSetting, this removes the category, androidDefault, and valueAsString properties as they are no longer needed and have replacements. isSwitchable, global, and getValueAsString are all exposed and give better options for working with global/per-game settings.
34 files changed, 324 insertions, 353 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt index f41d7bdbf..9b08f008d 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt | |||
| @@ -172,7 +172,7 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { | |||
| 172 | 172 | ||
| 173 | override fun onUserLeaveHint() { | 173 | override fun onUserLeaveHint() { |
| 174 | if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { | 174 | if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { |
| 175 | if (BooleanSetting.PICTURE_IN_PICTURE.boolean && !isInPictureInPictureMode) { | 175 | if (BooleanSetting.PICTURE_IN_PICTURE.getBoolean() && !isInPictureInPictureMode) { |
| 176 | val pictureInPictureParamsBuilder = PictureInPictureParams.Builder() | 176 | val pictureInPictureParamsBuilder = PictureInPictureParams.Builder() |
| 177 | .getPictureInPictureActionsBuilder().getPictureInPictureAspectBuilder() | 177 | .getPictureInPictureActionsBuilder().getPictureInPictureAspectBuilder() |
| 178 | enterPictureInPictureMode(pictureInPictureParamsBuilder.build()) | 178 | enterPictureInPictureMode(pictureInPictureParamsBuilder.build()) |
| @@ -284,7 +284,7 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { | |||
| 284 | 284 | ||
| 285 | private fun PictureInPictureParams.Builder.getPictureInPictureAspectBuilder(): | 285 | private fun PictureInPictureParams.Builder.getPictureInPictureAspectBuilder(): |
| 286 | PictureInPictureParams.Builder { | 286 | PictureInPictureParams.Builder { |
| 287 | val aspectRatio = when (IntSetting.RENDERER_ASPECT_RATIO.int) { | 287 | val aspectRatio = when (IntSetting.RENDERER_ASPECT_RATIO.getInt()) { |
| 288 | 0 -> Rational(16, 9) | 288 | 0 -> Rational(16, 9) |
| 289 | 1 -> Rational(4, 3) | 289 | 1 -> Rational(4, 3) |
| 290 | 2 -> Rational(21, 9) | 290 | 2 -> Rational(21, 9) |
| @@ -331,7 +331,7 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { | |||
| 331 | pictureInPictureActions.add(pauseRemoteAction) | 331 | pictureInPictureActions.add(pauseRemoteAction) |
| 332 | } | 332 | } |
| 333 | 333 | ||
| 334 | if (BooleanSetting.AUDIO_MUTED.boolean) { | 334 | if (BooleanSetting.AUDIO_MUTED.getBoolean()) { |
| 335 | val unmuteIcon = Icon.createWithResource( | 335 | val unmuteIcon = Icon.createWithResource( |
| 336 | this@EmulationActivity, | 336 | this@EmulationActivity, |
| 337 | R.drawable.ic_pip_unmute | 337 | R.drawable.ic_pip_unmute |
| @@ -376,7 +376,7 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { | |||
| 376 | val isEmulationActive = emulationViewModel.emulationStarted.value && | 376 | val isEmulationActive = emulationViewModel.emulationStarted.value && |
| 377 | !emulationViewModel.isEmulationStopping.value | 377 | !emulationViewModel.isEmulationStopping.value |
| 378 | pictureInPictureParamsBuilder.setAutoEnterEnabled( | 378 | pictureInPictureParamsBuilder.setAutoEnterEnabled( |
| 379 | BooleanSetting.PICTURE_IN_PICTURE.boolean && isEmulationActive | 379 | BooleanSetting.PICTURE_IN_PICTURE.getBoolean() && isEmulationActive |
| 380 | ) | 380 | ) |
| 381 | } | 381 | } |
| 382 | setPictureInPictureParams(pictureInPictureParamsBuilder.build()) | 382 | setPictureInPictureParams(pictureInPictureParamsBuilder.build()) |
| @@ -390,9 +390,13 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { | |||
| 390 | if (!NativeLibrary.isPaused()) NativeLibrary.pauseEmulation() | 390 | if (!NativeLibrary.isPaused()) NativeLibrary.pauseEmulation() |
| 391 | } | 391 | } |
| 392 | if (intent.action == actionUnmute) { | 392 | if (intent.action == actionUnmute) { |
| 393 | if (BooleanSetting.AUDIO_MUTED.boolean) BooleanSetting.AUDIO_MUTED.setBoolean(false) | 393 | if (BooleanSetting.AUDIO_MUTED.getBoolean()) { |
| 394 | BooleanSetting.AUDIO_MUTED.setBoolean(false) | ||
| 395 | } | ||
| 394 | } else if (intent.action == actionMute) { | 396 | } else if (intent.action == actionMute) { |
| 395 | if (!BooleanSetting.AUDIO_MUTED.boolean) BooleanSetting.AUDIO_MUTED.setBoolean(true) | 397 | if (!BooleanSetting.AUDIO_MUTED.getBoolean()) { |
| 398 | BooleanSetting.AUDIO_MUTED.setBoolean(true) | ||
| 399 | } | ||
| 396 | } | 400 | } |
| 397 | buildPictureInPictureParams() | 401 | buildPictureInPictureParams() |
| 398 | } | 402 | } |
| @@ -423,7 +427,9 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { | |||
| 423 | } catch (ignored: Exception) { | 427 | } catch (ignored: Exception) { |
| 424 | } | 428 | } |
| 425 | // Always resume audio, since there is no UI button | 429 | // Always resume audio, since there is no UI button |
| 426 | if (BooleanSetting.AUDIO_MUTED.boolean) BooleanSetting.AUDIO_MUTED.setBoolean(false) | 430 | if (BooleanSetting.AUDIO_MUTED.getBoolean()) { |
| 431 | BooleanSetting.AUDIO_MUTED.setBoolean(false) | ||
| 432 | } | ||
| 427 | } | 433 | } |
| 428 | } | 434 | } |
| 429 | 435 | ||
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractBooleanSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractBooleanSetting.kt index aeda8d222..0ba465356 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractBooleanSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractBooleanSetting.kt | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | package org.yuzu.yuzu_emu.features.settings.model | 4 | package org.yuzu.yuzu_emu.features.settings.model |
| 5 | 5 | ||
| 6 | interface AbstractBooleanSetting : AbstractSetting { | 6 | interface AbstractBooleanSetting : AbstractSetting { |
| 7 | val boolean: Boolean | 7 | fun getBoolean(needsGlobal: Boolean = false): Boolean |
| 8 | |||
| 9 | fun setBoolean(value: Boolean) | 8 | fun setBoolean(value: Boolean) |
| 10 | } | 9 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractByteSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractByteSetting.kt index 606519ad8..cf6300535 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractByteSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractByteSetting.kt | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | package org.yuzu.yuzu_emu.features.settings.model | 4 | package org.yuzu.yuzu_emu.features.settings.model |
| 5 | 5 | ||
| 6 | interface AbstractByteSetting : AbstractSetting { | 6 | interface AbstractByteSetting : AbstractSetting { |
| 7 | val byte: Byte | 7 | fun getByte(needsGlobal: Boolean = false): Byte |
| 8 | |||
| 9 | fun setByte(value: Byte) | 8 | fun setByte(value: Byte) |
| 10 | } | 9 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractFloatSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractFloatSetting.kt index 974925eed..c6c0bcf34 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractFloatSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractFloatSetting.kt | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | package org.yuzu.yuzu_emu.features.settings.model | 4 | package org.yuzu.yuzu_emu.features.settings.model |
| 5 | 5 | ||
| 6 | interface AbstractFloatSetting : AbstractSetting { | 6 | interface AbstractFloatSetting : AbstractSetting { |
| 7 | val float: Float | 7 | fun getFloat(needsGlobal: Boolean = false): Float |
| 8 | |||
| 9 | fun setFloat(value: Float) | 8 | fun setFloat(value: Float) |
| 10 | } | 9 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractIntSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractIntSetting.kt index 89b285b10..826402c34 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractIntSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractIntSetting.kt | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | package org.yuzu.yuzu_emu.features.settings.model | 4 | package org.yuzu.yuzu_emu.features.settings.model |
| 5 | 5 | ||
| 6 | interface AbstractIntSetting : AbstractSetting { | 6 | interface AbstractIntSetting : AbstractSetting { |
| 7 | val int: Int | 7 | fun getInt(needsGlobal: Boolean = false): Int |
| 8 | |||
| 9 | fun setInt(value: Int) | 8 | fun setInt(value: Int) |
| 10 | } | 9 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractLongSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractLongSetting.kt index 4873942db..2b62cc06b 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractLongSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractLongSetting.kt | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | package org.yuzu.yuzu_emu.features.settings.model | 4 | package org.yuzu.yuzu_emu.features.settings.model |
| 5 | 5 | ||
| 6 | interface AbstractLongSetting : AbstractSetting { | 6 | interface AbstractLongSetting : AbstractSetting { |
| 7 | val long: Long | 7 | fun getLong(needsGlobal: Boolean = false): Long |
| 8 | |||
| 9 | fun setLong(value: Long) | 8 | fun setLong(value: Long) |
| 10 | } | 9 | } |
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 8b6d29fe5..e384c78c2 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 | |||
| @@ -7,12 +7,7 @@ import org.yuzu.yuzu_emu.utils.NativeConfig | |||
| 7 | 7 | ||
| 8 | interface AbstractSetting { | 8 | interface AbstractSetting { |
| 9 | val key: String | 9 | val key: String |
| 10 | val category: Settings.Category | ||
| 11 | val defaultValue: Any | 10 | val defaultValue: Any |
| 12 | val androidDefault: Any? | ||
| 13 | get() = null | ||
| 14 | val valueAsString: String | ||
| 15 | get() = "" | ||
| 16 | 11 | ||
| 17 | val isRuntimeModifiable: Boolean | 12 | val isRuntimeModifiable: Boolean |
| 18 | get() = NativeConfig.getIsRuntimeModifiable(key) | 13 | get() = NativeConfig.getIsRuntimeModifiable(key) |
| @@ -20,5 +15,14 @@ interface AbstractSetting { | |||
| 20 | val pairedSettingKey: String | 15 | val pairedSettingKey: String |
| 21 | get() = NativeConfig.getPairedSettingKey(key) | 16 | get() = NativeConfig.getPairedSettingKey(key) |
| 22 | 17 | ||
| 18 | val isSwitchable: Boolean | ||
| 19 | get() = NativeConfig.getIsSwitchable(key) | ||
| 20 | |||
| 21 | var global: Boolean | ||
| 22 | get() = NativeConfig.usingGlobal(key) | ||
| 23 | set(value) = NativeConfig.setGlobal(key, value) | ||
| 24 | |||
| 25 | fun getValueAsString(needsGlobal: Boolean = false): String | ||
| 26 | |||
| 23 | fun reset() | 27 | fun reset() |
| 24 | } | 28 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractShortSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractShortSetting.kt index 91407ccbb..8bfa81e4a 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractShortSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractShortSetting.kt | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | package org.yuzu.yuzu_emu.features.settings.model | 4 | package org.yuzu.yuzu_emu.features.settings.model |
| 5 | 5 | ||
| 6 | interface AbstractShortSetting : AbstractSetting { | 6 | interface AbstractShortSetting : AbstractSetting { |
| 7 | val short: Short | 7 | fun getShort(needsGlobal: Boolean = false): Short |
| 8 | |||
| 9 | fun setShort(value: Short) | 8 | fun setShort(value: Short) |
| 10 | } | 9 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractStringSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractStringSetting.kt index c8935cc48..6ff8fd3f9 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractStringSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractStringSetting.kt | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | package org.yuzu.yuzu_emu.features.settings.model | 4 | package org.yuzu.yuzu_emu.features.settings.model |
| 5 | 5 | ||
| 6 | interface AbstractStringSetting : AbstractSetting { | 6 | interface AbstractStringSetting : AbstractSetting { |
| 7 | val string: String | 7 | fun getString(needsGlobal: Boolean = false): String |
| 8 | |||
| 9 | fun setString(value: String) | 8 | fun setString(value: String) |
| 10 | } | 9 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt index 8476ce867..16f06cd0a 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt | |||
| @@ -5,36 +5,34 @@ package org.yuzu.yuzu_emu.features.settings.model | |||
| 5 | 5 | ||
| 6 | import org.yuzu.yuzu_emu.utils.NativeConfig | 6 | import org.yuzu.yuzu_emu.utils.NativeConfig |
| 7 | 7 | ||
| 8 | enum class BooleanSetting( | 8 | enum class BooleanSetting(override val key: String) : AbstractBooleanSetting { |
| 9 | override val key: String, | 9 | AUDIO_MUTED("audio_muted"), |
| 10 | override val category: Settings.Category, | 10 | CPU_DEBUG_MODE("cpu_debug_mode"), |
| 11 | override val androidDefault: Boolean? = null | 11 | FASTMEM("cpuopt_fastmem"), |
| 12 | ) : AbstractBooleanSetting { | 12 | FASTMEM_EXCLUSIVES("cpuopt_fastmem_exclusives"), |
| 13 | AUDIO_MUTED("audio_muted", Settings.Category.Audio), | 13 | RENDERER_USE_SPEED_LIMIT("use_speed_limit"), |
| 14 | CPU_DEBUG_MODE("cpu_debug_mode", Settings.Category.Cpu), | 14 | USE_DOCKED_MODE("use_docked_mode"), |
| 15 | FASTMEM("cpuopt_fastmem", Settings.Category.Cpu), | 15 | RENDERER_USE_DISK_SHADER_CACHE("use_disk_shader_cache"), |
| 16 | FASTMEM_EXCLUSIVES("cpuopt_fastmem_exclusives", Settings.Category.Cpu), | 16 | RENDERER_FORCE_MAX_CLOCK("force_max_clock"), |
| 17 | RENDERER_USE_SPEED_LIMIT("use_speed_limit", Settings.Category.Core), | 17 | RENDERER_ASYNCHRONOUS_SHADERS("use_asynchronous_shaders"), |
| 18 | USE_DOCKED_MODE("use_docked_mode", Settings.Category.System, false), | 18 | RENDERER_REACTIVE_FLUSHING("use_reactive_flushing"), |
| 19 | RENDERER_USE_DISK_SHADER_CACHE("use_disk_shader_cache", Settings.Category.Renderer), | 19 | RENDERER_DEBUG("debug"), |
| 20 | RENDERER_FORCE_MAX_CLOCK("force_max_clock", Settings.Category.Renderer), | 20 | PICTURE_IN_PICTURE("picture_in_picture"), |
| 21 | RENDERER_ASYNCHRONOUS_SHADERS("use_asynchronous_shaders", Settings.Category.Renderer), | 21 | USE_CUSTOM_RTC("custom_rtc_enabled"); |
| 22 | RENDERER_REACTIVE_FLUSHING("use_reactive_flushing", Settings.Category.Renderer, false), | 22 | |
| 23 | RENDERER_DEBUG("debug", Settings.Category.Renderer), | 23 | override fun getBoolean(needsGlobal: Boolean): Boolean = |
| 24 | PICTURE_IN_PICTURE("picture_in_picture", Settings.Category.Android), | 24 | NativeConfig.getBoolean(key, needsGlobal) |
| 25 | USE_CUSTOM_RTC("custom_rtc_enabled", Settings.Category.System); | 25 | |
| 26 | 26 | override fun setBoolean(value: Boolean) { | |
| 27 | override val boolean: Boolean | 27 | if (NativeConfig.isPerGameConfigLoaded()) { |
| 28 | get() = NativeConfig.getBoolean(key, false) | 28 | global = false |
| 29 | 29 | } | |
| 30 | override fun setBoolean(value: Boolean) = NativeConfig.setBoolean(key, value) | 30 | NativeConfig.setBoolean(key, value) |
| 31 | |||
| 32 | override val defaultValue: Boolean by lazy { | ||
| 33 | androidDefault ?: NativeConfig.getBoolean(key, true) | ||
| 34 | } | 31 | } |
| 35 | 32 | ||
| 36 | override val valueAsString: String | 33 | override val defaultValue: Boolean by lazy { NativeConfig.getDefaultToString(key).toBoolean() } |
| 37 | get() = if (boolean) "1" else "0" | 34 | |
| 35 | override fun getValueAsString(needsGlobal: Boolean): String = getBoolean(needsGlobal).toString() | ||
| 38 | 36 | ||
| 39 | override fun reset() = NativeConfig.setBoolean(key, defaultValue) | 37 | override fun reset() = NativeConfig.setBoolean(key, defaultValue) |
| 40 | } | 38 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/ByteSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/ByteSetting.kt index 6ec0a765e..7b7fac211 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/ByteSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/ByteSetting.kt | |||
| @@ -5,21 +5,21 @@ package org.yuzu.yuzu_emu.features.settings.model | |||
| 5 | 5 | ||
| 6 | import org.yuzu.yuzu_emu.utils.NativeConfig | 6 | import org.yuzu.yuzu_emu.utils.NativeConfig |
| 7 | 7 | ||
| 8 | enum class ByteSetting( | 8 | enum class ByteSetting(override val key: String) : AbstractByteSetting { |
| 9 | override val key: String, | 9 | AUDIO_VOLUME("volume"); |
| 10 | override val category: Settings.Category | ||
| 11 | ) : AbstractByteSetting { | ||
| 12 | AUDIO_VOLUME("volume", Settings.Category.Audio); | ||
| 13 | 10 | ||
| 14 | override val byte: Byte | 11 | override fun getByte(needsGlobal: Boolean): Byte = NativeConfig.getByte(key, needsGlobal) |
| 15 | get() = NativeConfig.getByte(key, false) | ||
| 16 | 12 | ||
| 17 | override fun setByte(value: Byte) = NativeConfig.setByte(key, value) | 13 | override fun setByte(value: Byte) { |
| 14 | if (NativeConfig.isPerGameConfigLoaded()) { | ||
| 15 | global = false | ||
| 16 | } | ||
| 17 | NativeConfig.setByte(key, value) | ||
| 18 | } | ||
| 18 | 19 | ||
| 19 | override val defaultValue: Byte by lazy { NativeConfig.getByte(key, true) } | 20 | override val defaultValue: Byte by lazy { NativeConfig.getDefaultToString(key).toByte() } |
| 20 | 21 | ||
| 21 | override val valueAsString: String | 22 | override fun getValueAsString(needsGlobal: Boolean): String = getByte(needsGlobal).toString() |
| 22 | get() = byte.toString() | ||
| 23 | 23 | ||
| 24 | override fun reset() = NativeConfig.setByte(key, defaultValue) | 24 | override fun reset() = NativeConfig.setByte(key, defaultValue) |
| 25 | } | 25 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/FloatSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/FloatSetting.kt index 0181d06f2..4644824d8 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/FloatSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/FloatSetting.kt | |||
| @@ -5,22 +5,22 @@ package org.yuzu.yuzu_emu.features.settings.model | |||
| 5 | 5 | ||
| 6 | import org.yuzu.yuzu_emu.utils.NativeConfig | 6 | import org.yuzu.yuzu_emu.utils.NativeConfig |
| 7 | 7 | ||
| 8 | enum class FloatSetting( | 8 | enum class FloatSetting(override val key: String) : AbstractFloatSetting { |
| 9 | override val key: String, | ||
| 10 | override val category: Settings.Category | ||
| 11 | ) : AbstractFloatSetting { | ||
| 12 | // No float settings currently exist | 9 | // No float settings currently exist |
| 13 | EMPTY_SETTING("", Settings.Category.UiGeneral); | 10 | EMPTY_SETTING(""); |
| 14 | 11 | ||
| 15 | override val float: Float | 12 | override fun getFloat(needsGlobal: Boolean): Float = NativeConfig.getFloat(key, false) |
| 16 | get() = NativeConfig.getFloat(key, false) | ||
| 17 | 13 | ||
| 18 | override fun setFloat(value: Float) = NativeConfig.setFloat(key, value) | 14 | override fun setFloat(value: Float) { |
| 15 | if (NativeConfig.isPerGameConfigLoaded()) { | ||
| 16 | global = false | ||
| 17 | } | ||
| 18 | NativeConfig.setFloat(key, value) | ||
| 19 | } | ||
| 19 | 20 | ||
| 20 | override val defaultValue: Float by lazy { NativeConfig.getFloat(key, true) } | 21 | override val defaultValue: Float by lazy { NativeConfig.getDefaultToString(key).toFloat() } |
| 21 | 22 | ||
| 22 | override val valueAsString: String | 23 | override fun getValueAsString(needsGlobal: Boolean): String = getFloat(needsGlobal).toString() |
| 23 | get() = float.toString() | ||
| 24 | 24 | ||
| 25 | override fun reset() = NativeConfig.setFloat(key, defaultValue) | 25 | override fun reset() = NativeConfig.setFloat(key, defaultValue) |
| 26 | } | 26 | } |
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 ef10b209f..21e4e1afd 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 | |||
| @@ -5,36 +5,33 @@ package org.yuzu.yuzu_emu.features.settings.model | |||
| 5 | 5 | ||
| 6 | import org.yuzu.yuzu_emu.utils.NativeConfig | 6 | import org.yuzu.yuzu_emu.utils.NativeConfig |
| 7 | 7 | ||
| 8 | enum class IntSetting( | 8 | enum class IntSetting(override val key: String) : AbstractIntSetting { |
| 9 | override val key: String, | 9 | CPU_BACKEND("cpu_backend"), |
| 10 | override val category: Settings.Category, | 10 | CPU_ACCURACY("cpu_accuracy"), |
| 11 | override val androidDefault: Int? = null | 11 | REGION_INDEX("region_index"), |
| 12 | ) : AbstractIntSetting { | 12 | LANGUAGE_INDEX("language_index"), |
| 13 | CPU_BACKEND("cpu_backend", Settings.Category.Cpu), | 13 | RENDERER_BACKEND("backend"), |
| 14 | CPU_ACCURACY("cpu_accuracy", Settings.Category.Cpu), | 14 | RENDERER_ACCURACY("gpu_accuracy"), |
| 15 | REGION_INDEX("region_index", Settings.Category.System), | 15 | RENDERER_RESOLUTION("resolution_setup"), |
| 16 | LANGUAGE_INDEX("language_index", Settings.Category.System), | 16 | RENDERER_VSYNC("use_vsync"), |
| 17 | RENDERER_BACKEND("backend", Settings.Category.Renderer), | 17 | RENDERER_SCALING_FILTER("scaling_filter"), |
| 18 | RENDERER_ACCURACY("gpu_accuracy", Settings.Category.Renderer, 0), | 18 | RENDERER_ANTI_ALIASING("anti_aliasing"), |
| 19 | RENDERER_RESOLUTION("resolution_setup", Settings.Category.Renderer), | 19 | RENDERER_SCREEN_LAYOUT("screen_layout"), |
| 20 | RENDERER_VSYNC("use_vsync", Settings.Category.Renderer), | 20 | RENDERER_ASPECT_RATIO("aspect_ratio"), |
| 21 | RENDERER_SCALING_FILTER("scaling_filter", Settings.Category.Renderer), | 21 | AUDIO_OUTPUT_ENGINE("output_engine"); |
| 22 | RENDERER_ANTI_ALIASING("anti_aliasing", Settings.Category.Renderer), | 22 | |
| 23 | RENDERER_SCREEN_LAYOUT("screen_layout", Settings.Category.Android), | 23 | override fun getInt(needsGlobal: Boolean): Int = NativeConfig.getInt(key, needsGlobal) |
| 24 | RENDERER_ASPECT_RATIO("aspect_ratio", Settings.Category.Renderer), | 24 | |
| 25 | AUDIO_OUTPUT_ENGINE("output_engine", Settings.Category.Audio); | 25 | override fun setInt(value: Int) { |
| 26 | 26 | if (NativeConfig.isPerGameConfigLoaded()) { | |
| 27 | override val int: Int | 27 | global = false |
| 28 | get() = NativeConfig.getInt(key, false) | 28 | } |
| 29 | 29 | NativeConfig.setInt(key, value) | |
| 30 | override fun setInt(value: Int) = NativeConfig.setInt(key, value) | ||
| 31 | |||
| 32 | override val defaultValue: Int by lazy { | ||
| 33 | androidDefault ?: NativeConfig.getInt(key, true) | ||
| 34 | } | 30 | } |
| 35 | 31 | ||
| 36 | override val valueAsString: String | 32 | override val defaultValue: Int by lazy { NativeConfig.getDefaultToString(key).toInt() } |
| 37 | get() = int.toString() | 33 | |
| 34 | override fun getValueAsString(needsGlobal: Boolean): String = getInt(needsGlobal).toString() | ||
| 38 | 35 | ||
| 39 | override fun reset() = NativeConfig.setInt(key, defaultValue) | 36 | override fun reset() = NativeConfig.setInt(key, defaultValue) |
| 40 | } | 37 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/LongSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/LongSetting.kt index c526fc4cf..e3efd516c 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/LongSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/LongSetting.kt | |||
| @@ -5,21 +5,21 @@ package org.yuzu.yuzu_emu.features.settings.model | |||
| 5 | 5 | ||
| 6 | import org.yuzu.yuzu_emu.utils.NativeConfig | 6 | import org.yuzu.yuzu_emu.utils.NativeConfig |
| 7 | 7 | ||
| 8 | enum class LongSetting( | 8 | enum class LongSetting(override val key: String) : AbstractLongSetting { |
| 9 | override val key: String, | 9 | CUSTOM_RTC("custom_rtc"); |
| 10 | override val category: Settings.Category | ||
| 11 | ) : AbstractLongSetting { | ||
| 12 | CUSTOM_RTC("custom_rtc", Settings.Category.System); | ||
| 13 | 10 | ||
| 14 | override val long: Long | 11 | override fun getLong(needsGlobal: Boolean): Long = NativeConfig.getLong(key, needsGlobal) |
| 15 | get() = NativeConfig.getLong(key, false) | ||
| 16 | 12 | ||
| 17 | override fun setLong(value: Long) = NativeConfig.setLong(key, value) | 13 | override fun setLong(value: Long) { |
| 14 | if (NativeConfig.isPerGameConfigLoaded()) { | ||
| 15 | global = false | ||
| 16 | } | ||
| 17 | NativeConfig.setLong(key, value) | ||
| 18 | } | ||
| 18 | 19 | ||
| 19 | override val defaultValue: Long by lazy { NativeConfig.getLong(key, true) } | 20 | override val defaultValue: Long by lazy { NativeConfig.getDefaultToString(key).toLong() } |
| 20 | 21 | ||
| 21 | override val valueAsString: String | 22 | override fun getValueAsString(needsGlobal: Boolean): String = getLong(needsGlobal).toString() |
| 22 | get() = long.toString() | ||
| 23 | 23 | ||
| 24 | override fun reset() = NativeConfig.setLong(key, defaultValue) | 24 | override fun reset() = NativeConfig.setLong(key, defaultValue) |
| 25 | } | 25 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt index e3cd66185..9551fc05e 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt | |||
| @@ -6,62 +6,11 @@ package org.yuzu.yuzu_emu.features.settings.model | |||
| 6 | import org.yuzu.yuzu_emu.R | 6 | import org.yuzu.yuzu_emu.R |
| 7 | 7 | ||
| 8 | object Settings { | 8 | object Settings { |
| 9 | enum class Category { | ||
| 10 | Android, | ||
| 11 | Audio, | ||
| 12 | Core, | ||
| 13 | Cpu, | ||
| 14 | CpuDebug, | ||
| 15 | CpuUnsafe, | ||
| 16 | Renderer, | ||
| 17 | RendererAdvanced, | ||
| 18 | RendererDebug, | ||
| 19 | System, | ||
| 20 | SystemAudio, | ||
| 21 | DataStorage, | ||
| 22 | Debugging, | ||
| 23 | DebuggingGraphics, | ||
| 24 | Miscellaneous, | ||
| 25 | Network, | ||
| 26 | WebService, | ||
| 27 | AddOns, | ||
| 28 | Controls, | ||
| 29 | Ui, | ||
| 30 | UiGeneral, | ||
| 31 | UiLayout, | ||
| 32 | UiGameList, | ||
| 33 | Screenshots, | ||
| 34 | Shortcuts, | ||
| 35 | Multiplayer, | ||
| 36 | Services, | ||
| 37 | Paths, | ||
| 38 | MaxEnum | ||
| 39 | } | ||
| 40 | |||
| 41 | val settingsList = listOf<AbstractSetting>( | ||
| 42 | *BooleanSetting.values(), | ||
| 43 | *ByteSetting.values(), | ||
| 44 | *ShortSetting.values(), | ||
| 45 | *IntSetting.values(), | ||
| 46 | *FloatSetting.values(), | ||
| 47 | *LongSetting.values(), | ||
| 48 | *StringSetting.values() | ||
| 49 | ) | ||
| 50 | |||
| 51 | const val SECTION_GENERAL = "General" | ||
| 52 | const val SECTION_SYSTEM = "System" | ||
| 53 | const val SECTION_RENDERER = "Renderer" | ||
| 54 | const val SECTION_AUDIO = "Audio" | ||
| 55 | const val SECTION_CPU = "Cpu" | ||
| 56 | const val SECTION_THEME = "Theme" | ||
| 57 | const val SECTION_DEBUG = "Debug" | ||
| 58 | |||
| 59 | enum class MenuTag(val titleId: Int) { | 9 | enum class MenuTag(val titleId: Int) { |
| 60 | SECTION_ROOT(R.string.advanced_settings), | 10 | SECTION_ROOT(R.string.advanced_settings), |
| 61 | SECTION_SYSTEM(R.string.preferences_system), | 11 | SECTION_SYSTEM(R.string.preferences_system), |
| 62 | SECTION_RENDERER(R.string.preferences_graphics), | 12 | SECTION_RENDERER(R.string.preferences_graphics), |
| 63 | SECTION_AUDIO(R.string.preferences_audio), | 13 | SECTION_AUDIO(R.string.preferences_audio), |
| 64 | SECTION_CPU(R.string.cpu), | ||
| 65 | SECTION_THEME(R.string.preferences_theme), | 14 | SECTION_THEME(R.string.preferences_theme), |
| 66 | SECTION_DEBUG(R.string.preferences_debug); | 15 | SECTION_DEBUG(R.string.preferences_debug); |
| 67 | } | 16 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/ShortSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/ShortSetting.kt index c9a0c664c..16eb4ffdd 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/ShortSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/ShortSetting.kt | |||
| @@ -5,21 +5,21 @@ package org.yuzu.yuzu_emu.features.settings.model | |||
| 5 | 5 | ||
| 6 | import org.yuzu.yuzu_emu.utils.NativeConfig | 6 | import org.yuzu.yuzu_emu.utils.NativeConfig |
| 7 | 7 | ||
| 8 | enum class ShortSetting( | 8 | enum class ShortSetting(override val key: String) : AbstractShortSetting { |
| 9 | override val key: String, | 9 | RENDERER_SPEED_LIMIT("speed_limit"); |
| 10 | override val category: Settings.Category | ||
| 11 | ) : AbstractShortSetting { | ||
| 12 | RENDERER_SPEED_LIMIT("speed_limit", Settings.Category.Core); | ||
| 13 | 10 | ||
| 14 | override val short: Short | 11 | override fun getShort(needsGlobal: Boolean): Short = NativeConfig.getShort(key, needsGlobal) |
| 15 | get() = NativeConfig.getShort(key, false) | ||
| 16 | 12 | ||
| 17 | override fun setShort(value: Short) = NativeConfig.setShort(key, value) | 13 | override fun setShort(value: Short) { |
| 14 | if (NativeConfig.isPerGameConfigLoaded()) { | ||
| 15 | global = false | ||
| 16 | } | ||
| 17 | NativeConfig.setShort(key, value) | ||
| 18 | } | ||
| 18 | 19 | ||
| 19 | override val defaultValue: Short by lazy { NativeConfig.getShort(key, true) } | 20 | override val defaultValue: Short by lazy { NativeConfig.getDefaultToString(key).toShort() } |
| 20 | 21 | ||
| 21 | override val valueAsString: String | 22 | override fun getValueAsString(needsGlobal: Boolean): String = getShort(needsGlobal).toString() |
| 22 | get() = short.toString() | ||
| 23 | 23 | ||
| 24 | override fun reset() = NativeConfig.setShort(key, defaultValue) | 24 | override fun reset() = NativeConfig.setShort(key, defaultValue) |
| 25 | } | 25 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/StringSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/StringSetting.kt index 9bb3e66d4..a0d8cfede 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/StringSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/StringSetting.kt | |||
| @@ -5,22 +5,21 @@ package org.yuzu.yuzu_emu.features.settings.model | |||
| 5 | 5 | ||
| 6 | import org.yuzu.yuzu_emu.utils.NativeConfig | 6 | import org.yuzu.yuzu_emu.utils.NativeConfig |
| 7 | 7 | ||
| 8 | enum class StringSetting( | 8 | enum class StringSetting(override val key: String) : AbstractStringSetting { |
| 9 | override val key: String, | 9 | DRIVER_PATH("driver_path"); |
| 10 | override val category: Settings.Category | ||
| 11 | ) : AbstractStringSetting { | ||
| 12 | // No string settings currently exist | ||
| 13 | EMPTY_SETTING("", Settings.Category.UiGeneral); | ||
| 14 | 10 | ||
| 15 | override val string: String | 11 | override fun getString(needsGlobal: Boolean): String = NativeConfig.getString(key, needsGlobal) |
| 16 | get() = NativeConfig.getString(key, false) | ||
| 17 | 12 | ||
| 18 | override fun setString(value: String) = NativeConfig.setString(key, value) | 13 | override fun setString(value: String) { |
| 14 | if (NativeConfig.isPerGameConfigLoaded()) { | ||
| 15 | global = false | ||
| 16 | } | ||
| 17 | NativeConfig.setString(key, value) | ||
| 18 | } | ||
| 19 | 19 | ||
| 20 | override val defaultValue: String by lazy { NativeConfig.getString(key, true) } | 20 | override val defaultValue: String by lazy { NativeConfig.getDefaultToString(key) } |
| 21 | 21 | ||
| 22 | override val valueAsString: String | 22 | override fun getValueAsString(needsGlobal: Boolean): String = getString(needsGlobal) |
| 23 | get() = string | ||
| 24 | 23 | ||
| 25 | override fun reset() = NativeConfig.setString(key, defaultValue) | 24 | override fun reset() = NativeConfig.setString(key, defaultValue) |
| 26 | } | 25 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/DateTimeSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/DateTimeSetting.kt index 8bc164197..1d81f5f2b 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/DateTimeSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/DateTimeSetting.kt | |||
| @@ -12,7 +12,6 @@ class DateTimeSetting( | |||
| 12 | ) : SettingsItem(longSetting, titleId, descriptionId) { | 12 | ) : SettingsItem(longSetting, titleId, descriptionId) { |
| 13 | override val type = TYPE_DATETIME_SETTING | 13 | override val type = TYPE_DATETIME_SETTING |
| 14 | 14 | ||
| 15 | var value: Long | 15 | fun getValue(needsGlobal: Boolean = false): Long = longSetting.getLong(needsGlobal) |
| 16 | get() = longSetting.long | 16 | fun setValue(value: Long) = (setting as AbstractLongSetting).setLong(value) |
| 17 | set(value) = (setting as AbstractLongSetting).setLong(value) | ||
| 18 | } | 17 | } |
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 e198b18a0..384527294 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 | |||
| @@ -11,7 +11,6 @@ import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting | |||
| 11 | import org.yuzu.yuzu_emu.features.settings.model.ByteSetting | 11 | import org.yuzu.yuzu_emu.features.settings.model.ByteSetting |
| 12 | import org.yuzu.yuzu_emu.features.settings.model.IntSetting | 12 | import org.yuzu.yuzu_emu.features.settings.model.IntSetting |
| 13 | import org.yuzu.yuzu_emu.features.settings.model.LongSetting | 13 | import org.yuzu.yuzu_emu.features.settings.model.LongSetting |
| 14 | import org.yuzu.yuzu_emu.features.settings.model.Settings | ||
| 15 | import org.yuzu.yuzu_emu.features.settings.model.ShortSetting | 14 | import org.yuzu.yuzu_emu.features.settings.model.ShortSetting |
| 16 | 15 | ||
| 17 | /** | 16 | /** |
| @@ -48,8 +47,8 @@ abstract class SettingsItem( | |||
| 48 | 47 | ||
| 49 | val emptySetting = object : AbstractSetting { | 48 | val emptySetting = object : AbstractSetting { |
| 50 | override val key: String = "" | 49 | override val key: String = "" |
| 51 | override val category: Settings.Category = Settings.Category.Ui | ||
| 52 | override val defaultValue: Any = false | 50 | override val defaultValue: Any = false |
| 51 | override fun getValueAsString(needsGlobal: Boolean): String = "" | ||
| 53 | override fun reset() {} | 52 | override fun reset() {} |
| 54 | } | 53 | } |
| 55 | 54 | ||
| @@ -270,9 +269,9 @@ abstract class SettingsItem( | |||
| 270 | ) | 269 | ) |
| 271 | 270 | ||
| 272 | val fastmem = object : AbstractBooleanSetting { | 271 | val fastmem = object : AbstractBooleanSetting { |
| 273 | override val boolean: Boolean | 272 | override fun getBoolean(needsGlobal: Boolean): Boolean = |
| 274 | get() = | 273 | BooleanSetting.FASTMEM.getBoolean() && |
| 275 | BooleanSetting.FASTMEM.boolean && BooleanSetting.FASTMEM_EXCLUSIVES.boolean | 274 | BooleanSetting.FASTMEM_EXCLUSIVES.getBoolean() |
| 276 | 275 | ||
| 277 | override fun setBoolean(value: Boolean) { | 276 | override fun setBoolean(value: Boolean) { |
| 278 | BooleanSetting.FASTMEM.setBoolean(value) | 277 | BooleanSetting.FASTMEM.setBoolean(value) |
| @@ -280,9 +279,22 @@ abstract class SettingsItem( | |||
| 280 | } | 279 | } |
| 281 | 280 | ||
| 282 | override val key: String = FASTMEM_COMBINED | 281 | override val key: String = FASTMEM_COMBINED |
| 283 | override val category = Settings.Category.Cpu | ||
| 284 | override val isRuntimeModifiable: Boolean = false | 282 | override val isRuntimeModifiable: Boolean = false |
| 285 | override val defaultValue: Boolean = true | 283 | override val defaultValue: Boolean = true |
| 284 | override val isSwitchable: Boolean = true | ||
| 285 | override var global: Boolean | ||
| 286 | get() { | ||
| 287 | return BooleanSetting.FASTMEM.global && | ||
| 288 | BooleanSetting.FASTMEM_EXCLUSIVES.global | ||
| 289 | } | ||
| 290 | set(value) { | ||
| 291 | BooleanSetting.FASTMEM.global = value | ||
| 292 | BooleanSetting.FASTMEM_EXCLUSIVES.global = value | ||
| 293 | } | ||
| 294 | |||
| 295 | override fun getValueAsString(needsGlobal: Boolean): String = | ||
| 296 | getBoolean().toString() | ||
| 297 | |||
| 286 | override fun reset() = setBoolean(defaultValue) | 298 | override fun reset() = setBoolean(defaultValue) |
| 287 | } | 299 | } |
| 288 | put(SwitchSetting(fastmem, R.string.fastmem, 0)) | 300 | put(SwitchSetting(fastmem, R.string.fastmem, 0)) |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SingleChoiceSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SingleChoiceSetting.kt index 705527a73..97a5a9e59 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SingleChoiceSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SingleChoiceSetting.kt | |||
| @@ -15,16 +15,11 @@ class SingleChoiceSetting( | |||
| 15 | ) : SettingsItem(setting, titleId, descriptionId) { | 15 | ) : SettingsItem(setting, titleId, descriptionId) { |
| 16 | override val type = TYPE_SINGLE_CHOICE | 16 | override val type = TYPE_SINGLE_CHOICE |
| 17 | 17 | ||
| 18 | var selectedValue: Int | 18 | fun getSelectedValue(needsGlobal: Boolean = false) = |
| 19 | get() { | 19 | when (setting) { |
| 20 | return when (setting) { | 20 | is AbstractIntSetting -> setting.getInt(needsGlobal) |
| 21 | is AbstractIntSetting -> setting.int | 21 | else -> -1 |
| 22 | else -> -1 | ||
| 23 | } | ||
| 24 | } | ||
| 25 | set(value) { | ||
| 26 | when (setting) { | ||
| 27 | is AbstractIntSetting -> setting.setInt(value) | ||
| 28 | } | ||
| 29 | } | 22 | } |
| 23 | |||
| 24 | fun setSelectedValue(value: Int) = (setting as AbstractIntSetting).setInt(value) | ||
| 30 | } | 25 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SliderSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SliderSetting.kt index c3b5df02c..b9b709bf7 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SliderSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SliderSetting.kt | |||
| @@ -20,22 +20,20 @@ class SliderSetting( | |||
| 20 | ) : SettingsItem(setting, titleId, descriptionId) { | 20 | ) : SettingsItem(setting, titleId, descriptionId) { |
| 21 | override val type = TYPE_SLIDER | 21 | override val type = TYPE_SLIDER |
| 22 | 22 | ||
| 23 | var selectedValue: Int | 23 | fun getSelectedValue(needsGlobal: Boolean = false) = |
| 24 | get() { | 24 | when (setting) { |
| 25 | return when (setting) { | 25 | is AbstractByteSetting -> setting.getByte(needsGlobal).toInt() |
| 26 | is AbstractByteSetting -> setting.byte.toInt() | 26 | is AbstractShortSetting -> setting.getShort(needsGlobal).toInt() |
| 27 | is AbstractShortSetting -> setting.short.toInt() | 27 | is AbstractIntSetting -> setting.getInt(needsGlobal) |
| 28 | is AbstractIntSetting -> setting.int | 28 | is AbstractFloatSetting -> setting.getFloat(needsGlobal).roundToInt() |
| 29 | is AbstractFloatSetting -> setting.float.roundToInt() | 29 | else -> -1 |
| 30 | else -> -1 | ||
| 31 | } | ||
| 32 | } | 30 | } |
| 33 | set(value) { | 31 | |
| 34 | when (setting) { | 32 | fun setSelectedValue(value: Int) = |
| 35 | is AbstractByteSetting -> setting.setByte(value.toByte()) | 33 | when (setting) { |
| 36 | is AbstractShortSetting -> setting.setShort(value.toShort()) | 34 | is AbstractByteSetting -> setting.setByte(value.toByte()) |
| 37 | is AbstractIntSetting -> setting.setInt(value) | 35 | is AbstractShortSetting -> setting.setShort(value.toShort()) |
| 38 | is AbstractFloatSetting -> setting.setFloat(value.toFloat()) | 36 | is AbstractFloatSetting -> setting.setFloat(value.toFloat()) |
| 39 | } | 37 | else -> (setting as AbstractIntSetting).setInt(value) |
| 40 | } | 38 | } |
| 41 | } | 39 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/StringSingleChoiceSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/StringSingleChoiceSetting.kt index 871dab4f3..ba7920f50 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/StringSingleChoiceSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/StringSingleChoiceSetting.kt | |||
| @@ -17,14 +17,13 @@ class StringSingleChoiceSetting( | |||
| 17 | fun getValueAt(index: Int): String = | 17 | fun getValueAt(index: Int): String = |
| 18 | if (index >= 0 && index < values.size) values[index] else "" | 18 | if (index >= 0 && index < values.size) values[index] else "" |
| 19 | 19 | ||
| 20 | var selectedValue: String | 20 | fun getSelectedValue(needsGlobal: Boolean = false) = stringSetting.getString(needsGlobal) |
| 21 | get() = stringSetting.string | 21 | fun setSelectedValue(value: String) = stringSetting.setString(value) |
| 22 | set(value) = stringSetting.setString(value) | ||
| 23 | 22 | ||
| 24 | val selectValueIndex: Int | 23 | val selectValueIndex: Int |
| 25 | get() { | 24 | get() { |
| 26 | for (i in values.indices) { | 25 | for (i in values.indices) { |
| 27 | if (values[i] == selectedValue) { | 26 | if (values[i] == getSelectedValue()) { |
| 28 | return i | 27 | return i |
| 29 | } | 28 | } |
| 30 | } | 29 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SwitchSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SwitchSetting.kt index 416967e64..44d47dd69 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SwitchSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SwitchSetting.kt | |||
| @@ -14,18 +14,18 @@ class SwitchSetting( | |||
| 14 | ) : SettingsItem(setting, titleId, descriptionId) { | 14 | ) : SettingsItem(setting, titleId, descriptionId) { |
| 15 | override val type = TYPE_SWITCH | 15 | override val type = TYPE_SWITCH |
| 16 | 16 | ||
| 17 | var checked: Boolean | 17 | fun getIsChecked(needsGlobal: Boolean = false): Boolean { |
| 18 | get() { | 18 | return when (setting) { |
| 19 | return when (setting) { | 19 | is AbstractIntSetting -> setting.getInt(needsGlobal) == 1 |
| 20 | is AbstractIntSetting -> setting.int == 1 | 20 | is AbstractBooleanSetting -> setting.getBoolean(needsGlobal) |
| 21 | is AbstractBooleanSetting -> setting.boolean | 21 | else -> false |
| 22 | else -> false | ||
| 23 | } | ||
| 24 | } | 22 | } |
| 25 | set(value) { | 23 | } |
| 26 | when (setting) { | 24 | |
| 27 | is AbstractIntSetting -> setting.setInt(if (value) 1 else 0) | 25 | fun setChecked(value: Boolean) { |
| 28 | is AbstractBooleanSetting -> setting.setBoolean(value) | 26 | when (setting) { |
| 29 | } | 27 | is AbstractIntSetting -> setting.setInt(if (value) 1 else 0) |
| 28 | is AbstractBooleanSetting -> setting.setBoolean(value) | ||
| 30 | } | 29 | } |
| 30 | } | ||
| 31 | } | 31 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt index af2c1e582..3f23c064e 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt | |||
| @@ -102,8 +102,9 @@ class SettingsAdapter( | |||
| 102 | return currentList[position].type | 102 | return currentList[position].type |
| 103 | } | 103 | } |
| 104 | 104 | ||
| 105 | fun onBooleanClick(item: SwitchSetting, checked: Boolean) { | 105 | fun onBooleanClick(item: SwitchSetting, checked: Boolean, position: Int) { |
| 106 | item.checked = checked | 106 | item.setChecked(checked) |
| 107 | notifyItemChanged(position) | ||
| 107 | settingsViewModel.setShouldReloadSettingsList(true) | 108 | settingsViewModel.setShouldReloadSettingsList(true) |
| 108 | } | 109 | } |
| 109 | 110 | ||
| @@ -126,7 +127,7 @@ class SettingsAdapter( | |||
| 126 | } | 127 | } |
| 127 | 128 | ||
| 128 | fun onDateTimeClick(item: DateTimeSetting, position: Int) { | 129 | fun onDateTimeClick(item: DateTimeSetting, position: Int) { |
| 129 | val storedTime = item.value * 1000 | 130 | val storedTime = item.getValue() * 1000 |
| 130 | 131 | ||
| 131 | // Helper to extract hour and minute from epoch time | 132 | // Helper to extract hour and minute from epoch time |
| 132 | val calendar: Calendar = Calendar.getInstance() | 133 | val calendar: Calendar = Calendar.getInstance() |
| @@ -159,9 +160,9 @@ class SettingsAdapter( | |||
| 159 | var epochTime: Long = datePicker.selection!! / 1000 | 160 | var epochTime: Long = datePicker.selection!! / 1000 |
| 160 | epochTime += timePicker.hour.toLong() * 60 * 60 | 161 | epochTime += timePicker.hour.toLong() * 60 * 60 |
| 161 | epochTime += timePicker.minute.toLong() * 60 | 162 | epochTime += timePicker.minute.toLong() * 60 |
| 162 | if (item.value != epochTime) { | 163 | if (item.getValue() != epochTime) { |
| 163 | notifyItemChanged(position) | 164 | notifyItemChanged(position) |
| 164 | item.value = epochTime | 165 | item.setValue(epochTime) |
| 165 | } | 166 | } |
| 166 | } | 167 | } |
| 167 | datePicker.show( | 168 | datePicker.show( |
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 7425728c6..12a389b37 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 | |||
| @@ -36,7 +36,14 @@ class SettingsFragmentPresenter( | |||
| 36 | val item = SettingsItem.settingsItems[key]!! | 36 | val item = SettingsItem.settingsItems[key]!! |
| 37 | val pairedSettingKey = item.setting.pairedSettingKey | 37 | val pairedSettingKey = item.setting.pairedSettingKey |
| 38 | if (pairedSettingKey.isNotEmpty()) { | 38 | if (pairedSettingKey.isNotEmpty()) { |
| 39 | val pairedSettingValue = NativeConfig.getBoolean(pairedSettingKey, false) | 39 | val pairedSettingValue = NativeConfig.getBoolean( |
| 40 | pairedSettingKey, | ||
| 41 | if (NativeLibrary.isRunning() && !NativeConfig.isPerGameConfigLoaded()) { | ||
| 42 | !NativeConfig.usingGlobal(pairedSettingKey) | ||
| 43 | } else { | ||
| 44 | NativeConfig.usingGlobal(pairedSettingKey) | ||
| 45 | } | ||
| 46 | ) | ||
| 40 | if (!pairedSettingValue) return | 47 | if (!pairedSettingValue) return |
| 41 | } | 48 | } |
| 42 | add(item) | 49 | add(item) |
| @@ -153,8 +160,8 @@ class SettingsFragmentPresenter( | |||
| 153 | private fun addThemeSettings(sl: ArrayList<SettingsItem>) { | 160 | private fun addThemeSettings(sl: ArrayList<SettingsItem>) { |
| 154 | sl.apply { | 161 | sl.apply { |
| 155 | val theme: AbstractIntSetting = object : AbstractIntSetting { | 162 | val theme: AbstractIntSetting = object : AbstractIntSetting { |
| 156 | override val int: Int | 163 | override fun getInt(needsGlobal: Boolean): Int = |
| 157 | get() = preferences.getInt(Settings.PREF_THEME, 0) | 164 | preferences.getInt(Settings.PREF_THEME, 0) |
| 158 | 165 | ||
| 159 | override fun setInt(value: Int) { | 166 | override fun setInt(value: Int) { |
| 160 | preferences.edit() | 167 | preferences.edit() |
| @@ -164,8 +171,8 @@ class SettingsFragmentPresenter( | |||
| 164 | } | 171 | } |
| 165 | 172 | ||
| 166 | override val key: String = Settings.PREF_THEME | 173 | override val key: String = Settings.PREF_THEME |
| 167 | override val category = Settings.Category.UiGeneral | ||
| 168 | override val isRuntimeModifiable: Boolean = false | 174 | override val isRuntimeModifiable: Boolean = false |
| 175 | override fun getValueAsString(needsGlobal: Boolean): String = getInt().toString() | ||
| 169 | override val defaultValue: Int = 0 | 176 | override val defaultValue: Int = 0 |
| 170 | override fun reset() { | 177 | override fun reset() { |
| 171 | preferences.edit() | 178 | preferences.edit() |
| @@ -197,8 +204,8 @@ class SettingsFragmentPresenter( | |||
| 197 | } | 204 | } |
| 198 | 205 | ||
| 199 | val themeMode: AbstractIntSetting = object : AbstractIntSetting { | 206 | val themeMode: AbstractIntSetting = object : AbstractIntSetting { |
| 200 | override val int: Int | 207 | override fun getInt(needsGlobal: Boolean): Int = |
| 201 | get() = preferences.getInt(Settings.PREF_THEME_MODE, -1) | 208 | preferences.getInt(Settings.PREF_THEME_MODE, -1) |
| 202 | 209 | ||
| 203 | override fun setInt(value: Int) { | 210 | override fun setInt(value: Int) { |
| 204 | preferences.edit() | 211 | preferences.edit() |
| @@ -208,8 +215,8 @@ class SettingsFragmentPresenter( | |||
| 208 | } | 215 | } |
| 209 | 216 | ||
| 210 | override val key: String = Settings.PREF_THEME_MODE | 217 | override val key: String = Settings.PREF_THEME_MODE |
| 211 | override val category = Settings.Category.UiGeneral | ||
| 212 | override val isRuntimeModifiable: Boolean = false | 218 | override val isRuntimeModifiable: Boolean = false |
| 219 | override fun getValueAsString(needsGlobal: Boolean): String = getInt().toString() | ||
| 213 | override val defaultValue: Int = -1 | 220 | override val defaultValue: Int = -1 |
| 214 | override fun reset() { | 221 | override fun reset() { |
| 215 | preferences.edit() | 222 | preferences.edit() |
| @@ -230,8 +237,8 @@ class SettingsFragmentPresenter( | |||
| 230 | ) | 237 | ) |
| 231 | 238 | ||
| 232 | val blackBackgrounds: AbstractBooleanSetting = object : AbstractBooleanSetting { | 239 | val blackBackgrounds: AbstractBooleanSetting = object : AbstractBooleanSetting { |
| 233 | override val boolean: Boolean | 240 | override fun getBoolean(needsGlobal: Boolean): Boolean = |
| 234 | get() = preferences.getBoolean(Settings.PREF_BLACK_BACKGROUNDS, false) | 241 | preferences.getBoolean(Settings.PREF_BLACK_BACKGROUNDS, false) |
| 235 | 242 | ||
| 236 | override fun setBoolean(value: Boolean) { | 243 | override fun setBoolean(value: Boolean) { |
| 237 | preferences.edit() | 244 | preferences.edit() |
| @@ -241,8 +248,10 @@ class SettingsFragmentPresenter( | |||
| 241 | } | 248 | } |
| 242 | 249 | ||
| 243 | override val key: String = Settings.PREF_BLACK_BACKGROUNDS | 250 | override val key: String = Settings.PREF_BLACK_BACKGROUNDS |
| 244 | override val category = Settings.Category.UiGeneral | ||
| 245 | override val isRuntimeModifiable: Boolean = false | 251 | override val isRuntimeModifiable: Boolean = false |
| 252 | override fun getValueAsString(needsGlobal: Boolean): String = | ||
| 253 | getBoolean().toString() | ||
| 254 | |||
| 246 | override val defaultValue: Boolean = false | 255 | override val defaultValue: Boolean = false |
| 247 | override fun reset() { | 256 | override fun reset() { |
| 248 | preferences.edit() | 257 | preferences.edit() |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/DateTimeViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/DateTimeViewHolder.kt index 525f013f8..4e159a799 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/DateTimeViewHolder.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/DateTimeViewHolder.kt | |||
| @@ -29,7 +29,7 @@ class DateTimeViewHolder(val binding: ListItemSettingBinding, adapter: SettingsA | |||
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | binding.textSettingValue.visibility = View.VISIBLE | 31 | binding.textSettingValue.visibility = View.VISIBLE |
| 32 | val epochTime = setting.value | 32 | val epochTime = setting.getValue() |
| 33 | val instant = Instant.ofEpochMilli(epochTime * 1000) | 33 | val instant = Instant.ofEpochMilli(epochTime * 1000) |
| 34 | val zonedTime = ZonedDateTime.ofInstant(instant, ZoneId.of("UTC")) | 34 | val zonedTime = ZonedDateTime.ofInstant(instant, ZoneId.of("UTC")) |
| 35 | val dateFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM) | 35 | val dateFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM) |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SingleChoiceViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SingleChoiceViewHolder.kt index 80d1b22c1..28c4d1777 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SingleChoiceViewHolder.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SingleChoiceViewHolder.kt | |||
| @@ -29,14 +29,14 @@ class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: Setti | |||
| 29 | val resMgr = binding.textSettingValue.context.resources | 29 | val resMgr = binding.textSettingValue.context.resources |
| 30 | val values = resMgr.getIntArray(item.valuesId) | 30 | val values = resMgr.getIntArray(item.valuesId) |
| 31 | for (i in values.indices) { | 31 | for (i in values.indices) { |
| 32 | if (values[i] == item.selectedValue) { | 32 | if (values[i] == item.getSelectedValue()) { |
| 33 | binding.textSettingValue.text = resMgr.getStringArray(item.choicesId)[i] | 33 | binding.textSettingValue.text = resMgr.getStringArray(item.choicesId)[i] |
| 34 | break | 34 | break |
| 35 | } | 35 | } |
| 36 | } | 36 | } |
| 37 | } else if (item is StringSingleChoiceSetting) { | 37 | } else if (item is StringSingleChoiceSetting) { |
| 38 | for (i in item.values.indices) { | 38 | for (i in item.values.indices) { |
| 39 | if (item.values[i] == item.selectedValue) { | 39 | if (item.values[i] == item.getSelectedValue()) { |
| 40 | binding.textSettingValue.text = item.choices[i] | 40 | binding.textSettingValue.text = item.choices[i] |
| 41 | break | 41 | break |
| 42 | } | 42 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SliderViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SliderViewHolder.kt index b83c90100..67432f88e 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SliderViewHolder.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SliderViewHolder.kt | |||
| @@ -26,7 +26,7 @@ class SliderViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAda | |||
| 26 | binding.textSettingValue.visibility = View.VISIBLE | 26 | binding.textSettingValue.visibility = View.VISIBLE |
| 27 | binding.textSettingValue.text = String.format( | 27 | binding.textSettingValue.text = String.format( |
| 28 | binding.textSettingValue.context.getString(R.string.value_with_units), | 28 | binding.textSettingValue.context.getString(R.string.value_with_units), |
| 29 | setting.selectedValue, | 29 | setting.getSelectedValue(), |
| 30 | setting.units | 30 | setting.units |
| 31 | ) | 31 | ) |
| 32 | 32 | ||
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt index 57fdeaa20..98ed888cb 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt | |||
| @@ -27,7 +27,7 @@ class SwitchSettingViewHolder(val binding: ListItemSettingSwitchBinding, adapter | |||
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | binding.switchWidget.setOnCheckedChangeListener(null) | 29 | binding.switchWidget.setOnCheckedChangeListener(null) |
| 30 | binding.switchWidget.isChecked = setting.checked | 30 | binding.switchWidget.isChecked = setting.getIsChecked(setting.needsRuntimeGlobal) |
| 31 | binding.switchWidget.setOnCheckedChangeListener { _: CompoundButton, _: Boolean -> | 31 | binding.switchWidget.setOnCheckedChangeListener { _: CompoundButton, _: Boolean -> |
| 32 | adapter.onBooleanClick(item, binding.switchWidget.isChecked) | 32 | adapter.onBooleanClick(item, binding.switchWidget.isChecked) |
| 33 | } | 33 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt index 734c1d5ca..b09df7db3 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt | |||
| @@ -435,7 +435,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||
| 435 | @SuppressLint("SourceLockedOrientationActivity") | 435 | @SuppressLint("SourceLockedOrientationActivity") |
| 436 | private fun updateOrientation() { | 436 | private fun updateOrientation() { |
| 437 | emulationActivity?.let { | 437 | emulationActivity?.let { |
| 438 | it.requestedOrientation = when (IntSetting.RENDERER_SCREEN_LAYOUT.int) { | 438 | it.requestedOrientation = when (IntSetting.RENDERER_SCREEN_LAYOUT.getInt()) { |
| 439 | Settings.LayoutOption_MobileLandscape -> | 439 | Settings.LayoutOption_MobileLandscape -> |
| 440 | ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE | 440 | ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE |
| 441 | Settings.LayoutOption_MobilePortrait -> | 441 | Settings.LayoutOption_MobilePortrait -> |
| @@ -617,7 +617,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||
| 617 | @SuppressLint("SourceLockedOrientationActivity") | 617 | @SuppressLint("SourceLockedOrientationActivity") |
| 618 | private fun startConfiguringControls() { | 618 | private fun startConfiguringControls() { |
| 619 | // Lock the current orientation to prevent editing inconsistencies | 619 | // Lock the current orientation to prevent editing inconsistencies |
| 620 | if (IntSetting.RENDERER_SCREEN_LAYOUT.int == Settings.LayoutOption_Unspecified) { | 620 | if (IntSetting.RENDERER_SCREEN_LAYOUT.getInt() == Settings.LayoutOption_Unspecified) { |
| 621 | emulationActivity?.let { | 621 | emulationActivity?.let { |
| 622 | it.requestedOrientation = | 622 | it.requestedOrientation = |
| 623 | if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) { | 623 | if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) { |
| @@ -635,7 +635,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||
| 635 | binding.doneControlConfig.visibility = View.GONE | 635 | binding.doneControlConfig.visibility = View.GONE |
| 636 | binding.surfaceInputOverlay.setIsInEditMode(false) | 636 | binding.surfaceInputOverlay.setIsInEditMode(false) |
| 637 | // Unlock the orientation if it was locked for editing | 637 | // Unlock the orientation if it was locked for editing |
| 638 | if (IntSetting.RENDERER_SCREEN_LAYOUT.int == Settings.LayoutOption_Unspecified) { | 638 | if (IntSetting.RENDERER_SCREEN_LAYOUT.getInt() == Settings.LayoutOption_Unspecified) { |
| 639 | emulationActivity?.let { | 639 | emulationActivity?.let { |
| 640 | it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED | 640 | it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED |
| 641 | } | 641 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SettingsDialogFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SettingsDialogFragment.kt index b88d2c038..60e029f34 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SettingsDialogFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SettingsDialogFragment.kt | |||
| @@ -70,7 +70,7 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener | |||
| 70 | sliderBinding = DialogSliderBinding.inflate(layoutInflater) | 70 | sliderBinding = DialogSliderBinding.inflate(layoutInflater) |
| 71 | val item = settingsViewModel.clickedItem as SliderSetting | 71 | val item = settingsViewModel.clickedItem as SliderSetting |
| 72 | 72 | ||
| 73 | settingsViewModel.setSliderTextValue(item.selectedValue.toFloat(), item.units) | 73 | settingsViewModel.setSliderTextValue(item.getSelectedValue().toFloat(), item.units) |
| 74 | sliderBinding.slider.apply { | 74 | sliderBinding.slider.apply { |
| 75 | valueFrom = item.min.toFloat() | 75 | valueFrom = item.min.toFloat() |
| 76 | valueTo = item.max.toFloat() | 76 | valueTo = item.max.toFloat() |
| @@ -136,18 +136,18 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener | |||
| 136 | is SingleChoiceSetting -> { | 136 | is SingleChoiceSetting -> { |
| 137 | val scSetting = settingsViewModel.clickedItem as SingleChoiceSetting | 137 | val scSetting = settingsViewModel.clickedItem as SingleChoiceSetting |
| 138 | val value = getValueForSingleChoiceSelection(scSetting, which) | 138 | val value = getValueForSingleChoiceSelection(scSetting, which) |
| 139 | scSetting.selectedValue = value | 139 | scSetting.setSelectedValue(value) |
| 140 | } | 140 | } |
| 141 | 141 | ||
| 142 | is StringSingleChoiceSetting -> { | 142 | is StringSingleChoiceSetting -> { |
| 143 | val scSetting = settingsViewModel.clickedItem as StringSingleChoiceSetting | 143 | val scSetting = settingsViewModel.clickedItem as StringSingleChoiceSetting |
| 144 | val value = scSetting.getValueAt(which) | 144 | val value = scSetting.getValueAt(which) |
| 145 | scSetting.selectedValue = value | 145 | scSetting.setSelectedValue(value) |
| 146 | } | 146 | } |
| 147 | 147 | ||
| 148 | is SliderSetting -> { | 148 | is SliderSetting -> { |
| 149 | val sliderSetting = settingsViewModel.clickedItem as SliderSetting | 149 | val sliderSetting = settingsViewModel.clickedItem as SliderSetting |
| 150 | sliderSetting.selectedValue = settingsViewModel.sliderProgress.value | 150 | sliderSetting.setSelectedValue(settingsViewModel.sliderProgress.value) |
| 151 | } | 151 | } |
| 152 | } | 152 | } |
| 153 | closeDialog() | 153 | closeDialog() |
| @@ -171,7 +171,7 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener | |||
| 171 | } | 171 | } |
| 172 | 172 | ||
| 173 | private fun getSelectionForSingleChoiceValue(item: SingleChoiceSetting): Int { | 173 | private fun getSelectionForSingleChoiceValue(item: SingleChoiceSetting): Int { |
| 174 | val value = item.selectedValue | 174 | val value = item.getSelectedValue() |
| 175 | val valuesId = item.valuesId | 175 | val valuesId = item.valuesId |
| 176 | if (valuesId > 0) { | 176 | if (valuesId > 0) { |
| 177 | val valuesArray = requireContext().resources.getIntArray(valuesId) | 177 | val valuesArray = requireContext().resources.getIntArray(valuesId) |
| @@ -211,7 +211,7 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener | |||
| 211 | throw IllegalArgumentException("[SettingsDialogFragment] Incompatible type!") | 211 | throw IllegalArgumentException("[SettingsDialogFragment] Incompatible type!") |
| 212 | 212 | ||
| 213 | SettingsItem.TYPE_SLIDER -> settingsViewModel.setSliderProgress( | 213 | SettingsItem.TYPE_SLIDER -> settingsViewModel.setSliderProgress( |
| 214 | (clickedItem as SliderSetting).selectedValue.toFloat() | 214 | (clickedItem as SliderSetting).getSelectedValue().toFloat() |
| 215 | ) | 215 | ) |
| 216 | } | 216 | } |
| 217 | settingsViewModel.clickedItem = clickedItem | 217 | settingsViewModel.clickedItem = clickedItem |
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 f4e1bb13f..4c7316ba3 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 | |||
| @@ -31,32 +31,63 @@ object NativeConfig { | |||
| 31 | external fun saveSettings() | 31 | external fun saveSettings() |
| 32 | 32 | ||
| 33 | external fun getBoolean(key: String, getDefault: Boolean): Boolean | 33 | external fun getBoolean(key: String, getDefault: Boolean): Boolean |
| 34 | |||
| 35 | @Synchronized | ||
| 36 | external fun getBoolean(key: String, needsGlobal: Boolean): Boolean | ||
| 37 | |||
| 38 | @Synchronized | ||
| 34 | external fun setBoolean(key: String, value: Boolean) | 39 | external fun setBoolean(key: String, value: Boolean) |
| 35 | 40 | ||
| 36 | external fun getByte(key: String, getDefault: Boolean): Byte | 41 | @Synchronized |
| 42 | external fun getByte(key: String, needsGlobal: Boolean): Byte | ||
| 43 | |||
| 44 | @Synchronized | ||
| 37 | external fun setByte(key: String, value: Byte) | 45 | external fun setByte(key: String, value: Byte) |
| 38 | 46 | ||
| 39 | external fun getShort(key: String, getDefault: Boolean): Short | 47 | @Synchronized |
| 48 | external fun getShort(key: String, needsGlobal: Boolean): Short | ||
| 49 | |||
| 50 | @Synchronized | ||
| 40 | external fun setShort(key: String, value: Short) | 51 | external fun setShort(key: String, value: Short) |
| 41 | 52 | ||
| 42 | external fun getInt(key: String, getDefault: Boolean): Int | 53 | @Synchronized |
| 54 | external fun getInt(key: String, needsGlobal: Boolean): Int | ||
| 55 | |||
| 56 | @Synchronized | ||
| 43 | external fun setInt(key: String, value: Int) | 57 | external fun setInt(key: String, value: Int) |
| 44 | 58 | ||
| 45 | external fun getFloat(key: String, getDefault: Boolean): Float | 59 | @Synchronized |
| 60 | external fun getFloat(key: String, needsGlobal: Boolean): Float | ||
| 61 | |||
| 62 | @Synchronized | ||
| 46 | external fun setFloat(key: String, value: Float) | 63 | external fun setFloat(key: String, value: Float) |
| 47 | 64 | ||
| 48 | external fun getLong(key: String, getDefault: Boolean): Long | 65 | @Synchronized |
| 66 | external fun getLong(key: String, needsGlobal: Boolean): Long | ||
| 67 | |||
| 68 | @Synchronized | ||
| 49 | external fun setLong(key: String, value: Long) | 69 | external fun setLong(key: String, value: Long) |
| 50 | 70 | ||
| 51 | external fun getString(key: String, getDefault: Boolean): String | 71 | @Synchronized |
| 72 | external fun getString(key: String, needsGlobal: Boolean): String | ||
| 73 | |||
| 74 | @Synchronized | ||
| 52 | external fun setString(key: String, value: String) | 75 | external fun setString(key: String, value: String) |
| 53 | 76 | ||
| 54 | external fun getIsRuntimeModifiable(key: String): Boolean | 77 | external fun getIsRuntimeModifiable(key: String): Boolean |
| 55 | 78 | ||
| 56 | external fun getConfigHeader(category: Int): String | ||
| 57 | |||
| 58 | external fun getPairedSettingKey(key: String): String | 79 | external fun getPairedSettingKey(key: String): String |
| 59 | 80 | ||
| 81 | external fun getIsSwitchable(key: String): Boolean | ||
| 82 | |||
| 83 | @Synchronized | ||
| 84 | external fun usingGlobal(key: String): Boolean | ||
| 85 | |||
| 86 | @Synchronized | ||
| 87 | external fun setGlobal(key: String, global: Boolean) | ||
| 88 | |||
| 89 | external fun getDefaultToString(key: String): String | ||
| 90 | |||
| 60 | /** | 91 | /** |
| 61 | * Gets every [GameDir] in AndroidSettings::values.game_dirs | 92 | * Gets every [GameDir] in AndroidSettings::values.game_dirs |
| 62 | */ | 93 | */ |
diff --git a/src/android/app/src/main/jni/native_config.cpp b/src/android/app/src/main/jni/native_config.cpp index 763b2164c..9439d11e1 100644 --- a/src/android/app/src/main/jni/native_config.cpp +++ b/src/android/app/src/main/jni/native_config.cpp | |||
| @@ -49,18 +49,12 @@ void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_saveSettings(JNIEnv* env, jobjec | |||
| 49 | } | 49 | } |
| 50 | 50 | ||
| 51 | jboolean Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getBoolean(JNIEnv* env, jobject obj, | 51 | jboolean Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getBoolean(JNIEnv* env, jobject obj, |
| 52 | jstring jkey, jboolean getDefault) { | 52 | jstring jkey, jboolean needGlobal) { |
| 53 | auto setting = getSetting<bool>(env, jkey); | 53 | auto setting = getSetting<bool>(env, jkey); |
| 54 | if (setting == nullptr) { | 54 | if (setting == nullptr) { |
| 55 | return false; | 55 | return false; |
| 56 | } | 56 | } |
| 57 | setting->SetGlobal(true); | 57 | return setting->GetValue(static_cast<bool>(needGlobal)); |
| 58 | |||
| 59 | if (static_cast<bool>(getDefault)) { | ||
| 60 | return setting->GetDefault(); | ||
| 61 | } | ||
| 62 | |||
| 63 | return setting->GetValue(); | ||
| 64 | } | 58 | } |
| 65 | 59 | ||
| 66 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setBoolean(JNIEnv* env, jobject obj, jstring jkey, | 60 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setBoolean(JNIEnv* env, jobject obj, jstring jkey, |
| @@ -69,23 +63,16 @@ void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setBoolean(JNIEnv* env, jobject | |||
| 69 | if (setting == nullptr) { | 63 | if (setting == nullptr) { |
| 70 | return; | 64 | return; |
| 71 | } | 65 | } |
| 72 | setting->SetGlobal(true); | ||
| 73 | setting->SetValue(static_cast<bool>(value)); | 66 | setting->SetValue(static_cast<bool>(value)); |
| 74 | } | 67 | } |
| 75 | 68 | ||
| 76 | jbyte Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getByte(JNIEnv* env, jobject obj, jstring jkey, | 69 | jbyte Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getByte(JNIEnv* env, jobject obj, jstring jkey, |
| 77 | jboolean getDefault) { | 70 | jboolean needGlobal) { |
| 78 | auto setting = getSetting<u8>(env, jkey); | 71 | auto setting = getSetting<u8>(env, jkey); |
| 79 | if (setting == nullptr) { | 72 | if (setting == nullptr) { |
| 80 | return -1; | 73 | return -1; |
| 81 | } | 74 | } |
| 82 | setting->SetGlobal(true); | 75 | return setting->GetValue(static_cast<bool>(needGlobal)); |
| 83 | |||
| 84 | if (static_cast<bool>(getDefault)) { | ||
| 85 | return setting->GetDefault(); | ||
| 86 | } | ||
| 87 | |||
| 88 | return setting->GetValue(); | ||
| 89 | } | 76 | } |
| 90 | 77 | ||
| 91 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setByte(JNIEnv* env, jobject obj, jstring jkey, | 78 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setByte(JNIEnv* env, jobject obj, jstring jkey, |
| @@ -94,23 +81,16 @@ void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setByte(JNIEnv* env, jobject obj | |||
| 94 | if (setting == nullptr) { | 81 | if (setting == nullptr) { |
| 95 | return; | 82 | return; |
| 96 | } | 83 | } |
| 97 | setting->SetGlobal(true); | ||
| 98 | setting->SetValue(value); | 84 | setting->SetValue(value); |
| 99 | } | 85 | } |
| 100 | 86 | ||
| 101 | jshort Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getShort(JNIEnv* env, jobject obj, jstring jkey, | 87 | jshort Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getShort(JNIEnv* env, jobject obj, jstring jkey, |
| 102 | jboolean getDefault) { | 88 | jboolean needGlobal) { |
| 103 | auto setting = getSetting<u16>(env, jkey); | 89 | auto setting = getSetting<u16>(env, jkey); |
| 104 | if (setting == nullptr) { | 90 | if (setting == nullptr) { |
| 105 | return -1; | 91 | return -1; |
| 106 | } | 92 | } |
| 107 | setting->SetGlobal(true); | 93 | return setting->GetValue(static_cast<bool>(needGlobal)); |
| 108 | |||
| 109 | if (static_cast<bool>(getDefault)) { | ||
| 110 | return setting->GetDefault(); | ||
| 111 | } | ||
| 112 | |||
| 113 | return setting->GetValue(); | ||
| 114 | } | 94 | } |
| 115 | 95 | ||
| 116 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setShort(JNIEnv* env, jobject obj, jstring jkey, | 96 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setShort(JNIEnv* env, jobject obj, jstring jkey, |
| @@ -119,23 +99,16 @@ void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setShort(JNIEnv* env, jobject ob | |||
| 119 | if (setting == nullptr) { | 99 | if (setting == nullptr) { |
| 120 | return; | 100 | return; |
| 121 | } | 101 | } |
| 122 | setting->SetGlobal(true); | ||
| 123 | setting->SetValue(value); | 102 | setting->SetValue(value); |
| 124 | } | 103 | } |
| 125 | 104 | ||
| 126 | jint Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getInt(JNIEnv* env, jobject obj, jstring jkey, | 105 | jint Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getInt(JNIEnv* env, jobject obj, jstring jkey, |
| 127 | jboolean getDefault) { | 106 | jboolean needGlobal) { |
| 128 | auto setting = getSetting<int>(env, jkey); | 107 | auto setting = getSetting<int>(env, jkey); |
| 129 | if (setting == nullptr) { | 108 | if (setting == nullptr) { |
| 130 | return -1; | 109 | return -1; |
| 131 | } | 110 | } |
| 132 | setting->SetGlobal(true); | 111 | return setting->GetValue(needGlobal); |
| 133 | |||
| 134 | if (static_cast<bool>(getDefault)) { | ||
| 135 | return setting->GetDefault(); | ||
| 136 | } | ||
| 137 | |||
| 138 | return setting->GetValue(); | ||
| 139 | } | 112 | } |
| 140 | 113 | ||
| 141 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setInt(JNIEnv* env, jobject obj, jstring jkey, | 114 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setInt(JNIEnv* env, jobject obj, jstring jkey, |
| @@ -144,23 +117,16 @@ void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setInt(JNIEnv* env, jobject obj, | |||
| 144 | if (setting == nullptr) { | 117 | if (setting == nullptr) { |
| 145 | return; | 118 | return; |
| 146 | } | 119 | } |
| 147 | setting->SetGlobal(true); | ||
| 148 | setting->SetValue(value); | 120 | setting->SetValue(value); |
| 149 | } | 121 | } |
| 150 | 122 | ||
| 151 | jfloat Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getFloat(JNIEnv* env, jobject obj, jstring jkey, | 123 | jfloat Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getFloat(JNIEnv* env, jobject obj, jstring jkey, |
| 152 | jboolean getDefault) { | 124 | jboolean needGlobal) { |
| 153 | auto setting = getSetting<float>(env, jkey); | 125 | auto setting = getSetting<float>(env, jkey); |
| 154 | if (setting == nullptr) { | 126 | if (setting == nullptr) { |
| 155 | return -1; | 127 | return -1; |
| 156 | } | 128 | } |
| 157 | setting->SetGlobal(true); | 129 | return setting->GetValue(static_cast<bool>(needGlobal)); |
| 158 | |||
| 159 | if (static_cast<bool>(getDefault)) { | ||
| 160 | return setting->GetDefault(); | ||
| 161 | } | ||
| 162 | |||
| 163 | return setting->GetValue(); | ||
| 164 | } | 130 | } |
| 165 | 131 | ||
| 166 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setFloat(JNIEnv* env, jobject obj, jstring jkey, | 132 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setFloat(JNIEnv* env, jobject obj, jstring jkey, |
| @@ -169,23 +135,16 @@ void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setFloat(JNIEnv* env, jobject ob | |||
| 169 | if (setting == nullptr) { | 135 | if (setting == nullptr) { |
| 170 | return; | 136 | return; |
| 171 | } | 137 | } |
| 172 | setting->SetGlobal(true); | ||
| 173 | setting->SetValue(value); | 138 | setting->SetValue(value); |
| 174 | } | 139 | } |
| 175 | 140 | ||
| 176 | jlong Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getLong(JNIEnv* env, jobject obj, jstring jkey, | 141 | jlong Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getLong(JNIEnv* env, jobject obj, jstring jkey, |
| 177 | jboolean getDefault) { | 142 | jboolean needGlobal) { |
| 178 | auto setting = getSetting<long>(env, jkey); | 143 | auto setting = getSetting<s64>(env, jkey); |
| 179 | if (setting == nullptr) { | 144 | if (setting == nullptr) { |
| 180 | return -1; | 145 | return -1; |
| 181 | } | 146 | } |
| 182 | setting->SetGlobal(true); | 147 | return setting->GetValue(static_cast<bool>(needGlobal)); |
| 183 | |||
| 184 | if (static_cast<bool>(getDefault)) { | ||
| 185 | return setting->GetDefault(); | ||
| 186 | } | ||
| 187 | |||
| 188 | return setting->GetValue(); | ||
| 189 | } | 148 | } |
| 190 | 149 | ||
| 191 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setLong(JNIEnv* env, jobject obj, jstring jkey, | 150 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setLong(JNIEnv* env, jobject obj, jstring jkey, |
| @@ -194,23 +153,16 @@ void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setLong(JNIEnv* env, jobject obj | |||
| 194 | if (setting == nullptr) { | 153 | if (setting == nullptr) { |
| 195 | return; | 154 | return; |
| 196 | } | 155 | } |
| 197 | setting->SetGlobal(true); | ||
| 198 | setting->SetValue(value); | 156 | setting->SetValue(value); |
| 199 | } | 157 | } |
| 200 | 158 | ||
| 201 | jstring Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getString(JNIEnv* env, jobject obj, jstring jkey, | 159 | jstring Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getString(JNIEnv* env, jobject obj, jstring jkey, |
| 202 | jboolean getDefault) { | 160 | jboolean needGlobal) { |
| 203 | auto setting = getSetting<std::string>(env, jkey); | 161 | auto setting = getSetting<std::string>(env, jkey); |
| 204 | if (setting == nullptr) { | 162 | if (setting == nullptr) { |
| 205 | return ToJString(env, ""); | 163 | return ToJString(env, ""); |
| 206 | } | 164 | } |
| 207 | setting->SetGlobal(true); | 165 | return ToJString(env, setting->GetValue(static_cast<bool>(needGlobal))); |
| 208 | |||
| 209 | if (static_cast<bool>(getDefault)) { | ||
| 210 | return ToJString(env, setting->GetDefault()); | ||
| 211 | } | ||
| 212 | |||
| 213 | return ToJString(env, setting->GetValue()); | ||
| 214 | } | 166 | } |
| 215 | 167 | ||
| 216 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setString(JNIEnv* env, jobject obj, jstring jkey, | 168 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setString(JNIEnv* env, jobject obj, jstring jkey, |
| @@ -220,27 +172,18 @@ void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setString(JNIEnv* env, jobject o | |||
| 220 | return; | 172 | return; |
| 221 | } | 173 | } |
| 222 | 174 | ||
| 223 | setting->SetGlobal(true); | ||
| 224 | setting->SetValue(GetJString(env, value)); | 175 | setting->SetValue(GetJString(env, value)); |
| 225 | } | 176 | } |
| 226 | 177 | ||
| 227 | jboolean Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getIsRuntimeModifiable(JNIEnv* env, jobject obj, | 178 | jboolean Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getIsRuntimeModifiable(JNIEnv* env, jobject obj, |
| 228 | jstring jkey) { | 179 | jstring jkey) { |
| 229 | auto key = GetJString(env, jkey); | 180 | auto setting = getSetting<std::string>(env, jkey); |
| 230 | auto setting = Settings::values.linkage.by_key[key]; | 181 | if (setting != nullptr) { |
| 231 | if (setting != 0) { | ||
| 232 | return setting->RuntimeModfiable(); | 182 | return setting->RuntimeModfiable(); |
| 233 | } | 183 | } |
| 234 | LOG_ERROR(Frontend, "[Android Native] Could not find setting - {}", key); | ||
| 235 | return true; | 184 | return true; |
| 236 | } | 185 | } |
| 237 | 186 | ||
| 238 | jstring Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getConfigHeader(JNIEnv* env, jobject obj, | ||
| 239 | jint jcategory) { | ||
| 240 | auto category = static_cast<Settings::Category>(jcategory); | ||
| 241 | return ToJString(env, Settings::TranslateCategory(category)); | ||
| 242 | } | ||
| 243 | |||
| 244 | jstring Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getPairedSettingKey(JNIEnv* env, jobject obj, | 187 | jstring Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getPairedSettingKey(JNIEnv* env, jobject obj, |
| 245 | jstring jkey) { | 188 | jstring jkey) { |
| 246 | auto setting = getSetting<std::string>(env, jkey); | 189 | auto setting = getSetting<std::string>(env, jkey); |
| @@ -254,6 +197,41 @@ jstring Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getPairedSettingKey(JNIEnv* e | |||
| 254 | return ToJString(env, setting->PairedSetting()->GetLabel()); | 197 | return ToJString(env, setting->PairedSetting()->GetLabel()); |
| 255 | } | 198 | } |
| 256 | 199 | ||
| 200 | jboolean Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getIsSwitchable(JNIEnv* env, jobject obj, | ||
| 201 | jstring jkey) { | ||
| 202 | auto setting = getSetting<std::string>(env, jkey); | ||
| 203 | if (setting != nullptr) { | ||
| 204 | return setting->Switchable(); | ||
| 205 | } | ||
| 206 | return false; | ||
| 207 | } | ||
| 208 | |||
| 209 | jboolean Java_org_yuzu_yuzu_1emu_utils_NativeConfig_usingGlobal(JNIEnv* env, jobject obj, | ||
| 210 | jstring jkey) { | ||
| 211 | auto setting = getSetting<std::string>(env, jkey); | ||
| 212 | if (setting != nullptr) { | ||
| 213 | return setting->UsingGlobal(); | ||
| 214 | } | ||
| 215 | return true; | ||
| 216 | } | ||
| 217 | |||
| 218 | void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setGlobal(JNIEnv* env, jobject obj, jstring jkey, | ||
| 219 | jboolean global) { | ||
| 220 | auto setting = getSetting<std::string>(env, jkey); | ||
| 221 | if (setting != nullptr) { | ||
| 222 | setting->SetGlobal(static_cast<bool>(global)); | ||
| 223 | } | ||
| 224 | } | ||
| 225 | |||
| 226 | jstring Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getDefaultToString(JNIEnv* env, jobject obj, | ||
| 227 | jstring jkey) { | ||
| 228 | auto setting = getSetting<std::string>(env, jkey); | ||
| 229 | if (setting != nullptr) { | ||
| 230 | return ToJString(env, setting->DefaultToString()); | ||
| 231 | } | ||
| 232 | return ToJString(env, ""); | ||
| 233 | } | ||
| 234 | |||
| 257 | jobjectArray Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getGameDirs(JNIEnv* env, jobject obj) { | 235 | jobjectArray Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getGameDirs(JNIEnv* env, jobject obj) { |
| 258 | jclass gameDirClass = IDCache::GetGameDirClass(); | 236 | jclass gameDirClass = IDCache::GetGameDirClass(); |
| 259 | jmethodID gameDirConstructor = IDCache::GetGameDirConstructor(); | 237 | jmethodID gameDirConstructor = IDCache::GetGameDirConstructor(); |
diff --git a/src/common/settings_setting.h b/src/common/settings_setting.h index 3175ab07d..0b18ca5ec 100644 --- a/src/common/settings_setting.h +++ b/src/common/settings_setting.h | |||
| @@ -81,6 +81,9 @@ public: | |||
| 81 | [[nodiscard]] virtual const Type& GetValue() const { | 81 | [[nodiscard]] virtual const Type& GetValue() const { |
| 82 | return value; | 82 | return value; |
| 83 | } | 83 | } |
| 84 | [[nodiscard]] virtual const Type& GetValue(bool need_global) const { | ||
| 85 | return value; | ||
| 86 | } | ||
| 84 | 87 | ||
| 85 | /** | 88 | /** |
| 86 | * Sets the setting to the given value. | 89 | * Sets the setting to the given value. |
| @@ -353,7 +356,7 @@ public: | |||
| 353 | } | 356 | } |
| 354 | return custom; | 357 | return custom; |
| 355 | } | 358 | } |
| 356 | [[nodiscard]] const Type& GetValue(bool need_global) const { | 359 | [[nodiscard]] const Type& GetValue(bool need_global) const override final { |
| 357 | if (use_global || need_global) { | 360 | if (use_global || need_global) { |
| 358 | return this->value; | 361 | return this->value; |
| 359 | } | 362 | } |