From c7f6d2d679ff600942b388ddebacd8fdd2b51bcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20N=C3=BCsse?= Date: Fri, 12 Jul 2024 21:13:19 +0200 Subject: [PATCH] apply settings only on finish --- .../model/view/InputBindingSetting.kt | 25 +++++++++++++++++++ .../ui/ControllerQuickConfigDialog.kt | 8 +++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/InputBindingSetting.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/InputBindingSetting.kt index 50f693b42..297afe861 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/InputBindingSetting.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/InputBindingSetting.kt @@ -35,6 +35,8 @@ class InputBindingSetting( .apply() } + private var key: String = "" + /** * Returns true if this key is for the 3DS Circle Pad */ @@ -230,6 +232,29 @@ class InputBindingSetting( value = uiString } + /** + * Stores the provided key input setting as an Android preference. + * Only gets applied when apply(); is called. + * + * @param keyEvent KeyEvent of this key press. + */ + fun onKeyInputDeferred(keyEvent: KeyEvent) { + if (!isButtonMappingSupported()) { + Toast.makeText(context, R.string.input_message_analog_only, Toast.LENGTH_LONG).show() + return + } + key = getInputButtonKey(keyEvent.keyCode) + val uiString = "${keyEvent.device.name}: Button ${keyEvent.keyCode}" + value = uiString + } + + /** + * Stores the provided key input setting as an Android preference. + */ + fun applyMapping() { + writeButtonMapping(key) + } + /** * Saves the provided motion input setting as an Android preference. * diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/ControllerQuickConfigDialog.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/ControllerQuickConfigDialog.kt index c8fcea00a..be8c586ce 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/ControllerQuickConfigDialog.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/ControllerQuickConfigDialog.kt @@ -71,6 +71,7 @@ class ControllerQuickConfigDialog( private fun prepareUIforIndex(i: Int) { if (allButtons.size-1 < i) { + settingsList.forEach { it.applyMapping() } dialog?.dismiss() return } @@ -145,6 +146,8 @@ class ControllerQuickConfigDialog( private var setting: InputBindingSetting? = null private var debounceTimestamp = System.currentTimeMillis() + private var settingsList = arrayListOf() + private fun onKeyEvent(event: KeyEvent): Boolean { return when (event.action) { KeyEvent.ACTION_UP -> { @@ -154,7 +157,10 @@ class ControllerQuickConfigDialog( debounceTimestamp = System.currentTimeMillis() index++ - setting?.onKeyInput(event) + setting?.let { + it.onKeyInputDeferred(event) + settingsList.add(it) + } prepareUIforIndex(index) // Even if we ignore the key, we still consume it. Thus return true regardless. true