diff options
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 {      val isRuntimeModifiable: Boolean          get() = NativeConfig.getIsRuntimeModifiable(key!!) -    fun reset() = run { } +    fun reset()  } 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 @@  package org.yuzu.yuzu_emu.features.settings.model.view  import org.yuzu.yuzu_emu.features.settings.model.AbstractLongSetting -import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting  class DateTimeSetting( -    setting: AbstractSetting?, +    private val longSetting: AbstractLongSetting,      titleId: Int, -    descriptionId: Int, -    val key: String? = null, -    private val defaultValue: Long? = null -) : SettingsItem(setting, titleId, descriptionId) { +    descriptionId: Int +) : SettingsItem(longSetting, titleId, descriptionId) {      override val type = TYPE_DATETIME_SETTING -    val value: Long -        get() = if (setting != null) { -            val setting = setting as AbstractLongSetting -            setting.long -        } else { -            defaultValue!! -        } - -    fun setSelectedValue(datetime: Long): AbstractLongSetting { -        val longSetting = setting as AbstractLongSetting -        longSetting.setLong(datetime) -        return longSetting -    } +    var value: Long +        get() = longSetting.long +        set(value) = (setting as AbstractLongSetting).setLong(value)  } 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  class HeaderSetting(      titleId: Int -) : SettingsItem(null, titleId, 0) { +) : SettingsItem(emptySetting, titleId, 0) {      override val type = TYPE_HEADER  } 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(      descriptionId: Int,      val isRuntimeRunnable: Boolean,      val runnable: () -> Unit -) : SettingsItem(null, titleId, descriptionId) { +) : SettingsItem(emptySetting, titleId, descriptionId) {      override val type = TYPE_RUNNABLE  } 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  import org.yuzu.yuzu_emu.NativeLibrary  import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting +import org.yuzu.yuzu_emu.features.settings.model.Settings  /**   * ViewModel abstraction for an Item in the RecyclerView powering SettingsFragments. @@ -14,7 +15,7 @@ import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting   * file.)   */  abstract class SettingsItem( -    var setting: AbstractSetting?, +    val setting: AbstractSetting,      val nameId: Int,      val descriptionId: Int  ) { @@ -23,7 +24,7 @@ abstract class SettingsItem(      val isEditable: Boolean          get() {              if (!NativeLibrary.isRunning()) return true -            return setting?.isRuntimeModifiable ?: false +            return setting.isRuntimeModifiable          }      companion object { @@ -35,5 +36,12 @@ abstract class SettingsItem(          const val TYPE_STRING_SINGLE_CHOICE = 5          const val TYPE_DATETIME_SETTING = 6          const val TYPE_RUNNABLE = 7 + +        val emptySetting = object : AbstractSetting { +            override val key: String = "" +            override val category: Settings.Category = Settings.Category.Ui +            override val defaultValue: Any = false +            override fun reset() {} +        }      }  } 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 @@  package org.yuzu.yuzu_emu.features.settings.model.view  import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting +import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting  class SingleChoiceSetting( -    setting: AbstractIntSetting?, +    setting: AbstractSetting,      titleId: Int,      descriptionId: Int,      val choicesId: Int, -    val valuesId: Int, -    val key: String? = null, -    val defaultValue: Int? = null +    val valuesId: Int  ) : SettingsItem(setting, titleId, descriptionId) {      override val type = TYPE_SINGLE_CHOICE -    val selectedValue: Int -        get() = if (setting != null) { -            val setting = setting as AbstractIntSetting -            setting.int -        } else { -            defaultValue!! +    var selectedValue: Int +        get() { +            return when (setting) { +                is AbstractIntSetting -> setting.int +                else -> -1 +            } +        } +        set(value) { +            when (setting) { +                is AbstractIntSetting -> setting.setInt(value) +            }          } - -    /** -     * Write a value to the backing int. If that int was previously null, -     * initializes a new one and returns it, so it can be added to the Hashmap. -     * -     * @param selection New value of the int. -     * @return the existing setting with the new value applied. -     */ -    fun setSelectedValue(selection: Int): AbstractIntSetting { -        val intSetting = setting as AbstractIntSetting -        intSetting.setInt(selection) -        return intSetting -    }  } 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 @@  package org.yuzu.yuzu_emu.features.settings.model.view  import org.yuzu.yuzu_emu.features.settings.model.AbstractByteSetting -import kotlin.math.roundToInt  import org.yuzu.yuzu_emu.features.settings.model.AbstractFloatSetting  import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting  import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting  import org.yuzu.yuzu_emu.features.settings.model.AbstractShortSetting -import org.yuzu.yuzu_emu.utils.Log +import kotlin.math.roundToInt  class SliderSetting( -    setting: AbstractSetting?, +    setting: AbstractSetting,      titleId: Int,      descriptionId: Int,      val min: Int,      val max: Int, -    val units: String, -    val key: String? = null, -    val defaultValue: Any? = null +    val units: String  ) : SettingsItem(setting, titleId, descriptionId) {      override val type = TYPE_SLIDER -    val selectedValue: Any +    var selectedValue: Int          get() { -            val setting = setting ?: return defaultValue!!              return when (setting) {                  is AbstractByteSetting -> setting.byte.toInt()                  is AbstractShortSetting -> setting.short.toInt()                  is AbstractIntSetting -> setting.int                  is AbstractFloatSetting -> setting.float.roundToInt() -                else -> { -                    Log.error("[SliderSetting] Error casting setting type.") -                    -1 -                } +                else -> -1 +            } +        } +        set(value) { +            when (setting) { +                is AbstractByteSetting -> setting.setByte(value.toByte()) +                is AbstractShortSetting -> setting.setShort(value.toShort()) +                is AbstractIntSetting -> setting.setInt(value) +                is AbstractFloatSetting -> setting.setFloat(value.toFloat())              }          } - -    /** -     * Write a value to the backing int. If that int was previously null, -     * initializes a new one and returns it, so it can be added to the Hashmap. -     * -     * @param selection New value of the int. -     * @return the existing setting with the new value applied. -     */ -    fun setSelectedValue(selection: Int): AbstractIntSetting { -        val intSetting = setting as AbstractIntSetting -        intSetting.setInt(selection) -        return intSetting -    } - -    /** -     * Write a value to the backing float. If that float was previously null, -     * initializes a new one and returns it, so it can be added to the Hashmap. -     * -     * @param selection New value of the float. -     * @return the existing setting with the new value applied. -     */ -    fun setSelectedValue(selection: Float): AbstractFloatSetting { -        val floatSetting = setting as AbstractFloatSetting -        floatSetting.setFloat(selection) -        return floatSetting -    } - -    fun setSelectedValue(selection: Short): AbstractShortSetting { -        val shortSetting = setting as AbstractShortSetting -        shortSetting.setShort(selection) -        return shortSetting -    } - -    fun setSelectedValue(selection: Byte): AbstractByteSetting { -        val byteSetting = setting as AbstractByteSetting -        byteSetting.setByte(selection) -        return byteSetting -    }  } 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 @@  package org.yuzu.yuzu_emu.features.settings.model.view -import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting  import org.yuzu.yuzu_emu.features.settings.model.AbstractStringSetting  class StringSingleChoiceSetting( -    setting: AbstractSetting?, +    private val stringSetting: AbstractStringSetting,      titleId: Int,      descriptionId: Int,      val choices: Array<String>, -    val values: Array<String>?, -    val key: String? = null, -    private val defaultValue: String? = null -) : SettingsItem(setting, titleId, descriptionId) { +    val values: Array<String> +) : SettingsItem(stringSetting, titleId, descriptionId) {      override val type = TYPE_STRING_SINGLE_CHOICE -    fun getValueAt(index: Int): String? { -        if (values == null) return null -        return if (index >= 0 && index < values.size) { -            values[index] -        } else { -            "" -        } -    } +    fun getValueAt(index: Int): String = +        if (index >= 0 && index < values.size) values[index] else "" + +    var selectedValue: String +        get() = stringSetting.string +        set(value) = stringSetting.setString(value) -    val selectedValue: String -        get() = if (setting != null) { -            val setting = setting as AbstractStringSetting -            setting.string -        } else { -            defaultValue!! -        }      val selectValueIndex: Int          get() { -            val selectedValue = selectedValue -            for (i in values!!.indices) { +            for (i in values.indices) {                  if (values[i] == selectedValue) {                      return i                  }              }              return -1          } - -    /** -     * Write a value to the backing int. If that int was previously null, -     * initializes a new one and returns it, so it can be added to the Hashmap. -     * -     * @param selection New value of the int. -     * @return the existing setting with the new value applied. -     */ -    fun setSelectedValue(selection: String): AbstractStringSetting { -        val stringSetting = setting as AbstractStringSetting -        stringSetting.setString(selection) -        return stringSetting -    }  } 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(      titleId: Int,      descriptionId: Int,      val menuKey: String -) : SettingsItem(null, titleId, descriptionId) { +) : SettingsItem(emptySetting, titleId, descriptionId) {      override val type = TYPE_SUBMENU  } 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  class SwitchSetting(      setting: AbstractSetting,      titleId: Int, -    descriptionId: Int, -    val key: String? = null, -    val defaultValue: Any? = null +    descriptionId: Int  ) : SettingsItem(setting, titleId, descriptionId) {      override val type = TYPE_SWITCH -    val isChecked: Boolean +    var checked: Boolean          get() { -            if (setting == null) { -                return defaultValue as Boolean +            return when (setting) { +                is AbstractIntSetting -> setting.int == 1 +                is AbstractBooleanSetting -> setting.boolean +                else -> false              } - -            // Try integer setting -            try { -                val setting = setting as AbstractIntSetting -                return setting.int == 1 -            } catch (_: ClassCastException) { -            } - -            // Try boolean setting -            try { -                val setting = setting as AbstractBooleanSetting -                return setting.boolean -            } catch (_: ClassCastException) { -            } -            return defaultValue as Boolean          } - -    /** -     * Write a value to the backing boolean. If that boolean was previously null, -     * initializes a new one and returns it, so it can be added to the Hashmap. -     * -     * @param checked Pretty self explanatory. -     * @return the existing setting with the new value applied. -     */ -    fun setChecked(checked: Boolean): AbstractSetting { -        // Try integer setting -        try { -            val setting = setting as AbstractIntSetting -            setting.setInt(if (checked) 1 else 0) -            return setting -        } catch (_: ClassCastException) { +        set(value) { +            when (setting) { +                is AbstractIntSetting -> setting.setInt(if (value) 1 else 0) +                is AbstractBooleanSetting -> setting.setBoolean(value) +            }          } - -        // Try boolean setting -        val setting = setting as AbstractBooleanSetting -        setting.setBoolean(checked) -        return setting -    }  } 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(      }      fun onBooleanClick(item: SwitchSetting, position: Int, checked: Boolean) { -        item.setChecked(checked) +        item.checked = checked          fragmentView.onSettingChanged()      } @@ -183,7 +183,7 @@ class SettingsAdapter(              if (item.value != epochTime) {                  fragmentView.onSettingChanged()                  notifyItemChanged(clickedPosition) -                item.setSelectedValue(epochTime) +                item.value = epochTime              }              clickedItem = null          } @@ -244,7 +244,7 @@ class SettingsAdapter(                  }                  // Get the backing Setting, which may be null (if for example it was missing from the file) -                scSetting.setSelectedValue(value) +                scSetting.selectedValue = value                  closeDialog()              } @@ -252,7 +252,7 @@ class SettingsAdapter(                  val scSetting = clickedItem as StringSingleChoiceSetting                  val value = scSetting.getValueAt(which)                  if (scSetting.selectedValue != value) fragmentView.onSettingChanged() -                scSetting.setSelectedValue(value!!) +                scSetting.selectedValue = value!!                  closeDialog()              } @@ -264,21 +264,21 @@ class SettingsAdapter(                  when (sliderSetting.setting) {                      is ByteSetting -> {                          val value = sliderProgress.toByte() -                        sliderSetting.setSelectedValue(value) +                        sliderSetting.selectedValue = value.toInt()                      }                      is ShortSetting -> {                          val value = sliderProgress.toShort() -                        sliderSetting.setSelectedValue(value) +                        sliderSetting.selectedValue = value.toInt()                      }                      is FloatSetting -> {                          val value = sliderProgress.toFloat() -                        sliderSetting.setSelectedValue(value) +                        sliderSetting.selectedValue = value.toInt()                      }                      else -> { -                        sliderSetting.setSelectedValue(sliderProgress) +                        sliderSetting.selectedValue = sliderProgress                      }                  }                  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)      private fun addConfigSettings(sl: ArrayList<SettingsItem>) {          settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.advanced_settings))          sl.apply { +            add(SubmenuSetting(R.string.preferences_general, 0, Settings.SECTION_GENERAL)) +            add(SubmenuSetting(R.string.preferences_system, 0, Settings.SECTION_SYSTEM)) +            add(SubmenuSetting(R.string.preferences_graphics, 0, Settings.SECTION_RENDERER)) +            add(SubmenuSetting(R.string.preferences_audio, 0, Settings.SECTION_AUDIO)) +            add(SubmenuSetting(R.string.preferences_debug, 0, Settings.SECTION_DEBUG))              add( -                SubmenuSetting( -                    R.string.preferences_general, -                    0, -                    Settings.SECTION_GENERAL -                ) -            ) -            add( -                SubmenuSetting( -                    R.string.preferences_system, -                    0, -                    Settings.SECTION_SYSTEM -                ) -            ) -            add( -                SubmenuSetting( -                    R.string.preferences_graphics, -                    0, -                    Settings.SECTION_RENDERER -                ) -            ) -            add( -                SubmenuSetting( -                    R.string.preferences_audio, -                    0, -                    Settings.SECTION_AUDIO -                ) -            ) -            add( -                SubmenuSetting( -                    R.string.preferences_debug, -                    0, -                    Settings.SECTION_DEBUG -                ) -            ) -            add( -                RunnableSetting( -                    R.string.reset_to_default, -                    0, -                    false -                ) { +                RunnableSetting(R.string.reset_to_default, 0, false) {                      ResetSettingsDialogFragment().show(                          settingsActivity.supportFragmentManager,                          ResetSettingsDialogFragment.TAG @@ -132,9 +98,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                  SwitchSetting(                      BooleanSetting.RENDERER_USE_SPEED_LIMIT,                      R.string.frame_limit_enable, -                    R.string.frame_limit_enable_description, -                    BooleanSetting.RENDERER_USE_SPEED_LIMIT.key, -                    BooleanSetting.RENDERER_USE_SPEED_LIMIT.defaultValue +                    R.string.frame_limit_enable_description                  )              )              add( @@ -144,9 +108,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                      R.string.frame_limit_slider_description,                      1,                      200, -                    "%", -                    ShortSetting.RENDERER_SPEED_LIMIT.key, -                    ShortSetting.RENDERER_SPEED_LIMIT.defaultValue +                    "%"                  )              )              add( @@ -155,18 +117,14 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                      R.string.cpu_accuracy,                      0,                      R.array.cpuAccuracyNames, -                    R.array.cpuAccuracyValues, -                    IntSetting.CPU_ACCURACY.key, -                    IntSetting.CPU_ACCURACY.defaultValue +                    R.array.cpuAccuracyValues                  )              )              add(                  SwitchSetting(                      BooleanSetting.PICTURE_IN_PICTURE,                      R.string.picture_in_picture, -                    R.string.picture_in_picture_description, -                    BooleanSetting.PICTURE_IN_PICTURE.key, -                    BooleanSetting.PICTURE_IN_PICTURE.defaultValue +                    R.string.picture_in_picture_description                  )              )          } @@ -179,9 +137,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                  SwitchSetting(                      BooleanSetting.USE_DOCKED_MODE,                      R.string.use_docked_mode, -                    R.string.use_docked_mode_description, -                    BooleanSetting.USE_DOCKED_MODE.key, -                    BooleanSetting.USE_DOCKED_MODE.defaultValue +                    R.string.use_docked_mode_description                  )              )              add( @@ -190,9 +146,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                      R.string.emulated_region,                      0,                      R.array.regionNames, -                    R.array.regionValues, -                    IntSetting.REGION_INDEX.key, -                    IntSetting.REGION_INDEX.defaultValue +                    R.array.regionValues                  )              )              add( @@ -201,29 +155,17 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                      R.string.emulated_language,                      0,                      R.array.languageNames, -                    R.array.languageValues, -                    IntSetting.LANGUAGE_INDEX.key, -                    IntSetting.LANGUAGE_INDEX.defaultValue +                    R.array.languageValues                  )              )              add(                  SwitchSetting(                      BooleanSetting.USE_CUSTOM_RTC,                      R.string.use_custom_rtc, -                    R.string.use_custom_rtc_description, -                    BooleanSetting.USE_CUSTOM_RTC.key, -                    BooleanSetting.USE_CUSTOM_RTC.defaultValue -                ) -            ) -            add( -                DateTimeSetting( -                    LongSetting.CUSTOM_RTC, -                    R.string.set_custom_rtc, -                    0, -                    LongSetting.CUSTOM_RTC.key, -                    LongSetting.CUSTOM_RTC.defaultValue +                    R.string.use_custom_rtc_description                  )              ) +            add(DateTimeSetting(LongSetting.CUSTOM_RTC, R.string.set_custom_rtc, 0))          }      } @@ -236,9 +178,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                      R.string.renderer_accuracy,                      0,                      R.array.rendererAccuracyNames, -                    R.array.rendererAccuracyValues, -                    IntSetting.RENDERER_ACCURACY.key, -                    IntSetting.RENDERER_ACCURACY.defaultValue +                    R.array.rendererAccuracyValues                  )              )              add( @@ -247,9 +187,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                      R.string.renderer_resolution,                      0,                      R.array.rendererResolutionNames, -                    R.array.rendererResolutionValues, -                    IntSetting.RENDERER_RESOLUTION.key, -                    IntSetting.RENDERER_RESOLUTION.defaultValue +                    R.array.rendererResolutionValues                  )              )              add( @@ -258,9 +196,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                      R.string.renderer_vsync,                      0,                      R.array.rendererVSyncNames, -                    R.array.rendererVSyncValues, -                    IntSetting.RENDERER_VSYNC.key, -                    IntSetting.RENDERER_VSYNC.defaultValue +                    R.array.rendererVSyncValues                  )              )              add( @@ -269,9 +205,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                      R.string.renderer_scaling_filter,                      0,                      R.array.rendererScalingFilterNames, -                    R.array.rendererScalingFilterValues, -                    IntSetting.RENDERER_SCALING_FILTER.key, -                    IntSetting.RENDERER_SCALING_FILTER.defaultValue +                    R.array.rendererScalingFilterValues                  )              )              add( @@ -280,9 +214,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                      R.string.renderer_anti_aliasing,                      0,                      R.array.rendererAntiAliasingNames, -                    R.array.rendererAntiAliasingValues, -                    IntSetting.RENDERER_ANTI_ALIASING.key, -                    IntSetting.RENDERER_ANTI_ALIASING.defaultValue +                    R.array.rendererAntiAliasingValues                  )              )              add( @@ -291,9 +223,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                      R.string.renderer_screen_layout,                      0,                      R.array.rendererScreenLayoutNames, -                    R.array.rendererScreenLayoutValues, -                    IntSetting.RENDERER_SCREEN_LAYOUT.key, -                    IntSetting.RENDERER_SCREEN_LAYOUT.defaultValue +                    R.array.rendererScreenLayoutValues                  )              )              add( @@ -302,45 +232,35 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                      R.string.renderer_aspect_ratio,                      0,                      R.array.rendererAspectRatioNames, -                    R.array.rendererAspectRatioValues, -                    IntSetting.RENDERER_ASPECT_RATIO.key, -                    IntSetting.RENDERER_ASPECT_RATIO.defaultValue +                    R.array.rendererAspectRatioValues                  )              )              add(                  SwitchSetting(                      BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE,                      R.string.use_disk_shader_cache, -                    R.string.use_disk_shader_cache_description, -                    BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE.key, -                    BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE.defaultValue +                    R.string.use_disk_shader_cache_description                  )              )              add(                  SwitchSetting(                      BooleanSetting.RENDERER_FORCE_MAX_CLOCK,                      R.string.renderer_force_max_clock, -                    R.string.renderer_force_max_clock_description, -                    BooleanSetting.RENDERER_FORCE_MAX_CLOCK.key, -                    BooleanSetting.RENDERER_FORCE_MAX_CLOCK.defaultValue +                    R.string.renderer_force_max_clock_description                  )              )              add(                  SwitchSetting(                      BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS,                      R.string.renderer_asynchronous_shaders, -                    R.string.renderer_asynchronous_shaders_description, -                    BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS.key, -                    BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS.defaultValue +                    R.string.renderer_asynchronous_shaders_description                  )              )              add(                  SwitchSetting(                      BooleanSetting.RENDERER_REACTIVE_FLUSHING,                      R.string.renderer_reactive_flushing, -                    R.string.renderer_reactive_flushing_description, -                    BooleanSetting.RENDERER_REACTIVE_FLUSHING.key, -                    BooleanSetting.RENDERER_REACTIVE_FLUSHING.defaultValue +                    R.string.renderer_reactive_flushing_description                  )              )          } @@ -355,9 +275,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                      R.string.audio_output_engine,                      0,                      R.array.outputEngineEntries, -                    R.array.outputEngineValues, -                    IntSetting.AUDIO_OUTPUT_ENGINE.key, -                    IntSetting.AUDIO_OUTPUT_ENGINE.defaultValue +                    R.array.outputEngineValues                  )              )              add( @@ -367,9 +285,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                      R.string.audio_volume_description,                      0,                      100, -                    "%", -                    ByteSetting.AUDIO_VOLUME.key, -                    ByteSetting.AUDIO_VOLUME.defaultValue +                    "%"                  )              )          } @@ -392,7 +308,12 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                  override val key: String? = null                  override val category = Settings.Category.UiGeneral                  override val isRuntimeModifiable: Boolean = false -                override val defaultValue: Any = 0 +                override val defaultValue: Int = 0 +                override fun reset() { +                    preferences.edit() +                        .putInt(Settings.PREF_THEME, defaultValue) +                        .apply() +                }              }              if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { @@ -431,7 +352,12 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                  override val key: String? = null                  override val category = Settings.Category.UiGeneral                  override val isRuntimeModifiable: Boolean = false -                override val defaultValue: Any = -1 +                override val defaultValue: Int = -1 +                override fun reset() { +                    preferences.edit() +                        .putInt(Settings.PREF_BLACK_BACKGROUNDS, defaultValue) +                        .apply() +                }              }              add( @@ -458,7 +384,12 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                  override val key: String? = null                  override val category = Settings.Category.UiGeneral                  override val isRuntimeModifiable: Boolean = false -                override val defaultValue: Any = false +                override val defaultValue: Boolean = false +                override fun reset() { +                    preferences.edit() +                        .putBoolean(Settings.PREF_BLACK_BACKGROUNDS, defaultValue) +                        .apply() +                }              }              add( @@ -481,18 +412,14 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                      R.string.renderer_api,                      0,                      R.array.rendererApiNames, -                    R.array.rendererApiValues, -                    IntSetting.RENDERER_BACKEND.key, -                    IntSetting.RENDERER_BACKEND.defaultValue +                    R.array.rendererApiValues                  )              )              add(                  SwitchSetting(                      BooleanSetting.RENDERER_DEBUG,                      R.string.renderer_debug, -                    R.string.renderer_debug_description, -                    BooleanSetting.RENDERER_DEBUG.key, -                    BooleanSetting.RENDERER_DEBUG.defaultValue +                    R.string.renderer_debug_description                  )              ) @@ -501,9 +428,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                  SwitchSetting(                      BooleanSetting.CPU_DEBUG_MODE,                      R.string.cpu_debug_mode, -                    R.string.cpu_debug_mode_description, -                    BooleanSetting.CPU_DEBUG_MODE.key, -                    BooleanSetting.CPU_DEBUG_MODE.defaultValue +                    R.string.cpu_debug_mode_description                  )              ) @@ -520,15 +445,10 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)                  override val key: String? = null                  override val category = Settings.Category.Cpu                  override val isRuntimeModifiable: Boolean = false -                override val defaultValue: Any = true +                override val defaultValue: Boolean = true +                override fun reset() = setBoolean(defaultValue)              } -            add( -                SwitchSetting( -                    fastmem, -                    R.string.fastmem, -                    0 -                ) -            ) +            add(SwitchSetting(fastmem, R.string.fastmem, 0))          }      }  } 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      override fun onLongClick(clicked: View): Boolean {          if (setting.isEditable) { -            return adapter.onLongClick(setting.setting!!, bindingAdapterPosition) +            return adapter.onLongClick(setting.setting, bindingAdapterPosition)          }          return false      } 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                  }              }          } else if (item is StringSingleChoiceSetting) { -            for (i in item.values!!.indices) { +            for (i in item.values.indices) {                  if (item.values[i] == item.selectedValue) {                      binding.textSettingValue.text = item.choices[i]                      break @@ -66,7 +66,7 @@ class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: Setti      override fun onLongClick(clicked: View): Boolean {          if (setting.isEditable) { -            return adapter.onLongClick(setting.setting!!, bindingAdapterPosition) +            return adapter.onLongClick(setting.setting, bindingAdapterPosition)          }          return false      } 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      override fun onLongClick(clicked: View): Boolean {          if (setting.isEditable) { -            return adapter.onLongClick(setting.setting!!, bindingAdapterPosition) +            return adapter.onLongClick(setting.setting, bindingAdapterPosition)          }          return false      } 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          binding.switchWidget.setOnCheckedChangeListener { _: CompoundButton, _: Boolean ->              adapter.onBooleanClick(item, bindingAdapterPosition, binding.switchWidget.isChecked)          } -        binding.switchWidget.isChecked = setting.isChecked +        binding.switchWidget.isChecked = setting.checked          setStyle(setting.isEditable, binding)      } | 
