phone: AdbController — единственная точка входа для adb-команд; screen on/off через Канал 1

- AdbController: shell/push/ensureConnected/invalidate; перед каждой командой
  проверяет соединение (echo ok) и сам поднимает wireless-adb (Mercury -> mDNS ->
  connect). Мьютекс только на подъём, длинный бутстрап не блокирует команды.
- ShizukuProvisioner переведён на AdbController (adb-код вынесен).
- Убрана неработающая UI-консоль adb (нужен только программный API).
- ScreenControl(sleep) в shared: гашение/пробуждение экрана очков их же
  Shizuku-UserService (инжект 223/224 как shell), не зависит от Mercury/adb.
- VmPhoneController.setScreen + кнопки «Экран очков» на Канале 1.
- DebugReceiver: DEBUG_ADB_SHELL (+ SET_DEEP_SUSPEND) как отладочный инструмент.
- MercuryController/AdbClient: сопутствующие правки.
This commit is contained in:
2026-09-27 04:55:47 +03:00
parent 027e2efb9c
commit 9914488258
13 changed files with 493 additions and 169 deletions
@@ -10,7 +10,7 @@ import kotlinx.serialization.Serializable
* (настраивается в [VmProtocol]).
*
* Потоки:
* - Phone → Glasses: [TouchEvent], [KeyEvent], [CursorMove], [CursorClick], [LaunchAppCommand], [SetAudioMode], [Shutdown]
* - Phone → Glasses: [TouchEvent], [KeyEvent], [CursorMove], [CursorClick], [LaunchAppCommand], [SetAudioMode], [ScreenControl], [Shutdown]
* - Glasses → Phone: [GlassesStatus], [AppCrashedEvent], [AppLaunchedAck]
* - Двунаправленные: [Ping], [Pong]
*/
@@ -112,6 +112,18 @@ enum class AudioMode { ON_GLASSES, ON_PHONE }
@SerialName("shutdown")
data object Shutdown : VmMessage
/**
* Погасить/разбудить экран очков ([sleep] = true — погасить).
*
* Выполняется на очках их же Shizuku-UserService (инжект `KEYCODE_SLEEP`/`KEYCODE_WAKEUP`
* от shell UID), поэтому не зависит ни от Mercury BLE, ни от wireless-adb.
*/
@Serializable
@SerialName("screen_control")
data class ScreenControl(
val sleep: Boolean,
) : VmMessage
@Serializable
@SerialName("get_app_list")
data object GetAppList : VmMessage