diff options
| author | 2023-04-18 04:10:28 -0400 | |
|---|---|---|
| committer | 2023-06-03 00:05:52 -0700 | |
| commit | 766655fa4181f47da6a34250843e443331198a31 (patch) | |
| tree | d15ccd62d355e9fabed505765d097d8811b2c34e /src/android | |
| parent | android: Abstract settings (diff) | |
| download | yuzu-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')
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 | ||
| 4 | package org.yuzu.yuzu_emu.features.settings.model.view | 4 | package org.yuzu.yuzu_emu.features.settings.model.view |
| 5 | 5 | ||
| 6 | import org.yuzu.yuzu_emu.NativeLibrary | ||
| 6 | import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting | 7 | import 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 | ||
| 12 | class DateTimeViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) : | 12 | class 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 | ||
| 13 | class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) : | 13 | class 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 | ||
| 12 | class SliderViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) : | 12 | class 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 | |||
| 13 | class SwitchSettingViewHolder(val binding: ListItemSettingSwitchBinding, adapter: SettingsAdapter) : | 13 | class 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 | } |