From ffb02a59199f1beb409a4e579d5b1c60877b7db1 Mon Sep 17 00:00:00 2001 From: Ayaan Zaidi Date: Mon, 25 May 2026 08:31:38 +0530 Subject: [PATCH] fix(android): stabilize realtime talk connection state --- apps/android/app/src/main/java/ai/openclaw/app/NodeRuntime.kt | 4 ++-- .../src/main/java/ai/openclaw/app/voice/TalkModeManager.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/android/app/src/main/java/ai/openclaw/app/NodeRuntime.kt b/apps/android/app/src/main/java/ai/openclaw/app/NodeRuntime.kt index 67134cb4d72..e105826a8dd 100644 --- a/apps/android/app/src/main/java/ai/openclaw/app/NodeRuntime.kt +++ b/apps/android/app/src/main/java/ai/openclaw/app/NodeRuntime.kt @@ -515,7 +515,7 @@ class NodeRuntime( context = appContext, scope = scope, session = operatorSession, - isConnected = { operatorConnected }, + isConnected = { _isConnected.value }, onBeforeSpeak = { micCapture.pauseForTts() }, onAfterSpeak = { micCapture.resumeAfterTts() }, ).also { speaker -> @@ -622,7 +622,7 @@ class NodeRuntime( context = appContext, scope = scope, session = operatorSession, - isConnected = { operatorConnected }, + isConnected = { _isConnected.value }, onBeforeSpeak = { micCapture.pauseForTts() }, onAfterSpeak = { micCapture.resumeAfterTts() }, onStoppedByRelay = { finishTalkModeAfterRelayClose() }, diff --git a/apps/android/app/src/main/java/ai/openclaw/app/voice/TalkModeManager.kt b/apps/android/app/src/main/java/ai/openclaw/app/voice/TalkModeManager.kt index 8355ac81ddc..58a1a587e3b 100644 --- a/apps/android/app/src/main/java/ai/openclaw/app/voice/TalkModeManager.kt +++ b/apps/android/app/src/main/java/ai/openclaw/app/voice/TalkModeManager.kt @@ -578,7 +578,7 @@ class TalkModeManager internal constructor( while (true) { realtimeSessionId?.let { return@withTimeout it } val status = _statusText.value - if (!_isEnabled.value && status.startsWith("Talk failed")) { + if (!_isEnabled.value && status != "Off") { throw IllegalStateException(status) } delay(100L)