mirror of
https://github.com/azahar-emu/azahar.git
synced 2026-06-24 12:09:22 -04:00
Code Cleanup and Start of Reimplementation based off #1430
This commit is contained in:
parent
2ef7c17799
commit
4baecabd8c
8 changed files with 58 additions and 160 deletions
|
|
@ -4,6 +4,6 @@
|
|||
|
||||
package org.citra.citra_emu.features.settings.model
|
||||
|
||||
interface AbstractMultiFloatSetting : AbstractSetting {
|
||||
var floats: MutableSet<Float>
|
||||
}
|
||||
interface AbstractListSetting<E> : AbstractSetting {
|
||||
var list: List<E>
|
||||
}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
// Copyright Citra Emulator Project / Azahar Emulator Project
|
||||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
package org.citra.citra_emu.features.settings.model
|
||||
|
||||
interface AbstractMultiBooleanSetting : AbstractSetting {
|
||||
var booleans: MutableSet<Boolean>
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
// Copyright Citra Emulator Project / Azahar Emulator Project
|
||||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
package org.citra.citra_emu.features.settings.model
|
||||
|
||||
enum class StringListSetting(
|
||||
override val key: String,
|
||||
override val section: String,
|
||||
override val defaultValue: List<String>
|
||||
) : AbstractListSetting<String> {
|
||||
COMBO_KEY_LIST("combo_key_list", Settings.SECTION_CONTROLS, listOf("A", "B", "X", "Y", "L", "R", "ZL", "ZR", "Start", "Select"));
|
||||
|
||||
override var list: List<String> = defaultValue
|
||||
|
||||
override val valueAsString: String
|
||||
get() = list.joinToString()
|
||||
|
||||
|
||||
override val isRuntimeEditable: Boolean
|
||||
get() {
|
||||
for (setting in NOT_RUNTIME_EDITABLE) {
|
||||
if (setting == this) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val NOT_RUNTIME_EDITABLE:List<StringListSetting> = listOf();
|
||||
|
||||
|
||||
fun from(key: String): StringListSetting? =
|
||||
values().firstOrNull { it.key == key }
|
||||
|
||||
fun clear() = values().forEach { it.list = it.defaultValue }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
// Copyright Citra Emulator Project / Azahar Emulator Project
|
||||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
package org.citra.citra_emu.features.settings.model.view
|
||||
|
||||
import org.citra.citra_emu.features.settings.model.AbstractMultiIntSetting
|
||||
import org.citra.citra_emu.features.settings.model.AbstractSetting
|
||||
import org.citra.citra_emu.features.settings.model.AbstractMultiShortSetting
|
||||
import org.citra.citra_emu.features.settings.model.AbstractIntSetting
|
||||
import org.citra.citra_emu.features.settings.model.AbstractShortSetting
|
||||
|
||||
class MultiChoiceSetting(
|
||||
setting: AbstractSetting?,
|
||||
titleId: Int,
|
||||
descriptionId: Int,
|
||||
val choicesId: Int,
|
||||
val valuesId: Int,
|
||||
val key: String? = null,
|
||||
val defaultValues: List<Int>? = null,
|
||||
override var isEnabled: Boolean = true
|
||||
) : SettingsItem(setting, titleId, descriptionId) {
|
||||
override val type = TYPE_MULTI_CHOICE
|
||||
|
||||
val selectedValues: List<Int>
|
||||
get() {
|
||||
if (setting == null) {
|
||||
return defaultValues!!
|
||||
}
|
||||
|
||||
try {
|
||||
val setting = setting as AbstractMultiIntSetting
|
||||
return setting.ints.toList()
|
||||
} catch (_: ClassCastException) {
|
||||
}
|
||||
|
||||
try {
|
||||
val setting = setting as AbstractMultiShortSetting
|
||||
return setting.shorts.map { it.toInt() }
|
||||
} catch (_: ClassCastException) {
|
||||
}
|
||||
|
||||
return defaultValues!!
|
||||
}
|
||||
|
||||
/**
|
||||
* Add values to multi choice backing mutable sets.
|
||||
*
|
||||
* @param selection New value of the int.
|
||||
* @return the existing setting with the new value added.
|
||||
*/
|
||||
fun addSelectedValue(selection: Int): AbstractMultiIntSetting {
|
||||
val intSetting = setting as AbstractMultiIntSetting
|
||||
intSetting.ints.add(selection)
|
||||
return intSetting
|
||||
}
|
||||
|
||||
fun addSelectedValue(selection: Short): AbstractMultiShortSetting {
|
||||
val shortSetting = setting as AbstractMultiShortSetting
|
||||
shortSetting.shorts.add(selection)
|
||||
return shortSetting
|
||||
}
|
||||
|
||||
fun removeSelectedValue(selection: Int): AbstractMultiIntSetting {
|
||||
val intSetting = setting as AbstractMultiIntSetting
|
||||
intSetting.ints.remove(selection)
|
||||
return intSetting
|
||||
}
|
||||
|
||||
fun removeSelectedValue(selection: Short): AbstractMultiShortSetting {
|
||||
val shortSetting = setting as AbstractMultiShortSetting
|
||||
shortSetting.shorts.remove(selection)
|
||||
return shortSetting
|
||||
}
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@ package org.citra.citra_emu.features.settings.model.view
|
|||
import org.citra.citra_emu.features.settings.model.AbstractSetting
|
||||
import org.citra.citra_emu.features.settings.model.AbstractMultiShortSetting
|
||||
import org.citra.citra_emu.features.settings.model.AbstractMultiStringSetting
|
||||
import org.citra.citra_emu.features.settings.model.StringListSetting
|
||||
|
||||
class StringMultiChoiceSetting(
|
||||
setting: AbstractSetting?,
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ import org.citra.citra_emu.databinding.ListItemSettingsHeaderBinding
|
|||
import org.citra.citra_emu.features.settings.model.AbstractBooleanSetting
|
||||
import org.citra.citra_emu.features.settings.model.AbstractFloatSetting
|
||||
import org.citra.citra_emu.features.settings.model.AbstractIntSetting
|
||||
import org.citra.citra_emu.features.settings.model.AbstractMultiIntSetting
|
||||
import org.citra.citra_emu.features.settings.model.AbstractMultiShortSetting
|
||||
import org.citra.citra_emu.features.settings.model.AbstractMultiStringSetting
|
||||
import org.citra.citra_emu.features.settings.model.AbstractSetting
|
||||
|
|
@ -49,7 +48,6 @@ import org.citra.citra_emu.features.settings.model.AbstractShortSetting
|
|||
import org.citra.citra_emu.features.settings.model.Settings
|
||||
import org.citra.citra_emu.features.settings.model.view.DateTimeSetting
|
||||
import org.citra.citra_emu.features.settings.model.view.InputBindingSetting
|
||||
import org.citra.citra_emu.features.settings.model.view.MultiChoiceSetting
|
||||
import org.citra.citra_emu.features.settings.model.view.SettingsItem
|
||||
import org.citra.citra_emu.features.settings.model.view.SingleChoiceSetting
|
||||
import org.citra.citra_emu.features.settings.model.view.SliderSetting
|
||||
|
|
@ -61,7 +59,7 @@ import org.citra.citra_emu.features.settings.model.view.SwitchSetting
|
|||
import org.citra.citra_emu.features.settings.ui.viewholder.DateTimeViewHolder
|
||||
import org.citra.citra_emu.features.settings.ui.viewholder.HeaderViewHolder
|
||||
import org.citra.citra_emu.features.settings.ui.viewholder.InputBindingSettingViewHolder
|
||||
import org.citra.citra_emu.features.settings.ui.viewholder.MultiChoiceViewHolder
|
||||
import org.citra.citra_emu.features.settings.ui.viewholder.StringMultiChoiceViewHolder
|
||||
import org.citra.citra_emu.features.settings.ui.viewholder.RunnableViewHolder
|
||||
import org.citra.citra_emu.features.settings.ui.viewholder.SettingViewHolder
|
||||
import org.citra.citra_emu.features.settings.ui.viewholder.SingleChoiceViewHolder
|
||||
|
|
@ -136,7 +134,7 @@ class SettingsAdapter(
|
|||
}
|
||||
|
||||
SettingsItem.TYPE_MULTI_CHOICE, SettingsItem.TYPE_STRING_MULTI_CHOICE -> {
|
||||
MultiChoiceViewHolder(ListItemSettingBinding.inflate(inflater), this)
|
||||
StringMultiChoiceViewHolder(ListItemSettingBinding.inflate(inflater), this)
|
||||
}
|
||||
|
||||
else -> {
|
||||
|
|
@ -207,6 +205,9 @@ class SettingsAdapter(
|
|||
SettingsItem.TYPE_STRING_INPUT -> {
|
||||
(oldItem as StringInputSetting).isEnabled == (newItem as StringInputSetting).isEnabled
|
||||
}
|
||||
SettingsItem.TYPE_STRING_MULTI_CHOICE -> {
|
||||
(oldItem as StringMultiChoiceSetting).isEnabled == (newItem as StringMultiChoiceSetting).isEnabled
|
||||
}
|
||||
else -> {
|
||||
oldItem == newItem
|
||||
}
|
||||
|
|
@ -659,55 +660,7 @@ class SettingsAdapter(
|
|||
return -1
|
||||
}
|
||||
|
||||
private fun getSelectionForMultiChoiceValues(item: MultiChoiceSetting): BooleanArray {
|
||||
val checked_values = mutableListOf<Boolean>()
|
||||
val values = item.selectedValues
|
||||
val valuesId = item.valuesId
|
||||
if (valuesId > 0) {
|
||||
val valuesArray = context.resources.getIntArray(valuesId)
|
||||
for (index in valuesArray.indices) {
|
||||
val current = valuesArray[index]
|
||||
if (current in values) {
|
||||
checked_values.add(true)
|
||||
} else {
|
||||
checked_values.add(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (checked_values == null) {
|
||||
return booleanArrayOf(false)
|
||||
} else {
|
||||
return checked_values.toBooleanArray()
|
||||
}
|
||||
}
|
||||
// TODO: Part of MultiChoice Impl
|
||||
/*
|
||||
private fun getValueForMultiChoiceSelection(item: MultiChoiceSetting, which: Int, is_checked: Boolean): Int {
|
||||
val valuesId = item.valuesId
|
||||
if (valuesId > 0) {
|
||||
val valuesArray = context.resources.getIntArray(valuesId)
|
||||
if (is_checked) {
|
||||
return valuesArray[which]
|
||||
}
|
||||
}
|
||||
return which
|
||||
}
|
||||
*/
|
||||
|
||||
private fun onMultiChoiceClick(item: MultiChoiceSetting) {
|
||||
clickedItem = item
|
||||
val values = getSelectionForMultiChoiceValues(item)
|
||||
dialog = MaterialAlertDialogBuilder(context)
|
||||
.setTitle(item.nameId)
|
||||
.setMultiChoiceItems(item.choicesId, values, this)
|
||||
.show()
|
||||
}
|
||||
|
||||
fun onMultiChoiceClick(item: MultiChoiceSetting, position: Int) {
|
||||
clickedPosition = position
|
||||
onMultiChoiceClick(item)
|
||||
}
|
||||
|
||||
private fun onStringMultiChoiceClick(item: StringMultiChoiceSetting) {
|
||||
clickedItem = item
|
||||
|
|
@ -765,8 +718,8 @@ class SettingsAdapter(
|
|||
//TODO: Don't fully know how to grab the setting itself for the buttons so I'm adding them to a backing array to be called later
|
||||
//TODO: Likely need to be reimplemented
|
||||
is StringMultiChoiceSetting -> {
|
||||
val scSetting = clickedItem as? StringMultiChoiceSetting
|
||||
scSetting?.let {
|
||||
val mcSetting = clickedItem as? StringMultiChoiceSetting
|
||||
mcSetting?.let {
|
||||
val setting = when (it.setting) {
|
||||
is AbstractMultiStringSetting -> {
|
||||
val value = it.getValueAt(which)
|
||||
|
|
|
|||
|
|
@ -6,12 +6,11 @@ package org.citra.citra_emu.features.settings.ui.viewholder
|
|||
|
||||
import android.view.View
|
||||
import org.citra.citra_emu.databinding.ListItemSettingBinding
|
||||
import org.citra.citra_emu.features.settings.model.view.MultiChoiceSetting
|
||||
import org.citra.citra_emu.features.settings.model.view.SettingsItem
|
||||
import org.citra.citra_emu.features.settings.model.view.StringMultiChoiceSetting
|
||||
import org.citra.citra_emu.features.settings.ui.SettingsAdapter
|
||||
|
||||
class MultiChoiceViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) :
|
||||
class StringMultiChoiceViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) :
|
||||
SettingViewHolder(binding.root, adapter) {
|
||||
private lateinit var setting: SettingsItem
|
||||
|
||||
|
|
@ -40,16 +39,6 @@ class MultiChoiceViewHolder(val binding: ListItemSettingBinding, adapter: Settin
|
|||
|
||||
private fun getTextSetting(): String {
|
||||
when (val item = setting) {
|
||||
is MultiChoiceSetting -> {
|
||||
val resMgr = binding.textSettingDescription.context.resources
|
||||
val values = resMgr.getIntArray(item.valuesId)
|
||||
values.forEachIndexed { i: Int, value: Int ->
|
||||
if (value in (setting as MultiChoiceSetting).selectedValues) {
|
||||
return resMgr.getStringArray(item.choicesId)[i]
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
is StringMultiChoiceSetting -> {
|
||||
item.values?.forEachIndexed { i: Int, value: String ->
|
||||
|
|
@ -69,13 +58,7 @@ class MultiChoiceViewHolder(val binding: ListItemSettingBinding, adapter: Settin
|
|||
adapter.onClickDisabledSetting(!setting.isEditable)
|
||||
return
|
||||
}
|
||||
|
||||
if (setting is MultiChoiceSetting) {
|
||||
adapter.onMultiChoiceClick(
|
||||
(setting as MultiChoiceSetting),
|
||||
bindingAdapterPosition
|
||||
)
|
||||
} else if (setting is StringMultiChoiceSetting) {
|
||||
if (setting is StringMultiChoiceSetting) {
|
||||
adapter.onStringMultiChoiceClick(
|
||||
(setting as StringMultiChoiceSetting),
|
||||
bindingAdapterPosition
|
||||
|
|
@ -16,6 +16,7 @@ import org.citra.citra_emu.features.settings.model.IntSetting
|
|||
import org.citra.citra_emu.features.settings.model.ScaledFloatSetting
|
||||
import org.citra.citra_emu.features.settings.model.SettingSection
|
||||
import org.citra.citra_emu.features.settings.model.Settings.SettingsSectionMap
|
||||
import org.citra.citra_emu.features.settings.model.StringListSetting
|
||||
import org.citra.citra_emu.features.settings.model.StringSetting
|
||||
import org.citra.citra_emu.features.settings.ui.SettingsActivityView
|
||||
import org.citra.citra_emu.utils.BiMap
|
||||
|
|
@ -255,6 +256,11 @@ object SettingsFile {
|
|||
return stringSetting
|
||||
}
|
||||
|
||||
val stringListSetting = StringListSetting.from(key)
|
||||
if (stringListSetting != null) {
|
||||
stringListSetting.list = value.split(", ").map { it }
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue