From a026a0d5e49627b28d3a960915e7ccbba399b1a5 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Fri, 17 Oct 2025 22:38:52 +0200 Subject: [PATCH] Android: Treat EmulationActivity dialog dismiss the same as OK In the dialog where you can choose what controller the input overlay should be controlling, there's an OK button. If you change controller but don't press OK, your selection will be saved, but the input overlay won't refresh to show the new controller unless you perform some other action that would cause it to refresh. This is not good UX. This commit changes the behavior not only of this dialog but also other dialogs spawned by EmulationActivity so that everything is properly updated when dismissing a dialog, as if you had pressed OK. --- .../activities/EmulationActivity.kt | 51 +++++++++---------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.kt index 184392f75f..60d4311ee5 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.kt @@ -561,6 +561,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { ) { _: DialogInterface?, indexSelected: Int, isChecked: Boolean -> BooleanSetting.valueOf(gcSettingBase + indexSelected) .setBoolean(settings, isChecked) + emulationFragment?.refreshInputOverlay() } } InputOverlay.OVERLAY_WIIMOTE_CLASSIC -> { @@ -575,6 +576,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { ) { _: DialogInterface?, indexSelected: Int, isChecked: Boolean -> BooleanSetting.valueOf(classicSettingBase + indexSelected) .setBoolean(settings, isChecked) + emulationFragment?.refreshInputOverlay() } } InputOverlay.OVERLAY_WIIMOTE_NUNCHUK -> { @@ -596,6 +598,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { ) { _: DialogInterface?, indexSelected: Int, isChecked: Boolean -> BooleanSetting.valueOf(nunchukSettingBase + translateToSettingsIndex(indexSelected)) .setBoolean(settings, isChecked) + emulationFragment?.refreshInputOverlay() } } else -> { @@ -611,14 +614,13 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { ) { _: DialogInterface?, indexSelected: Int, isChecked: Boolean -> BooleanSetting.valueOf(wiimoteSettingBase + indexSelected) .setBoolean(settings, isChecked) + emulationFragment?.refreshInputOverlay() } } } builder - .setPositiveButton(R.string.ok) { _: DialogInterface?, _: Int -> - emulationFragment?.refreshInputOverlay() - } + .setPositiveButton(R.string.ok, null) .show() } @@ -640,6 +642,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { ) { _: DialogInterface?, indexSelected: Int, isChecked: Boolean -> BooleanSetting .valueOf(gcSettingBase + indexSelected).setBoolean(settings, isChecked) + emulationFragment?.refreshInputOverlay() } } else if (currentController == InputOverlay.OVERLAY_WIIMOTE_CLASSIC) { val wiiClassicEnabledButtons = BooleanArray(14) @@ -653,6 +656,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { ) { _: DialogInterface?, indexSelected: Int, isChecked: Boolean -> BooleanSetting.valueOf(classicSettingBase + indexSelected) .setBoolean(settings, isChecked) + emulationFragment?.refreshInputOverlay() } } else { val wiiEnabledButtons = BooleanArray(11) @@ -667,6 +671,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { ) { _: DialogInterface?, indexSelected: Int, isChecked: Boolean -> BooleanSetting .valueOf(wiiSettingBase + indexSelected).setBoolean(settings, isChecked) + emulationFragment?.refreshInputOverlay() } } else { builder.setMultiChoiceItems( @@ -674,6 +679,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { ) { _: DialogInterface?, indexSelected: Int, isChecked: Boolean -> BooleanSetting .valueOf(wiiSettingBase + indexSelected).setBoolean(settings, isChecked) + emulationFragment?.refreshInputOverlay() } } } @@ -682,7 +688,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { .setNeutralButton(R.string.emulation_toggle_all) { _: DialogInterface?, _: Int -> emulationFragment!!.toggleInputOverlayVisibility(settings) } - .setPositiveButton(R.string.ok) { _: DialogInterface?, _: Int -> emulationFragment?.refreshInputOverlay() } + .setPositiveButton(R.string.ok, null) .show() } @@ -707,10 +713,9 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { settings, InputOverlayPointer.DOUBLE_TAP_OPTIONS[which] ) - } - .setPositiveButton(R.string.ok) { _: DialogInterface?, _: Int -> emulationFragment?.initInputPointer() } + .setPositiveButton(R.string.ok, null) .show() } @@ -721,9 +726,11 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { valueTo = 150f value = IntSetting.MAIN_CONTROL_SCALE.int.toFloat() stepSize = 1f - addOnChangeListener(Slider.OnChangeListener { _: Slider?, progress: Float, _: Boolean -> - dialogBinding.inputScaleValue.text = "${(progress.toInt() + 50)}%" - }) + addOnChangeListener { _: Slider?, value: Float, _: Boolean -> + dialogBinding.inputScaleValue.text = "${(value.toInt() + 50)}%" + IntSetting.MAIN_CONTROL_SCALE.setInt(settings, value.toInt()) + emulationFragment?.refreshInputOverlay() + } } inputScaleValue.text = "${(dialogBinding.inputScaleSlider.value.toInt() + 50)}%" @@ -732,9 +739,11 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { valueTo = 100f value = IntSetting.MAIN_CONTROL_OPACITY.int.toFloat() stepSize = 1f - addOnChangeListener(Slider.OnChangeListener { _: Slider?, progress: Float, _: Boolean -> - inputOpacityValue.text = progress.toInt().toString() + "%" - }) + addOnChangeListener { _: Slider?, value: Float, _: Boolean -> + inputOpacityValue.text = value.toInt().toString() + "%" + IntSetting.MAIN_CONTROL_OPACITY.setInt(settings, value.toInt()) + emulationFragment?.refreshInputOverlay() + } } inputOpacityValue.text = inputOpacitySlider.value.toInt().toString() + "%" } @@ -742,17 +751,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { MaterialAlertDialogBuilder(this) .setTitle(R.string.emulation_control_adjustments) .setView(dialogBinding.root) - .setPositiveButton(R.string.ok) { _: DialogInterface?, _: Int -> - IntSetting.MAIN_CONTROL_SCALE.setInt( - settings, - dialogBinding.inputScaleSlider.value.toInt() - ) - IntSetting.MAIN_CONTROL_OPACITY.setInt( - settings, - dialogBinding.inputOpacitySlider.value.toInt() - ) - emulationFragment?.refreshInputOverlay() - } + .setPositiveButton(R.string.ok, null) .setNeutralButton(R.string.default_values) { _: DialogInterface?, _: Int -> IntSetting.MAIN_CONTROL_SCALE.delete(settings) IntSetting.MAIN_CONTROL_OPACITY.delete(settings) @@ -858,10 +857,9 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { entries.toArray(arrayOf()), checkedItem ) { _: DialogInterface?, indexSelected: Int -> controllerSetting.setInt(settings, values[indexSelected]) - } - .setPositiveButton(R.string.ok) { _: DialogInterface?, _: Int -> emulationFragment?.refreshInputOverlay() } + .setPositiveButton(R.string.ok, null) .setNeutralButton( R.string.emulation_more_controller_settings ) { _: DialogInterface?, _: Int -> SettingsActivity.launch(this, MenuTag.SETTINGS) } @@ -876,10 +874,9 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider { IntSetting.MAIN_IR_MODE.int ) { _: DialogInterface?, indexSelected: Int -> IntSetting.MAIN_IR_MODE.setInt(settings, indexSelected) - } - .setPositiveButton(R.string.ok) { _: DialogInterface?, _: Int -> emulationFragment?.refreshOverlayPointer() } + .setPositiveButton(R.string.ok, null) .show() }