diff options
Diffstat (limited to 'src')
17 files changed, 278 insertions, 214 deletions
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 1d81f5f2b..58febff1d 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 | |||
| @@ -3,13 +3,16 @@ | |||
| 3 | 3 | ||
| 4 | package org.yuzu.yuzu_emu.features.settings.model.view | 4 | package org.yuzu.yuzu_emu.features.settings.model.view |
| 5 | 5 | ||
| 6 | import androidx.annotation.StringRes | ||
| 6 | import org.yuzu.yuzu_emu.features.settings.model.AbstractLongSetting | 7 | import org.yuzu.yuzu_emu.features.settings.model.AbstractLongSetting |
| 7 | 8 | ||
| 8 | class DateTimeSetting( | 9 | class DateTimeSetting( |
| 9 | private val longSetting: AbstractLongSetting, | 10 | private val longSetting: AbstractLongSetting, |
| 10 | titleId: Int, | 11 | @StringRes titleId: Int = 0, |
| 11 | descriptionId: Int | 12 | titleString: String = "", |
| 12 | ) : SettingsItem(longSetting, titleId, descriptionId) { | 13 | @StringRes descriptionId: Int = 0, |
| 14 | descriptionString: String = "" | ||
| 15 | ) : SettingsItem(longSetting, titleId, titleString, descriptionId, descriptionString) { | ||
| 13 | override val type = TYPE_DATETIME_SETTING | 16 | override val type = TYPE_DATETIME_SETTING |
| 14 | 17 | ||
| 15 | fun getValue(needsGlobal: Boolean = false): Long = longSetting.getLong(needsGlobal) | 18 | fun getValue(needsGlobal: Boolean = false): Long = longSetting.getLong(needsGlobal) |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/HeaderSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/HeaderSetting.kt index d31ce1c31..8a6a51d5c 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/HeaderSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/HeaderSetting.kt | |||
| @@ -3,8 +3,11 @@ | |||
| 3 | 3 | ||
| 4 | package org.yuzu.yuzu_emu.features.settings.model.view | 4 | package org.yuzu.yuzu_emu.features.settings.model.view |
| 5 | 5 | ||
| 6 | import androidx.annotation.StringRes | ||
| 7 | |||
| 6 | class HeaderSetting( | 8 | class HeaderSetting( |
| 7 | titleId: Int | 9 | @StringRes titleId: Int = 0, |
| 8 | ) : SettingsItem(emptySetting, titleId, 0) { | 10 | titleString: String = "" |
| 11 | ) : SettingsItem(emptySetting, titleId, titleString, 0, "") { | ||
| 9 | override val type = TYPE_HEADER | 12 | override val type = TYPE_HEADER |
| 10 | } | 13 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/RunnableSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/RunnableSetting.kt index 425160024..1005a2b7d 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/RunnableSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/RunnableSetting.kt | |||
| @@ -4,13 +4,16 @@ | |||
| 4 | package org.yuzu.yuzu_emu.features.settings.model.view | 4 | package org.yuzu.yuzu_emu.features.settings.model.view |
| 5 | 5 | ||
| 6 | import androidx.annotation.DrawableRes | 6 | import androidx.annotation.DrawableRes |
| 7 | import androidx.annotation.StringRes | ||
| 7 | 8 | ||
| 8 | class RunnableSetting( | 9 | class RunnableSetting( |
| 9 | titleId: Int, | ||
| 10 | descriptionId: Int, | ||
| 11 | val isRuntimeRunnable: Boolean, | 10 | val isRuntimeRunnable: Boolean, |
| 11 | @StringRes titleId: Int = 0, | ||
| 12 | titleString: String = "", | ||
| 13 | @StringRes descriptionId: Int = 0, | ||
| 14 | descriptionString: String = "", | ||
| 12 | @DrawableRes val iconId: Int = 0, | 15 | @DrawableRes val iconId: Int = 0, |
| 13 | val runnable: () -> Unit | 16 | val runnable: () -> Unit |
| 14 | ) : SettingsItem(emptySetting, titleId, descriptionId) { | 17 | ) : SettingsItem(emptySetting, titleId, titleString, descriptionId, descriptionString) { |
| 15 | override val type = TYPE_RUNNABLE | 18 | override val type = TYPE_RUNNABLE |
| 16 | } | 19 | } |
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 @@ | |||
| 3 | 3 | ||
| 4 | package org.yuzu.yuzu_emu.features.settings.model.view | 4 | package org.yuzu.yuzu_emu.features.settings.model.view |
| 5 | 5 | ||
| 6 | import androidx.annotation.StringRes | ||
| 6 | import org.yuzu.yuzu_emu.NativeLibrary | 7 | import org.yuzu.yuzu_emu.NativeLibrary |
| 7 | import org.yuzu.yuzu_emu.R | 8 | import org.yuzu.yuzu_emu.R |
| 9 | import org.yuzu.yuzu_emu.YuzuApplication | ||
| 10 | import org.yuzu.yuzu_emu.features.input.NativeInput | ||
| 11 | import org.yuzu.yuzu_emu.features.input.model.NpadStyleIndex | ||
| 8 | import org.yuzu.yuzu_emu.features.settings.model.AbstractBooleanSetting | 12 | import org.yuzu.yuzu_emu.features.settings.model.AbstractBooleanSetting |
| 9 | import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting | 13 | import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting |
| 10 | import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting | 14 | import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting |
| @@ -23,13 +27,34 @@ import org.yuzu.yuzu_emu.utils.NativeConfig | |||
| 23 | */ | 27 | */ |
| 24 | abstract class SettingsItem( | 28 | abstract class SettingsItem( |
| 25 | val setting: AbstractSetting, | 29 | val setting: AbstractSetting, |
| 26 | val nameId: Int, | 30 | @StringRes val titleId: Int, |
| 27 | val descriptionId: Int | 31 | val titleString: String, |
| 32 | @StringRes val descriptionId: Int, | ||
| 33 | val descriptionString: String | ||
| 28 | ) { | 34 | ) { |
| 29 | abstract val type: Int | 35 | abstract val type: Int |
| 30 | 36 | ||
| 37 | val title: String by lazy { | ||
| 38 | if (titleId != 0) { | ||
| 39 | return@lazy YuzuApplication.appContext.getString(titleId) | ||
| 40 | } | ||
| 41 | return@lazy titleString | ||
| 42 | } | ||
| 43 | |||
| 44 | val description: String by lazy { | ||
| 45 | if (descriptionId != 0) { | ||
| 46 | return@lazy YuzuApplication.appContext.getString(descriptionId) | ||
| 47 | } | ||
| 48 | return@lazy descriptionString | ||
| 49 | } | ||
| 50 | |||
| 31 | val isEditable: Boolean | 51 | val isEditable: Boolean |
| 32 | get() { | 52 | get() { |
| 53 | // Can't change docked mode toggle when using handheld mode | ||
| 54 | if (setting.key == BooleanSetting.USE_DOCKED_MODE.key) { | ||
| 55 | return NativeInput.getStyleIndex(0) != NpadStyleIndex.Handheld | ||
| 56 | } | ||
| 57 | |||
| 33 | // Can't edit settings that aren't saveable in per-game config even if they are switchable | 58 | // Can't edit settings that aren't saveable in per-game config even if they are switchable |
| 34 | if (NativeConfig.isPerGameConfigLoaded() && !setting.isSaveable) { | 59 | if (NativeConfig.isPerGameConfigLoaded() && !setting.isSaveable) { |
| 35 | return false | 60 | return false |
| @@ -59,6 +84,9 @@ abstract class SettingsItem( | |||
| 59 | const val TYPE_STRING_SINGLE_CHOICE = 5 | 84 | const val TYPE_STRING_SINGLE_CHOICE = 5 |
| 60 | const val TYPE_DATETIME_SETTING = 6 | 85 | const val TYPE_DATETIME_SETTING = 6 |
| 61 | const val TYPE_RUNNABLE = 7 | 86 | const val TYPE_RUNNABLE = 7 |
| 87 | const val TYPE_INPUT = 8 | ||
| 88 | const val TYPE_INT_SINGLE_CHOICE = 9 | ||
| 89 | const val TYPE_INPUT_PROFILE = 10 | ||
| 62 | 90 | ||
| 63 | const val FASTMEM_COMBINED = "fastmem_combined" | 91 | const val FASTMEM_COMBINED = "fastmem_combined" |
| 64 | 92 | ||
| @@ -80,237 +108,242 @@ abstract class SettingsItem( | |||
| 80 | put( | 108 | put( |
| 81 | SwitchSetting( | 109 | SwitchSetting( |
| 82 | BooleanSetting.RENDERER_USE_SPEED_LIMIT, | 110 | BooleanSetting.RENDERER_USE_SPEED_LIMIT, |
| 83 | R.string.frame_limit_enable, | 111 | titleId = R.string.frame_limit_enable, |
| 84 | R.string.frame_limit_enable_description | 112 | descriptionId = R.string.frame_limit_enable_description |
| 85 | ) | 113 | ) |
| 86 | ) | 114 | ) |
| 87 | put( | 115 | put( |
| 88 | SliderSetting( | 116 | SliderSetting( |
| 89 | ShortSetting.RENDERER_SPEED_LIMIT, | 117 | ShortSetting.RENDERER_SPEED_LIMIT, |
| 90 | R.string.frame_limit_slider, | 118 | titleId = R.string.frame_limit_slider, |
| 91 | R.string.frame_limit_slider_description, | 119 | descriptionId = R.string.frame_limit_slider_description, |
| 92 | 1, | 120 | min = 1, |
| 93 | 400, | 121 | max = 400, |
| 94 | "%" | 122 | units = "%" |
| 95 | ) | 123 | ) |
| 96 | ) | 124 | ) |
| 97 | put( | 125 | put( |
| 98 | SingleChoiceSetting( | 126 | SingleChoiceSetting( |
| 99 | IntSetting.CPU_BACKEND, | 127 | IntSetting.CPU_BACKEND, |
| 100 | R.string.cpu_backend, | 128 | titleId = R.string.cpu_backend, |
| 101 | 0, | 129 | choicesId = R.array.cpuBackendArm64Names, |
| 102 | R.array.cpuBackendArm64Names, | 130 | valuesId = R.array.cpuBackendArm64Values |
| 103 | R.array.cpuBackendArm64Values | ||
| 104 | ) | 131 | ) |
| 105 | ) | 132 | ) |
| 106 | put( | 133 | put( |
| 107 | SingleChoiceSetting( | 134 | SingleChoiceSetting( |
| 108 | IntSetting.CPU_ACCURACY, | 135 | IntSetting.CPU_ACCURACY, |
| 109 | R.string.cpu_accuracy, | 136 | titleId = R.string.cpu_accuracy, |
| 110 | 0, | 137 | choicesId = R.array.cpuAccuracyNames, |
| 111 | R.array.cpuAccuracyNames, | 138 | valuesId = R.array.cpuAccuracyValues |
| 112 | R.array.cpuAccuracyValues | ||
| 113 | ) | 139 | ) |
| 114 | ) | 140 | ) |
| 115 | put( | 141 | put( |
| 116 | SwitchSetting( | 142 | SwitchSetting( |
| 117 | BooleanSetting.PICTURE_IN_PICTURE, | 143 | BooleanSetting.PICTURE_IN_PICTURE, |
| 118 | R.string.picture_in_picture, | 144 | titleId = R.string.picture_in_picture, |
| 119 | R.string.picture_in_picture_description | 145 | descriptionId = R.string.picture_in_picture_description |
| 120 | ) | 146 | ) |
| 121 | ) | 147 | ) |
| 148 | |||
| 149 | val dockedModeSetting = object : AbstractBooleanSetting { | ||
| 150 | override val key = BooleanSetting.USE_DOCKED_MODE.key | ||
| 151 | |||
| 152 | override fun getBoolean(needsGlobal: Boolean): Boolean { | ||
| 153 | if (NativeInput.getStyleIndex(0) == NpadStyleIndex.Handheld) { | ||
| 154 | return false | ||
| 155 | } | ||
| 156 | return BooleanSetting.USE_DOCKED_MODE.getBoolean(needsGlobal) | ||
| 157 | } | ||
| 158 | |||
| 159 | override fun setBoolean(value: Boolean) = | ||
| 160 | BooleanSetting.USE_DOCKED_MODE.setBoolean(value) | ||
| 161 | |||
| 162 | override val defaultValue = BooleanSetting.USE_DOCKED_MODE.defaultValue | ||
| 163 | |||
| 164 | override fun getValueAsString(needsGlobal: Boolean): String = | ||
| 165 | BooleanSetting.USE_DOCKED_MODE.getValueAsString(needsGlobal) | ||
| 166 | |||
| 167 | override fun reset() = BooleanSetting.USE_DOCKED_MODE.reset() | ||
| 168 | } | ||
| 122 | put( | 169 | put( |
| 123 | SwitchSetting( | 170 | SwitchSetting( |
| 124 | BooleanSetting.USE_DOCKED_MODE, | 171 | dockedModeSetting, |
| 125 | R.string.use_docked_mode, | 172 | titleId = R.string.use_docked_mode, |
| 126 | R.string.use_docked_mode_description | 173 | descriptionId = R.string.use_docked_mode_description |
| 127 | ) | 174 | ) |
| 128 | ) | 175 | ) |
| 176 | |||
| 129 | put( | 177 | put( |
| 130 | SingleChoiceSetting( | 178 | SingleChoiceSetting( |
| 131 | IntSetting.REGION_INDEX, | 179 | IntSetting.REGION_INDEX, |
| 132 | R.string.emulated_region, | 180 | titleId = R.string.emulated_region, |
| 133 | 0, | 181 | choicesId = R.array.regionNames, |
| 134 | R.array.regionNames, | 182 | valuesId = R.array.regionValues |
| 135 | R.array.regionValues | ||
| 136 | ) | 183 | ) |
| 137 | ) | 184 | ) |
| 138 | put( | 185 | put( |
| 139 | SingleChoiceSetting( | 186 | SingleChoiceSetting( |
| 140 | IntSetting.LANGUAGE_INDEX, | 187 | IntSetting.LANGUAGE_INDEX, |
| 141 | R.string.emulated_language, | 188 | titleId = R.string.emulated_language, |
| 142 | 0, | 189 | choicesId = R.array.languageNames, |
| 143 | R.array.languageNames, | 190 | valuesId = R.array.languageValues |
| 144 | R.array.languageValues | ||
| 145 | ) | 191 | ) |
| 146 | ) | 192 | ) |
| 147 | put( | 193 | put( |
| 148 | SwitchSetting( | 194 | SwitchSetting( |
| 149 | BooleanSetting.USE_CUSTOM_RTC, | 195 | BooleanSetting.USE_CUSTOM_RTC, |
| 150 | R.string.use_custom_rtc, | 196 | titleId = R.string.use_custom_rtc, |
| 151 | R.string.use_custom_rtc_description | 197 | descriptionId = R.string.use_custom_rtc_description |
| 152 | ) | 198 | ) |
| 153 | ) | 199 | ) |
| 154 | put(DateTimeSetting(LongSetting.CUSTOM_RTC, R.string.set_custom_rtc, 0)) | 200 | put(DateTimeSetting(LongSetting.CUSTOM_RTC, titleId = R.string.set_custom_rtc)) |
| 155 | put( | 201 | put( |
| 156 | SingleChoiceSetting( | 202 | SingleChoiceSetting( |
| 157 | IntSetting.RENDERER_ACCURACY, | 203 | IntSetting.RENDERER_ACCURACY, |
| 158 | R.string.renderer_accuracy, | 204 | titleId = R.string.renderer_accuracy, |
| 159 | 0, | 205 | choicesId = R.array.rendererAccuracyNames, |
| 160 | R.array.rendererAccuracyNames, | 206 | valuesId = R.array.rendererAccuracyValues |
| 161 | R.array.rendererAccuracyValues | ||
| 162 | ) | 207 | ) |
| 163 | ) | 208 | ) |
| 164 | put( | 209 | put( |
| 165 | SingleChoiceSetting( | 210 | SingleChoiceSetting( |
| 166 | IntSetting.RENDERER_RESOLUTION, | 211 | IntSetting.RENDERER_RESOLUTION, |
| 167 | R.string.renderer_resolution, | 212 | titleId = R.string.renderer_resolution, |
| 168 | 0, | 213 | choicesId = R.array.rendererResolutionNames, |
| 169 | R.array.rendererResolutionNames, | 214 | valuesId = R.array.rendererResolutionValues |
| 170 | R.array.rendererResolutionValues | ||
| 171 | ) | 215 | ) |
| 172 | ) | 216 | ) |
| 173 | put( | 217 | put( |
| 174 | SingleChoiceSetting( | 218 | SingleChoiceSetting( |
| 175 | IntSetting.RENDERER_VSYNC, | 219 | IntSetting.RENDERER_VSYNC, |
| 176 | R.string.renderer_vsync, | 220 | titleId = R.string.renderer_vsync, |
| 177 | 0, | 221 | choicesId = R.array.rendererVSyncNames, |
| 178 | R.array.rendererVSyncNames, | 222 | valuesId = R.array.rendererVSyncValues |
| 179 | R.array.rendererVSyncValues | ||
| 180 | ) | 223 | ) |
| 181 | ) | 224 | ) |
| 182 | put( | 225 | put( |
| 183 | SingleChoiceSetting( | 226 | SingleChoiceSetting( |
| 184 | IntSetting.RENDERER_SCALING_FILTER, | 227 | IntSetting.RENDERER_SCALING_FILTER, |
| 185 | R.string.renderer_scaling_filter, | 228 | titleId = R.string.renderer_scaling_filter, |
| 186 | 0, | 229 | choicesId = R.array.rendererScalingFilterNames, |
| 187 | R.array.rendererScalingFilterNames, | 230 | valuesId = R.array.rendererScalingFilterValues |
| 188 | R.array.rendererScalingFilterValues | ||
| 189 | ) | 231 | ) |
| 190 | ) | 232 | ) |
| 191 | put( | 233 | put( |
| 192 | SliderSetting( | 234 | SliderSetting( |
| 193 | IntSetting.FSR_SHARPENING_SLIDER, | 235 | IntSetting.FSR_SHARPENING_SLIDER, |
| 194 | R.string.fsr_sharpness, | 236 | titleId = R.string.fsr_sharpness, |
| 195 | R.string.fsr_sharpness_description, | 237 | descriptionId = R.string.fsr_sharpness_description, |
| 196 | 0, | 238 | units = "%" |
| 197 | 100, | ||
| 198 | "%" | ||
| 199 | ) | 239 | ) |
| 200 | ) | 240 | ) |
| 201 | put( | 241 | put( |
| 202 | SingleChoiceSetting( | 242 | SingleChoiceSetting( |
| 203 | IntSetting.RENDERER_ANTI_ALIASING, | 243 | IntSetting.RENDERER_ANTI_ALIASING, |
| 204 | R.string.renderer_anti_aliasing, | 244 | titleId = R.string.renderer_anti_aliasing, |
| 205 | 0, | 245 | choicesId = R.array.rendererAntiAliasingNames, |
| 206 | R.array.rendererAntiAliasingNames, | 246 | valuesId = R.array.rendererAntiAliasingValues |
| 207 | R.array.rendererAntiAliasingValues | ||
| 208 | ) | 247 | ) |
| 209 | ) | 248 | ) |
| 210 | put( | 249 | put( |
| 211 | SingleChoiceSetting( | 250 | SingleChoiceSetting( |
| 212 | IntSetting.RENDERER_SCREEN_LAYOUT, | 251 | IntSetting.RENDERER_SCREEN_LAYOUT, |
| 213 | R.string.renderer_screen_layout, | 252 | titleId = R.string.renderer_screen_layout, |
| 214 | 0, | 253 | choicesId = R.array.rendererScreenLayoutNames, |
| 215 | R.array.rendererScreenLayoutNames, | 254 | valuesId = R.array.rendererScreenLayoutValues |
| 216 | R.array.rendererScreenLayoutValues | ||
| 217 | ) | 255 | ) |
| 218 | ) | 256 | ) |
| 219 | put( | 257 | put( |
| 220 | SingleChoiceSetting( | 258 | SingleChoiceSetting( |
| 221 | IntSetting.RENDERER_ASPECT_RATIO, | 259 | IntSetting.RENDERER_ASPECT_RATIO, |
| 222 | R.string.renderer_aspect_ratio, | 260 | titleId = R.string.renderer_aspect_ratio, |
| 223 | 0, | 261 | choicesId = R.array.rendererAspectRatioNames, |
| 224 | R.array.rendererAspectRatioNames, | 262 | valuesId = R.array.rendererAspectRatioValues |
| 225 | R.array.rendererAspectRatioValues | ||
| 226 | ) | 263 | ) |
| 227 | ) | 264 | ) |
| 228 | put( | 265 | put( |
| 229 | SingleChoiceSetting( | 266 | SingleChoiceSetting( |
| 230 | IntSetting.VERTICAL_ALIGNMENT, | 267 | IntSetting.VERTICAL_ALIGNMENT, |
| 231 | R.string.vertical_alignment, | 268 | titleId = R.string.vertical_alignment, |
| 232 | 0, | 269 | descriptionId = 0, |
| 233 | R.array.verticalAlignmentEntries, | 270 | choicesId = R.array.verticalAlignmentEntries, |
| 234 | R.array.verticalAlignmentValues | 271 | valuesId = R.array.verticalAlignmentValues |
| 235 | ) | 272 | ) |
| 236 | ) | 273 | ) |
| 237 | put( | 274 | put( |
| 238 | SwitchSetting( | 275 | SwitchSetting( |
| 239 | BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE, | 276 | BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE, |
| 240 | R.string.use_disk_shader_cache, | 277 | titleId = R.string.use_disk_shader_cache, |
| 241 | R.string.use_disk_shader_cache_description | 278 | descriptionId = R.string.use_disk_shader_cache_description |
| 242 | ) | 279 | ) |
| 243 | ) | 280 | ) |
| 244 | put( | 281 | put( |
| 245 | SwitchSetting( | 282 | SwitchSetting( |
| 246 | BooleanSetting.RENDERER_FORCE_MAX_CLOCK, | 283 | BooleanSetting.RENDERER_FORCE_MAX_CLOCK, |
| 247 | R.string.renderer_force_max_clock, | 284 | titleId = R.string.renderer_force_max_clock, |
| 248 | R.string.renderer_force_max_clock_description | 285 | descriptionId = R.string.renderer_force_max_clock_description |
| 249 | ) | 286 | ) |
| 250 | ) | 287 | ) |
| 251 | put( | 288 | put( |
| 252 | SwitchSetting( | 289 | SwitchSetting( |
| 253 | BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS, | 290 | BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS, |
| 254 | R.string.renderer_asynchronous_shaders, | 291 | titleId = R.string.renderer_asynchronous_shaders, |
| 255 | R.string.renderer_asynchronous_shaders_description | 292 | descriptionId = R.string.renderer_asynchronous_shaders_description |
| 256 | ) | 293 | ) |
| 257 | ) | 294 | ) |
| 258 | put( | 295 | put( |
| 259 | SwitchSetting( | 296 | SwitchSetting( |
| 260 | BooleanSetting.RENDERER_REACTIVE_FLUSHING, | 297 | BooleanSetting.RENDERER_REACTIVE_FLUSHING, |
| 261 | R.string.renderer_reactive_flushing, | 298 | titleId = R.string.renderer_reactive_flushing, |
| 262 | R.string.renderer_reactive_flushing_description | 299 | descriptionId = R.string.renderer_reactive_flushing_description |
| 263 | ) | 300 | ) |
| 264 | ) | 301 | ) |
| 265 | put( | 302 | put( |
| 266 | SingleChoiceSetting( | 303 | SingleChoiceSetting( |
| 267 | IntSetting.MAX_ANISOTROPY, | 304 | IntSetting.MAX_ANISOTROPY, |
| 268 | R.string.anisotropic_filtering, | 305 | titleId = R.string.anisotropic_filtering, |
| 269 | R.string.anisotropic_filtering_description, | 306 | descriptionId = R.string.anisotropic_filtering_description, |
| 270 | R.array.anisoEntries, | 307 | choicesId = R.array.anisoEntries, |
| 271 | R.array.anisoValues | 308 | valuesId = R.array.anisoValues |
| 272 | ) | 309 | ) |
| 273 | ) | 310 | ) |
| 274 | put( | 311 | put( |
| 275 | SingleChoiceSetting( | 312 | SingleChoiceSetting( |
| 276 | IntSetting.AUDIO_OUTPUT_ENGINE, | 313 | IntSetting.AUDIO_OUTPUT_ENGINE, |
| 277 | R.string.audio_output_engine, | 314 | titleId = R.string.audio_output_engine, |
| 278 | 0, | 315 | choicesId = R.array.outputEngineEntries, |
| 279 | R.array.outputEngineEntries, | 316 | valuesId = R.array.outputEngineValues |
| 280 | R.array.outputEngineValues | ||
| 281 | ) | 317 | ) |
| 282 | ) | 318 | ) |
| 283 | put( | 319 | put( |
| 284 | SliderSetting( | 320 | SliderSetting( |
| 285 | ByteSetting.AUDIO_VOLUME, | 321 | ByteSetting.AUDIO_VOLUME, |
| 286 | R.string.audio_volume, | 322 | titleId = R.string.audio_volume, |
| 287 | R.string.audio_volume_description, | 323 | descriptionId = R.string.audio_volume_description, |
| 288 | 0, | 324 | units = "%" |
| 289 | 100, | ||
| 290 | "%" | ||
| 291 | ) | 325 | ) |
| 292 | ) | 326 | ) |
| 293 | put( | 327 | put( |
| 294 | SingleChoiceSetting( | 328 | SingleChoiceSetting( |
| 295 | IntSetting.RENDERER_BACKEND, | 329 | IntSetting.RENDERER_BACKEND, |
| 296 | R.string.renderer_api, | 330 | titleId = R.string.renderer_api, |
| 297 | 0, | 331 | choicesId = R.array.rendererApiNames, |
| 298 | R.array.rendererApiNames, | 332 | valuesId = R.array.rendererApiValues |
| 299 | R.array.rendererApiValues | ||
| 300 | ) | 333 | ) |
| 301 | ) | 334 | ) |
| 302 | put( | 335 | put( |
| 303 | SwitchSetting( | 336 | SwitchSetting( |
| 304 | BooleanSetting.RENDERER_DEBUG, | 337 | BooleanSetting.RENDERER_DEBUG, |
| 305 | R.string.renderer_debug, | 338 | titleId = R.string.renderer_debug, |
| 306 | R.string.renderer_debug_description | 339 | descriptionId = R.string.renderer_debug_description |
| 307 | ) | 340 | ) |
| 308 | ) | 341 | ) |
| 309 | put( | 342 | put( |
| 310 | SwitchSetting( | 343 | SwitchSetting( |
| 311 | BooleanSetting.CPU_DEBUG_MODE, | 344 | BooleanSetting.CPU_DEBUG_MODE, |
| 312 | R.string.cpu_debug_mode, | 345 | titleId = R.string.cpu_debug_mode, |
| 313 | R.string.cpu_debug_mode_description | 346 | descriptionId = R.string.cpu_debug_mode_description |
| 314 | ) | 347 | ) |
| 315 | ) | 348 | ) |
| 316 | 349 | ||
| @@ -346,7 +379,7 @@ abstract class SettingsItem( | |||
| 346 | 379 | ||
| 347 | override fun reset() = setBoolean(defaultValue) | 380 | override fun reset() = setBoolean(defaultValue) |
| 348 | } | 381 | } |
| 349 | put(SwitchSetting(fastmem, R.string.fastmem, 0)) | 382 | put(SwitchSetting(fastmem, R.string.fastmem)) |
| 350 | } | 383 | } |
| 351 | } | 384 | } |
| 352 | } | 385 | } |
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 97a5a9e59..ea5e099ed 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 | |||
| @@ -3,16 +3,20 @@ | |||
| 3 | 3 | ||
| 4 | package org.yuzu.yuzu_emu.features.settings.model.view | 4 | package org.yuzu.yuzu_emu.features.settings.model.view |
| 5 | 5 | ||
| 6 | import androidx.annotation.ArrayRes | ||
| 7 | import androidx.annotation.StringRes | ||
| 6 | import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting | 8 | import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting |
| 7 | import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting | 9 | import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting |
| 8 | 10 | ||
| 9 | class SingleChoiceSetting( | 11 | class SingleChoiceSetting( |
| 10 | setting: AbstractSetting, | 12 | setting: AbstractSetting, |
| 11 | titleId: Int, | 13 | @StringRes titleId: Int = 0, |
| 12 | descriptionId: Int, | 14 | titleString: String = "", |
| 13 | val choicesId: Int, | 15 | @StringRes descriptionId: Int = 0, |
| 14 | val valuesId: Int | 16 | descriptionString: String = "", |
| 15 | ) : SettingsItem(setting, titleId, descriptionId) { | 17 | @ArrayRes val choicesId: Int, |
| 18 | @ArrayRes val valuesId: Int | ||
| 19 | ) : SettingsItem(setting, titleId, titleString, descriptionId, descriptionString) { | ||
| 16 | override val type = TYPE_SINGLE_CHOICE | 20 | override val type = TYPE_SINGLE_CHOICE |
| 17 | 21 | ||
| 18 | fun getSelectedValue(needsGlobal: Boolean = false) = | 22 | fun getSelectedValue(needsGlobal: Boolean = false) = |
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 b9b709bf7..6a5cdf48b 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 | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | package org.yuzu.yuzu_emu.features.settings.model.view | 4 | package org.yuzu.yuzu_emu.features.settings.model.view |
| 5 | 5 | ||
| 6 | import androidx.annotation.StringRes | ||
| 6 | import org.yuzu.yuzu_emu.features.settings.model.AbstractByteSetting | 7 | import org.yuzu.yuzu_emu.features.settings.model.AbstractByteSetting |
| 7 | import org.yuzu.yuzu_emu.features.settings.model.AbstractFloatSetting | 8 | import org.yuzu.yuzu_emu.features.settings.model.AbstractFloatSetting |
| 8 | import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting | 9 | import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting |
| @@ -12,12 +13,14 @@ import kotlin.math.roundToInt | |||
| 12 | 13 | ||
| 13 | class SliderSetting( | 14 | class SliderSetting( |
| 14 | setting: AbstractSetting, | 15 | setting: AbstractSetting, |
| 15 | titleId: Int, | 16 | @StringRes titleId: Int = 0, |
| 16 | descriptionId: Int, | 17 | titleString: String = "", |
| 17 | val min: Int, | 18 | @StringRes descriptionId: Int = 0, |
| 18 | val max: Int, | 19 | descriptionString: String = "", |
| 19 | val units: String | 20 | val min: Int = 0, |
| 20 | ) : SettingsItem(setting, titleId, descriptionId) { | 21 | val max: Int = 100, |
| 22 | val units: String = "" | ||
| 23 | ) : SettingsItem(setting, titleId, titleString, descriptionId, descriptionString) { | ||
| 21 | override val type = TYPE_SLIDER | 24 | override val type = TYPE_SLIDER |
| 22 | 25 | ||
| 23 | fun getSelectedValue(needsGlobal: Boolean = false) = | 26 | fun getSelectedValue(needsGlobal: Boolean = false) = |
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 ba7920f50..5260ff4dc 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 | |||
| @@ -3,15 +3,18 @@ | |||
| 3 | 3 | ||
| 4 | package org.yuzu.yuzu_emu.features.settings.model.view | 4 | package org.yuzu.yuzu_emu.features.settings.model.view |
| 5 | 5 | ||
| 6 | import androidx.annotation.StringRes | ||
| 6 | import org.yuzu.yuzu_emu.features.settings.model.AbstractStringSetting | 7 | import org.yuzu.yuzu_emu.features.settings.model.AbstractStringSetting |
| 7 | 8 | ||
| 8 | class StringSingleChoiceSetting( | 9 | class StringSingleChoiceSetting( |
| 9 | private val stringSetting: AbstractStringSetting, | 10 | private val stringSetting: AbstractStringSetting, |
| 10 | titleId: Int, | 11 | @StringRes titleId: Int = 0, |
| 11 | descriptionId: Int, | 12 | titleString: String = "", |
| 13 | @StringRes descriptionId: Int = 0, | ||
| 14 | descriptionString: String = "", | ||
| 12 | val choices: Array<String>, | 15 | val choices: Array<String>, |
| 13 | val values: Array<String> | 16 | val values: Array<String> |
| 14 | ) : SettingsItem(stringSetting, titleId, descriptionId) { | 17 | ) : SettingsItem(stringSetting, titleId, titleString, descriptionId, descriptionString) { |
| 15 | override val type = TYPE_STRING_SINGLE_CHOICE | 18 | override val type = TYPE_STRING_SINGLE_CHOICE |
| 16 | 19 | ||
| 17 | fun getValueAt(index: Int): String = | 20 | fun getValueAt(index: Int): String = |
| @@ -20,7 +23,7 @@ class StringSingleChoiceSetting( | |||
| 20 | fun getSelectedValue(needsGlobal: Boolean = false) = stringSetting.getString(needsGlobal) | 23 | fun getSelectedValue(needsGlobal: Boolean = false) = stringSetting.getString(needsGlobal) |
| 21 | fun setSelectedValue(value: String) = stringSetting.setString(value) | 24 | fun setSelectedValue(value: String) = stringSetting.setString(value) |
| 22 | 25 | ||
| 23 | val selectValueIndex: Int | 26 | val selectedValueIndex: Int |
| 24 | get() { | 27 | get() { |
| 25 | for (i in values.indices) { | 28 | for (i in values.indices) { |
| 26 | if (values[i] == getSelectedValue()) { | 29 | if (values[i] == getSelectedValue()) { |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SubmenuSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SubmenuSetting.kt index 94953b18a..c722393dd 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SubmenuSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SubmenuSetting.kt | |||
| @@ -8,10 +8,12 @@ import androidx.annotation.StringRes | |||
| 8 | import org.yuzu.yuzu_emu.features.settings.model.Settings | 8 | import org.yuzu.yuzu_emu.features.settings.model.Settings |
| 9 | 9 | ||
| 10 | class SubmenuSetting( | 10 | class SubmenuSetting( |
| 11 | @StringRes titleId: Int, | 11 | @StringRes titleId: Int = 0, |
| 12 | @StringRes descriptionId: Int, | 12 | titleString: String = "", |
| 13 | @DrawableRes val iconId: Int, | 13 | @StringRes descriptionId: Int = 0, |
| 14 | descriptionString: String = "", | ||
| 15 | @DrawableRes val iconId: Int = 0, | ||
| 14 | val menuKey: Settings.MenuTag | 16 | val menuKey: Settings.MenuTag |
| 15 | ) : SettingsItem(emptySetting, titleId, descriptionId) { | 17 | ) : SettingsItem(emptySetting, titleId, titleString, descriptionId, descriptionString) { |
| 16 | override val type = TYPE_SUBMENU | 18 | override val type = TYPE_SUBMENU |
| 17 | } | 19 | } |
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 44d47dd69..4984bf52e 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 | |||
| @@ -3,15 +3,18 @@ | |||
| 3 | 3 | ||
| 4 | package org.yuzu.yuzu_emu.features.settings.model.view | 4 | package org.yuzu.yuzu_emu.features.settings.model.view |
| 5 | 5 | ||
| 6 | import androidx.annotation.StringRes | ||
| 6 | import org.yuzu.yuzu_emu.features.settings.model.AbstractBooleanSetting | 7 | import org.yuzu.yuzu_emu.features.settings.model.AbstractBooleanSetting |
| 7 | import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting | 8 | import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting |
| 8 | import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting | 9 | import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting |
| 9 | 10 | ||
| 10 | class SwitchSetting( | 11 | class SwitchSetting( |
| 11 | setting: AbstractSetting, | 12 | setting: AbstractSetting, |
| 12 | titleId: Int, | 13 | @StringRes titleId: Int = 0, |
| 13 | descriptionId: Int | 14 | titleString: String = "", |
| 14 | ) : SettingsItem(setting, titleId, descriptionId) { | 15 | @StringRes descriptionId: Int = 0, |
| 16 | descriptionString: String = "" | ||
| 17 | ) : SettingsItem(setting, titleId, titleString, descriptionId, descriptionString) { | ||
| 15 | override val type = TYPE_SWITCH | 18 | override val type = TYPE_SWITCH |
| 16 | 19 | ||
| 17 | fun getIsChecked(needsGlobal: Boolean = false): Boolean { | 20 | fun getIsChecked(needsGlobal: Boolean = false): Boolean { |
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 db1a58147..5d495a7ca 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 | |||
| @@ -84,42 +84,41 @@ class SettingsFragmentPresenter( | |||
| 84 | sl.apply { | 84 | sl.apply { |
| 85 | add( | 85 | add( |
| 86 | SubmenuSetting( | 86 | SubmenuSetting( |
| 87 | R.string.preferences_system, | 87 | titleId = R.string.preferences_system, |
| 88 | R.string.preferences_system_description, | 88 | descriptionId = R.string.preferences_system_description, |
| 89 | R.drawable.ic_system_settings, | 89 | iconId = R.drawable.ic_system_settings, |
| 90 | Settings.MenuTag.SECTION_SYSTEM | 90 | menuKey = MenuTag.SECTION_SYSTEM |
| 91 | ) | 91 | ) |
| 92 | ) | 92 | ) |
| 93 | add( | 93 | add( |
| 94 | SubmenuSetting( | 94 | SubmenuSetting( |
| 95 | R.string.preferences_graphics, | 95 | titleId = R.string.preferences_graphics, |
| 96 | R.string.preferences_graphics_description, | 96 | descriptionId = R.string.preferences_graphics_description, |
| 97 | R.drawable.ic_graphics, | 97 | iconId = R.drawable.ic_graphics, |
| 98 | Settings.MenuTag.SECTION_RENDERER | 98 | menuKey = MenuTag.SECTION_RENDERER |
| 99 | ) | 99 | ) |
| 100 | ) | 100 | ) |
| 101 | add( | 101 | add( |
| 102 | SubmenuSetting( | 102 | SubmenuSetting( |
| 103 | R.string.preferences_audio, | 103 | titleId = R.string.preferences_audio, |
| 104 | R.string.preferences_audio_description, | 104 | descriptionId = R.string.preferences_audio_description, |
| 105 | R.drawable.ic_audio, | 105 | iconId = R.drawable.ic_audio, |
| 106 | Settings.MenuTag.SECTION_AUDIO | 106 | menuKey = MenuTag.SECTION_AUDIO |
| 107 | ) | 107 | ) |
| 108 | ) | 108 | ) |
| 109 | add( | 109 | add( |
| 110 | SubmenuSetting( | 110 | SubmenuSetting( |
| 111 | R.string.preferences_debug, | 111 | titleId = R.string.preferences_debug, |
| 112 | R.string.preferences_debug_description, | 112 | descriptionId = R.string.preferences_debug_description, |
| 113 | R.drawable.ic_code, | 113 | iconId = R.drawable.ic_code, |
| 114 | Settings.MenuTag.SECTION_DEBUG | 114 | menuKey = MenuTag.SECTION_DEBUG |
| 115 | ) | 115 | ) |
| 116 | ) | 116 | ) |
| 117 | add( | 117 | add( |
| 118 | RunnableSetting( | 118 | RunnableSetting( |
| 119 | R.string.reset_to_default, | 119 | titleId = R.string.reset_to_default, |
| 120 | R.string.reset_to_default_description, | 120 | descriptionId = R.string.reset_to_default_description, |
| 121 | false, | 121 | iconId = R.drawable.ic_restore |
| 122 | R.drawable.ic_restore | ||
| 123 | ) { settingsViewModel.setShouldShowResetSettingsDialog(true) } | 122 | ) { settingsViewModel.setShouldShowResetSettingsDialog(true) } |
| 124 | ) | 123 | ) |
| 125 | } | 124 | } |
| @@ -186,20 +185,18 @@ class SettingsFragmentPresenter( | |||
| 186 | add( | 185 | add( |
| 187 | SingleChoiceSetting( | 186 | SingleChoiceSetting( |
| 188 | theme, | 187 | theme, |
| 189 | R.string.change_app_theme, | 188 | titleId = R.string.change_app_theme, |
| 190 | 0, | 189 | choicesId = R.array.themeEntriesA12, |
| 191 | R.array.themeEntriesA12, | 190 | valuesId = R.array.themeValuesA12 |
| 192 | R.array.themeValuesA12 | ||
| 193 | ) | 191 | ) |
| 194 | ) | 192 | ) |
| 195 | } else { | 193 | } else { |
| 196 | add( | 194 | add( |
| 197 | SingleChoiceSetting( | 195 | SingleChoiceSetting( |
| 198 | theme, | 196 | theme, |
| 199 | R.string.change_app_theme, | 197 | titleId = R.string.change_app_theme, |
| 200 | 0, | 198 | choicesId = R.array.themeEntries, |
| 201 | R.array.themeEntries, | 199 | valuesId = R.array.themeValues |
| 202 | R.array.themeValues | ||
| 203 | ) | 200 | ) |
| 204 | ) | 201 | ) |
| 205 | } | 202 | } |
| @@ -228,10 +225,9 @@ class SettingsFragmentPresenter( | |||
| 228 | add( | 225 | add( |
| 229 | SingleChoiceSetting( | 226 | SingleChoiceSetting( |
| 230 | themeMode, | 227 | themeMode, |
| 231 | R.string.change_theme_mode, | 228 | titleId = R.string.change_theme_mode, |
| 232 | 0, | 229 | choicesId = R.array.themeModeEntries, |
| 233 | R.array.themeModeEntries, | 230 | valuesId = R.array.themeModeValues |
| 234 | R.array.themeModeValues | ||
| 235 | ) | 231 | ) |
| 236 | ) | 232 | ) |
| 237 | 233 | ||
| @@ -262,8 +258,8 @@ class SettingsFragmentPresenter( | |||
| 262 | add( | 258 | add( |
| 263 | SwitchSetting( | 259 | SwitchSetting( |
| 264 | blackBackgrounds, | 260 | blackBackgrounds, |
| 265 | R.string.use_black_backgrounds, | 261 | titleId = R.string.use_black_backgrounds, |
| 266 | R.string.use_black_backgrounds_description | 262 | descriptionId = R.string.use_black_backgrounds_description |
| 267 | ) | 263 | ) |
| 268 | ) | 264 | ) |
| 269 | } | 265 | } |
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 5ad0899dd..a43f7b1fe 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 | |||
| @@ -21,9 +21,9 @@ class DateTimeViewHolder(val binding: ListItemSettingBinding, adapter: SettingsA | |||
| 21 | 21 | ||
| 22 | override fun bind(item: SettingsItem) { | 22 | override fun bind(item: SettingsItem) { |
| 23 | setting = item as DateTimeSetting | 23 | setting = item as DateTimeSetting |
| 24 | binding.textSettingName.setText(item.nameId) | 24 | binding.textSettingName.text = item.title |
| 25 | if (item.descriptionId != 0) { | 25 | if (setting.description.isNotEmpty()) { |
| 26 | binding.textSettingDescription.setText(item.descriptionId) | 26 | binding.textSettingDescription.text = item.description |
| 27 | binding.textSettingDescription.visibility = View.VISIBLE | 27 | binding.textSettingDescription.visibility = View.VISIBLE |
| 28 | } else { | 28 | } else { |
| 29 | binding.textSettingDescription.visibility = View.GONE | 29 | binding.textSettingDescription.visibility = View.GONE |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/HeaderViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/HeaderViewHolder.kt index f5bcf705c..0815c36e2 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/HeaderViewHolder.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/HeaderViewHolder.kt | |||
| @@ -16,7 +16,7 @@ class HeaderViewHolder(val binding: ListItemSettingsHeaderBinding, adapter: Sett | |||
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | override fun bind(item: SettingsItem) { | 18 | override fun bind(item: SettingsItem) { |
| 19 | binding.textHeaderName.setText(item.nameId) | 19 | binding.textHeaderName.text = item.title |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | override fun onClick(clicked: View) { | 22 | override fun onClick(clicked: View) { |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/RunnableViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/RunnableViewHolder.kt index 507184238..2841520a5 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/RunnableViewHolder.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/RunnableViewHolder.kt | |||
| @@ -5,7 +5,6 @@ package org.yuzu.yuzu_emu.features.settings.ui.viewholder | |||
| 5 | 5 | ||
| 6 | import android.view.View | 6 | import android.view.View |
| 7 | import androidx.core.content.res.ResourcesCompat | 7 | import androidx.core.content.res.ResourcesCompat |
| 8 | import org.yuzu.yuzu_emu.NativeLibrary | ||
| 9 | import org.yuzu.yuzu_emu.databinding.ListItemSettingBinding | 8 | import org.yuzu.yuzu_emu.databinding.ListItemSettingBinding |
| 10 | import org.yuzu.yuzu_emu.features.settings.model.view.RunnableSetting | 9 | import org.yuzu.yuzu_emu.features.settings.model.view.RunnableSetting |
| 11 | import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem | 10 | import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem |
| @@ -17,12 +16,12 @@ class RunnableViewHolder(val binding: ListItemSettingBinding, adapter: SettingsA | |||
| 17 | 16 | ||
| 18 | override fun bind(item: SettingsItem) { | 17 | override fun bind(item: SettingsItem) { |
| 19 | setting = item as RunnableSetting | 18 | setting = item as RunnableSetting |
| 20 | if (item.iconId != 0) { | 19 | if (setting.iconId != 0) { |
| 21 | binding.icon.visibility = View.VISIBLE | 20 | binding.icon.visibility = View.VISIBLE |
| 22 | binding.icon.setImageDrawable( | 21 | binding.icon.setImageDrawable( |
| 23 | ResourcesCompat.getDrawable( | 22 | ResourcesCompat.getDrawable( |
| 24 | binding.icon.resources, | 23 | binding.icon.resources, |
| 25 | item.iconId, | 24 | setting.iconId, |
| 26 | binding.icon.context.theme | 25 | binding.icon.context.theme |
| 27 | ) | 26 | ) |
| 28 | ) | 27 | ) |
| @@ -30,8 +29,8 @@ class RunnableViewHolder(val binding: ListItemSettingBinding, adapter: SettingsA | |||
| 30 | binding.icon.visibility = View.GONE | 29 | binding.icon.visibility = View.GONE |
| 31 | } | 30 | } |
| 32 | 31 | ||
| 33 | binding.textSettingName.setText(item.nameId) | 32 | binding.textSettingName.text = setting.title |
| 34 | if (item.descriptionId != 0) { | 33 | if (setting.description.isNotEmpty()) { |
| 35 | binding.textSettingDescription.setText(item.descriptionId) | 34 | binding.textSettingDescription.setText(item.descriptionId) |
| 36 | binding.textSettingDescription.visibility = View.VISIBLE | 35 | binding.textSettingDescription.visibility = View.VISIBLE |
| 37 | } else { | 36 | } else { |
| @@ -44,7 +43,7 @@ class RunnableViewHolder(val binding: ListItemSettingBinding, adapter: SettingsA | |||
| 44 | } | 43 | } |
| 45 | 44 | ||
| 46 | override fun onClick(clicked: View) { | 45 | override fun onClick(clicked: View) { |
| 47 | if (!setting.isRuntimeRunnable && !NativeLibrary.isRunning()) { | 46 | if (setting.isRunnable) { |
| 48 | setting.runnable.invoke() | 47 | setting.runnable.invoke() |
| 49 | } | 48 | } |
| 50 | } | 49 | } |
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 02dab3785..2cecede48 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 | |||
| @@ -5,6 +5,7 @@ package org.yuzu.yuzu_emu.features.settings.ui.viewholder | |||
| 5 | 5 | ||
| 6 | import android.view.View | 6 | import android.view.View |
| 7 | import org.yuzu.yuzu_emu.databinding.ListItemSettingBinding | 7 | import org.yuzu.yuzu_emu.databinding.ListItemSettingBinding |
| 8 | import org.yuzu.yuzu_emu.features.settings.model.view.IntSingleChoiceSetting | ||
| 8 | import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem | 9 | import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem |
| 9 | import org.yuzu.yuzu_emu.features.settings.model.view.SingleChoiceSetting | 10 | import org.yuzu.yuzu_emu.features.settings.model.view.SingleChoiceSetting |
| 10 | import org.yuzu.yuzu_emu.features.settings.model.view.StringSingleChoiceSetting | 11 | import org.yuzu.yuzu_emu.features.settings.model.view.StringSingleChoiceSetting |
| @@ -17,30 +18,33 @@ class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: Setti | |||
| 17 | 18 | ||
| 18 | override fun bind(item: SettingsItem) { | 19 | override fun bind(item: SettingsItem) { |
| 19 | setting = item | 20 | setting = item |
| 20 | binding.textSettingName.setText(item.nameId) | 21 | binding.textSettingName.text = setting.title |
| 21 | if (item.descriptionId != 0) { | 22 | if (item.description.isNotEmpty()) { |
| 22 | binding.textSettingDescription.setText(item.descriptionId) | 23 | binding.textSettingDescription.text = item.description |
| 23 | binding.textSettingDescription.visibility = View.VISIBLE | 24 | binding.textSettingDescription.visibility = View.VISIBLE |
| 24 | } else { | 25 | } else { |
| 25 | binding.textSettingDescription.visibility = View.GONE | 26 | binding.textSettingDescription.visibility = View.GONE |
| 26 | } | 27 | } |
| 27 | 28 | ||
| 28 | binding.textSettingValue.visibility = View.VISIBLE | 29 | binding.textSettingValue.visibility = View.VISIBLE |
| 29 | if (item is SingleChoiceSetting) { | 30 | when (item) { |
| 30 | val resMgr = binding.textSettingValue.context.resources | 31 | is SingleChoiceSetting -> { |
| 31 | val values = resMgr.getIntArray(item.valuesId) | 32 | val resMgr = binding.textSettingValue.context.resources |
| 32 | for (i in values.indices) { | 33 | val values = resMgr.getIntArray(item.valuesId) |
| 33 | if (values[i] == item.getSelectedValue()) { | 34 | for (i in values.indices) { |
| 34 | binding.textSettingValue.text = resMgr.getStringArray(item.choicesId)[i] | 35 | if (values[i] == item.getSelectedValue()) { |
| 35 | break | 36 | binding.textSettingValue.text = resMgr.getStringArray(item.choicesId)[i] |
| 37 | break | ||
| 38 | } | ||
| 36 | } | 39 | } |
| 37 | } | 40 | } |
| 38 | } else if (item is StringSingleChoiceSetting) { | 41 | |
| 39 | for (i in item.values.indices) { | 42 | is StringSingleChoiceSetting -> { |
| 40 | if (item.values[i] == item.getSelectedValue()) { | 43 | binding.textSettingValue.text = item.getSelectedValue() |
| 41 | binding.textSettingValue.text = item.choices[i] | 44 | } |
| 42 | break | 45 | |
| 43 | } | 46 | is IntSingleChoiceSetting -> { |
| 47 | binding.textSettingValue.text = item.getChoiceAt(item.getSelectedValue()) | ||
| 44 | } | 48 | } |
| 45 | } | 49 | } |
| 46 | 50 | ||
| @@ -63,16 +67,25 @@ class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: Setti | |||
| 63 | return | 67 | return |
| 64 | } | 68 | } |
| 65 | 69 | ||
| 66 | if (setting is SingleChoiceSetting) { | 70 | when (setting) { |
| 67 | adapter.onSingleChoiceClick( | 71 | is SingleChoiceSetting -> adapter.onSingleChoiceClick( |
| 68 | (setting as SingleChoiceSetting), | 72 | setting as SingleChoiceSetting, |
| 69 | bindingAdapterPosition | ||
| 70 | ) | ||
| 71 | } else if (setting is StringSingleChoiceSetting) { | ||
| 72 | adapter.onStringSingleChoiceClick( | ||
| 73 | (setting as StringSingleChoiceSetting), | ||
| 74 | bindingAdapterPosition | 73 | bindingAdapterPosition |
| 75 | ) | 74 | ) |
| 75 | |||
| 76 | is StringSingleChoiceSetting -> { | ||
| 77 | adapter.onStringSingleChoiceClick( | ||
| 78 | setting as StringSingleChoiceSetting, | ||
| 79 | bindingAdapterPosition | ||
| 80 | ) | ||
| 81 | } | ||
| 82 | |||
| 83 | is IntSingleChoiceSetting -> { | ||
| 84 | adapter.onIntSingleChoiceClick( | ||
| 85 | setting as IntSingleChoiceSetting, | ||
| 86 | bindingAdapterPosition | ||
| 87 | ) | ||
| 88 | } | ||
| 76 | } | 89 | } |
| 77 | } | 90 | } |
| 78 | 91 | ||
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 596c18012..fcfac040e 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 | |||
| @@ -17,9 +17,9 @@ class SliderViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAda | |||
| 17 | 17 | ||
| 18 | override fun bind(item: SettingsItem) { | 18 | override fun bind(item: SettingsItem) { |
| 19 | setting = item as SliderSetting | 19 | setting = item as SliderSetting |
| 20 | binding.textSettingName.setText(item.nameId) | 20 | binding.textSettingName.text = setting.title |
| 21 | if (item.descriptionId != 0) { | 21 | if (item.description.isNotEmpty()) { |
| 22 | binding.textSettingDescription.setText(item.descriptionId) | 22 | binding.textSettingDescription.text = setting.description |
| 23 | binding.textSettingDescription.visibility = View.VISIBLE | 23 | binding.textSettingDescription.visibility = View.VISIBLE |
| 24 | } else { | 24 | } else { |
| 25 | binding.textSettingDescription.visibility = View.GONE | 25 | binding.textSettingDescription.visibility = View.GONE |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SubmenuViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SubmenuViewHolder.kt index 20d35a17d..165c765b3 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SubmenuViewHolder.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SubmenuViewHolder.kt | |||
| @@ -12,16 +12,16 @@ import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter | |||
| 12 | 12 | ||
| 13 | class SubmenuViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) : | 13 | class SubmenuViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) : |
| 14 | SettingViewHolder(binding.root, adapter) { | 14 | SettingViewHolder(binding.root, adapter) { |
| 15 | private lateinit var item: SubmenuSetting | 15 | private lateinit var setting: SubmenuSetting |
| 16 | 16 | ||
| 17 | override fun bind(item: SettingsItem) { | 17 | override fun bind(item: SettingsItem) { |
| 18 | this.item = item as SubmenuSetting | 18 | setting = item as SubmenuSetting |
| 19 | if (item.iconId != 0) { | 19 | if (setting.iconId != 0) { |
| 20 | binding.icon.visibility = View.VISIBLE | 20 | binding.icon.visibility = View.VISIBLE |
| 21 | binding.icon.setImageDrawable( | 21 | binding.icon.setImageDrawable( |
| 22 | ResourcesCompat.getDrawable( | 22 | ResourcesCompat.getDrawable( |
| 23 | binding.icon.resources, | 23 | binding.icon.resources, |
| 24 | item.iconId, | 24 | setting.iconId, |
| 25 | binding.icon.context.theme | 25 | binding.icon.context.theme |
| 26 | ) | 26 | ) |
| 27 | ) | 27 | ) |
| @@ -29,9 +29,9 @@ class SubmenuViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAd | |||
| 29 | binding.icon.visibility = View.GONE | 29 | binding.icon.visibility = View.GONE |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | binding.textSettingName.setText(item.nameId) | 32 | binding.textSettingName.text = setting.title |
| 33 | if (item.descriptionId != 0) { | 33 | if (setting.description.isNotEmpty()) { |
| 34 | binding.textSettingDescription.setText(item.descriptionId) | 34 | binding.textSettingDescription.text = setting.description |
| 35 | binding.textSettingDescription.visibility = View.VISIBLE | 35 | binding.textSettingDescription.visibility = View.VISIBLE |
| 36 | } else { | 36 | } else { |
| 37 | binding.textSettingDescription.visibility = View.GONE | 37 | binding.textSettingDescription.visibility = View.GONE |
| @@ -41,7 +41,7 @@ class SubmenuViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAd | |||
| 41 | } | 41 | } |
| 42 | 42 | ||
| 43 | override fun onClick(clicked: View) { | 43 | override fun onClick(clicked: View) { |
| 44 | adapter.onSubmenuClick(item) | 44 | adapter.onSubmenuClick(setting) |
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | override fun onLongClick(clicked: View): Boolean { | 47 | override fun onLongClick(clicked: View): Boolean { |
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 d26bf9374..f779a7b60 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 | |||
| @@ -18,19 +18,18 @@ class SwitchSettingViewHolder(val binding: ListItemSettingSwitchBinding, adapter | |||
| 18 | 18 | ||
| 19 | override fun bind(item: SettingsItem) { | 19 | override fun bind(item: SettingsItem) { |
| 20 | setting = item as SwitchSetting | 20 | setting = item as SwitchSetting |
| 21 | binding.textSettingName.setText(item.nameId) | 21 | binding.textSettingName.text = setting.title |
| 22 | if (item.descriptionId != 0) { | 22 | if (setting.description.isNotEmpty()) { |
| 23 | binding.textSettingDescription.setText(item.descriptionId) | 23 | binding.textSettingDescription.text = setting.description |
| 24 | binding.textSettingDescription.visibility = View.VISIBLE | 24 | binding.textSettingDescription.visibility = View.VISIBLE |
| 25 | } else { | 25 | } else { |
| 26 | binding.textSettingDescription.text = "" | ||
| 27 | binding.textSettingDescription.visibility = View.GONE | 26 | binding.textSettingDescription.visibility = View.GONE |
| 28 | } | 27 | } |
| 29 | 28 | ||
| 30 | binding.switchWidget.setOnCheckedChangeListener(null) | 29 | binding.switchWidget.setOnCheckedChangeListener(null) |
| 31 | binding.switchWidget.isChecked = setting.getIsChecked(setting.needsRuntimeGlobal) | 30 | binding.switchWidget.isChecked = setting.getIsChecked(setting.needsRuntimeGlobal) |
| 32 | binding.switchWidget.setOnCheckedChangeListener { _: CompoundButton, _: Boolean -> | 31 | binding.switchWidget.setOnCheckedChangeListener { _: CompoundButton, _: Boolean -> |
| 33 | adapter.onBooleanClick(item, binding.switchWidget.isChecked, bindingAdapterPosition) | 32 | adapter.onBooleanClick(setting, binding.switchWidget.isChecked, bindingAdapterPosition) |
| 34 | } | 33 | } |
| 35 | 34 | ||
| 36 | binding.buttonClear.visibility = if (setting.setting.global || | 35 | binding.buttonClear.visibility = if (setting.setting.global || |