summaryrefslogtreecommitdiff
path: root/src/android
diff options
context:
space:
mode:
authorGravatar Charles Lombardo2023-04-18 04:10:28 -0400
committerGravatar bunnei2023-06-03 00:05:52 -0700
commit766655fa4181f47da6a34250843e443331198a31 (patch)
treed15ccd62d355e9fabed505765d097d8811b2c34e /src/android
parentandroid: Abstract settings (diff)
downloadyuzu-766655fa4181f47da6a34250843e443331198a31.tar.gz
yuzu-766655fa4181f47da6a34250843e443331198a31.tar.xz
yuzu-766655fa4181f47da6a34250843e443331198a31.zip
android: Prevent editing unsafe settings at runtime
There currently isn't a visual "disabled" cue for any of the view holders that aren't the switch setting. This will be improved in the future.
Diffstat (limited to 'src/android')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt7
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/DateTimeViewHolder.kt8
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SingleChoiceViewHolder.kt16
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SliderViewHolder.kt8
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt10
5 files changed, 35 insertions, 14 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
index 599da1380..c02848403 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,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 org.yuzu.yuzu_emu.NativeLibrary
6import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting 7import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
7 8
8/** 9/**
@@ -19,6 +20,12 @@ abstract class SettingsItem(
19) { 20) {
20 abstract val type: Int 21 abstract val type: Int
21 22
23 val isEditable: Boolean
24 get() {
25 if (!NativeLibrary.isRunning()) return true
26 return setting?.isRuntimeEditable ?: false
27 }
28
22 companion object { 29 companion object {
23 const val TYPE_HEADER = 0 30 const val TYPE_HEADER = 0
24 const val TYPE_SWITCH = 1 31 const val TYPE_SWITCH = 1
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 5702fc0eb..e433373ed 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
@@ -11,10 +11,10 @@ import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter
11 11
12class DateTimeViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) : 12class DateTimeViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) :
13 SettingViewHolder(binding.root, adapter) { 13 SettingViewHolder(binding.root, adapter) {
14 private lateinit var item: DateTimeSetting 14 private lateinit var setting: DateTimeSetting
15 15
16 override fun bind(item: SettingsItem) { 16 override fun bind(item: SettingsItem) {
17 this.item = item as DateTimeSetting 17 setting = item as DateTimeSetting
18 binding.textSettingName.setText(item.nameId) 18 binding.textSettingName.setText(item.nameId)
19 if (item.descriptionId!! > 0) { 19 if (item.descriptionId!! > 0) {
20 binding.textSettingDescription.setText(item.descriptionId) 20 binding.textSettingDescription.setText(item.descriptionId)
@@ -25,6 +25,8 @@ class DateTimeViewHolder(val binding: ListItemSettingBinding, adapter: SettingsA
25 } 25 }
26 26
27 override fun onClick(clicked: View) { 27 override fun onClick(clicked: View) {
28 adapter.onDateTimeClick(item, bindingAdapterPosition) 28 if (setting.isEditable) {
29 adapter.onDateTimeClick(setting, bindingAdapterPosition)
30 }
29 } 31 }
30} 32}
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 a82f49f44..b92334522 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
@@ -12,10 +12,10 @@ import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter
12 12
13class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) : 13class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) :
14 SettingViewHolder(binding.root, adapter) { 14 SettingViewHolder(binding.root, adapter) {
15 private lateinit var item: SettingsItem 15 private lateinit var setting: SettingsItem
16 16
17 override fun bind(item: SettingsItem) { 17 override fun bind(item: SettingsItem) {
18 this.item = item 18 setting = item
19 binding.textSettingName.setText(item.nameId) 19 binding.textSettingName.setText(item.nameId)
20 binding.textSettingDescription.visibility = View.VISIBLE 20 binding.textSettingDescription.visibility = View.VISIBLE
21 if (item.descriptionId!! > 0) { 21 if (item.descriptionId!! > 0) {
@@ -34,14 +34,18 @@ class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: Setti
34 } 34 }
35 35
36 override fun onClick(clicked: View) { 36 override fun onClick(clicked: View) {
37 if (item is SingleChoiceSetting) { 37 if (!setting.isEditable) {
38 return
39 }
40
41 if (setting is SingleChoiceSetting) {
38 adapter.onSingleChoiceClick( 42 adapter.onSingleChoiceClick(
39 (item as SingleChoiceSetting), 43 (setting as SingleChoiceSetting),
40 bindingAdapterPosition 44 bindingAdapterPosition
41 ) 45 )
42 } else if (item is StringSingleChoiceSetting) { 46 } else if (setting is StringSingleChoiceSetting) {
43 adapter.onStringSingleChoiceClick( 47 adapter.onStringSingleChoiceClick(
44 (item as StringSingleChoiceSetting), 48 (setting as StringSingleChoiceSetting),
45 bindingAdapterPosition 49 bindingAdapterPosition
46 ) 50 )
47 } 51 }
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 2d9fd11f9..1c2f74d56 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
@@ -11,10 +11,10 @@ import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter
11 11
12class SliderViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) : 12class SliderViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) :
13 SettingViewHolder(binding.root, adapter) { 13 SettingViewHolder(binding.root, adapter) {
14 private lateinit var item: SliderSetting 14 private lateinit var setting: SliderSetting
15 15
16 override fun bind(item: SettingsItem) { 16 override fun bind(item: SettingsItem) {
17 this.item = item as SliderSetting 17 setting = item as SliderSetting
18 binding.textSettingName.setText(item.nameId) 18 binding.textSettingName.setText(item.nameId)
19 if (item.descriptionId!! > 0) { 19 if (item.descriptionId!! > 0) {
20 binding.textSettingDescription.setText(item.descriptionId) 20 binding.textSettingDescription.setText(item.descriptionId)
@@ -25,6 +25,8 @@ class SliderViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAda
25 } 25 }
26 26
27 override fun onClick(clicked: View) { 27 override fun onClick(clicked: View) {
28 adapter.onSliderClick(item, bindingAdapterPosition) 28 if (setting.isEditable) {
29 adapter.onSliderClick(setting, bindingAdapterPosition)
30 }
29 } 31 }
30} 32}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt
index 3fedb4969..825e9d0d0 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
@@ -13,8 +13,10 @@ import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter
13class SwitchSettingViewHolder(val binding: ListItemSettingSwitchBinding, adapter: SettingsAdapter) : 13class SwitchSettingViewHolder(val binding: ListItemSettingSwitchBinding, adapter: SettingsAdapter) :
14 SettingViewHolder(binding.root, adapter) { 14 SettingViewHolder(binding.root, adapter) {
15 15
16 private lateinit var setting: SwitchSetting
17
16 override fun bind(item: SettingsItem) { 18 override fun bind(item: SettingsItem) {
17 val setting = item as SwitchSetting 19 setting = item as SwitchSetting
18 binding.textSettingName.setText(item.nameId) 20 binding.textSettingName.setText(item.nameId)
19 if (item.descriptionId!! > 0) { 21 if (item.descriptionId!! > 0) {
20 binding.textSettingDescription.setText(item.descriptionId) 22 binding.textSettingDescription.setText(item.descriptionId)
@@ -27,9 +29,13 @@ class SwitchSettingViewHolder(val binding: ListItemSettingSwitchBinding, adapter
27 binding.switchWidget.setOnCheckedChangeListener { _: CompoundButton, _: Boolean -> 29 binding.switchWidget.setOnCheckedChangeListener { _: CompoundButton, _: Boolean ->
28 adapter.onBooleanClick(item, bindingAdapterPosition, binding.switchWidget.isChecked) 30 adapter.onBooleanClick(item, bindingAdapterPosition, binding.switchWidget.isChecked)
29 } 31 }
32
33 binding.switchWidget.isEnabled = setting.isEditable
30 } 34 }
31 35
32 override fun onClick(clicked: View) { 36 override fun onClick(clicked: View) {
33 binding.switchWidget.toggle() 37 if (setting.isEditable) {
38 binding.switchWidget.toggle()
39 }
34 } 40 }
35} 41}