summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar bunnei2023-06-16 16:52:54 -0700
committerGravatar GitHub2023-06-16 16:52:54 -0700
commit24e1e4dceee3788202451d822ce87e8c7f7cc9b7 (patch)
tree2e0365e34923fb753d1cdd7e3b70de90cbbf2604
parentMerge pull request #10807 from t895/ktlint-fixes (diff)
parentandroid: Expose audio output engine setting (diff)
downloadyuzu-24e1e4dceee3788202451d822ce87e8c7f7cc9b7.tar.gz
yuzu-24e1e4dceee3788202451d822ce87e8c7f7cc9b7.tar.xz
yuzu-24e1e4dceee3788202451d822ce87e8c7f7cc9b7.zip
Merge pull request #10808 from t895/settings-stuffs
android: Expose settings
Diffstat (limited to '')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt3
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/StringSetting.kt1
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/HeaderSetting.kt8
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/StringSingleChoiceSetting.kt16
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt73
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SingleChoiceViewHolder.kt8
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.kt16
-rw-r--r--src/android/app/src/main/res/layout/list_item_setting_switch.xml55
-rw-r--r--src/android/app/src/main/res/layout/list_item_settings_header.xml28
-rw-r--r--src/android/app/src/main/res/values/arrays.xml11
-rw-r--r--src/android/app/src/main/res/values/strings.xml18
12 files changed, 165 insertions, 74 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt
index 63b4df273..d41933766 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt
@@ -8,6 +8,9 @@ enum class BooleanSetting(
8 override val section: String, 8 override val section: String,
9 override val defaultValue: Boolean 9 override val defaultValue: Boolean
10) : AbstractBooleanSetting { 10) : AbstractBooleanSetting {
11 CPU_DEBUG_MODE("cpu_debug_mode", Settings.SECTION_CPU, false),
12 FASTMEM("cpuopt_fastmem", Settings.SECTION_CPU, true),
13 FASTMEM_EXCLUSIVES("cpuopt_fastmem_exclusives", Settings.SECTION_CPU, true),
11 PICTURE_IN_PICTURE("picture_in_picture", Settings.SECTION_GENERAL, true), 14 PICTURE_IN_PICTURE("picture_in_picture", Settings.SECTION_GENERAL, true),
12 USE_CUSTOM_RTC("custom_rtc_enabled", Settings.SECTION_SYSTEM, false); 15 USE_CUSTOM_RTC("custom_rtc_enabled", Settings.SECTION_SYSTEM, false);
13 16
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/StringSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/StringSetting.kt
index 63f95690c..6621289fd 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/StringSetting.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/StringSetting.kt
@@ -8,6 +8,7 @@ enum class StringSetting(
8 override val section: String, 8 override val section: String,
9 override val defaultValue: String 9 override val defaultValue: String
10) : AbstractStringSetting { 10) : AbstractStringSetting {
11 AUDIO_OUTPUT_ENGINE("output_engine", Settings.SECTION_AUDIO, "auto"),
11 CUSTOM_RTC("custom_rtc", Settings.SECTION_SYSTEM, "0"); 12 CUSTOM_RTC("custom_rtc", Settings.SECTION_SYSTEM, "0");
12 13
13 override var string: String = defaultValue 14 override var string: String = defaultValue
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 0f8edbfb0..a67001311 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
@@ -3,12 +3,8 @@
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.features.settings.model.AbstractSetting
7
8class HeaderSetting( 6class HeaderSetting(
9 setting: AbstractSetting?, 7 titleId: Int
10 titleId: Int, 8) : SettingsItem(null, titleId, 0) {
11 descriptionId: Int
12) : SettingsItem(setting, titleId, descriptionId) {
13 override val type = TYPE_HEADER 9 override val type = TYPE_HEADER
14} 10}
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 bad34fd88..3b6731dcd 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
@@ -7,20 +7,20 @@ import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
7import org.yuzu.yuzu_emu.features.settings.model.AbstractStringSetting 7import org.yuzu.yuzu_emu.features.settings.model.AbstractStringSetting
8 8
9class StringSingleChoiceSetting( 9class StringSingleChoiceSetting(
10 val key: String? = null,
11 setting: AbstractSetting?, 10 setting: AbstractSetting?,
12 titleId: Int, 11 titleId: Int,
13 descriptionId: Int, 12 descriptionId: Int,
14 val choicesId: Array<String>, 13 val choices: Array<String>,
15 private val valuesId: Array<String>?, 14 val values: Array<String>?,
15 val key: String? = null,
16 private val defaultValue: String? = null 16 private val defaultValue: String? = null
17) : SettingsItem(setting, titleId, descriptionId) { 17) : SettingsItem(setting, titleId, descriptionId) {
18 override val type = TYPE_STRING_SINGLE_CHOICE 18 override val type = TYPE_STRING_SINGLE_CHOICE
19 19
20 fun getValueAt(index: Int): String? { 20 fun getValueAt(index: Int): String? {
21 if (valuesId == null) return null 21 if (values == null) return null
22 return if (index >= 0 && index < valuesId.size) { 22 return if (index >= 0 && index < values.size) {
23 valuesId[index] 23 values[index]
24 } else { 24 } else {
25 "" 25 ""
26 } 26 }
@@ -36,8 +36,8 @@ class StringSingleChoiceSetting(
36 val selectValueIndex: Int 36 val selectValueIndex: Int
37 get() { 37 get() {
38 val selectedValue = selectedValue 38 val selectedValue = selectedValue
39 for (i in valuesId!!.indices) { 39 for (i in values!!.indices) {
40 if (valuesId[i] == selectedValue) { 40 if (values[i] == selectedValue) {
41 return i 41 return i
42 } 42 }
43 } 43 }
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 eac6a134b..ce0b92c90 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
@@ -138,7 +138,7 @@ class SettingsAdapter(
138 clickedItem = item 138 clickedItem = item
139 dialog = MaterialAlertDialogBuilder(context) 139 dialog = MaterialAlertDialogBuilder(context)
140 .setTitle(item.nameId) 140 .setTitle(item.nameId)
141 .setSingleChoiceItems(item.choicesId, item.selectValueIndex, this) 141 .setSingleChoiceItems(item.choices, item.selectValueIndex, this)
142 .show() 142 .show()
143 } 143 }
144 144
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 c8c85dd7a..59c1d9d54 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
@@ -42,7 +42,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
42 } 42 }
43 43
44 fun putSetting(setting: AbstractSetting) { 44 fun putSetting(setting: AbstractSetting) {
45 if (setting.section == null) { 45 if (setting.section == null || setting.key == null) {
46 return 46 return
47 } 47 }
48 48
@@ -353,18 +353,31 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
353 353
354 private fun addAudioSettings(sl: ArrayList<SettingsItem>) { 354 private fun addAudioSettings(sl: ArrayList<SettingsItem>) {
355 settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.preferences_audio)) 355 settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.preferences_audio))
356 sl.add( 356 sl.apply {
357 SliderSetting( 357 add(
358 IntSetting.AUDIO_VOLUME, 358 StringSingleChoiceSetting(
359 R.string.audio_volume, 359 StringSetting.AUDIO_OUTPUT_ENGINE,
360 R.string.audio_volume_description, 360 R.string.audio_output_engine,
361 0, 361 0,
362 100, 362 settingsActivity.resources.getStringArray(R.array.outputEngineEntries),
363 "%", 363 settingsActivity.resources.getStringArray(R.array.outputEngineValues),
364 IntSetting.AUDIO_VOLUME.key, 364 StringSetting.AUDIO_OUTPUT_ENGINE.key,
365 IntSetting.AUDIO_VOLUME.defaultValue 365 StringSetting.AUDIO_OUTPUT_ENGINE.defaultValue
366 ) 366 )
367 ) 367 )
368 add(
369 SliderSetting(
370 IntSetting.AUDIO_VOLUME,
371 R.string.audio_volume,
372 R.string.audio_volume_description,
373 0,
374 100,
375 "%",
376 IntSetting.AUDIO_VOLUME.key,
377 IntSetting.AUDIO_VOLUME.defaultValue
378 )
379 )
380 }
368 } 381 }
369 382
370 private fun addThemeSettings(sl: ArrayList<SettingsItem>) { 383 private fun addThemeSettings(sl: ArrayList<SettingsItem>) {
@@ -467,6 +480,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
467 private fun addDebugSettings(sl: ArrayList<SettingsItem>) { 480 private fun addDebugSettings(sl: ArrayList<SettingsItem>) {
468 settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.preferences_debug)) 481 settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.preferences_debug))
469 sl.apply { 482 sl.apply {
483 add(HeaderSetting(R.string.gpu))
470 add( 484 add(
471 SingleChoiceSetting( 485 SingleChoiceSetting(
472 IntSetting.RENDERER_BACKEND, 486 IntSetting.RENDERER_BACKEND,
@@ -487,6 +501,39 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
487 IntSetting.RENDERER_DEBUG.defaultValue 501 IntSetting.RENDERER_DEBUG.defaultValue
488 ) 502 )
489 ) 503 )
504
505 add(HeaderSetting(R.string.cpu))
506 add(
507 SwitchSetting(
508 BooleanSetting.CPU_DEBUG_MODE,
509 R.string.cpu_debug_mode,
510 R.string.cpu_debug_mode_description,
511 BooleanSetting.CPU_DEBUG_MODE.key,
512 BooleanSetting.CPU_DEBUG_MODE.defaultValue
513 )
514 )
515
516 val fastmem = object : AbstractBooleanSetting {
517 override var boolean: Boolean
518 get() =
519 BooleanSetting.FASTMEM.boolean && BooleanSetting.FASTMEM_EXCLUSIVES.boolean
520 set(value) {
521 BooleanSetting.FASTMEM.boolean = value
522 BooleanSetting.FASTMEM_EXCLUSIVES.boolean = value
523 }
524 override val key: String? = null
525 override val section: String = Settings.SECTION_CPU
526 override val isRuntimeEditable: Boolean = false
527 override val valueAsString: String = ""
528 override val defaultValue: Any = true
529 }
530 add(
531 SwitchSetting(
532 fastmem,
533 R.string.fastmem,
534 0
535 )
536 )
490 } 537 }
491 } 538 }
492} 539}
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 de764a27f..e4e321bd3 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
@@ -26,6 +26,14 @@ class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: Setti
26 for (i in values.indices) { 26 for (i in values.indices) {
27 if (values[i] == item.selectedValue) { 27 if (values[i] == item.selectedValue) {
28 binding.textSettingDescription.text = resMgr.getStringArray(item.choicesId)[i] 28 binding.textSettingDescription.text = resMgr.getStringArray(item.choicesId)[i]
29 return
30 }
31 }
32 } else if (item is StringSingleChoiceSetting) {
33 for (i in item.values!!.indices) {
34 if (item.values[i] == item.selectedValue) {
35 binding.textSettingDescription.text = item.choices[i]
36 return
29 } 37 }
30 } 38 }
31 } else { 39 } else {
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.kt
index 20a0636df..70a52df5d 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.kt
@@ -244,5 +244,21 @@ object SettingsFile {
244 val setting = settings[key] 244 val setting = settings[key]
245 parser.put(header, setting!!.key, setting.valueAsString) 245 parser.put(header, setting!!.key, setting.valueAsString)
246 } 246 }
247
248 BooleanSetting.values().forEach {
249 if (!keySet.contains(it.key)) {
250 parser.put(header, it.key, it.valueAsString)
251 }
252 }
253 IntSetting.values().forEach {
254 if (!keySet.contains(it.key)) {
255 parser.put(header, it.key, it.valueAsString)
256 }
257 }
258 StringSetting.values().forEach {
259 if (!keySet.contains(it.key)) {
260 parser.put(header, it.key, it.valueAsString)
261 }
262 }
247 } 263 }
248} 264}
diff --git a/src/android/app/src/main/res/layout/list_item_setting_switch.xml b/src/android/app/src/main/res/layout/list_item_setting_switch.xml
index 599d845ad..a5767adee 100644
--- a/src/android/app/src/main/res/layout/list_item_setting_switch.xml
+++ b/src/android/app/src/main/res/layout/list_item_setting_switch.xml
@@ -1,16 +1,16 @@
1<?xml version="1.0" encoding="utf-8"?> 1<?xml version="1.0" encoding="utf-8"?>
2<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto"
3 xmlns:tools="http://schemas.android.com/tools" 4 xmlns:tools="http://schemas.android.com/tools"
4 android:layout_width="match_parent" 5 android:layout_width="match_parent"
5 android:layout_height="wrap_content" 6 android:layout_height="wrap_content"
6 xmlns:app="http://schemas.android.com/apk/res-auto"
7 android:background="?android:attr/selectableItemBackground" 7 android:background="?android:attr/selectableItemBackground"
8 android:clickable="true" 8 android:clickable="true"
9 android:focusable="true" 9 android:focusable="true"
10 android:minHeight="72dp" 10 android:minHeight="72dp"
11 android:paddingVertical="@dimen/spacing_large"
11 android:paddingStart="@dimen/spacing_large" 12 android:paddingStart="@dimen/spacing_large"
12 android:paddingEnd="24dp" 13 android:paddingEnd="24dp">
13 android:paddingVertical="@dimen/spacing_large">
14 14
15 <com.google.android.material.materialswitch.MaterialSwitch 15 <com.google.android.material.materialswitch.MaterialSwitch
16 android:id="@+id/switch_widget" 16 android:id="@+id/switch_widget"
@@ -19,32 +19,35 @@
19 android:layout_alignParentEnd="true" 19 android:layout_alignParentEnd="true"
20 android:layout_centerVertical="true" /> 20 android:layout_centerVertical="true" />
21 21
22 <com.google.android.material.textview.MaterialTextView 22 <LinearLayout
23 style="@style/TextAppearance.Material3.BodySmall" 23 android:layout_width="match_parent"
24 android:id="@+id/text_setting_description"
25 android:layout_width="wrap_content"
26 android:layout_height="wrap_content"
27 android:layout_alignParentStart="true"
28 android:layout_alignStart="@+id/text_setting_name"
29 android:layout_below="@+id/text_setting_name"
30 android:layout_marginEnd="@dimen/spacing_large"
31 android:layout_marginTop="@dimen/spacing_small"
32 android:layout_toStartOf="@+id/switch_widget"
33 android:textAlignment="viewStart"
34 tools:text="@string/frame_limit_enable_description" />
35
36 <com.google.android.material.textview.MaterialTextView
37 style="@style/TextAppearance.Material3.HeadlineMedium"
38 android:id="@+id/text_setting_name"
39 android:layout_width="0dp"
40 android:layout_height="wrap_content" 24 android:layout_height="wrap_content"
41 android:layout_alignParentStart="true"
42 android:layout_alignParentTop="true" 25 android:layout_alignParentTop="true"
26 android:layout_centerVertical="true"
43 android:layout_marginEnd="@dimen/spacing_large" 27 android:layout_marginEnd="@dimen/spacing_large"
44 android:layout_toStartOf="@+id/switch_widget" 28 android:layout_toStartOf="@+id/switch_widget"
45 android:textSize="16sp" 29 android:gravity="center_vertical"
46 android:textAlignment="viewStart" 30 android:orientation="vertical">
47 app:lineHeight="28dp" 31
48 tools:text="@string/frame_limit_enable" /> 32 <com.google.android.material.textview.MaterialTextView
33 android:id="@+id/text_setting_name"
34 style="@style/TextAppearance.Material3.HeadlineMedium"
35 android:layout_width="wrap_content"
36 android:layout_height="wrap_content"
37 android:textAlignment="viewStart"
38 android:textSize="16sp"
39 app:lineHeight="28dp"
40 tools:text="@string/frame_limit_enable" />
41
42 <com.google.android.material.textview.MaterialTextView
43 android:id="@+id/text_setting_description"
44 style="@style/TextAppearance.Material3.BodySmall"
45 android:layout_width="wrap_content"
46 android:layout_height="wrap_content"
47 android:layout_marginTop="@dimen/spacing_small"
48 android:textAlignment="viewStart"
49 tools:text="@string/frame_limit_enable_description" />
50
51 </LinearLayout>
49 52
50</RelativeLayout> 53</RelativeLayout>
diff --git a/src/android/app/src/main/res/layout/list_item_settings_header.xml b/src/android/app/src/main/res/layout/list_item_settings_header.xml
index abd24df6f..cf85bc0da 100644
--- a/src/android/app/src/main/res/layout/list_item_settings_header.xml
+++ b/src/android/app/src/main/res/layout/list_item_settings_header.xml
@@ -1,20 +1,14 @@
1<?xml version="1.0" encoding="utf-8"?> 1<?xml version="1.0" encoding="utf-8"?>
2<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 2<com.google.android.material.textview.MaterialTextView xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:tools="http://schemas.android.com/tools" 3 xmlns:tools="http://schemas.android.com/tools"
4 android:id="@+id/text_header_name"
5 style="@style/TextAppearance.Material3.TitleSmall"
4 android:layout_width="match_parent" 6 android:layout_width="match_parent"
5 android:layout_height="48dp" 7 android:layout_height="wrap_content"
6 android:paddingVertical="4dp" 8 android:layout_gravity="start|center_vertical"
7 android:paddingHorizontal="@dimen/spacing_large"> 9 android:paddingHorizontal="@dimen/spacing_large"
8 10 android:paddingVertical="16dp"
9 <com.google.android.material.textview.MaterialTextView 11 android:textAlignment="viewStart"
10 style="@style/TextAppearance.Material3.TitleSmall" 12 android:textColor="?attr/colorPrimary"
11 android:id="@+id/text_header_name" 13 android:textStyle="bold"
12 android:layout_width="match_parent" 14 tools:text="CPU Settings" />
13 android:layout_height="wrap_content"
14 android:layout_gravity="start|center_vertical"
15 android:textColor="?attr/colorPrimary"
16 android:textAlignment="viewStart"
17 android:textStyle="bold"
18 tools:text="CPU Settings" />
19
20</FrameLayout>
diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml
index 7f7b1938c..6d092f7a9 100644
--- a/src/android/app/src/main/res/values/arrays.xml
+++ b/src/android/app/src/main/res/values/arrays.xml
@@ -236,4 +236,15 @@
236 <item>2</item> 236 <item>2</item>
237 </integer-array> 237 </integer-array>
238 238
239 <string-array name="outputEngineEntries">
240 <item>@string/auto</item>
241 <item>@string/cubeb</item>
242 <item>@string/string_null</item>
243 </string-array>
244 <string-array name="outputEngineValues">
245 <item>auto</item>
246 <item>cubeb</item>
247 <item>null</item>
248 </string-array>
249
239</resources> 250</resources>
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 2f2059d42..cc1d8c39d 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -158,7 +158,6 @@
158 <string name="set_custom_rtc">Set custom RTC</string> 158 <string name="set_custom_rtc">Set custom RTC</string>
159 159
160 <!-- Graphics settings strings --> 160 <!-- Graphics settings strings -->
161 <string name="renderer_api">API</string>
162 <string name="renderer_accuracy">Accuracy level</string> 161 <string name="renderer_accuracy">Accuracy level</string>
163 <string name="renderer_resolution">Resolution (Handheld/Docked)</string> 162 <string name="renderer_resolution">Resolution (Handheld/Docked)</string>
164 <string name="renderer_vsync">VSync mode</string> 163 <string name="renderer_vsync">VSync mode</string>
@@ -172,12 +171,21 @@
172 <string name="renderer_asynchronous_shaders_description">Compiles shaders asynchronously, reducing stutter but may introduce glitches.</string> 171 <string name="renderer_asynchronous_shaders_description">Compiles shaders asynchronously, reducing stutter but may introduce glitches.</string>
173 <string name="renderer_reactive_flushing">Use reactive flushing</string> 172 <string name="renderer_reactive_flushing">Use reactive flushing</string>
174 <string name="renderer_reactive_flushing_description">Improves rendering accuracy in some games at the cost of performance.</string> 173 <string name="renderer_reactive_flushing_description">Improves rendering accuracy in some games at the cost of performance.</string>
175 <string name="renderer_debug">Graphics debugging</string>
176 <string name="renderer_debug_description">Sets the graphics API to a slow debugging mode.</string>
177 <string name="use_disk_shader_cache">Disk shader cache</string> 174 <string name="use_disk_shader_cache">Disk shader cache</string>
178 <string name="use_disk_shader_cache_description">Reduces stuttering by locally storing and loading generated shaders.</string> 175 <string name="use_disk_shader_cache_description">Reduces stuttering by locally storing and loading generated shaders.</string>
179 176
177 <!-- Debug settings strings -->
178 <string name="cpu">CPU</string>
179 <string name="cpu_debug_mode">CPU Debugging</string>
180 <string name="cpu_debug_mode_description">Puts the CPU in a slow debugging mode.</string>
181 <string name="gpu">GPU</string>
182 <string name="renderer_api">API</string>
183 <string name="renderer_debug">Graphics debugging</string>
184 <string name="renderer_debug_description">Sets the graphics API to a slow debugging mode.</string>
185 <string name="fastmem">Fastmem</string>
186
180 <!-- Audio settings strings --> 187 <!-- Audio settings strings -->
188 <string name="audio_output_engine">Output engine</string>
181 <string name="audio_volume">Volume</string> 189 <string name="audio_volume">Volume</string>
182 <string name="audio_volume_description">Specifies the volume of audio output.</string> 190 <string name="audio_volume_description">Specifies the volume of audio output.</string>
183 191
@@ -196,6 +204,7 @@
196 <string name="learn_more">Learn more</string> 204 <string name="learn_more">Learn more</string>
197 <string name="auto">Auto</string> 205 <string name="auto">Auto</string>
198 <string name="submit">Submit</string> 206 <string name="submit">Submit</string>
207 <string name="string_null">Null</string>
199 208
200 <!-- GPU driver installation --> 209 <!-- GPU driver installation -->
201 <string name="select_gpu_driver">Select GPU driver</string> 210 <string name="select_gpu_driver">Select GPU driver</string>
@@ -366,6 +375,9 @@
366 <string name="theme_mode_light">Light</string> 375 <string name="theme_mode_light">Light</string>
367 <string name="theme_mode_dark">Dark</string> 376 <string name="theme_mode_dark">Dark</string>
368 377
378 <!-- Audio output engines -->
379 <string name="cubeb">cubeb</string>
380
369 <!-- Black backgrounds theme --> 381 <!-- Black backgrounds theme -->
370 <string name="use_black_backgrounds">Black backgrounds</string> 382 <string name="use_black_backgrounds">Black backgrounds</string>
371 <string name="use_black_backgrounds_description">When using the dark theme, apply black backgrounds.</string> 383 <string name="use_black_backgrounds_description">When using the dark theme, apply black backgrounds.</string>