From 55631f83a103d70f7b32a304461e4abe5bdbf500 Mon Sep 17 00:00:00 2001 From: yishai Date: Thu, 29 Jan 2026 04:18:52 +0200 Subject: [PATCH] Android: add canvas hasContent state tracking Tracks whether the canvas has navigated content to support conditional UI rendering based on canvas state. AI-assisted (Claude) - lightly tested --- .../app/src/main/java/com/clawdbot/android/MainViewModel.kt | 1 + .../app/src/main/java/com/clawdbot/android/NodeRuntime.kt | 1 + .../main/java/com/clawdbot/android/node/CanvasController.kt | 6 ++++++ 3 files changed, 8 insertions(+) diff --git a/apps/android/app/src/main/java/com/clawdbot/android/MainViewModel.kt b/apps/android/app/src/main/java/com/clawdbot/android/MainViewModel.kt index 696159708..5831200b4 100644 --- a/apps/android/app/src/main/java/com/clawdbot/android/MainViewModel.kt +++ b/apps/android/app/src/main/java/com/clawdbot/android/MainViewModel.kt @@ -53,6 +53,7 @@ class MainViewModel(app: Application) : AndroidViewModel(app) { val manualTls: StateFlow = runtime.manualTls val manualToken: StateFlow = runtime.manualToken val canvasDebugStatusEnabled: StateFlow = runtime.canvasDebugStatusEnabled + val canvasHasContent: StateFlow = runtime.canvasHasContent val chatSessionKey: StateFlow = runtime.chatSessionKey val chatSessionId: StateFlow = runtime.chatSessionId diff --git a/apps/android/app/src/main/java/com/clawdbot/android/NodeRuntime.kt b/apps/android/app/src/main/java/com/clawdbot/android/NodeRuntime.kt index 8a8a02baa..2fd2f4e2a 100644 --- a/apps/android/app/src/main/java/com/clawdbot/android/NodeRuntime.kt +++ b/apps/android/app/src/main/java/com/clawdbot/android/NodeRuntime.kt @@ -330,6 +330,7 @@ class NodeRuntime(context: Context) { val manualToken: StateFlow = prefs.manualToken val lastDiscoveredStableId: StateFlow = prefs.lastDiscoveredStableId val canvasDebugStatusEnabled: StateFlow = prefs.canvasDebugStatusEnabled + val canvasHasContent: StateFlow = canvas.hasContent private var didAutoConnect = false private var suppressWakeWordsSync = false diff --git a/apps/android/app/src/main/java/com/clawdbot/android/node/CanvasController.kt b/apps/android/app/src/main/java/com/clawdbot/android/node/CanvasController.kt index c7c7a76e1..042547a84 100644 --- a/apps/android/app/src/main/java/com/clawdbot/android/node/CanvasController.kt +++ b/apps/android/app/src/main/java/com/clawdbot/android/node/CanvasController.kt @@ -8,6 +8,9 @@ import android.webkit.WebView import androidx.core.graphics.createBitmap import androidx.core.graphics.scale import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.withContext import java.io.ByteArrayOutputStream @@ -21,6 +24,8 @@ import com.clawdbot.android.BuildConfig import kotlin.coroutines.resume class CanvasController { + private val _hasContent = MutableStateFlow(false) + val hasContent: StateFlow = _hasContent.asStateFlow() enum class SnapshotFormat(val rawValue: String) { Png("png"), Jpeg("jpeg"), @@ -48,6 +53,7 @@ class CanvasController { fun navigate(url: String) { val trimmed = url.trim() this.url = if (trimmed.isBlank() || trimmed == "/") null else trimmed + _hasContent.value = this.url != null reload() }