glasses: hold Mercury kill switch on hidden VirtualDisplay; phone: brightness/WiFi panel, two-finger touchpad scroll

This commit is contained in:
2026-09-25 19:49:25 +03:00
parent 3fce3eb3ca
commit c69e8a2e80
8 changed files with 544 additions and 26 deletions
@@ -79,6 +79,20 @@ data class CursorMove(
@SerialName("cursor_click")
data object CursorClick : VmMessage
/**
* Скролл в текущей позиции курсора (два пальца по тачпаду).
*
* [dx]/[dy] — смещение пальцев в пикселях координат VirtualDisplay гостя. Очки превращают
* его в колесо мыши (`MotionEvent.ACTION_SCROLL` + `AXIS_HSCROLL`/`AXIS_VSCROLL`) в точке
* [CursorMove], поэтому скроллится то, что под курсором.
*/
@Serializable
@SerialName("cursor_scroll")
data class CursorScroll(
val dx: Float,
val dy: Float,
) : VmMessage
@Serializable
@SerialName("launch_app")
data class LaunchAppCommand(
@@ -60,6 +60,14 @@ class VmProtocolTest {
assertEquals(CursorClick, decoded)
}
@Test
fun `CursorScroll roundtrip`() {
val msg = CursorScroll(dx = -3.5f, dy = 12.25f)
val encoded = VmProtocol.encode(msg)
val decoded = VmProtocol.decode<CursorScroll>(encoded)
assertEquals(msg, decoded)
}
@Test
fun `decodeAny for CursorMove uses type discriminator`() {
val msg = VmProtocol.decodeAny("""{"type":"cursor_move","x":10.5,"y":20.25}""")