aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorxbzk <xbzk@eden-emu.dev>2026-03-05 00:58:49 +0100
committercrueter <crueter@eden-emu.dev>2026-03-05 00:58:49 +0100
commit05f6942befe0ab1209ecc5e2ddb9716f49d65574 (patch)
treeddd059d0e667fb89d306f990484688e26fa9c7bd /src
parent70c1e9abed3dc70284c4eece3786922b2fc144ed (diff)
[android, ui] fixed setting reset to defaults infinite loop (#3659)
fixed a bug discovered by Pavel in which the settings' "reset to defaults" dialog would get stuck in a infinite loop, due to a recall prior to cleaning state. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3659 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: DraVee <chimera@dravee.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Co-authored-by: xbzk <xbzk@eden-emu.dev> Co-committed-by: xbzk <xbzk@eden-emu.dev>
Diffstat (limited to 'src')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt42
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt5
2 files changed, 20 insertions, 27 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt
index f66f4bac7f..4dcb35c010 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt
@@ -1,4 +1,4 @@
-// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
@@ -68,7 +68,9 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener
MaterialAlertDialogBuilder(requireContext())
.setMessage(R.string.reset_setting_confirmation)
.setPositiveButton(android.R.string.ok) { _: DialogInterface, _: Int ->
- when (val item = settingsViewModel.clickedItem) {
+ val item = settingsViewModel.clickedItem ?: return@setPositiveButton
+ clearDialogState()
+ when (item) {
is AnalogInputSetting -> {
val stickParam = NativeInput.getStickParam(
item.playerIndex,
@@ -107,12 +109,17 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener
}
else -> {
- settingsViewModel.clickedItem!!.setting.reset()
+ item.setting.reset()
settingsViewModel.setAdapterItemChanged(position)
}
}
}
- .setNegativeButton(android.R.string.cancel, null)
+ .setNegativeButton(android.R.string.cancel) { _: DialogInterface, _: Int ->
+ clearDialogState()
+ }
+ .setOnCancelListener {
+ clearDialogState()
+ }
.create()
}
@@ -186,27 +193,6 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener
updateButtonState(isValid)
}
- /*
- * xbzk: these two events, along with attachRepeat feature,
- * were causing spinbox buttons to respond twice per press
- * cutting these out to retain accelerated press functionality
- * TODO: clean this out later if no issues arise
- *
- spinboxBinding.buttonDecrement.setOnClickListener {
- val current = spinboxBinding.editValue.text.toString().toIntOrNull() ?: currentValue
- val newValue = current - 1
- spinboxBinding.editValue.setText(newValue.toString())
- updateValidity(newValue)
- }
-
- spinboxBinding.buttonIncrement.setOnClickListener {
- val current = spinboxBinding.editValue.text.toString().toIntOrNull() ?: currentValue
- val newValue = current + 1
- spinboxBinding.editValue.setText(newValue.toString())
- updateValidity(newValue)
- }
- */
-
fun attachRepeat(button: View, delta: Int) {
val handler = Handler(Looper.getMainLooper())
var runnable: Runnable? = null
@@ -439,9 +425,13 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener
private fun closeDialog() {
settingsViewModel.setAdapterItemChanged(position)
+ clearDialogState()
+ dismiss()
+ }
+
+ private fun clearDialogState() {
settingsViewModel.clickedItem = null
settingsViewModel.setSliderProgress(-1f)
- dismiss()
}
private fun getValueForSingleChoiceSelection(item: SingleChoiceSetting, which: Int): Int {
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 0fc4fb0b7f..77104e0614 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
@@ -1066,7 +1066,10 @@ class SettingsFragmentPresenter(
IntSetting.THEME.getValueAsString()
override val defaultValue: Int = IntSetting.THEME.defaultValue
- override fun reset() = IntSetting.THEME.setInt(defaultValue)
+ override fun reset() {
+ IntSetting.THEME.setInt(defaultValue)
+ settingsViewModel.setShouldRecreate(true)
+ }
}
add(HeaderSetting(R.string.app_settings))