From d768c1f81c5e3255ce409db54f43115d600c0d86 Mon Sep 17 00:00:00 2001 From: Ayaan Zaidi Date: Thu, 26 Feb 2026 18:30:10 +0530 Subject: [PATCH] feat(android): wire device commands into runtime --- .../app/src/main/java/ai/openclaw/android/NodeRuntime.kt | 5 +++++ .../main/java/ai/openclaw/android/node/ConnectionManager.kt | 1 + .../main/java/ai/openclaw/android/node/InvokeDispatcher.kt | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/apps/android/app/src/main/java/ai/openclaw/android/NodeRuntime.kt b/apps/android/app/src/main/java/ai/openclaw/android/NodeRuntime.kt index 43b14ce8226..97a16d7af91 100644 --- a/apps/android/app/src/main/java/ai/openclaw/android/NodeRuntime.kt +++ b/apps/android/app/src/main/java/ai/openclaw/android/NodeRuntime.kt @@ -92,6 +92,10 @@ class NodeRuntime(context: Context) { locationPreciseEnabled = { locationPreciseEnabled.value }, ) + private val deviceHandler: DeviceHandler = DeviceHandler( + appContext = appContext, + ) + private val notificationsHandler: NotificationsHandler = NotificationsHandler( appContext = appContext, ) @@ -127,6 +131,7 @@ class NodeRuntime(context: Context) { canvas = canvas, cameraHandler = cameraHandler, locationHandler = locationHandler, + deviceHandler = deviceHandler, notificationsHandler = notificationsHandler, screenHandler = screenHandler, smsHandler = smsHandlerImpl, diff --git a/apps/android/app/src/main/java/ai/openclaw/android/node/ConnectionManager.kt b/apps/android/app/src/main/java/ai/openclaw/android/node/ConnectionManager.kt index de30b8af8fe..1c9a045c896 100644 --- a/apps/android/app/src/main/java/ai/openclaw/android/node/ConnectionManager.kt +++ b/apps/android/app/src/main/java/ai/openclaw/android/node/ConnectionManager.kt @@ -85,6 +85,7 @@ class ConnectionManager( buildList { add(OpenClawCapability.Canvas.rawValue) add(OpenClawCapability.Screen.rawValue) + add(OpenClawCapability.Device.rawValue) if (cameraEnabled()) add(OpenClawCapability.Camera.rawValue) if (smsAvailable()) add(OpenClawCapability.Sms.rawValue) if (voiceWakeMode() != VoiceWakeMode.Off && hasRecordAudioPermission()) { diff --git a/apps/android/app/src/main/java/ai/openclaw/android/node/InvokeDispatcher.kt b/apps/android/app/src/main/java/ai/openclaw/android/node/InvokeDispatcher.kt index 936ad7b3d11..fb88aef03a8 100644 --- a/apps/android/app/src/main/java/ai/openclaw/android/node/InvokeDispatcher.kt +++ b/apps/android/app/src/main/java/ai/openclaw/android/node/InvokeDispatcher.kt @@ -4,6 +4,7 @@ import ai.openclaw.android.gateway.GatewaySession import ai.openclaw.android.protocol.OpenClawCanvasA2UICommand import ai.openclaw.android.protocol.OpenClawCanvasCommand import ai.openclaw.android.protocol.OpenClawCameraCommand +import ai.openclaw.android.protocol.OpenClawDeviceCommand import ai.openclaw.android.protocol.OpenClawLocationCommand import ai.openclaw.android.protocol.OpenClawNotificationsCommand import ai.openclaw.android.protocol.OpenClawScreenCommand @@ -13,6 +14,7 @@ class InvokeDispatcher( private val canvas: CanvasController, private val cameraHandler: CameraHandler, private val locationHandler: LocationHandler, + private val deviceHandler: DeviceHandler, private val notificationsHandler: NotificationsHandler, private val screenHandler: ScreenHandler, private val smsHandler: SmsHandler, @@ -116,6 +118,10 @@ class InvokeDispatcher( // Location command OpenClawLocationCommand.Get.rawValue -> locationHandler.handleLocationGet(paramsJson) + // Device commands + OpenClawDeviceCommand.Status.rawValue -> deviceHandler.handleDeviceStatus(paramsJson) + OpenClawDeviceCommand.Info.rawValue -> deviceHandler.handleDeviceInfo(paramsJson) + // Notifications command OpenClawNotificationsCommand.List.rawValue -> notificationsHandler.handleNotificationsList(paramsJson)