惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
博客园_首页
博客园 - 【当耐特】
V
Visual Studio Blog
博客园 - 叶小钗
月光博客
月光博客
美团技术团队
J
Java Code Geeks
小众软件
小众软件
Y
Y Combinator Blog
博客园 - Franky
Martin Fowler
Martin Fowler
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
人人都是产品经理
人人都是产品经理
Microsoft Security Blog
Microsoft Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
refactor(android): remove orphan runtime accessors · open...
vincentkoc · 2026-06-23 · via Recent Commits to openclaw:main

File tree

  • apps/android/app/src/main/java/ai/openclaw/app

Original file line numberDiff line numberDiff line change

@@ -393,12 +393,6 @@ class SecurePrefs(

393393

return stored?.takeIf { it.isNotEmpty() }

394394

}

395395
396-

/** Saves the paired gateway token under the current Android instance id. */

397-

fun saveGatewayToken(token: String) {

398-

val key = "gateway.token.${_instanceId.value}"

399-

securePrefs.edit { putString(key, token.trim()) }

400-

}

401-
402396

/** Loads the bootstrap token used during gateway setup and device-token handoff. */

403397

fun loadGatewayBootstrapToken(): String? {

404398

val key = "gateway.bootstrapToken.${_instanceId.value}"

Original file line numberDiff line numberDiff line change

@@ -6,14 +6,6 @@ internal fun normalizeMainKey(raw: String?): String {

66

return if (!trimmed.isNullOrEmpty()) trimmed else "main"

77

}

88
9-

/** Accepts only gateway session keys that can represent the main chat stream. */

10-

internal fun isCanonicalMainSessionKey(raw: String?): Boolean {

11-

val trimmed = raw?.trim().orEmpty()

12-

if (trimmed.isEmpty()) return false

13-

if (trimmed == "global") return true

14-

return trimmed.startsWith("agent:")

15-

}

16-
179

/** Extracts the agent id from canonical agent-scoped main session keys. */

1810

internal fun resolveAgentIdFromMainSessionKey(raw: String?): String? {

1911

val trimmed = raw?.trim().orEmpty()

Original file line numberDiff line numberDiff line change

@@ -260,24 +260,6 @@ class GatewaySession(

260260

currentConnection?.closeQuietly()

261261

}

262262
263-

fun currentCanvasHostUrl(): String? = pluginSurfaceUrls["canvas"]

264-
265-

/** Refreshes the canvas plugin surface URL and caches the normalized Android-reachable URL. */

266-

suspend fun refreshCanvasHostUrl(timeoutMs: Long = 8_000): String? {

267-

val refreshed =

268-

refreshPluginSurfaceUrl(

269-

method = "node.pluginSurface.refresh",

270-

params = buildJsonObject { put("surface", JsonPrimitive("canvas")) },

271-

timeoutMs = timeoutMs,

272-

)

273-

if (!refreshed.isNullOrBlank()) {

274-

pluginSurfaceUrls = pluginSurfaceUrls + ("canvas" to refreshed)

275-

}

276-

return refreshed

277-

}

278-
279-

fun currentMainSessionKey(): String? = mainSessionKey

280-
281263

/** Sends a best-effort node.event and returns false instead of throwing on failure. */

282264

suspend fun sendNodeEvent(

283265

event: String,

Original file line numberDiff line numberDiff line change

@@ -97,8 +97,6 @@ class CanvasController {

9797
9898

fun currentUrl(): String? = url

9999
100-

fun isDefaultCanvas(): Boolean = url == null

101-
102100

fun setDebugStatusEnabled(enabled: Boolean) {

103101

debugStatusEnabled = enabled

104102

applyDebugStatus()

@@ -205,24 +203,6 @@ class CanvasController {

205203

}

206204

}

207205
208-

suspend fun snapshotPngBase64(maxWidth: Int?): String =

209-

withContext(Dispatchers.Main) {

210-

val wv = webView ?: throw IllegalStateException("no webview")

211-

val bmp = wv.captureBitmap()

212-

try {

213-

val scaled = bmp.scaleForMaxWidth(maxWidth)

214-

try {

215-

val out = ByteArrayOutputStream()

216-

scaled.compress(Bitmap.CompressFormat.PNG, 100, out)

217-

Base64.encodeToString(out.toByteArray(), Base64.NO_WRAP)

218-

} finally {

219-

if (scaled !== bmp) scaled.recycle()

220-

}

221-

} finally {

222-

bmp.recycle()

223-

}

224-

}

225-
226206

/** Captures the WebView as PNG/JPEG base64 with optional width and quality bounds. */

227207

suspend fun snapshotBase64(

228208

format: SnapshotFormat,

Original file line numberDiff line numberDiff line change

@@ -67,9 +67,3 @@ fun overlayContainerColor(): Color {

6767

// Light mode keeps overlays away from pure-white glare on the app canvas.

6868

return if (isDark) base else base.copy(alpha = 0.88f)

6969

}

70-
71-

/**

72-

* Overlay icon token kept next to overlayContainerColor for callers outside the design package.

73-

*/

74-

@Composable

75-

fun overlayIconColor(): Color = MaterialTheme.colorScheme.onSurfaceVariant

Original file line numberDiff line numberDiff line change

@@ -1253,16 +1253,6 @@ private fun settingsPrimaryButtonColors() =

12531253

disabledContentColor = Color.White.copy(alpha = 0.9f),

12541254

)

12551255
1256-

/** Destructive button colors for permission and capability settings actions. */

1257-

@Composable

1258-

private fun settingsDangerButtonColors() =

1259-

ButtonDefaults.buttonColors(

1260-

containerColor = mobileDanger,

1261-

contentColor = Color.White,

1262-

disabledContainerColor = mobileDanger.copy(alpha = 0.45f),

1263-

disabledContentColor = Color.White.copy(alpha = 0.9f),

1264-

)

1265-
12661256

/** Opens this app's Android settings page for permissions that require system UI. */

12671257

private fun openAppSettings(context: Context) {

12681258

val intent =