summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Charles Lombardo2023-08-21 21:48:21 -0400
committerGravatar Charles Lombardo2023-08-29 19:40:18 -0400
commitf5e6b12c74243736a1dc29d297dd2eb1d0c3a4b2 (patch)
tree76ee1b16e27c98cfb41645db1111ec41947bd181
parentandroid: Expose interface for getting settings from native code (diff)
downloadyuzu-f5e6b12c74243736a1dc29d297dd2eb1d0c3a4b2.tar.gz
yuzu-f5e6b12c74243736a1dc29d297dd2eb1d0c3a4b2.tar.xz
yuzu-f5e6b12c74243736a1dc29d297dd2eb1d0c3a4b2.zip
android: Trim settings enums and items
Take advantage of the new settings interface to reduce the amount of code we need for each setting item. Additionally make all settings items non-null to improve brevity.
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractSetting.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/DateTimeSetting.kt25
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/HeaderSetting.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/RunnableSetting.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt12
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SingleChoiceSetting.kt37
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SliderSetting.kt63
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/StringSingleChoiceSetting.kt46
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SubmenuSetting.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SwitchSetting.kt53
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt16
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt184
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/DateTimeViewHolder.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SingleChoiceViewHolder.kt4
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SliderViewHolder.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt2
16 files changed, 133 insertions, 321 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractSetting.kt
index 7afed95ad..724a2ecb8 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractSetting.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/AbstractSetting.kt
@@ -15,5 +15,5 @@ interface AbstractSetting {
15 val isRuntimeModifiable: Boolean 15 val isRuntimeModifiable: Boolean
16 get() = NativeConfig.getIsRuntimeModifiable(key!!) 16 get() = NativeConfig.getIsRuntimeModifiable(key!!)
17 17
18 fun reset() = run { } 18 fun reset()
19} 19}
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 7c858916e..8bc164197 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
@@ -4,28 +4,15 @@
4package org.yuzu.yuzu_emu.features.settings.model.view 4package org.yuzu.yuzu_emu.features.settings.model.view
5 5
6import org.yuzu.yuzu_emu.features.settings.model.AbstractLongSetting 6import org.yuzu.yuzu_emu.features.settings.model.AbstractLongSetting
7import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
8 7
9class DateTimeSetting( 8class DateTimeSetting(
10 setting: AbstractSetting?, 9 private val longSetting: AbstractLongSetting,
11 titleId: Int, 10 titleId: Int,
12 descriptionId: Int, 11 descriptionId: Int
13 val key: String? = null, 12) : SettingsItem(longSetting, titleId, descriptionId) {
14 private val defaultValue: Long? = null
15) : SettingsItem(setting, titleId, descriptionId) {
16 override val type = TYPE_DATETIME_SETTING 13 override val type = TYPE_DATETIME_SETTING
17 14
18 val value: Long 15 var value: Long
19 get() = if (setting != null) { 16 get() = longSetting.long
20 val setting = setting as AbstractLongSetting 17 set(value) = (setting as AbstractLongSetting).setLong(value)
21 setting.long
22 } else {
23 defaultValue!!
24 }
25
26 fun setSelectedValue(datetime: Long): AbstractLongSetting {
27 val longSetting = setting as AbstractLongSetting
28 longSetting.setLong(datetime)
29 return longSetting
30 }
31} 18}
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 a67001311..d31ce1c31 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
@@ -5,6 +5,6 @@ package org.yuzu.yuzu_emu.features.settings.model.view
5 5
6class HeaderSetting( 6class HeaderSetting(
7 titleId: Int 7 titleId: Int
8) : SettingsItem(null, titleId, 0) { 8) : SettingsItem(emptySetting, titleId, 0) {
9 override val type = TYPE_HEADER 9 override val type = TYPE_HEADER
10} 10}
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 caaab50d8..522cc49df 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
@@ -8,6 +8,6 @@ class RunnableSetting(
8 descriptionId: Int, 8 descriptionId: Int,
9 val isRuntimeRunnable: Boolean, 9 val isRuntimeRunnable: Boolean,
10 val runnable: () -> Unit 10 val runnable: () -> Unit
11) : SettingsItem(null, titleId, descriptionId) { 11) : SettingsItem(emptySetting, titleId, descriptionId) {
12 override val type = TYPE_RUNNABLE 12 override val type = TYPE_RUNNABLE
13} 13}
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 a6cba977c..3bdcc5bca 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
@@ -5,6 +5,7 @@ package org.yuzu.yuzu_emu.features.settings.model.view
5 5
6import org.yuzu.yuzu_emu.NativeLibrary 6import org.yuzu.yuzu_emu.NativeLibrary
7import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting 7import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
8import org.yuzu.yuzu_emu.features.settings.model.Settings
8 9
9/** 10/**
10 * ViewModel abstraction for an Item in the RecyclerView powering SettingsFragments. 11 * ViewModel abstraction for an Item in the RecyclerView powering SettingsFragments.
@@ -14,7 +15,7 @@ import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
14 * file.) 15 * file.)
15 */ 16 */
16abstract class SettingsItem( 17abstract class SettingsItem(
17 var setting: AbstractSetting?, 18 val setting: AbstractSetting,
18 val nameId: Int, 19 val nameId: Int,
19 val descriptionId: Int 20 val descriptionId: Int
20) { 21) {
@@ -23,7 +24,7 @@ abstract class SettingsItem(
23 val isEditable: Boolean 24 val isEditable: Boolean
24 get() { 25 get() {
25 if (!NativeLibrary.isRunning()) return true 26 if (!NativeLibrary.isRunning()) return true
26 return setting?.isRuntimeModifiable ?: false 27 return setting.isRuntimeModifiable
27 } 28 }
28 29
29 companion object { 30 companion object {
@@ -35,5 +36,12 @@ abstract class SettingsItem(
35 const val TYPE_STRING_SINGLE_CHOICE = 5 36 const val TYPE_STRING_SINGLE_CHOICE = 5
36 const val TYPE_DATETIME_SETTING = 6 37 const val TYPE_DATETIME_SETTING = 6
37 const val TYPE_RUNNABLE = 7 38 const val TYPE_RUNNABLE = 7
39
40 val emptySetting = object : AbstractSetting {
41 override val key: String = ""
42 override val category: Settings.Category = Settings.Category.Ui
43 override val defaultValue: Any = false
44 override fun reset() {}
45 }
38 } 46 }
39} 47}
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 b6a8c4612..705527a73 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
@@ -4,36 +4,27 @@
4package org.yuzu.yuzu_emu.features.settings.model.view 4package org.yuzu.yuzu_emu.features.settings.model.view
5 5
6import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting 6import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting
7import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
7 8
8class SingleChoiceSetting( 9class SingleChoiceSetting(
9 setting: AbstractIntSetting?, 10 setting: AbstractSetting,
10 titleId: Int, 11 titleId: Int,
11 descriptionId: Int, 12 descriptionId: Int,
12 val choicesId: Int, 13 val choicesId: Int,
13 val valuesId: Int, 14 val valuesId: Int
14 val key: String? = null,
15 val defaultValue: Int? = null
16) : SettingsItem(setting, titleId, descriptionId) { 15) : SettingsItem(setting, titleId, descriptionId) {
17 override val type = TYPE_SINGLE_CHOICE 16 override val type = TYPE_SINGLE_CHOICE
18 17
19 val selectedValue: Int 18 var selectedValue: Int
20 get() = if (setting != null) { 19 get() {
21 val setting = setting as AbstractIntSetting 20 return when (setting) {
22 setting.int 21 is AbstractIntSetting -> setting.int
23 } else { 22 else -> -1
24 defaultValue!! 23 }
24 }
25 set(value) {
26 when (setting) {
27 is AbstractIntSetting -> setting.setInt(value)
28 }
25 } 29 }
26
27 /**
28 * Write a value to the backing int. If that int was previously null,
29 * initializes a new one and returns it, so it can be added to the Hashmap.
30 *
31 * @param selection New value of the int.
32 * @return the existing setting with the new value applied.
33 */
34 fun setSelectedValue(selection: Int): AbstractIntSetting {
35 val intSetting = setting as AbstractIntSetting
36 intSetting.setInt(selection)
37 return intSetting
38 }
39} 30}
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 e71a29e35..c3b5df02c 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
@@ -4,75 +4,38 @@
4package org.yuzu.yuzu_emu.features.settings.model.view 4package org.yuzu.yuzu_emu.features.settings.model.view
5 5
6import org.yuzu.yuzu_emu.features.settings.model.AbstractByteSetting 6import org.yuzu.yuzu_emu.features.settings.model.AbstractByteSetting
7import kotlin.math.roundToInt
8import org.yuzu.yuzu_emu.features.settings.model.AbstractFloatSetting 7import org.yuzu.yuzu_emu.features.settings.model.AbstractFloatSetting
9import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting 8import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting
10import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting 9import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
11import org.yuzu.yuzu_emu.features.settings.model.AbstractShortSetting 10import org.yuzu.yuzu_emu.features.settings.model.AbstractShortSetting
12import org.yuzu.yuzu_emu.utils.Log 11import kotlin.math.roundToInt
13 12
14class SliderSetting( 13class SliderSetting(
15 setting: AbstractSetting?, 14 setting: AbstractSetting,
16 titleId: Int, 15 titleId: Int,
17 descriptionId: Int, 16 descriptionId: Int,
18 val min: Int, 17 val min: Int,
19 val max: Int, 18 val max: Int,
20 val units: String, 19 val units: String
21 val key: String? = null,
22 val defaultValue: Any? = null
23) : SettingsItem(setting, titleId, descriptionId) { 20) : SettingsItem(setting, titleId, descriptionId) {
24 override val type = TYPE_SLIDER 21 override val type = TYPE_SLIDER
25 22
26 val selectedValue: Any 23 var selectedValue: Int
27 get() { 24 get() {
28 val setting = setting ?: return defaultValue!!
29 return when (setting) { 25 return when (setting) {
30 is AbstractByteSetting -> setting.byte.toInt() 26 is AbstractByteSetting -> setting.byte.toInt()
31 is AbstractShortSetting -> setting.short.toInt() 27 is AbstractShortSetting -> setting.short.toInt()
32 is AbstractIntSetting -> setting.int 28 is AbstractIntSetting -> setting.int
33 is AbstractFloatSetting -> setting.float.roundToInt() 29 is AbstractFloatSetting -> setting.float.roundToInt()
34 else -> { 30 else -> -1
35 Log.error("[SliderSetting] Error casting setting type.") 31 }
36 -1 32 }
37 } 33 set(value) {
34 when (setting) {
35 is AbstractByteSetting -> setting.setByte(value.toByte())
36 is AbstractShortSetting -> setting.setShort(value.toShort())
37 is AbstractIntSetting -> setting.setInt(value)
38 is AbstractFloatSetting -> setting.setFloat(value.toFloat())
38 } 39 }
39 } 40 }
40
41 /**
42 * Write a value to the backing int. If that int was previously null,
43 * initializes a new one and returns it, so it can be added to the Hashmap.
44 *
45 * @param selection New value of the int.
46 * @return the existing setting with the new value applied.
47 */
48 fun setSelectedValue(selection: Int): AbstractIntSetting {
49 val intSetting = setting as AbstractIntSetting
50 intSetting.setInt(selection)
51 return intSetting
52 }
53
54 /**
55 * Write a value to the backing float. If that float was previously null,
56 * initializes a new one and returns it, so it can be added to the Hashmap.
57 *
58 * @param selection New value of the float.
59 * @return the existing setting with the new value applied.
60 */
61 fun setSelectedValue(selection: Float): AbstractFloatSetting {
62 val floatSetting = setting as AbstractFloatSetting
63 floatSetting.setFloat(selection)
64 return floatSetting
65 }
66
67 fun setSelectedValue(selection: Short): AbstractShortSetting {
68 val shortSetting = setting as AbstractShortSetting
69 shortSetting.setShort(selection)
70 return shortSetting
71 }
72
73 fun setSelectedValue(selection: Byte): AbstractByteSetting {
74 val byteSetting = setting as AbstractByteSetting
75 byteSetting.setByte(selection)
76 return byteSetting
77 }
78} 41}
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 2195641e3..871dab4f3 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,57 +3,31 @@
3 3
4package org.yuzu.yuzu_emu.features.settings.model.view 4package org.yuzu.yuzu_emu.features.settings.model.view
5 5
6import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
7import org.yuzu.yuzu_emu.features.settings.model.AbstractStringSetting 6import org.yuzu.yuzu_emu.features.settings.model.AbstractStringSetting
8 7
9class StringSingleChoiceSetting( 8class StringSingleChoiceSetting(
10 setting: AbstractSetting?, 9 private val stringSetting: AbstractStringSetting,
11 titleId: Int, 10 titleId: Int,
12 descriptionId: Int, 11 descriptionId: Int,
13 val choices: Array<String>, 12 val choices: Array<String>,
14 val values: Array<String>?, 13 val values: Array<String>
15 val key: String? = null, 14) : SettingsItem(stringSetting, titleId, descriptionId) {
16 private val defaultValue: String? = null
17) : SettingsItem(setting, titleId, descriptionId) {
18 override val type = TYPE_STRING_SINGLE_CHOICE 15 override val type = TYPE_STRING_SINGLE_CHOICE
19 16
20 fun getValueAt(index: Int): String? { 17 fun getValueAt(index: Int): String =
21 if (values == null) return null 18 if (index >= 0 && index < values.size) values[index] else ""
22 return if (index >= 0 && index < values.size) { 19
23 values[index] 20 var selectedValue: String
24 } else { 21 get() = stringSetting.string
25 "" 22 set(value) = stringSetting.setString(value)
26 }
27 }
28 23
29 val selectedValue: String
30 get() = if (setting != null) {
31 val setting = setting as AbstractStringSetting
32 setting.string
33 } else {
34 defaultValue!!
35 }
36 val selectValueIndex: Int 24 val selectValueIndex: Int
37 get() { 25 get() {
38 val selectedValue = selectedValue 26 for (i in values.indices) {
39 for (i in values!!.indices) {
40 if (values[i] == selectedValue) { 27 if (values[i] == selectedValue) {
41 return i 28 return i
42 } 29 }
43 } 30 }
44 return -1 31 return -1
45 } 32 }
46
47 /**
48 * Write a value to the backing int. If that int was previously null,
49 * initializes a new one and returns it, so it can be added to the Hashmap.
50 *
51 * @param selection New value of the int.
52 * @return the existing setting with the new value applied.
53 */
54 fun setSelectedValue(selection: String): AbstractStringSetting {
55 val stringSetting = setting as AbstractStringSetting
56 stringSetting.setString(selection)
57 return stringSetting
58 }
59} 33}
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 8a9d13a92..91c273964 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
@@ -7,6 +7,6 @@ class SubmenuSetting(
7 titleId: Int, 7 titleId: Int,
8 descriptionId: Int, 8 descriptionId: Int,
9 val menuKey: String 9 val menuKey: String
10) : SettingsItem(null, titleId, descriptionId) { 10) : SettingsItem(emptySetting, titleId, descriptionId) {
11 override val type = TYPE_SUBMENU 11 override val type = TYPE_SUBMENU
12} 12}
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 4ed8070e5..416967e64 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
@@ -10,53 +10,22 @@ import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
10class SwitchSetting( 10class SwitchSetting(
11 setting: AbstractSetting, 11 setting: AbstractSetting,
12 titleId: Int, 12 titleId: Int,
13 descriptionId: Int, 13 descriptionId: Int
14 val key: String? = null,
15 val defaultValue: Any? = null
16) : SettingsItem(setting, titleId, descriptionId) { 14) : SettingsItem(setting, titleId, descriptionId) {
17 override val type = TYPE_SWITCH 15 override val type = TYPE_SWITCH
18 16
19 val isChecked: Boolean 17 var checked: Boolean
20 get() { 18 get() {
21 if (setting == null) { 19 return when (setting) {
22 return defaultValue as Boolean 20 is AbstractIntSetting -> setting.int == 1
21 is AbstractBooleanSetting -> setting.boolean
22 else -> false
23 } 23 }
24
25 // Try integer setting
26 try {
27 val setting = setting as AbstractIntSetting
28 return setting.int == 1
29 } catch (_: ClassCastException) {
30 }
31
32 // Try boolean setting
33 try {
34 val setting = setting as AbstractBooleanSetting
35 return setting.boolean
36 } catch (_: ClassCastException) {
37 }
38 return defaultValue as Boolean
39 } 24 }
40 25 set(value) {
41 /** 26 when (setting) {
42 * Write a value to the backing boolean. If that boolean was previously null, 27 is AbstractIntSetting -> setting.setInt(if (value) 1 else 0)
43 * initializes a new one and returns it, so it can be added to the Hashmap. 28 is AbstractBooleanSetting -> setting.setBoolean(value)
44 * 29 }
45 * @param checked Pretty self explanatory.
46 * @return the existing setting with the new value applied.
47 */
48 fun setChecked(checked: Boolean): AbstractSetting {
49 // Try integer setting
50 try {
51 val setting = setting as AbstractIntSetting
52 setting.setInt(if (checked) 1 else 0)
53 return setting
54 } catch (_: ClassCastException) {
55 } 30 }
56
57 // Try boolean setting
58 val setting = setting as AbstractBooleanSetting
59 setting.setBoolean(checked)
60 return setting
61 }
62} 31}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt
index e2e8d8bec..27eaaa576 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt
@@ -113,7 +113,7 @@ class SettingsAdapter(
113 } 113 }
114 114
115 fun onBooleanClick(item: SwitchSetting, position: Int, checked: Boolean) { 115 fun onBooleanClick(item: SwitchSetting, position: Int, checked: Boolean) {
116 item.setChecked(checked) 116 item.checked = checked
117 fragmentView.onSettingChanged() 117 fragmentView.onSettingChanged()
118 } 118 }
119 119
@@ -183,7 +183,7 @@ class SettingsAdapter(
183 if (item.value != epochTime) { 183 if (item.value != epochTime) {
184 fragmentView.onSettingChanged() 184 fragmentView.onSettingChanged()
185 notifyItemChanged(clickedPosition) 185 notifyItemChanged(clickedPosition)
186 item.setSelectedValue(epochTime) 186 item.value = epochTime
187 } 187 }
188 clickedItem = null 188 clickedItem = null
189 } 189 }
@@ -244,7 +244,7 @@ class SettingsAdapter(
244 } 244 }
245 245
246 // Get the backing Setting, which may be null (if for example it was missing from the file) 246 // Get the backing Setting, which may be null (if for example it was missing from the file)
247 scSetting.setSelectedValue(value) 247 scSetting.selectedValue = value
248 closeDialog() 248 closeDialog()
249 } 249 }
250 250
@@ -252,7 +252,7 @@ class SettingsAdapter(
252 val scSetting = clickedItem as StringSingleChoiceSetting 252 val scSetting = clickedItem as StringSingleChoiceSetting
253 val value = scSetting.getValueAt(which) 253 val value = scSetting.getValueAt(which)
254 if (scSetting.selectedValue != value) fragmentView.onSettingChanged() 254 if (scSetting.selectedValue != value) fragmentView.onSettingChanged()
255 scSetting.setSelectedValue(value!!) 255 scSetting.selectedValue = value!!
256 closeDialog() 256 closeDialog()
257 } 257 }
258 258
@@ -264,21 +264,21 @@ class SettingsAdapter(
264 when (sliderSetting.setting) { 264 when (sliderSetting.setting) {
265 is ByteSetting -> { 265 is ByteSetting -> {
266 val value = sliderProgress.toByte() 266 val value = sliderProgress.toByte()
267 sliderSetting.setSelectedValue(value) 267 sliderSetting.selectedValue = value.toInt()
268 } 268 }
269 269
270 is ShortSetting -> { 270 is ShortSetting -> {
271 val value = sliderProgress.toShort() 271 val value = sliderProgress.toShort()
272 sliderSetting.setSelectedValue(value) 272 sliderSetting.selectedValue = value.toInt()
273 } 273 }
274 274
275 is FloatSetting -> { 275 is FloatSetting -> {
276 val value = sliderProgress.toFloat() 276 val value = sliderProgress.toFloat()
277 sliderSetting.setSelectedValue(value) 277 sliderSetting.selectedValue = value.toInt()
278 } 278 }
279 279
280 else -> { 280 else -> {
281 sliderSetting.setSelectedValue(sliderProgress) 281 sliderSetting.selectedValue = sliderProgress
282 } 282 }
283 } 283 }
284 closeDialog() 284 closeDialog()
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 2bab9e542..dddbf65bb 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
@@ -75,47 +75,13 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
75 private fun addConfigSettings(sl: ArrayList<SettingsItem>) { 75 private fun addConfigSettings(sl: ArrayList<SettingsItem>) {
76 settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.advanced_settings)) 76 settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.advanced_settings))
77 sl.apply { 77 sl.apply {
78 add(SubmenuSetting(R.string.preferences_general, 0, Settings.SECTION_GENERAL))
79 add(SubmenuSetting(R.string.preferences_system, 0, Settings.SECTION_SYSTEM))
80 add(SubmenuSetting(R.string.preferences_graphics, 0, Settings.SECTION_RENDERER))
81 add(SubmenuSetting(R.string.preferences_audio, 0, Settings.SECTION_AUDIO))
82 add(SubmenuSetting(R.string.preferences_debug, 0, Settings.SECTION_DEBUG))
78 add( 83 add(
79 SubmenuSetting( 84 RunnableSetting(R.string.reset_to_default, 0, false) {
80 R.string.preferences_general,
81 0,
82 Settings.SECTION_GENERAL
83 )
84 )
85 add(
86 SubmenuSetting(
87 R.string.preferences_system,
88 0,
89 Settings.SECTION_SYSTEM
90 )
91 )
92 add(
93 SubmenuSetting(
94 R.string.preferences_graphics,
95 0,
96 Settings.SECTION_RENDERER
97 )
98 )
99 add(
100 SubmenuSetting(
101 R.string.preferences_audio,
102 0,
103 Settings.SECTION_AUDIO
104 )
105 )
106 add(
107 SubmenuSetting(
108 R.string.preferences_debug,
109 0,
110 Settings.SECTION_DEBUG
111 )
112 )
113 add(
114 RunnableSetting(
115 R.string.reset_to_default,
116 0,
117 false
118 ) {
119 ResetSettingsDialogFragment().show( 85 ResetSettingsDialogFragment().show(
120 settingsActivity.supportFragmentManager, 86 settingsActivity.supportFragmentManager,
121 ResetSettingsDialogFragment.TAG 87 ResetSettingsDialogFragment.TAG
@@ -132,9 +98,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
132 SwitchSetting( 98 SwitchSetting(
133 BooleanSetting.RENDERER_USE_SPEED_LIMIT, 99 BooleanSetting.RENDERER_USE_SPEED_LIMIT,
134 R.string.frame_limit_enable, 100 R.string.frame_limit_enable,
135 R.string.frame_limit_enable_description, 101 R.string.frame_limit_enable_description
136 BooleanSetting.RENDERER_USE_SPEED_LIMIT.key,
137 BooleanSetting.RENDERER_USE_SPEED_LIMIT.defaultValue
138 ) 102 )
139 ) 103 )
140 add( 104 add(
@@ -144,9 +108,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
144 R.string.frame_limit_slider_description, 108 R.string.frame_limit_slider_description,
145 1, 109 1,
146 200, 110 200,
147 "%", 111 "%"
148 ShortSetting.RENDERER_SPEED_LIMIT.key,
149 ShortSetting.RENDERER_SPEED_LIMIT.defaultValue
150 ) 112 )
151 ) 113 )
152 add( 114 add(
@@ -155,18 +117,14 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
155 R.string.cpu_accuracy, 117 R.string.cpu_accuracy,
156 0, 118 0,
157 R.array.cpuAccuracyNames, 119 R.array.cpuAccuracyNames,
158 R.array.cpuAccuracyValues, 120 R.array.cpuAccuracyValues
159 IntSetting.CPU_ACCURACY.key,
160 IntSetting.CPU_ACCURACY.defaultValue
161 ) 121 )
162 ) 122 )
163 add( 123 add(
164 SwitchSetting( 124 SwitchSetting(
165 BooleanSetting.PICTURE_IN_PICTURE, 125 BooleanSetting.PICTURE_IN_PICTURE,
166 R.string.picture_in_picture, 126 R.string.picture_in_picture,
167 R.string.picture_in_picture_description, 127 R.string.picture_in_picture_description
168 BooleanSetting.PICTURE_IN_PICTURE.key,
169 BooleanSetting.PICTURE_IN_PICTURE.defaultValue
170 ) 128 )
171 ) 129 )
172 } 130 }
@@ -179,9 +137,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
179 SwitchSetting( 137 SwitchSetting(
180 BooleanSetting.USE_DOCKED_MODE, 138 BooleanSetting.USE_DOCKED_MODE,
181 R.string.use_docked_mode, 139 R.string.use_docked_mode,
182 R.string.use_docked_mode_description, 140 R.string.use_docked_mode_description
183 BooleanSetting.USE_DOCKED_MODE.key,
184 BooleanSetting.USE_DOCKED_MODE.defaultValue
185 ) 141 )
186 ) 142 )
187 add( 143 add(
@@ -190,9 +146,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
190 R.string.emulated_region, 146 R.string.emulated_region,
191 0, 147 0,
192 R.array.regionNames, 148 R.array.regionNames,
193 R.array.regionValues, 149 R.array.regionValues
194 IntSetting.REGION_INDEX.key,
195 IntSetting.REGION_INDEX.defaultValue
196 ) 150 )
197 ) 151 )
198 add( 152 add(
@@ -201,29 +155,17 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
201 R.string.emulated_language, 155 R.string.emulated_language,
202 0, 156 0,
203 R.array.languageNames, 157 R.array.languageNames,
204 R.array.languageValues, 158 R.array.languageValues
205 IntSetting.LANGUAGE_INDEX.key,
206 IntSetting.LANGUAGE_INDEX.defaultValue
207 ) 159 )
208 ) 160 )
209 add( 161 add(
210 SwitchSetting( 162 SwitchSetting(
211 BooleanSetting.USE_CUSTOM_RTC, 163 BooleanSetting.USE_CUSTOM_RTC,
212 R.string.use_custom_rtc, 164 R.string.use_custom_rtc,
213 R.string.use_custom_rtc_description, 165 R.string.use_custom_rtc_description
214 BooleanSetting.USE_CUSTOM_RTC.key,
215 BooleanSetting.USE_CUSTOM_RTC.defaultValue
216 )
217 )
218 add(
219 DateTimeSetting(
220 LongSetting.CUSTOM_RTC,
221 R.string.set_custom_rtc,
222 0,
223 LongSetting.CUSTOM_RTC.key,
224 LongSetting.CUSTOM_RTC.defaultValue
225 ) 166 )
226 ) 167 )
168 add(DateTimeSetting(LongSetting.CUSTOM_RTC, R.string.set_custom_rtc, 0))
227 } 169 }
228 } 170 }
229 171
@@ -236,9 +178,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
236 R.string.renderer_accuracy, 178 R.string.renderer_accuracy,
237 0, 179 0,
238 R.array.rendererAccuracyNames, 180 R.array.rendererAccuracyNames,
239 R.array.rendererAccuracyValues, 181 R.array.rendererAccuracyValues
240 IntSetting.RENDERER_ACCURACY.key,
241 IntSetting.RENDERER_ACCURACY.defaultValue
242 ) 182 )
243 ) 183 )
244 add( 184 add(
@@ -247,9 +187,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
247 R.string.renderer_resolution, 187 R.string.renderer_resolution,
248 0, 188 0,
249 R.array.rendererResolutionNames, 189 R.array.rendererResolutionNames,
250 R.array.rendererResolutionValues, 190 R.array.rendererResolutionValues
251 IntSetting.RENDERER_RESOLUTION.key,
252 IntSetting.RENDERER_RESOLUTION.defaultValue
253 ) 191 )
254 ) 192 )
255 add( 193 add(
@@ -258,9 +196,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
258 R.string.renderer_vsync, 196 R.string.renderer_vsync,
259 0, 197 0,
260 R.array.rendererVSyncNames, 198 R.array.rendererVSyncNames,
261 R.array.rendererVSyncValues, 199 R.array.rendererVSyncValues
262 IntSetting.RENDERER_VSYNC.key,
263 IntSetting.RENDERER_VSYNC.defaultValue
264 ) 200 )
265 ) 201 )
266 add( 202 add(
@@ -269,9 +205,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
269 R.string.renderer_scaling_filter, 205 R.string.renderer_scaling_filter,
270 0, 206 0,
271 R.array.rendererScalingFilterNames, 207 R.array.rendererScalingFilterNames,
272 R.array.rendererScalingFilterValues, 208 R.array.rendererScalingFilterValues
273 IntSetting.RENDERER_SCALING_FILTER.key,
274 IntSetting.RENDERER_SCALING_FILTER.defaultValue
275 ) 209 )
276 ) 210 )
277 add( 211 add(
@@ -280,9 +214,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
280 R.string.renderer_anti_aliasing, 214 R.string.renderer_anti_aliasing,
281 0, 215 0,
282 R.array.rendererAntiAliasingNames, 216 R.array.rendererAntiAliasingNames,
283 R.array.rendererAntiAliasingValues, 217 R.array.rendererAntiAliasingValues
284 IntSetting.RENDERER_ANTI_ALIASING.key,
285 IntSetting.RENDERER_ANTI_ALIASING.defaultValue
286 ) 218 )
287 ) 219 )
288 add( 220 add(
@@ -291,9 +223,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
291 R.string.renderer_screen_layout, 223 R.string.renderer_screen_layout,
292 0, 224 0,
293 R.array.rendererScreenLayoutNames, 225 R.array.rendererScreenLayoutNames,
294 R.array.rendererScreenLayoutValues, 226 R.array.rendererScreenLayoutValues
295 IntSetting.RENDERER_SCREEN_LAYOUT.key,
296 IntSetting.RENDERER_SCREEN_LAYOUT.defaultValue
297 ) 227 )
298 ) 228 )
299 add( 229 add(
@@ -302,45 +232,35 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
302 R.string.renderer_aspect_ratio, 232 R.string.renderer_aspect_ratio,
303 0, 233 0,
304 R.array.rendererAspectRatioNames, 234 R.array.rendererAspectRatioNames,
305 R.array.rendererAspectRatioValues, 235 R.array.rendererAspectRatioValues
306 IntSetting.RENDERER_ASPECT_RATIO.key,
307 IntSetting.RENDERER_ASPECT_RATIO.defaultValue
308 ) 236 )
309 ) 237 )
310 add( 238 add(
311 SwitchSetting( 239 SwitchSetting(
312 BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE, 240 BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE,
313 R.string.use_disk_shader_cache, 241 R.string.use_disk_shader_cache,
314 R.string.use_disk_shader_cache_description, 242 R.string.use_disk_shader_cache_description
315 BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE.key,
316 BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE.defaultValue
317 ) 243 )
318 ) 244 )
319 add( 245 add(
320 SwitchSetting( 246 SwitchSetting(
321 BooleanSetting.RENDERER_FORCE_MAX_CLOCK, 247 BooleanSetting.RENDERER_FORCE_MAX_CLOCK,
322 R.string.renderer_force_max_clock, 248 R.string.renderer_force_max_clock,
323 R.string.renderer_force_max_clock_description, 249 R.string.renderer_force_max_clock_description
324 BooleanSetting.RENDERER_FORCE_MAX_CLOCK.key,
325 BooleanSetting.RENDERER_FORCE_MAX_CLOCK.defaultValue
326 ) 250 )
327 ) 251 )
328 add( 252 add(
329 SwitchSetting( 253 SwitchSetting(
330 BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS, 254 BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS,
331 R.string.renderer_asynchronous_shaders, 255 R.string.renderer_asynchronous_shaders,
332 R.string.renderer_asynchronous_shaders_description, 256 R.string.renderer_asynchronous_shaders_description
333 BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS.key,
334 BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS.defaultValue
335 ) 257 )
336 ) 258 )
337 add( 259 add(
338 SwitchSetting( 260 SwitchSetting(
339 BooleanSetting.RENDERER_REACTIVE_FLUSHING, 261 BooleanSetting.RENDERER_REACTIVE_FLUSHING,
340 R.string.renderer_reactive_flushing, 262 R.string.renderer_reactive_flushing,
341 R.string.renderer_reactive_flushing_description, 263 R.string.renderer_reactive_flushing_description
342 BooleanSetting.RENDERER_REACTIVE_FLUSHING.key,
343 BooleanSetting.RENDERER_REACTIVE_FLUSHING.defaultValue
344 ) 264 )
345 ) 265 )
346 } 266 }
@@ -355,9 +275,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
355 R.string.audio_output_engine, 275 R.string.audio_output_engine,
356 0, 276 0,
357 R.array.outputEngineEntries, 277 R.array.outputEngineEntries,
358 R.array.outputEngineValues, 278 R.array.outputEngineValues
359 IntSetting.AUDIO_OUTPUT_ENGINE.key,
360 IntSetting.AUDIO_OUTPUT_ENGINE.defaultValue
361 ) 279 )
362 ) 280 )
363 add( 281 add(
@@ -367,9 +285,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
367 R.string.audio_volume_description, 285 R.string.audio_volume_description,
368 0, 286 0,
369 100, 287 100,
370 "%", 288 "%"
371 ByteSetting.AUDIO_VOLUME.key,
372 ByteSetting.AUDIO_VOLUME.defaultValue
373 ) 289 )
374 ) 290 )
375 } 291 }
@@ -392,7 +308,12 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
392 override val key: String? = null 308 override val key: String? = null
393 override val category = Settings.Category.UiGeneral 309 override val category = Settings.Category.UiGeneral
394 override val isRuntimeModifiable: Boolean = false 310 override val isRuntimeModifiable: Boolean = false
395 override val defaultValue: Any = 0 311 override val defaultValue: Int = 0
312 override fun reset() {
313 preferences.edit()
314 .putInt(Settings.PREF_THEME, defaultValue)
315 .apply()
316 }
396 } 317 }
397 318
398 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { 319 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
@@ -431,7 +352,12 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
431 override val key: String? = null 352 override val key: String? = null
432 override val category = Settings.Category.UiGeneral 353 override val category = Settings.Category.UiGeneral
433 override val isRuntimeModifiable: Boolean = false 354 override val isRuntimeModifiable: Boolean = false
434 override val defaultValue: Any = -1 355 override val defaultValue: Int = -1
356 override fun reset() {
357 preferences.edit()
358 .putInt(Settings.PREF_BLACK_BACKGROUNDS, defaultValue)
359 .apply()
360 }
435 } 361 }
436 362
437 add( 363 add(
@@ -458,7 +384,12 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
458 override val key: String? = null 384 override val key: String? = null
459 override val category = Settings.Category.UiGeneral 385 override val category = Settings.Category.UiGeneral
460 override val isRuntimeModifiable: Boolean = false 386 override val isRuntimeModifiable: Boolean = false
461 override val defaultValue: Any = false 387 override val defaultValue: Boolean = false
388 override fun reset() {
389 preferences.edit()
390 .putBoolean(Settings.PREF_BLACK_BACKGROUNDS, defaultValue)
391 .apply()
392 }
462 } 393 }
463 394
464 add( 395 add(
@@ -481,18 +412,14 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
481 R.string.renderer_api, 412 R.string.renderer_api,
482 0, 413 0,
483 R.array.rendererApiNames, 414 R.array.rendererApiNames,
484 R.array.rendererApiValues, 415 R.array.rendererApiValues
485 IntSetting.RENDERER_BACKEND.key,
486 IntSetting.RENDERER_BACKEND.defaultValue
487 ) 416 )
488 ) 417 )
489 add( 418 add(
490 SwitchSetting( 419 SwitchSetting(
491 BooleanSetting.RENDERER_DEBUG, 420 BooleanSetting.RENDERER_DEBUG,
492 R.string.renderer_debug, 421 R.string.renderer_debug,
493 R.string.renderer_debug_description, 422 R.string.renderer_debug_description
494 BooleanSetting.RENDERER_DEBUG.key,
495 BooleanSetting.RENDERER_DEBUG.defaultValue
496 ) 423 )
497 ) 424 )
498 425
@@ -501,9 +428,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
501 SwitchSetting( 428 SwitchSetting(
502 BooleanSetting.CPU_DEBUG_MODE, 429 BooleanSetting.CPU_DEBUG_MODE,
503 R.string.cpu_debug_mode, 430 R.string.cpu_debug_mode,
504 R.string.cpu_debug_mode_description, 431 R.string.cpu_debug_mode_description
505 BooleanSetting.CPU_DEBUG_MODE.key,
506 BooleanSetting.CPU_DEBUG_MODE.defaultValue
507 ) 432 )
508 ) 433 )
509 434
@@ -520,15 +445,10 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
520 override val key: String? = null 445 override val key: String? = null
521 override val category = Settings.Category.Cpu 446 override val category = Settings.Category.Cpu
522 override val isRuntimeModifiable: Boolean = false 447 override val isRuntimeModifiable: Boolean = false
523 override val defaultValue: Any = true 448 override val defaultValue: Boolean = true
449 override fun reset() = setBoolean(defaultValue)
524 } 450 }
525 add( 451 add(SwitchSetting(fastmem, R.string.fastmem, 0))
526 SwitchSetting(
527 fastmem,
528 R.string.fastmem,
529 0
530 )
531 )
532 } 452 }
533 } 453 }
534} 454}
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 eb25ea4fb..68c0b24d6 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
@@ -46,7 +46,7 @@ class DateTimeViewHolder(val binding: ListItemSettingBinding, adapter: SettingsA
46 46
47 override fun onLongClick(clicked: View): Boolean { 47 override fun onLongClick(clicked: View): Boolean {
48 if (setting.isEditable) { 48 if (setting.isEditable) {
49 return adapter.onLongClick(setting.setting!!, bindingAdapterPosition) 49 return adapter.onLongClick(setting.setting, bindingAdapterPosition)
50 } 50 }
51 return false 51 return false
52 } 52 }
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 b42d955aa..a582c425b 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
@@ -35,7 +35,7 @@ class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: Setti
35 } 35 }
36 } 36 }
37 } else if (item is StringSingleChoiceSetting) { 37 } else if (item is StringSingleChoiceSetting) {
38 for (i in item.values!!.indices) { 38 for (i in item.values.indices) {
39 if (item.values[i] == item.selectedValue) { 39 if (item.values[i] == item.selectedValue) {
40 binding.textSettingValue.text = item.choices[i] 40 binding.textSettingValue.text = item.choices[i]
41 break 41 break
@@ -66,7 +66,7 @@ class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: Setti
66 66
67 override fun onLongClick(clicked: View): Boolean { 67 override fun onLongClick(clicked: View): Boolean {
68 if (setting.isEditable) { 68 if (setting.isEditable) {
69 return adapter.onLongClick(setting.setting!!, bindingAdapterPosition) 69 return adapter.onLongClick(setting.setting, bindingAdapterPosition)
70 } 70 }
71 return false 71 return false
72 } 72 }
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 a23b5d109..d94a46262 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
@@ -41,7 +41,7 @@ class SliderViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAda
41 41
42 override fun onLongClick(clicked: View): Boolean { 42 override fun onLongClick(clicked: View): Boolean {
43 if (setting.isEditable) { 43 if (setting.isEditable) {
44 return adapter.onLongClick(setting.setting!!, bindingAdapterPosition) 44 return adapter.onLongClick(setting.setting, bindingAdapterPosition)
45 } 45 }
46 return false 46 return false
47 } 47 }
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 ef34bf5f4..200fbc473 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
@@ -28,7 +28,7 @@ class SwitchSettingViewHolder(val binding: ListItemSettingSwitchBinding, adapter
28 binding.switchWidget.setOnCheckedChangeListener { _: CompoundButton, _: Boolean -> 28 binding.switchWidget.setOnCheckedChangeListener { _: CompoundButton, _: Boolean ->
29 adapter.onBooleanClick(item, bindingAdapterPosition, binding.switchWidget.isChecked) 29 adapter.onBooleanClick(item, bindingAdapterPosition, binding.switchWidget.isChecked)
30 } 30 }
31 binding.switchWidget.isChecked = setting.isChecked 31 binding.switchWidget.isChecked = setting.checked
32 32
33 setStyle(setting.isEditable, binding) 33 setStyle(setting.isEditable, binding)
34 } 34 }