summaryrefslogtreecommitdiffstats
path: root/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt233
1 files changed, 133 insertions, 100 deletions
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 21ca97bc1..8f724835e 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
@@ -3,8 +3,12 @@
package org.yuzu.yuzu_emu.features.settings.model.view
+import androidx.annotation.StringRes
import org.yuzu.yuzu_emu.NativeLibrary
import org.yuzu.yuzu_emu.R
+import org.yuzu.yuzu_emu.YuzuApplication
+import org.yuzu.yuzu_emu.features.input.NativeInput
+import org.yuzu.yuzu_emu.features.input.model.NpadStyleIndex
import org.yuzu.yuzu_emu.features.settings.model.AbstractBooleanSetting
import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting
@@ -23,13 +27,34 @@ import org.yuzu.yuzu_emu.utils.NativeConfig
*/
abstract class SettingsItem(
val setting: AbstractSetting,
- val nameId: Int,
- val descriptionId: Int
+ @StringRes val titleId: Int,
+ val titleString: String,
+ @StringRes val descriptionId: Int,
+ val descriptionString: String
) {
abstract val type: Int
+ val title: String by lazy {
+ if (titleId != 0) {
+ return@lazy YuzuApplication.appContext.getString(titleId)
+ }
+ return@lazy titleString
+ }
+
+ val description: String by lazy {
+ if (descriptionId != 0) {
+ return@lazy YuzuApplication.appContext.getString(descriptionId)
+ }
+ return@lazy descriptionString
+ }
+
val isEditable: Boolean
get() {
+ // Can't change docked mode toggle when using handheld mode
+ if (setting.key == BooleanSetting.USE_DOCKED_MODE.key) {
+ return NativeInput.getStyleIndex(0) != NpadStyleIndex.Handheld
+ }
+
// Can't edit settings that aren't saveable in per-game config even if they are switchable
if (NativeConfig.isPerGameConfigLoaded() && !setting.isSaveable) {
return false
@@ -59,6 +84,9 @@ abstract class SettingsItem(
const val TYPE_STRING_SINGLE_CHOICE = 5
const val TYPE_DATETIME_SETTING = 6
const val TYPE_RUNNABLE = 7
+ const val TYPE_INPUT = 8
+ const val TYPE_INT_SINGLE_CHOICE = 9
+ const val TYPE_INPUT_PROFILE = 10
const val FASTMEM_COMBINED = "fastmem_combined"
@@ -80,237 +108,242 @@ abstract class SettingsItem(
put(
SwitchSetting(
BooleanSetting.RENDERER_USE_SPEED_LIMIT,
- R.string.frame_limit_enable,
- R.string.frame_limit_enable_description
+ titleId = R.string.frame_limit_enable,
+ descriptionId = R.string.frame_limit_enable_description
)
)
put(
SliderSetting(
ShortSetting.RENDERER_SPEED_LIMIT,
- R.string.frame_limit_slider,
- R.string.frame_limit_slider_description,
- 1,
- 400,
- "%"
+ titleId = R.string.frame_limit_slider,
+ descriptionId = R.string.frame_limit_slider_description,
+ min = 1,
+ max = 400,
+ units = "%"
)
)
put(
SingleChoiceSetting(
IntSetting.CPU_BACKEND,
- R.string.cpu_backend,
- 0,
- R.array.cpuBackendArm64Names,
- R.array.cpuBackendArm64Values
+ titleId = R.string.cpu_backend,
+ choicesId = R.array.cpuBackendArm64Names,
+ valuesId = R.array.cpuBackendArm64Values
)
)
put(
SingleChoiceSetting(
IntSetting.CPU_ACCURACY,
- R.string.cpu_accuracy,
- 0,
- R.array.cpuAccuracyNames,
- R.array.cpuAccuracyValues
+ titleId = R.string.cpu_accuracy,
+ choicesId = R.array.cpuAccuracyNames,
+ valuesId = R.array.cpuAccuracyValues
)
)
put(
SwitchSetting(
BooleanSetting.PICTURE_IN_PICTURE,
- R.string.picture_in_picture,
- R.string.picture_in_picture_description
+ titleId = R.string.picture_in_picture,
+ descriptionId = R.string.picture_in_picture_description
)
)
+
+ val dockedModeSetting = object : AbstractBooleanSetting {
+ override val key = BooleanSetting.USE_DOCKED_MODE.key
+
+ override fun getBoolean(needsGlobal: Boolean): Boolean {
+ if (NativeInput.getStyleIndex(0) == NpadStyleIndex.Handheld) {
+ return false
+ }
+ return BooleanSetting.USE_DOCKED_MODE.getBoolean(needsGlobal)
+ }
+
+ override fun setBoolean(value: Boolean) =
+ BooleanSetting.USE_DOCKED_MODE.setBoolean(value)
+
+ override val defaultValue = BooleanSetting.USE_DOCKED_MODE.defaultValue
+
+ override fun getValueAsString(needsGlobal: Boolean): String =
+ BooleanSetting.USE_DOCKED_MODE.getValueAsString(needsGlobal)
+
+ override fun reset() = BooleanSetting.USE_DOCKED_MODE.reset()
+ }
put(
SwitchSetting(
- BooleanSetting.USE_DOCKED_MODE,
- R.string.use_docked_mode,
- R.string.use_docked_mode_description
+ dockedModeSetting,
+ titleId = R.string.use_docked_mode,
+ descriptionId = R.string.use_docked_mode_description
)
)
+
put(
SingleChoiceSetting(
IntSetting.REGION_INDEX,
- R.string.emulated_region,
- 0,
- R.array.regionNames,
- R.array.regionValues
+ titleId = R.string.emulated_region,
+ choicesId = R.array.regionNames,
+ valuesId = R.array.regionValues
)
)
put(
SingleChoiceSetting(
IntSetting.LANGUAGE_INDEX,
- R.string.emulated_language,
- 0,
- R.array.languageNames,
- R.array.languageValues
+ titleId = R.string.emulated_language,
+ choicesId = R.array.languageNames,
+ valuesId = R.array.languageValues
)
)
put(
SwitchSetting(
BooleanSetting.USE_CUSTOM_RTC,
- R.string.use_custom_rtc,
- R.string.use_custom_rtc_description
+ titleId = R.string.use_custom_rtc,
+ descriptionId = R.string.use_custom_rtc_description
)
)
- put(DateTimeSetting(LongSetting.CUSTOM_RTC, R.string.set_custom_rtc, 0))
+ put(DateTimeSetting(LongSetting.CUSTOM_RTC, titleId = R.string.set_custom_rtc))
put(
SingleChoiceSetting(
IntSetting.RENDERER_ACCURACY,
- R.string.renderer_accuracy,
- 0,
- R.array.rendererAccuracyNames,
- R.array.rendererAccuracyValues
+ titleId = R.string.renderer_accuracy,
+ choicesId = R.array.rendererAccuracyNames,
+ valuesId = R.array.rendererAccuracyValues
)
)
put(
SingleChoiceSetting(
IntSetting.RENDERER_RESOLUTION,
- R.string.renderer_resolution,
- 0,
- R.array.rendererResolutionNames,
- R.array.rendererResolutionValues
+ titleId = R.string.renderer_resolution,
+ choicesId = R.array.rendererResolutionNames,
+ valuesId = R.array.rendererResolutionValues
)
)
put(
SingleChoiceSetting(
IntSetting.RENDERER_VSYNC,
- R.string.renderer_vsync,
- 0,
- R.array.rendererVSyncNames,
- R.array.rendererVSyncValues
+ titleId = R.string.renderer_vsync,
+ choicesId = R.array.rendererVSyncNames,
+ valuesId = R.array.rendererVSyncValues
)
)
put(
SingleChoiceSetting(
IntSetting.RENDERER_SCALING_FILTER,
- R.string.renderer_scaling_filter,
- 0,
- R.array.rendererScalingFilterNames,
- R.array.rendererScalingFilterValues
+ titleId = R.string.renderer_scaling_filter,
+ choicesId = R.array.rendererScalingFilterNames,
+ valuesId = R.array.rendererScalingFilterValues
)
)
put(
SliderSetting(
IntSetting.FSR_SHARPENING_SLIDER,
- R.string.fsr_sharpness,
- R.string.fsr_sharpness_description,
- 0,
- 100,
- "%"
+ titleId = R.string.fsr_sharpness,
+ descriptionId = R.string.fsr_sharpness_description,
+ units = "%"
)
)
put(
SingleChoiceSetting(
IntSetting.RENDERER_ANTI_ALIASING,
- R.string.renderer_anti_aliasing,
- 0,
- R.array.rendererAntiAliasingNames,
- R.array.rendererAntiAliasingValues
+ titleId = R.string.renderer_anti_aliasing,
+ choicesId = R.array.rendererAntiAliasingNames,
+ valuesId = R.array.rendererAntiAliasingValues
)
)
put(
SingleChoiceSetting(
IntSetting.RENDERER_SCREEN_LAYOUT,
- R.string.renderer_screen_layout,
- 0,
- R.array.rendererScreenLayoutNames,
- R.array.rendererScreenLayoutValues
+ titleId = R.string.renderer_screen_layout,
+ choicesId = R.array.rendererScreenLayoutNames,
+ valuesId = R.array.rendererScreenLayoutValues
)
)
put(
SingleChoiceSetting(
IntSetting.RENDERER_ASPECT_RATIO,
- R.string.renderer_aspect_ratio,
- 0,
- R.array.rendererAspectRatioNames,
- R.array.rendererAspectRatioValues
+ titleId = R.string.renderer_aspect_ratio,
+ choicesId = R.array.rendererAspectRatioNames,
+ valuesId = R.array.rendererAspectRatioValues
)
)
put(
SingleChoiceSetting(
IntSetting.VERTICAL_ALIGNMENT,
- R.string.vertical_alignment,
- 0,
- R.array.verticalAlignmentEntries,
- R.array.verticalAlignmentValues
+ titleId = R.string.vertical_alignment,
+ descriptionId = 0,
+ choicesId = R.array.verticalAlignmentEntries,
+ valuesId = R.array.verticalAlignmentValues
)
)
put(
SwitchSetting(
BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE,
- R.string.use_disk_shader_cache,
- R.string.use_disk_shader_cache_description
+ titleId = R.string.use_disk_shader_cache,
+ descriptionId = R.string.use_disk_shader_cache_description
)
)
put(
SwitchSetting(
BooleanSetting.RENDERER_FORCE_MAX_CLOCK,
- R.string.renderer_force_max_clock,
- R.string.renderer_force_max_clock_description
+ titleId = R.string.renderer_force_max_clock,
+ descriptionId = R.string.renderer_force_max_clock_description
)
)
put(
SwitchSetting(
BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS,
- R.string.renderer_asynchronous_shaders,
- R.string.renderer_asynchronous_shaders_description
+ titleId = R.string.renderer_asynchronous_shaders,
+ descriptionId = R.string.renderer_asynchronous_shaders_description
)
)
put(
SwitchSetting(
BooleanSetting.RENDERER_REACTIVE_FLUSHING,
- R.string.renderer_reactive_flushing,
- R.string.renderer_reactive_flushing_description
+ titleId = R.string.renderer_reactive_flushing,
+ descriptionId = R.string.renderer_reactive_flushing_description
)
)
put(
SingleChoiceSetting(
IntSetting.MAX_ANISOTROPY,
- R.string.anisotropic_filtering,
- R.string.anisotropic_filtering_description,
- R.array.anisoEntries,
- R.array.anisoValues
+ titleId = R.string.anisotropic_filtering,
+ descriptionId = R.string.anisotropic_filtering_description,
+ choicesId = R.array.anisoEntries,
+ valuesId = R.array.anisoValues
)
)
put(
SingleChoiceSetting(
IntSetting.AUDIO_OUTPUT_ENGINE,
- R.string.audio_output_engine,
- 0,
- R.array.outputEngineEntries,
- R.array.outputEngineValues
+ titleId = R.string.audio_output_engine,
+ choicesId = R.array.outputEngineEntries,
+ valuesId = R.array.outputEngineValues
)
)
put(
SliderSetting(
ByteSetting.AUDIO_VOLUME,
- R.string.audio_volume,
- R.string.audio_volume_description,
- 0,
- 100,
- "%"
+ titleId = R.string.audio_volume,
+ descriptionId = R.string.audio_volume_description,
+ units = "%"
)
)
put(
SingleChoiceSetting(
IntSetting.RENDERER_BACKEND,
- R.string.renderer_api,
- 0,
- R.array.rendererApiNames,
- R.array.rendererApiValues
+ titleId = R.string.renderer_api,
+ choicesId = R.array.rendererApiNames,
+ valuesId = R.array.rendererApiValues
)
)
put(
SwitchSetting(
BooleanSetting.RENDERER_DEBUG,
- R.string.renderer_debug,
- R.string.renderer_debug_description
+ titleId = R.string.renderer_debug,
+ descriptionId = R.string.renderer_debug_description
)
)
put(
SwitchSetting(
BooleanSetting.CPU_DEBUG_MODE,
- R.string.cpu_debug_mode,
- R.string.cpu_debug_mode_description
+ titleId = R.string.cpu_debug_mode,
+ descriptionId = R.string.cpu_debug_mode_description
)
)
@@ -346,7 +379,7 @@ abstract class SettingsItem(
override fun reset() = setBoolean(defaultValue)
}
- put(SwitchSetting(fastmem, R.string.fastmem, 0))
+ put(SwitchSetting(fastmem, R.string.fastmem))
}
}
}