From 33fbf2a68ecad431d4e0fb45450afe340eb6f546 Mon Sep 17 00:00:00 2001 From: PJ Date: Sun, 31 May 2026 18:02:50 +0530 Subject: [PATCH] feat(sidecar): implement longPress across backends --- .../kotlin/dev/sanderling/sidecar/DriverBackend.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverBackend.kt b/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverBackend.kt index 0099f48..a10e58c 100644 --- a/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverBackend.kt +++ b/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverBackend.kt @@ -8,6 +8,7 @@ interface DriverBackend { fun inputText(text: String) fun swipe(fromX: Int, fromY: Int, toX: Int, toY: Int, durationMillis: Long) fun pressKey(key: String) + fun longPress(x: Int, y: Int) fun screenshot(): Triple fun hierarchy(): String fun recentLogs(sinceUnixMillis: Long, minLevel: String): List @@ -405,6 +406,8 @@ class StubDriverBackend( private set @Volatile var lastKey: String? = null private set + @Volatile var lastLongPress: Pair? = null + private set override fun swipe(fromX: Int, fromY: Int, toX: Int, toY: Int, durationMillis: Long) { lastSwipe = SwipeRecord(fromX, fromY, toX, toY, durationMillis) @@ -426,6 +429,11 @@ class StubDriverBackend( runAdb(listOf("shell", "input", "keyevent", keyCode)) } + override fun longPress(x: Int, y: Int) { + lastLongPress = x to y + runAdb(listOf("shell", "input", "swipe", x.toString(), y.toString(), x.toString(), y.toString(), "600")) + } + override fun recentLogs(sinceUnixMillis: Long, minLevel: String): List = readLogcat(null, sinceUnixMillis, minLevel) @@ -513,6 +521,8 @@ class MaestroDriverBackend(private val serial: String?) : DriverBackend { override fun tap(x: Int, y: Int) = driver.tap(maestro.Point(x, y)) + override fun longPress(x: Int, y: Int) = driver.longPress(maestro.Point(x, y)) + override fun tapSelector(selector: String) { val root = driver.contentDescriptor(false) val bounds = findBoundsBySelector(root, selector) ?: return @@ -710,6 +720,8 @@ class IosDriverBackend(private val udid: String) : DriverBackend { override fun tap(x: Int, y: Int) = withReconnect { driver.tap(maestro.Point(x, y)) } + override fun longPress(x: Int, y: Int) = withReconnect { driver.longPress(maestro.Point(x, y)) } + override fun tapSelector(selector: String) = withReconnect { val root = driver.contentDescriptor(false) val bounds = findBoundsBySelector(root, selector) ?: return@withReconnect