From be3125105abc73501b944cfefff5a39ced517c5f Mon Sep 17 00:00:00 2001 From: David Griswold Date: Mon, 30 Mar 2026 13:19:38 +0300 Subject: [PATCH] Turbo Hold button for android --- .../citra/citra_emu/features/hotkeys/Hotkey.kt | 5 +++-- .../citra_emu/features/hotkeys/HotkeyUtility.kt | 16 +++++++++++++++- .../features/settings/model/Settings.kt | 9 ++++++--- .../settings/model/view/InputBindingSetting.kt | 3 ++- src/android/app/src/main/res/values/strings.xml | 3 ++- 5 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/hotkeys/Hotkey.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/hotkeys/Hotkey.kt index e2319a7e4..9950ebc8d 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/hotkeys/Hotkey.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/hotkeys/Hotkey.kt @@ -11,6 +11,7 @@ enum class Hotkey(val button: Int) { PAUSE_OR_RESUME(10004), QUICKSAVE(10005), QUICKLOAD(10006), - TURBO_LIMIT(10007), - ENABLE(10008); + TURBO_TOGGLE(10007), + ENABLE(10008), + TURBO_HOLD(10009); } diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/hotkeys/HotkeyUtility.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/hotkeys/HotkeyUtility.kt index d01d5f769..6db6f610a 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/hotkeys/HotkeyUtility.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/hotkeys/HotkeyUtility.kt @@ -16,6 +16,7 @@ import org.citra.citra_emu.utils.TurboHelper import org.citra.citra_emu.display.ScreenAdjustmentUtil import org.citra.citra_emu.features.settings.model.view.InputBindingSetting import org.citra.citra_emu.features.settings.model.Settings +import org.citra.citra_emu.utils.Log class HotkeyUtility( private val screenAdjustmentUtil: ScreenAdjustmentUtil, @@ -40,6 +41,7 @@ class HotkeyUtility( // Now process all internal buttons associated with this keypress for (button in buttonSet) { + Log.debug("Button pressed: " + button) currentlyPressedButtons.add(button) //option 1 - this is the enable command, which was already handled if (button == Hotkey.ENABLE.button) { @@ -78,9 +80,11 @@ class HotkeyUtility( } for (button in buttonSet) { + Log.debug("Button released: " + button) // this is a hotkey button if (hotkeyButtons.contains(button)) { currentlyPressedButtons.remove(button) + handleHotkeyRelease(button) if (!currentlyPressedButtons.any { hotkeyButtons.contains(it) }) { // all hotkeys are no longer pressed hotkeyIsPressed = false @@ -106,13 +110,23 @@ class HotkeyUtility( return handled } + fun handleHotkeyRelease(bindedButton: Int): Boolean { + Log.debug("Handling hotkey button release: " + bindedButton) + if (bindedButton == Hotkey.TURBO_HOLD.button) { + TurboHelper.setTurboEnabled(false, false) + } + return true + } + fun handleHotkey(bindedButton: Int): Boolean { + Log.debug("Handling hotkey button press: " + bindedButton) when (bindedButton) { Hotkey.SWAP_SCREEN.button -> screenAdjustmentUtil.swapScreen() Hotkey.CYCLE_LAYOUT.button -> screenAdjustmentUtil.cycleLayouts() Hotkey.CLOSE_GAME.button -> EmulationLifecycleUtil.closeGame() Hotkey.PAUSE_OR_RESUME.button -> EmulationLifecycleUtil.pauseOrResume() - Hotkey.TURBO_LIMIT.button -> TurboHelper.toggleTurbo(true) + Hotkey.TURBO_TOGGLE.button -> TurboHelper.toggleTurbo(true) + Hotkey.TURBO_HOLD.button -> TurboHelper.setTurboEnabled(true, false) Hotkey.QUICKSAVE.button -> { NativeLibrary.saveState(NativeLibrary.QUICKSAVE_SLOT) Toast.makeText( diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.kt index 547a53594..6a46e6e54 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.kt @@ -143,7 +143,8 @@ class Settings { const val HOTKEY_PAUSE_OR_RESUME = "hotkey_pause_or_resume_game" const val HOTKEY_QUICKSAVE = "hotkey_quickload" const val HOTKEY_QUICKlOAD = "hotkey_quickpause" - const val HOTKEY_TURBO_LIMIT = "hotkey_turbo_limit" + const val HOTKEY_TURBO_TOGGLE = "hotkey_turbo_limit" + const val HOTKEY_TURBO_HOLD = "hotkey_turbo_hold" val buttonKeys = listOf( KEY_BUTTON_A, @@ -211,7 +212,8 @@ class Settings { HOTKEY_PAUSE_OR_RESUME, HOTKEY_QUICKSAVE, HOTKEY_QUICKlOAD, - HOTKEY_TURBO_LIMIT + HOTKEY_TURBO_TOGGLE, + HOTKEY_TURBO_HOLD ) val hotkeyTitles = listOf( R.string.controller_hotkey_enable_button, @@ -221,7 +223,8 @@ class Settings { R.string.emulation_toggle_pause, R.string.emulation_quicksave, R.string.emulation_quickload, - R.string.turbo_limit_hotkey + R.string.turbo_limit_hotkey, + R.string.turbo_hold_hotkey ) // TODO: Move these in with the other setting keys in GenerateSettingKeys.cmake 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 6ec851db1..d9cfcf610 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 @@ -136,7 +136,8 @@ class InputBindingSetting( Settings.HOTKEY_PAUSE_OR_RESUME -> Hotkey.PAUSE_OR_RESUME.button Settings.HOTKEY_QUICKSAVE -> Hotkey.QUICKSAVE.button Settings.HOTKEY_QUICKlOAD -> Hotkey.QUICKLOAD.button - Settings.HOTKEY_TURBO_LIMIT -> Hotkey.TURBO_LIMIT.button + Settings.HOTKEY_TURBO_TOGGLE -> Hotkey.TURBO_TOGGLE.button + Settings.HOTKEY_TURBO_HOLD -> Hotkey.TURBO_HOLD.button else -> -1 } diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 750677fd5..010aa4e28 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -164,7 +164,8 @@ ZR This control must be bound to a gamepad analog stick or D-pad axis! This control must be bound to a gamepad button! - Turbo Speed + Turbo (Toggle) + Turbo (Hold) Turbo Speed Enabled Turbo Speed Disabled