From aad60fef5b47e8b3fd8df4db700b42e3ad6cfca5 Mon Sep 17 00:00:00 2001 From: Omar Al Taki Date: Sat, 31 Oct 2026 03:38:47 +0400 Subject: [PATCH] fix(input): keep the right button down until every overlapping mouse Back is released --- .../java/com/droiddeck/launcher/input/MouseBackInput.kt | 4 ++-- .../com/droiddeck/launcher/input/MouseBackInputTest.kt | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/droiddeck/launcher/input/MouseBackInput.kt b/app/src/main/java/com/droiddeck/launcher/input/MouseBackInput.kt index 959196590..e695db517 100644 --- a/app/src/main/java/com/droiddeck/launcher/input/MouseBackInput.kt +++ b/app/src/main/java/com/droiddeck/launcher/input/MouseBackInput.kt @@ -20,14 +20,14 @@ class MouseBackInput(private val sendRight: (Boolean) -> Unit, private val mouse if (device in held && (fromMouse || injected)) { if (event.action == KeyEvent.ACTION_UP) { held.remove(device) - sendRight(false) + if (held.isEmpty()) sendRight(false) } return true } if (event.action != KeyEvent.ACTION_DOWN || event.repeatCount > 0 || !toGuest) return false if (!fromMouse && !(injected && mouseAttached())) return false + if (held.isEmpty()) sendRight(true) held.add(device) - sendRight(true) return true } diff --git a/app/src/test/java/com/droiddeck/launcher/input/MouseBackInputTest.kt b/app/src/test/java/com/droiddeck/launcher/input/MouseBackInputTest.kt index 014bf5cc1..8a755f6e9 100644 --- a/app/src/test/java/com/droiddeck/launcher/input/MouseBackInputTest.kt +++ b/app/src/test/java/com/droiddeck/launcher/input/MouseBackInputTest.kt @@ -76,6 +76,15 @@ class MouseBackInputTest { assertEquals(listOf(true, false), presses) } + @Test fun overlappingPressesHoldTheButtonUntilTheLastRelease() { + input.onKeyEvent(key(KeyEvent.ACTION_DOWN), toGuest = true) + input.onKeyEvent(injected(KeyEvent.ACTION_DOWN), toGuest = true) + input.onKeyEvent(key(KeyEvent.ACTION_UP), toGuest = true) + assertEquals(listOf(true), presses) + input.onKeyEvent(injected(KeyEvent.ACTION_UP), toGuest = true) + assertEquals(listOf(true, false), presses) + } + @Test fun cancelReleasesAHeldPressOnce() { input.onKeyEvent(injected(KeyEvent.ACTION_DOWN), toGuest = true) input.cancel()