From e46cdefe67f21fd7a60708b100a3a026053a3fb6 Mon Sep 17 00:00:00 2001 From: ajp_anton Date: Wed, 15 Jul 2026 19:06:13 +0000 Subject: [PATCH] Share native side arrow touch handling --- .../navbuttons/SamsungHoneyspaceHooks.kt | 24 +------------------ .../SideArrowLongPressController.kt | 20 ++++++++++++++++ .../ajpanton/navbuttons/SystemUiNavHooks.kt | 24 +------------------ 3 files changed, 22 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/se/ajpanton/navbuttons/SamsungHoneyspaceHooks.kt b/app/src/main/java/se/ajpanton/navbuttons/SamsungHoneyspaceHooks.kt index 5d25be6..4a5604e 100644 --- a/app/src/main/java/se/ajpanton/navbuttons/SamsungHoneyspaceHooks.kt +++ b/app/src/main/java/se/ajpanton/navbuttons/SamsungHoneyspaceHooks.kt @@ -76,7 +76,7 @@ internal class SamsungHoneyspaceHooks( registerSettingsReceiver() trackNavContainerFrom(navButtonView as? View) - return@hookMethod handleNativeSideArrowTouch(navButtonView, keyCode, motionEvent) { + return@hookMethod sideArrowLongPresses.handleNativeTouch(navButtonView, keyCode, motionEvent) { chain.proceed() } } @@ -366,28 +366,6 @@ internal class SamsungHoneyspaceHooks( restoreHoneyspaceSideArrowDrawables(container) } - private fun handleNativeSideArrowTouch( - view: Any, - keyCode: Int, - event: MotionEvent, - proceed: () -> Any?, - ): Any? { - return when (event.actionMasked) { - MotionEvent.ACTION_DOWN -> { - sideArrowLongPresses.startAfter(view, keyCode, proceed) - } - - MotionEvent.ACTION_UP, - MotionEvent.ACTION_CANCEL, - -> { - sideArrowLongPresses.finish(view) - proceed() - } - - else -> proceed() - } - } - private fun markLongClicked(navButtonView: Any) { try { callMethod( diff --git a/app/src/main/java/se/ajpanton/navbuttons/SideArrowLongPressController.kt b/app/src/main/java/se/ajpanton/navbuttons/SideArrowLongPressController.kt index e53be4b..85f0b6d 100644 --- a/app/src/main/java/se/ajpanton/navbuttons/SideArrowLongPressController.kt +++ b/app/src/main/java/se/ajpanton/navbuttons/SideArrowLongPressController.kt @@ -1,6 +1,7 @@ package se.ajpanton.navbuttons import android.os.Handler +import android.view.MotionEvent import android.view.View import java.util.WeakHashMap @@ -27,6 +28,25 @@ internal class SideArrowLongPressController( return result } + fun handleNativeTouch( + target: Any, + keyCode: Int, + event: MotionEvent, + proceed: () -> Any?, + ): Any? { + return when (event.actionMasked) { + MotionEvent.ACTION_DOWN -> startAfter(target, keyCode, proceed) + MotionEvent.ACTION_UP, + MotionEvent.ACTION_CANCEL, + -> { + finish(target) + proceed() + } + + else -> proceed() + } + } + fun finish(target: Any): Boolean { val wasTriggered = triggered[target] == true cancel(target) diff --git a/app/src/main/java/se/ajpanton/navbuttons/SystemUiNavHooks.kt b/app/src/main/java/se/ajpanton/navbuttons/SystemUiNavHooks.kt index 4c306a7..6bdf10f 100644 --- a/app/src/main/java/se/ajpanton/navbuttons/SystemUiNavHooks.kt +++ b/app/src/main/java/se/ajpanton/navbuttons/SystemUiNavHooks.kt @@ -86,7 +86,7 @@ internal class SystemUiNavHooks( registerSettingsReceiver() trackSamsungNavigationBarView(keyButtonView) configureAospSideArrowButton(keyButtonView) - return@hookMethod handleNativeSideArrowTouch(keyButtonView, keyCode, motionEvent) { + return@hookMethod sideArrowLongPresses.handleNativeTouch(keyButtonView, keyCode, motionEvent) { chain.proceed() } } @@ -205,28 +205,6 @@ internal class SystemUiNavHooks( } } - private fun handleNativeSideArrowTouch( - view: Any, - keyCode: Int, - event: MotionEvent, - proceed: () -> Any?, - ): Any? { - return when (event.actionMasked) { - MotionEvent.ACTION_DOWN -> { - sideArrowLongPresses.startAfter(view, keyCode, proceed) - } - - MotionEvent.ACTION_UP, - MotionEvent.ACTION_CANCEL, - -> { - sideArrowLongPresses.finish(view) - proceed() - } - - else -> proceed() - } - } - private fun markLongClicked(keyButtonView: Any) { try { findField(keyButtonView.javaClass, "mLongClicked").setBoolean(keyButtonView, true)