summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/DateTimeSetting.kt9
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/HeaderSetting.kt7
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/RunnableSetting.kt9
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt233
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SingleChoiceSetting.kt14
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SliderSetting.kt15
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/StringSingleChoiceSetting.kt11
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SubmenuSetting.kt10
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SwitchSetting.kt9
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt64
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/DateTimeViewHolder.kt6
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/HeaderViewHolder.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/RunnableViewHolder.kt11
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SingleChoiceViewHolder.kt61
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SliderViewHolder.kt6
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SubmenuViewHolder.kt16
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt9
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
4package org.yuzu.yuzu_emu.features.settings.model.view 4package org.yuzu.yuzu_emu.features.settings.model.view
5 5
6import androidx.annotation.StringRes
6import org.yuzu.yuzu_emu.features.settings.model.AbstractLongSetting 7import org.yuzu.yuzu_emu.features.settings.model.AbstractLongSetting
7 8
8class DateTimeSetting( 9class 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
4package org.yuzu.yuzu_emu.features.settings.model.view 4package org.yuzu.yuzu_emu.features.settings.model.view
5 5
6import androidx.annotation.StringRes
7
6class HeaderSetting( 8class 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 @@
4package org.yuzu.yuzu_emu.features.settings.model.view 4package org.yuzu.yuzu_emu.features.settings.model.view
5 5
6import androidx.annotation.DrawableRes 6import androidx.annotation.DrawableRes
7import androidx.annotation.StringRes
7 8
8class RunnableSetting( 9class 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
4package org.yuzu.yuzu_emu.features.settings.model.view 4package org.yuzu.yuzu_emu.features.settings.model.view
5 5
6import androidx.annotation.StringRes
6import org.yuzu.yuzu_emu.NativeLibrary 7import org.yuzu.yuzu_emu.NativeLibrary
7import org.yuzu.yuzu_emu.R 8import org.yuzu.yuzu_emu.R
9import org.yuzu.yuzu_emu.YuzuApplication
10import org.yuzu.yuzu_emu.features.input.NativeInput
11import org.yuzu.yuzu_emu.features.input.model.NpadStyleIndex
8import org.yuzu.yuzu_emu.features.settings.model.AbstractBooleanSetting 12import org.yuzu.yuzu_emu.features.settings.model.AbstractBooleanSetting
9import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting 13import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
10import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting 14import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting
@@ -23,13 +27,34 @@ import org.yuzu.yuzu_emu.utils.NativeConfig
23 */ 27 */
24abstract class SettingsItem( 28abstract 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
4package org.yuzu.yuzu_emu.features.settings.model.view 4package org.yuzu.yuzu_emu.features.settings.model.view
5 5
6import androidx.annotation.ArrayRes
7import androidx.annotation.StringRes
6import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting 8import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting
7import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting 9import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
8 10
9class SingleChoiceSetting( 11class 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
4package org.yuzu.yuzu_emu.features.settings.model.view 4package org.yuzu.yuzu_emu.features.settings.model.view
5 5
6import androidx.annotation.StringRes
6import org.yuzu.yuzu_emu.features.settings.model.AbstractByteSetting 7import org.yuzu.yuzu_emu.features.settings.model.AbstractByteSetting
7import org.yuzu.yuzu_emu.features.settings.model.AbstractFloatSetting 8import org.yuzu.yuzu_emu.features.settings.model.AbstractFloatSetting
8import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting 9import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting
@@ -12,12 +13,14 @@ import kotlin.math.roundToInt
12 13
13class SliderSetting( 14class 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
4package org.yuzu.yuzu_emu.features.settings.model.view 4package org.yuzu.yuzu_emu.features.settings.model.view
5 5
6import androidx.annotation.StringRes
6import org.yuzu.yuzu_emu.features.settings.model.AbstractStringSetting 7import org.yuzu.yuzu_emu.features.settings.model.AbstractStringSetting
7 8
8class StringSingleChoiceSetting( 9class 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
8import org.yuzu.yuzu_emu.features.settings.model.Settings 8import org.yuzu.yuzu_emu.features.settings.model.Settings
9 9
10class SubmenuSetting( 10class 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
4package org.yuzu.yuzu_emu.features.settings.model.view 4package org.yuzu.yuzu_emu.features.settings.model.view
5 5
6import androidx.annotation.StringRes
6import org.yuzu.yuzu_emu.features.settings.model.AbstractBooleanSetting 7import org.yuzu.yuzu_emu.features.settings.model.AbstractBooleanSetting
7import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting 8import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting
8import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting 9import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
9 10
10class SwitchSetting( 11class 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
6import android.view.View 6import android.view.View
7import androidx.core.content.res.ResourcesCompat 7import androidx.core.content.res.ResourcesCompat
8import org.yuzu.yuzu_emu.NativeLibrary
9import org.yuzu.yuzu_emu.databinding.ListItemSettingBinding 8import org.yuzu.yuzu_emu.databinding.ListItemSettingBinding
10import org.yuzu.yuzu_emu.features.settings.model.view.RunnableSetting 9import org.yuzu.yuzu_emu.features.settings.model.view.RunnableSetting
11import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem 10import 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
6import android.view.View 6import android.view.View
7import org.yuzu.yuzu_emu.databinding.ListItemSettingBinding 7import org.yuzu.yuzu_emu.databinding.ListItemSettingBinding
8import org.yuzu.yuzu_emu.features.settings.model.view.IntSingleChoiceSetting
8import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem 9import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem
9import org.yuzu.yuzu_emu.features.settings.model.view.SingleChoiceSetting 10import org.yuzu.yuzu_emu.features.settings.model.view.SingleChoiceSetting
10import org.yuzu.yuzu_emu.features.settings.model.view.StringSingleChoiceSetting 11import 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
13class SubmenuViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) : 13class 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 ||