Share native side arrow touch handling

This commit is contained in:
ajp_anton
2026-07-15 19:06:13 +00:00
parent 91cdd1a665
commit e46cdefe67
3 changed files with 22 additions and 46 deletions
@@ -76,7 +76,7 @@ internal class SamsungHoneyspaceHooks(
registerSettingsReceiver() registerSettingsReceiver()
trackNavContainerFrom(navButtonView as? View) trackNavContainerFrom(navButtonView as? View)
return@hookMethod handleNativeSideArrowTouch(navButtonView, keyCode, motionEvent) { return@hookMethod sideArrowLongPresses.handleNativeTouch(navButtonView, keyCode, motionEvent) {
chain.proceed() chain.proceed()
} }
} }
@@ -366,28 +366,6 @@ internal class SamsungHoneyspaceHooks(
restoreHoneyspaceSideArrowDrawables(container) 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) { private fun markLongClicked(navButtonView: Any) {
try { try {
callMethod( callMethod(
@@ -1,6 +1,7 @@
package se.ajpanton.navbuttons package se.ajpanton.navbuttons
import android.os.Handler import android.os.Handler
import android.view.MotionEvent
import android.view.View import android.view.View
import java.util.WeakHashMap import java.util.WeakHashMap
@@ -27,6 +28,25 @@ internal class SideArrowLongPressController(
return result 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 { fun finish(target: Any): Boolean {
val wasTriggered = triggered[target] == true val wasTriggered = triggered[target] == true
cancel(target) cancel(target)
@@ -86,7 +86,7 @@ internal class SystemUiNavHooks(
registerSettingsReceiver() registerSettingsReceiver()
trackSamsungNavigationBarView(keyButtonView) trackSamsungNavigationBarView(keyButtonView)
configureAospSideArrowButton(keyButtonView) configureAospSideArrowButton(keyButtonView)
return@hookMethod handleNativeSideArrowTouch(keyButtonView, keyCode, motionEvent) { return@hookMethod sideArrowLongPresses.handleNativeTouch(keyButtonView, keyCode, motionEvent) {
chain.proceed() 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) { private fun markLongClicked(keyButtonView: Any) {
try { try {
findField(keyButtonView.javaClass, "mLongClicked").setBoolean(keyButtonView, true) findField(keyButtonView.javaClass, "mLongClicked").setBoolean(keyButtonView, true)