summaryrefslogtreecommitdiff
path: root/src/android
diff options
context:
space:
mode:
authorGravatar Charles Lombardo2023-05-14 13:54:13 -0400
committerGravatar bunnei2023-06-03 00:06:02 -0700
commitee57aa83a4124f4530580b7cddbfe847ffaf7cb0 (patch)
tree6cabf2bc01379a0053eaff693e15d71604300d14 /src/android
parentandroid: Use proguard file in relWithDebInfo (diff)
downloadyuzu-ee57aa83a4124f4530580b7cddbfe847ffaf7cb0.tar.gz
yuzu-ee57aa83a4124f4530580b7cddbfe847ffaf7cb0.tar.xz
yuzu-ee57aa83a4124f4530580b7cddbfe847ffaf7cb0.zip
android: Button to reset all settings
Diffstat (limited to 'src/android')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/FloatSetting.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/SettingsViewModel.kt3
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/StringSetting.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/HeaderSetting.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/RunnableSetting.kt12
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt3
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SwitchSetting.kt3
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt27
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivityPresenter.kt4
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt4
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt36
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/DateTimeViewHolder.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/RunnableViewHolder.kt35
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SingleChoiceViewHolder.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SliderViewHolder.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SubmenuViewHolder.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SwitchSettingViewHolder.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.kt8
-rw-r--r--src/android/app/src/main/res/values/strings.xml6
21 files changed, 138 insertions, 23 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 7c0ca08c7..3dfd66779 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
@@ -32,5 +32,7 @@ enum class BooleanSetting(
32 32
33 fun from(key: String): BooleanSetting? = 33 fun from(key: String): BooleanSetting? =
34 BooleanSetting.values().firstOrNull { it.key == key } 34 BooleanSetting.values().firstOrNull { it.key == key }
35
36 fun clear() = BooleanSetting.values().forEach { it.boolean = it.defaultValue }
35 } 37 }
36} 38}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/FloatSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/FloatSetting.kt
index 96537782a..e5545a916 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/FloatSetting.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/FloatSetting.kt
@@ -30,5 +30,7 @@ enum class FloatSetting(
30 private val NOT_RUNTIME_EDITABLE = emptyList<FloatSetting>() 30 private val NOT_RUNTIME_EDITABLE = emptyList<FloatSetting>()
31 31
32 fun from(key: String): FloatSetting? = FloatSetting.values().firstOrNull { it.key == key } 32 fun from(key: String): FloatSetting? = FloatSetting.values().firstOrNull { it.key == key }
33
34 fun clear() = FloatSetting.values().forEach { it.float = it.defaultValue }
33 } 35 }
34} 36}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
index 39f62cab7..c07e566fe 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
@@ -119,5 +119,7 @@ enum class IntSetting(
119 ) 119 )
120 120
121 fun from(key: String): IntSetting? = IntSetting.values().firstOrNull { it.key == key } 121 fun from(key: String): IntSetting? = IntSetting.values().firstOrNull { it.key == key }
122
123 fun clear() = IntSetting.values().forEach { it.int = it.defaultValue }
122 } 124 }
123} 125}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/SettingsViewModel.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/SettingsViewModel.kt
index 7141604d5..bd9233d62 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/SettingsViewModel.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/SettingsViewModel.kt
@@ -1,3 +1,6 @@
1// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
1package org.yuzu.yuzu_emu.features.settings.model 4package org.yuzu.yuzu_emu.features.settings.model
2 5
3import androidx.lifecycle.ViewModel 6import androidx.lifecycle.ViewModel
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 d16ff17df..63f95690c 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
@@ -31,5 +31,7 @@ enum class StringSetting(
31 ) 31 )
32 32
33 fun from(key: String): StringSetting? = StringSetting.values().firstOrNull { it.key == key } 33 fun from(key: String): StringSetting? = StringSetting.values().firstOrNull { it.key == key }
34
35 fun clear() = StringSetting.values().forEach { it.string = it.defaultValue }
34 } 36 }
35} 37}
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 abba64e93..0f8edbfb0 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
@@ -8,7 +8,7 @@ import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
8class HeaderSetting( 8class HeaderSetting(
9 setting: AbstractSetting?, 9 setting: AbstractSetting?,
10 titleId: Int, 10 titleId: Int,
11 descriptionId: Int? 11 descriptionId: Int
12) : SettingsItem(setting, titleId, descriptionId) { 12) : SettingsItem(setting, titleId, descriptionId) {
13 override val type = TYPE_HEADER 13 override val type = TYPE_HEADER
14} 14}
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
new file mode 100644
index 000000000..dc89b5774
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/RunnableSetting.kt
@@ -0,0 +1,12 @@
1// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4package org.yuzu.yuzu_emu.features.settings.model.view
5
6class RunnableSetting(
7 titleId: Int,
8 descriptionId: Int,
9 val runnable: () -> Unit
10) : SettingsItem(null, titleId, descriptionId) {
11 override val type = TYPE_RUNNABLE
12}
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 c02848403..07520849e 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
@@ -16,7 +16,7 @@ import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
16abstract class SettingsItem( 16abstract class SettingsItem(
17 var setting: AbstractSetting?, 17 var setting: AbstractSetting?,
18 val nameId: Int, 18 val nameId: Int,
19 val descriptionId: Int? 19 val descriptionId: Int
20) { 20) {
21 abstract val type: Int 21 abstract val type: Int
22 22
@@ -34,5 +34,6 @@ abstract class SettingsItem(
34 const val TYPE_SUBMENU = 4 34 const val TYPE_SUBMENU = 4
35 const val TYPE_STRING_SINGLE_CHOICE = 5 35 const val TYPE_STRING_SINGLE_CHOICE = 5
36 const val TYPE_DATETIME_SETTING = 6 36 const val TYPE_DATETIME_SETTING = 6
37 const val TYPE_RUNNABLE = 7
37 } 38 }
38} 39}
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 9f3c7e9d5..90b198718 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
@@ -6,9 +6,6 @@ package org.yuzu.yuzu_emu.features.settings.model.view
6import org.yuzu.yuzu_emu.features.settings.model.AbstractBooleanSetting 6import org.yuzu.yuzu_emu.features.settings.model.AbstractBooleanSetting
7import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting 7import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting
8import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting 8import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting
9import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting
10import org.yuzu.yuzu_emu.features.settings.model.IntSetting
11import org.yuzu.yuzu_emu.utils.Log
12 9
13class SwitchSetting( 10class SwitchSetting(
14 setting: AbstractSetting, 11 setting: AbstractSetting,
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt
index b28750eee..691fad44e 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt
@@ -8,7 +8,6 @@ import android.content.Intent
8import android.os.Bundle 8import android.os.Bundle
9import android.view.Menu 9import android.view.Menu
10import android.view.View 10import android.view.View
11import android.view.ViewGroup
12import android.widget.Toast 11import android.widget.Toast
13import androidx.activity.viewModels 12import androidx.activity.viewModels
14import androidx.appcompat.app.AppCompatActivity 13import androidx.appcompat.app.AppCompatActivity
@@ -21,9 +20,15 @@ import com.google.android.material.color.MaterialColors
21import org.yuzu.yuzu_emu.NativeLibrary 20import org.yuzu.yuzu_emu.NativeLibrary
22import org.yuzu.yuzu_emu.R 21import org.yuzu.yuzu_emu.R
23import org.yuzu.yuzu_emu.databinding.ActivitySettingsBinding 22import org.yuzu.yuzu_emu.databinding.ActivitySettingsBinding
23import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting
24import org.yuzu.yuzu_emu.features.settings.model.FloatSetting
25import org.yuzu.yuzu_emu.features.settings.model.IntSetting
24import org.yuzu.yuzu_emu.features.settings.model.Settings 26import org.yuzu.yuzu_emu.features.settings.model.Settings
25import org.yuzu.yuzu_emu.features.settings.model.SettingsViewModel 27import org.yuzu.yuzu_emu.features.settings.model.SettingsViewModel
28import org.yuzu.yuzu_emu.features.settings.model.StringSetting
29import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile
26import org.yuzu.yuzu_emu.utils.* 30import org.yuzu.yuzu_emu.utils.*
31import java.io.IOException
27 32
28class SettingsActivity : AppCompatActivity(), SettingsActivityView { 33class SettingsActivity : AppCompatActivity(), SettingsActivityView {
29 private val presenter = SettingsActivityPresenter(this) 34 private val presenter = SettingsActivityPresenter(this)
@@ -165,6 +170,26 @@ class SettingsActivity : AppCompatActivity(), SettingsActivityView {
165 presenter.onSettingChanged() 170 presenter.onSettingChanged()
166 } 171 }
167 172
173 fun onSettingsReset() {
174 // Prevents saving to a non-existent settings file
175 presenter.onSettingsReset()
176
177 // Reset the static memory representation of each setting
178 BooleanSetting.clear()
179 FloatSetting.clear()
180 IntSetting.clear()
181 StringSetting.clear()
182
183 // Delete settings file because the user may have changed values that do not exist in the UI
184 val settingsFile = SettingsFile.getSettingsFile(SettingsFile.FILE_NAME_CONFIG)
185 if (!settingsFile.delete()) {
186 throw IOException("Failed to delete $settingsFile")
187 }
188
189 showToastMessage(getString(R.string.settings_reset), true)
190 finish()
191 }
192
168 private val settingsFragment: SettingsFragment? 193 private val settingsFragment: SettingsFragment?
169 get() = supportFragmentManager.findFragmentByTag(FRAGMENT_TAG) as SettingsFragment? 194 get() = supportFragmentManager.findFragmentByTag(FRAGMENT_TAG) as SettingsFragment?
170 195
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivityPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivityPresenter.kt
index e435c6d58..4361d95fb 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivityPresenter.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivityPresenter.kt
@@ -70,6 +70,10 @@ class SettingsActivityPresenter(private val activityView: SettingsActivityView)
70 shouldSave = true 70 shouldSave = true
71 } 71 }
72 72
73 fun onSettingsReset() {
74 shouldSave = false
75 }
76
73 fun saveState(outState: Bundle) { 77 fun saveState(outState: Bundle) {
74 outState.putBoolean(KEY_SHOULD_SAVE, shouldSave) 78 outState.putBoolean(KEY_SHOULD_SAVE, shouldSave)
75 } 79 }
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 943905482..1eb4899fc 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
@@ -79,6 +79,10 @@ class SettingsAdapter(
79 DateTimeViewHolder(ListItemSettingBinding.inflate(inflater), this) 79 DateTimeViewHolder(ListItemSettingBinding.inflate(inflater), this)
80 } 80 }
81 81
82 SettingsItem.TYPE_RUNNABLE -> {
83 RunnableViewHolder(ListItemSettingBinding.inflate(inflater), this)
84 }
85
82 else -> { 86 else -> {
83 // TODO: Create an error view since we can't return null now 87 // TODO: Create an error view since we can't return null now
84 HeaderViewHolder(ListItemSettingsHeaderBinding.inflate(inflater), this) 88 HeaderViewHolder(ListItemSettingsHeaderBinding.inflate(inflater), this)
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 d36afa932..dda44376c 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
@@ -6,8 +6,8 @@ package org.yuzu.yuzu_emu.features.settings.ui
6import android.content.SharedPreferences 6import android.content.SharedPreferences
7import android.os.Build 7import android.os.Build
8import android.text.TextUtils 8import android.text.TextUtils
9import androidx.appcompat.app.AppCompatActivity
10import androidx.preference.PreferenceManager 9import androidx.preference.PreferenceManager
10import com.google.android.material.dialog.MaterialAlertDialogBuilder
11import org.yuzu.yuzu_emu.R 11import org.yuzu.yuzu_emu.R
12import org.yuzu.yuzu_emu.YuzuApplication 12import org.yuzu.yuzu_emu.YuzuApplication
13import org.yuzu.yuzu_emu.features.settings.model.AbstractBooleanSetting 13import org.yuzu.yuzu_emu.features.settings.model.AbstractBooleanSetting
@@ -26,7 +26,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
26 private lateinit var gameId: String 26 private lateinit var gameId: String
27 private var settingsList: ArrayList<SettingsItem>? = null 27 private var settingsList: ArrayList<SettingsItem>? = null
28 28
29 private val settingsActivity get() = fragmentView.activityView as AppCompatActivity 29 private val settingsActivity get() = fragmentView.activityView as SettingsActivity
30 private val settings get() = fragmentView.activityView!!.settings 30 private val settings get() = fragmentView.activityView!!.settings
31 31
32 private lateinit var preferences: SharedPreferences 32 private lateinit var preferences: SharedPreferences
@@ -111,6 +111,12 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
111 Settings.SECTION_AUDIO 111 Settings.SECTION_AUDIO
112 ) 112 )
113 ) 113 )
114 add(
115 RunnableSetting(
116 R.string.reset_to_default,
117 0
118 ) { resetSettings() }
119 )
114 } 120 }
115 } 121 }
116 122
@@ -338,7 +344,9 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
338 override var int: Int 344 override var int: Int
339 get() = preferences.getInt(Settings.PREF_THEME, 0) 345 get() = preferences.getInt(Settings.PREF_THEME, 0)
340 set(value) { 346 set(value) {
341 preferences.edit().putInt(Settings.PREF_THEME, value).apply() 347 preferences.edit()
348 .putInt(Settings.PREF_THEME, value)
349 .apply()
342 settingsActivity.recreate() 350 settingsActivity.recreate()
343 } 351 }
344 override val key: String? = null 352 override val key: String? = null
@@ -375,7 +383,9 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
375 override var int: Int 383 override var int: Int
376 get() = preferences.getInt(Settings.PREF_THEME_MODE, -1) 384 get() = preferences.getInt(Settings.PREF_THEME_MODE, -1)
377 set(value) { 385 set(value) {
378 preferences.edit().putInt(Settings.PREF_THEME_MODE, value).apply() 386 preferences.edit()
387 .putInt(Settings.PREF_THEME_MODE, value)
388 .apply()
379 ThemeHelper.setThemeMode(settingsActivity) 389 ThemeHelper.setThemeMode(settingsActivity)
380 } 390 }
381 override val key: String? = null 391 override val key: String? = null
@@ -400,14 +410,17 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
400 override var boolean: Boolean 410 override var boolean: Boolean
401 get() = preferences.getBoolean(Settings.PREF_BLACK_BACKGROUNDS, false) 411 get() = preferences.getBoolean(Settings.PREF_BLACK_BACKGROUNDS, false)
402 set(value) { 412 set(value) {
403 preferences.edit().putBoolean(Settings.PREF_BLACK_BACKGROUNDS, value).apply() 413 preferences.edit()
414 .putBoolean(Settings.PREF_BLACK_BACKGROUNDS, value)
415 .apply()
404 settingsActivity.recreate() 416 settingsActivity.recreate()
405 } 417 }
406 override val key: String? = null 418 override val key: String? = null
407 override val section: String? = null 419 override val section: String? = null
408 override val isRuntimeEditable: Boolean = false 420 override val isRuntimeEditable: Boolean = false
409 override val valueAsString: String 421 override val valueAsString: String
410 get() = preferences.getBoolean(Settings.PREF_BLACK_BACKGROUNDS, false).toString() 422 get() = preferences.getBoolean(Settings.PREF_BLACK_BACKGROUNDS, false)
423 .toString()
411 override val defaultValue: Any = false 424 override val defaultValue: Any = false
412 } 425 }
413 426
@@ -420,4 +433,15 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
420 ) 433 )
421 } 434 }
422 } 435 }
436
437 private fun resetSettings() {
438 MaterialAlertDialogBuilder(settingsActivity)
439 .setTitle(R.string.reset_all_settings)
440 .setMessage(R.string.reset_all_settings_description)
441 .setPositiveButton(android.R.string.ok) { _, _ ->
442 settingsActivity.onSettingsReset()
443 }
444 .setNegativeButton(android.R.string.cancel, null)
445 .show()
446 }
423} 447}
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 b101a790d..04c045e77 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
@@ -21,7 +21,7 @@ class DateTimeViewHolder(val binding: ListItemSettingBinding, adapter: SettingsA
21 override fun bind(item: SettingsItem) { 21 override fun bind(item: SettingsItem) {
22 setting = item as DateTimeSetting 22 setting = item as DateTimeSetting
23 binding.textSettingName.setText(item.nameId) 23 binding.textSettingName.setText(item.nameId)
24 if (item.descriptionId!! > 0) { 24 if (item.descriptionId != 0) {
25 binding.textSettingDescription.setText(item.descriptionId) 25 binding.textSettingDescription.setText(item.descriptionId)
26 binding.textSettingDescription.visibility = View.VISIBLE 26 binding.textSettingDescription.visibility = View.VISIBLE
27 } else { 27 } else {
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/RunnableViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/RunnableViewHolder.kt
new file mode 100644
index 000000000..0c0bb93fc
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/RunnableViewHolder.kt
@@ -0,0 +1,35 @@
1// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4package org.yuzu.yuzu_emu.features.settings.ui.viewholder
5
6import android.view.View
7import org.yuzu.yuzu_emu.databinding.ListItemSettingBinding
8import org.yuzu.yuzu_emu.features.settings.model.view.RunnableSetting
9import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem
10import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter
11
12class RunnableViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) :
13 SettingViewHolder(binding.root, adapter) {
14 private lateinit var setting: RunnableSetting
15
16 override fun bind(item: SettingsItem) {
17 setting = item as RunnableSetting
18 binding.textSettingName.setText(item.nameId)
19 if (item.descriptionId != 0) {
20 binding.textSettingDescription.setText(item.descriptionId)
21 binding.textSettingDescription.visibility = View.VISIBLE
22 } else {
23 binding.textSettingDescription.visibility = View.GONE
24 }
25 }
26
27 override fun onClick(clicked: View) {
28 setting.runnable.invoke()
29 }
30
31 override fun onLongClick(clicked: View): Boolean {
32 // no-op
33 return true
34 }
35}
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 487e2e141..de764a27f 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
@@ -18,7 +18,7 @@ class SingleChoiceViewHolder(val binding: ListItemSettingBinding, adapter: Setti
18 setting = item 18 setting = item
19 binding.textSettingName.setText(item.nameId) 19 binding.textSettingName.setText(item.nameId)
20 binding.textSettingDescription.visibility = View.VISIBLE 20 binding.textSettingDescription.visibility = View.VISIBLE
21 if (item.descriptionId!! > 0) { 21 if (item.descriptionId != 0) {
22 binding.textSettingDescription.setText(item.descriptionId) 22 binding.textSettingDescription.setText(item.descriptionId)
23 } else if (item is SingleChoiceSetting) { 23 } else if (item is SingleChoiceSetting) {
24 val resMgr = binding.textSettingDescription.context.resources 24 val resMgr = binding.textSettingDescription.context.resources
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 930bdd152..cc3f39aa5 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
@@ -16,7 +16,7 @@ class SliderViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAda
16 override fun bind(item: SettingsItem) { 16 override fun bind(item: SettingsItem) {
17 setting = item as SliderSetting 17 setting = item as SliderSetting
18 binding.textSettingName.setText(item.nameId) 18 binding.textSettingName.setText(item.nameId)
19 if (item.descriptionId!! > 0) { 19 if (item.descriptionId != 0) {
20 binding.textSettingDescription.setText(item.descriptionId) 20 binding.textSettingDescription.setText(item.descriptionId)
21 binding.textSettingDescription.visibility = View.VISIBLE 21 binding.textSettingDescription.visibility = View.VISIBLE
22 } else { 22 } else {
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SubmenuViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SubmenuViewHolder.kt
index 8bd36e9d5..c545b4174 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SubmenuViewHolder.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SubmenuViewHolder.kt
@@ -16,7 +16,7 @@ class SubmenuViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAd
16 override fun bind(item: SettingsItem) { 16 override fun bind(item: SettingsItem) {
17 this.item = item as SubmenuSetting 17 this.item = item as SubmenuSetting
18 binding.textSettingName.setText(item.nameId) 18 binding.textSettingName.setText(item.nameId)
19 if (item.descriptionId!! > 0) { 19 if (item.descriptionId != 0) {
20 binding.textSettingDescription.setText(item.descriptionId) 20 binding.textSettingDescription.setText(item.descriptionId)
21 binding.textSettingDescription.visibility = View.VISIBLE 21 binding.textSettingDescription.visibility = View.VISIBLE
22 } else { 22 } else {
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 c24992e21..b163bd6ca 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
@@ -18,7 +18,7 @@ class SwitchSettingViewHolder(val binding: ListItemSettingSwitchBinding, adapter
18 override fun bind(item: SettingsItem) { 18 override fun bind(item: SettingsItem) {
19 setting = item as SwitchSetting 19 setting = item as SwitchSetting
20 binding.textSettingName.setText(item.nameId) 20 binding.textSettingName.setText(item.nameId)
21 if (item.descriptionId!! > 0) { 21 if (item.descriptionId != 0) {
22 binding.textSettingDescription.setText(item.descriptionId) 22 binding.textSettingDescription.setText(item.descriptionId)
23 binding.textSettingDescription.visibility = View.VISIBLE 23 binding.textSettingDescription.visibility = View.VISIBLE
24 } else { 24 } 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 4027df838..c502fdca0 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
@@ -22,7 +22,7 @@ import java.util.*
22object SettingsFile { 22object SettingsFile {
23 const val FILE_NAME_CONFIG = "config" 23 const val FILE_NAME_CONFIG = "config"
24 24
25 private val sectionsMap = BiMap<String?, String?>() 25 private var sectionsMap = BiMap<String?, String?>()
26 26
27 /** 27 /**
28 * Reads a given .ini file from disk and returns it as a HashMap of Settings, themselves 28 * Reads a given .ini file from disk and returns it as a HashMap of Settings, themselves
@@ -154,7 +154,7 @@ object SettingsFile {
154 } else generalSectionName 154 } else generalSectionName
155 } 155 }
156 156
157 private fun getSettingsFile(fileName: String): File { 157 fun getSettingsFile(fileName: String): File {
158 return File( 158 return File(
159 DirectoryInitialization.userDirectory + "/config/" + fileName + ".ini" 159 DirectoryInitialization.userDirectory + "/config/" + fileName + ".ini"
160 ) 160 )
@@ -182,13 +182,11 @@ object SettingsFile {
182 private fun settingFromLine(line: String): AbstractSetting? { 182 private fun settingFromLine(line: String): AbstractSetting? {
183 val splitLine = line.split("=".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() 183 val splitLine = line.split("=".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
184 if (splitLine.size != 2) { 184 if (splitLine.size != 2) {
185 Log.warning("Skipping invalid config line \"$line\"")
186 return null 185 return null
187 } 186 }
188 val key = splitLine[0].trim { it <= ' ' } 187 val key = splitLine[0].trim { it <= ' ' }
189 val value = splitLine[1].trim { it <= ' ' } 188 val value = splitLine[1].trim { it <= ' ' }
190 if (value.isEmpty()) { 189 if (value.isEmpty()) {
191 Log.warning("Skipping null value in config line \"$line\"")
192 return null 190 return null
193 } 191 }
194 192
@@ -216,7 +214,7 @@ object SettingsFile {
216 return stringSetting 214 return stringSetting
217 } 215 }
218 216
219 return StringSetting.from(key) 217 return null
220 } 218 }
221 219
222 /** 220 /**
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index cd93bfc38..ed72e571b 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -143,8 +143,12 @@
143 <string name="ini_saved">Saved settings</string> 143 <string name="ini_saved">Saved settings</string>
144 <string name="gameid_saved">Saved settings for %1$s</string> 144 <string name="gameid_saved">Saved settings for %1$s</string>
145 <string name="error_saving">Error saving %1$s.ini: %2$s</string> 145 <string name="error_saving">Error saving %1$s.ini: %2$s</string>
146 <string name="loading">Loading...</string> 146 <string name="loading">Loading</string>
147 <string name="reset_setting_confirmation">Do you want to reset this setting back to its default value?</string> 147 <string name="reset_setting_confirmation">Do you want to reset this setting back to its default value?</string>
148 <string name="reset_to_default">Reset to default</string>
149 <string name="reset_all_settings">Reset all settings?</string>
150 <string name="reset_all_settings_description">All Advanced Settings will be reset to their default configuration. This can not be undone.</string>
151 <string name="settings_reset">Settings reset</string>
148 152
149 <!-- GPU driver installation --> 153 <!-- GPU driver installation -->
150 <string name="select_gpu_driver">Select GPU driver</string> 154 <string name="select_gpu_driver">Select GPU driver</string>