Merge pull request #10808 from t895/settings-stuffs
android: Expose settings
This commit is contained in:
		| @@ -8,6 +8,9 @@ enum class BooleanSetting( | ||||
|     override val section: String, | ||||
|     override val defaultValue: Boolean | ||||
| ) : AbstractBooleanSetting { | ||||
|     CPU_DEBUG_MODE("cpu_debug_mode", Settings.SECTION_CPU, false), | ||||
|     FASTMEM("cpuopt_fastmem", Settings.SECTION_CPU, true), | ||||
|     FASTMEM_EXCLUSIVES("cpuopt_fastmem_exclusives", Settings.SECTION_CPU, true), | ||||
|     PICTURE_IN_PICTURE("picture_in_picture", Settings.SECTION_GENERAL, true), | ||||
|     USE_CUSTOM_RTC("custom_rtc_enabled", Settings.SECTION_SYSTEM, false); | ||||
|  | ||||
|   | ||||
| @@ -8,6 +8,7 @@ enum class StringSetting( | ||||
|     override val section: String, | ||||
|     override val defaultValue: String | ||||
| ) : AbstractStringSetting { | ||||
|     AUDIO_OUTPUT_ENGINE("output_engine", Settings.SECTION_AUDIO, "auto"), | ||||
|     CUSTOM_RTC("custom_rtc", Settings.SECTION_SYSTEM, "0"); | ||||
|  | ||||
|     override var string: String = defaultValue | ||||
|   | ||||
| @@ -3,12 +3,8 @@ | ||||
|  | ||||
| package org.yuzu.yuzu_emu.features.settings.model.view | ||||
|  | ||||
| import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting | ||||
|  | ||||
| class HeaderSetting( | ||||
|     setting: AbstractSetting?, | ||||
|     titleId: Int, | ||||
|     descriptionId: Int | ||||
| ) : SettingsItem(setting, titleId, descriptionId) { | ||||
|     titleId: Int | ||||
| ) : SettingsItem(null, titleId, 0) { | ||||
|     override val type = TYPE_HEADER | ||||
| } | ||||
|   | ||||
| @@ -7,20 +7,20 @@ import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting | ||||
| import org.yuzu.yuzu_emu.features.settings.model.AbstractStringSetting | ||||
|  | ||||
| class StringSingleChoiceSetting( | ||||
|     val key: String? = null, | ||||
|     setting: AbstractSetting?, | ||||
|     titleId: Int, | ||||
|     descriptionId: Int, | ||||
|     val choicesId: Array<String>, | ||||
|     private val valuesId: Array<String>?, | ||||
|     val choices: Array<String>, | ||||
|     val values: Array<String>?, | ||||
|     val key: String? = null, | ||||
|     private val defaultValue: String? = null | ||||
| ) : SettingsItem(setting, titleId, descriptionId) { | ||||
|     override val type = TYPE_STRING_SINGLE_CHOICE | ||||
|  | ||||
|     fun getValueAt(index: Int): String? { | ||||
|         if (valuesId == null) return null | ||||
|         return if (index >= 0 && index < valuesId.size) { | ||||
|             valuesId[index] | ||||
|         if (values == null) return null | ||||
|         return if (index >= 0 && index < values.size) { | ||||
|             values[index] | ||||
|         } else { | ||||
|             "" | ||||
|         } | ||||
| @@ -36,8 +36,8 @@ class StringSingleChoiceSetting( | ||||
|     val selectValueIndex: Int | ||||
|         get() { | ||||
|             val selectedValue = selectedValue | ||||
|             for (i in valuesId!!.indices) { | ||||
|                 if (valuesId[i] == selectedValue) { | ||||
|             for (i in values!!.indices) { | ||||
|                 if (values[i] == selectedValue) { | ||||
|                     return i | ||||
|                 } | ||||
|             } | ||||
|   | ||||
| @@ -138,7 +138,7 @@ class SettingsAdapter( | ||||
|         clickedItem = item | ||||
|         dialog = MaterialAlertDialogBuilder(context) | ||||
|             .setTitle(item.nameId) | ||||
|             .setSingleChoiceItems(item.choicesId, item.selectValueIndex, this) | ||||
|             .setSingleChoiceItems(item.choices, item.selectValueIndex, this) | ||||
|             .show() | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -42,7 +42,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) | ||||
|     } | ||||
|  | ||||
|     fun putSetting(setting: AbstractSetting) { | ||||
|         if (setting.section == null) { | ||||
|         if (setting.section == null || setting.key == null) { | ||||
|             return | ||||
|         } | ||||
|  | ||||
| @@ -353,18 +353,31 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) | ||||
|  | ||||
|     private fun addAudioSettings(sl: ArrayList<SettingsItem>) { | ||||
|         settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.preferences_audio)) | ||||
|         sl.add( | ||||
|             SliderSetting( | ||||
|                 IntSetting.AUDIO_VOLUME, | ||||
|                 R.string.audio_volume, | ||||
|                 R.string.audio_volume_description, | ||||
|                 0, | ||||
|                 100, | ||||
|                 "%", | ||||
|                 IntSetting.AUDIO_VOLUME.key, | ||||
|                 IntSetting.AUDIO_VOLUME.defaultValue | ||||
|         sl.apply { | ||||
|             add( | ||||
|                 StringSingleChoiceSetting( | ||||
|                     StringSetting.AUDIO_OUTPUT_ENGINE, | ||||
|                     R.string.audio_output_engine, | ||||
|                     0, | ||||
|                     settingsActivity.resources.getStringArray(R.array.outputEngineEntries), | ||||
|                     settingsActivity.resources.getStringArray(R.array.outputEngineValues), | ||||
|                     StringSetting.AUDIO_OUTPUT_ENGINE.key, | ||||
|                     StringSetting.AUDIO_OUTPUT_ENGINE.defaultValue | ||||
|                 ) | ||||
|             ) | ||||
|         ) | ||||
|             add( | ||||
|                 SliderSetting( | ||||
|                     IntSetting.AUDIO_VOLUME, | ||||
|                     R.string.audio_volume, | ||||
|                     R.string.audio_volume_description, | ||||
|                     0, | ||||
|                     100, | ||||
|                     "%", | ||||
|                     IntSetting.AUDIO_VOLUME.key, | ||||
|                     IntSetting.AUDIO_VOLUME.defaultValue | ||||
|                 ) | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private fun addThemeSettings(sl: ArrayList<SettingsItem>) { | ||||
| @@ -467,6 +480,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) | ||||
|     private fun addDebugSettings(sl: ArrayList<SettingsItem>) { | ||||
|         settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.preferences_debug)) | ||||
|         sl.apply { | ||||
|             add(HeaderSetting(R.string.gpu)) | ||||
|             add( | ||||
|                 SingleChoiceSetting( | ||||
|                     IntSetting.RENDERER_BACKEND, | ||||
| @@ -487,6 +501,39 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) | ||||
|                     IntSetting.RENDERER_DEBUG.defaultValue | ||||
|                 ) | ||||
|             ) | ||||
|  | ||||
|             add(HeaderSetting(R.string.cpu)) | ||||
|             add( | ||||
|                 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 | ||||
|                 ) | ||||
|             ) | ||||
|  | ||||
|             val fastmem = object : AbstractBooleanSetting { | ||||
|                 override var boolean: Boolean | ||||
|                     get() = | ||||
|                         BooleanSetting.FASTMEM.boolean && BooleanSetting.FASTMEM_EXCLUSIVES.boolean | ||||
|                     set(value) { | ||||
|                         BooleanSetting.FASTMEM.boolean = value | ||||
|                         BooleanSetting.FASTMEM_EXCLUSIVES.boolean = value | ||||
|                     } | ||||
|                 override val key: String? = null | ||||
|                 override val section: String = Settings.SECTION_CPU | ||||
|                 override val isRuntimeEditable: Boolean = false | ||||
|                 override val valueAsString: String = "" | ||||
|                 override val defaultValue: Any = true | ||||
|             } | ||||
|             add( | ||||
|                 SwitchSetting( | ||||
|                     fastmem, | ||||
|                     R.string.fastmem, | ||||
|                     0 | ||||
|                 ) | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -26,6 +26,14 @@ class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: Setti | ||||
|             for (i in values.indices) { | ||||
|                 if (values[i] == item.selectedValue) { | ||||
|                     binding.textSettingDescription.text = resMgr.getStringArray(item.choicesId)[i] | ||||
|                     return | ||||
|                 } | ||||
|             } | ||||
|         } else if (item is StringSingleChoiceSetting) { | ||||
|             for (i in item.values!!.indices) { | ||||
|                 if (item.values[i] == item.selectedValue) { | ||||
|                     binding.textSettingDescription.text = item.choices[i] | ||||
|                     return | ||||
|                 } | ||||
|             } | ||||
|         } else { | ||||
|   | ||||
| @@ -244,5 +244,21 @@ object SettingsFile { | ||||
|             val setting = settings[key] | ||||
|             parser.put(header, setting!!.key, setting.valueAsString) | ||||
|         } | ||||
|  | ||||
|         BooleanSetting.values().forEach { | ||||
|             if (!keySet.contains(it.key)) { | ||||
|                 parser.put(header, it.key, it.valueAsString) | ||||
|             } | ||||
|         } | ||||
|         IntSetting.values().forEach { | ||||
|             if (!keySet.contains(it.key)) { | ||||
|                 parser.put(header, it.key, it.valueAsString) | ||||
|             } | ||||
|         } | ||||
|         StringSetting.values().forEach { | ||||
|             if (!keySet.contains(it.key)) { | ||||
|                 parser.put(header, it.key, it.valueAsString) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,16 +1,16 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="wrap_content" | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|     android:background="?android:attr/selectableItemBackground" | ||||
|     android:clickable="true" | ||||
|     android:focusable="true" | ||||
|     android:minHeight="72dp" | ||||
|     android:paddingVertical="@dimen/spacing_large" | ||||
|     android:paddingStart="@dimen/spacing_large" | ||||
|     android:paddingEnd="24dp" | ||||
|     android:paddingVertical="@dimen/spacing_large"> | ||||
|     android:paddingEnd="24dp"> | ||||
|  | ||||
|     <com.google.android.material.materialswitch.MaterialSwitch | ||||
|         android:id="@+id/switch_widget" | ||||
| @@ -19,32 +19,35 @@ | ||||
|         android:layout_alignParentEnd="true" | ||||
|         android:layout_centerVertical="true" /> | ||||
|  | ||||
|     <com.google.android.material.textview.MaterialTextView | ||||
|         style="@style/TextAppearance.Material3.BodySmall" | ||||
|         android:id="@+id/text_setting_description" | ||||
|         android:layout_width="wrap_content" | ||||
|     <LinearLayout | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_alignParentStart="true" | ||||
|         android:layout_alignStart="@+id/text_setting_name" | ||||
|         android:layout_below="@+id/text_setting_name" | ||||
|         android:layout_marginEnd="@dimen/spacing_large" | ||||
|         android:layout_marginTop="@dimen/spacing_small" | ||||
|         android:layout_toStartOf="@+id/switch_widget" | ||||
|         android:textAlignment="viewStart" | ||||
|         tools:text="@string/frame_limit_enable_description" /> | ||||
|  | ||||
|     <com.google.android.material.textview.MaterialTextView | ||||
|         style="@style/TextAppearance.Material3.HeadlineMedium" | ||||
|         android:id="@+id/text_setting_name" | ||||
|         android:layout_width="0dp" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_alignParentStart="true" | ||||
|         android:layout_alignParentTop="true" | ||||
|         android:layout_centerVertical="true" | ||||
|         android:layout_marginEnd="@dimen/spacing_large" | ||||
|         android:layout_toStartOf="@+id/switch_widget" | ||||
|         android:textSize="16sp" | ||||
|         android:textAlignment="viewStart" | ||||
|         app:lineHeight="28dp" | ||||
|         tools:text="@string/frame_limit_enable" /> | ||||
|         android:gravity="center_vertical" | ||||
|         android:orientation="vertical"> | ||||
|  | ||||
|         <com.google.android.material.textview.MaterialTextView | ||||
|             android:id="@+id/text_setting_name" | ||||
|             style="@style/TextAppearance.Material3.HeadlineMedium" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:textAlignment="viewStart" | ||||
|             android:textSize="16sp" | ||||
|             app:lineHeight="28dp" | ||||
|             tools:text="@string/frame_limit_enable" /> | ||||
|  | ||||
|         <com.google.android.material.textview.MaterialTextView | ||||
|             android:id="@+id/text_setting_description" | ||||
|             style="@style/TextAppearance.Material3.BodySmall" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_marginTop="@dimen/spacing_small" | ||||
|             android:textAlignment="viewStart" | ||||
|             tools:text="@string/frame_limit_enable_description" /> | ||||
|  | ||||
|     </LinearLayout> | ||||
|  | ||||
| </RelativeLayout> | ||||
|   | ||||
| @@ -1,20 +1,14 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
| <com.google.android.material.textview.MaterialTextView xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:id="@+id/text_header_name" | ||||
|     style="@style/TextAppearance.Material3.TitleSmall" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="48dp" | ||||
|     android:paddingVertical="4dp" | ||||
|     android:paddingHorizontal="@dimen/spacing_large"> | ||||
|  | ||||
|     <com.google.android.material.textview.MaterialTextView | ||||
|         style="@style/TextAppearance.Material3.TitleSmall" | ||||
|         android:id="@+id/text_header_name" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_gravity="start|center_vertical" | ||||
|         android:textColor="?attr/colorPrimary" | ||||
|         android:textAlignment="viewStart" | ||||
|         android:textStyle="bold" | ||||
|         tools:text="CPU Settings" /> | ||||
|  | ||||
| </FrameLayout> | ||||
|     android:layout_height="wrap_content" | ||||
|     android:layout_gravity="start|center_vertical" | ||||
|     android:paddingHorizontal="@dimen/spacing_large" | ||||
|     android:paddingVertical="16dp" | ||||
|     android:textAlignment="viewStart" | ||||
|     android:textColor="?attr/colorPrimary" | ||||
|     android:textStyle="bold" | ||||
|     tools:text="CPU Settings" /> | ||||
|   | ||||
| @@ -236,4 +236,15 @@ | ||||
|         <item>2</item> | ||||
|     </integer-array> | ||||
|  | ||||
|     <string-array name="outputEngineEntries"> | ||||
|         <item>@string/auto</item> | ||||
|         <item>@string/cubeb</item> | ||||
|         <item>@string/string_null</item> | ||||
|     </string-array> | ||||
|     <string-array name="outputEngineValues"> | ||||
|         <item>auto</item> | ||||
|         <item>cubeb</item> | ||||
|         <item>null</item> | ||||
|     </string-array> | ||||
|  | ||||
| </resources> | ||||
|   | ||||
| @@ -158,7 +158,6 @@ | ||||
|     <string name="set_custom_rtc">Set custom RTC</string> | ||||
|  | ||||
|     <!-- Graphics settings strings --> | ||||
|     <string name="renderer_api">API</string> | ||||
|     <string name="renderer_accuracy">Accuracy level</string> | ||||
|     <string name="renderer_resolution">Resolution (Handheld/Docked)</string> | ||||
|     <string name="renderer_vsync">VSync mode</string> | ||||
| @@ -172,12 +171,21 @@ | ||||
|     <string name="renderer_asynchronous_shaders_description">Compiles shaders asynchronously, reducing stutter but may introduce glitches.</string> | ||||
|     <string name="renderer_reactive_flushing">Use reactive flushing</string> | ||||
|     <string name="renderer_reactive_flushing_description">Improves rendering accuracy in some games at the cost of performance.</string> | ||||
|     <string name="renderer_debug">Graphics debugging</string> | ||||
|     <string name="renderer_debug_description">Sets the graphics API to a slow debugging mode.</string> | ||||
|     <string name="use_disk_shader_cache">Disk shader cache</string> | ||||
|     <string name="use_disk_shader_cache_description">Reduces stuttering by locally storing and loading generated shaders.</string> | ||||
|  | ||||
|     <!-- Debug settings strings --> | ||||
|     <string name="cpu">CPU</string> | ||||
|     <string name="cpu_debug_mode">CPU Debugging</string> | ||||
|     <string name="cpu_debug_mode_description">Puts the CPU in a slow debugging mode.</string> | ||||
|     <string name="gpu">GPU</string> | ||||
|     <string name="renderer_api">API</string> | ||||
|     <string name="renderer_debug">Graphics debugging</string> | ||||
|     <string name="renderer_debug_description">Sets the graphics API to a slow debugging mode.</string> | ||||
|     <string name="fastmem">Fastmem</string> | ||||
|  | ||||
|     <!-- Audio settings strings --> | ||||
|     <string name="audio_output_engine">Output engine</string> | ||||
|     <string name="audio_volume">Volume</string> | ||||
|     <string name="audio_volume_description">Specifies the volume of audio output.</string> | ||||
|  | ||||
| @@ -196,6 +204,7 @@ | ||||
|     <string name="learn_more">Learn more</string> | ||||
|     <string name="auto">Auto</string> | ||||
|     <string name="submit">Submit</string> | ||||
|     <string name="string_null">Null</string> | ||||
|  | ||||
|     <!-- GPU driver installation --> | ||||
|     <string name="select_gpu_driver">Select GPU driver</string> | ||||
| @@ -366,6 +375,9 @@ | ||||
|     <string name="theme_mode_light">Light</string> | ||||
|     <string name="theme_mode_dark">Dark</string> | ||||
|  | ||||
|     <!-- Audio output engines --> | ||||
|     <string name="cubeb">cubeb</string> | ||||
|  | ||||
|     <!-- Black backgrounds theme --> | ||||
|     <string name="use_black_backgrounds">Black backgrounds</string> | ||||
|     <string name="use_black_backgrounds_description">When using the dark theme, apply black backgrounds.</string> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user