diff --git a/apps/android/app/src/main/java/ai/openclaw/app/gateway/GatewaySession.kt b/apps/android/app/src/main/java/ai/openclaw/app/gateway/GatewaySession.kt index eaee48981cf..75fda7c2941 100644 --- a/apps/android/app/src/main/java/ai/openclaw/app/gateway/GatewaySession.kt +++ b/apps/android/app/src/main/java/ai/openclaw/app/gateway/GatewaySession.kt @@ -1166,8 +1166,10 @@ internal fun shouldPauseGatewayReconnectAfterAuthFailure( role?.trim() == "node" && scopes.isEmpty() && error.details.reason == "not-paired" && - (error.details.pauseReconnect == false || - error.details.recommendedNextStep == "wait_then_retry") + ( + error.details.pauseReconnect == false || + error.details.recommendedNextStep == "wait_then_retry" + ) ) "AUTH_TOKEN_MISMATCH" -> deviceTokenRetryBudgetUsed && !pendingDeviceTokenRetry else -> false diff --git a/apps/android/app/src/main/java/ai/openclaw/app/voice/MicCaptureManager.kt b/apps/android/app/src/main/java/ai/openclaw/app/voice/MicCaptureManager.kt index 9012dbb3aab..bf369f2ab8a 100644 --- a/apps/android/app/src/main/java/ai/openclaw/app/voice/MicCaptureManager.kt +++ b/apps/android/app/src/main/java/ai/openclaw/app/voice/MicCaptureManager.kt @@ -759,10 +759,10 @@ class MicCaptureManager( var outputIndex = 0 while (inputIndex + 1 < pcm16.size) { val sample = - ((pcm16[inputIndex].toInt() and 0xff) or - (pcm16[inputIndex + 1].toInt() shl 8)) - .toShort() - .toInt() + ( + (pcm16[inputIndex].toInt() and 0xff) or + (pcm16[inputIndex + 1].toInt() shl 8) + ).toShort().toInt() output[outputIndex] = linear16ToPcmu(sample) inputIndex += 2 outputIndex += 1 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 c66698342e2..33cfdfe3faa 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 @@ -169,11 +169,15 @@ class TalkModeManager internal constructor( private val realtimePlaybackLock = Any() private var realtimeAudioTrack: AudioTrack? = null private var realtimePlaybackIdleJob: Job? = null - @Volatile private var realtimePlaybackEndsAtMs = 0L - @Volatile private var realtimeOutputSuppressed = false + @Volatile + private var realtimePlaybackEndsAtMs = 0L - @Volatile private var playbackEnabled = true + @Volatile + private var realtimeOutputSuppressed = false + + @Volatile + private var playbackEnabled = true private val playbackGeneration = AtomicLong(0L) private var ttsJob: Job? = null @@ -755,11 +759,9 @@ class TalkModeManager internal constructor( } } - private fun shouldAppendRealtimeCapturedFrame(length: Int): Boolean = - !isRealtimePlaybackActive() && length > 0 + private fun shouldAppendRealtimeCapturedFrame(length: Int): Boolean = !isRealtimePlaybackActive() && length > 0 - private fun isRealtimePlaybackActive(): Boolean = - _isSpeaking.value || SystemClock.elapsedRealtime() < realtimePlaybackEndsAtMs + private fun isRealtimePlaybackActive(): Boolean = _isSpeaking.value || SystemClock.elapsedRealtime() < realtimePlaybackEndsAtMs private fun handleRealtimeTalkEvent(payloadJson: String?) { if (payloadJson.isNullOrBlank()) return diff --git a/apps/android/app/src/test/java/ai/openclaw/app/voice/MicCaptureManagerTest.kt b/apps/android/app/src/test/java/ai/openclaw/app/voice/MicCaptureManagerTest.kt index 2805b67c1ef..c6c63ab6aab 100644 --- a/apps/android/app/src/test/java/ai/openclaw/app/voice/MicCaptureManagerTest.kt +++ b/apps/android/app/src/test/java/ai/openclaw/app/voice/MicCaptureManagerTest.kt @@ -151,7 +151,12 @@ class MicCaptureManagerTest { ) runCurrent() - assertEquals("testing testing 1 2 3", manager.conversation.value.single().text) + assertEquals( + "testing testing 1 2 3", + manager.conversation.value + .single() + .text, + ) assertEquals("transcription-1", privateField(manager, "transcriptionSessionId")) privateField(manager, "transcriptionDrainJob")?.cancel() }