From 2fa44455298aa9e159a234e002e2edd302c6ff67 Mon Sep 17 00:00:00 2001
From: Vincent Koc <25068+vincentkoc@users.noreply.github.com>
Date: Wed, 1 Jul 2026 01:04:12 -0700
Subject: [PATCH] fix(android): complete localized gateway trust flows
---
apps/.i18n/native-source.json | 750 +++++++++---------
.../ai/openclaw/app/ui/ConnectTabScreen.kt | 21 +-
.../java/ai/openclaw/app/ui/OnboardingFlow.kt | 14 +-
.../java/ai/openclaw/app/ui/ShellScreen.kt | 21 +-
.../app/src/main/res/values-ar/strings.xml | 3 +
.../app/src/main/res/values-de/strings.xml | 3 +
.../app/src/main/res/values-es/strings.xml | 3 +
.../app/src/main/res/values-fa/strings.xml | 3 +
.../app/src/main/res/values-fr/strings.xml | 3 +
.../app/src/main/res/values-hi/strings.xml | 3 +
.../app/src/main/res/values-id/strings.xml | 3 +
.../app/src/main/res/values-it/strings.xml | 3 +
.../app/src/main/res/values-ja/strings.xml | 3 +
.../app/src/main/res/values-ko/strings.xml | 3 +
.../app/src/main/res/values-nl/strings.xml | 3 +
.../app/src/main/res/values-pl/strings.xml | 3 +
.../src/main/res/values-pt-rBR/strings.xml | 3 +
.../app/src/main/res/values-ru/strings.xml | 3 +
.../app/src/main/res/values-sv/strings.xml | 36 +-
.../app/src/main/res/values-th/strings.xml | 3 +
.../app/src/main/res/values-tr/strings.xml | 3 +
.../app/src/main/res/values-uk/strings.xml | 3 +
.../app/src/main/res/values-vi/strings.xml | 3 +
.../src/main/res/values-zh-rCN/strings.xml | 3 +
.../src/main/res/values-zh-rTW/strings.xml | 3 +
.../app/src/main/res/values/strings.xml | 3 +
26 files changed, 509 insertions(+), 396 deletions(-)
diff --git a/apps/.i18n/native-source.json b/apps/.i18n/native-source.json
index e9eeaea5f00d..5d152e7d9d60 100644
--- a/apps/.i18n/native-source.json
+++ b/apps/.i18n/native-source.json
@@ -833,89 +833,9 @@
"surface": "android",
"id": "native.android.73e6ab1a168fd381"
},
- {
- "kind": "ui-call",
- "line": 103,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Trust this gateway?",
- "surface": "android",
- "id": "native.android.db9b3ffd6b7983d3"
- },
- {
- "kind": "ui-call",
- "line": 122,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Trust and continue",
- "surface": "android",
- "id": "native.android.f60e86cd1e4a386f"
- },
- {
- "kind": "ui-call",
- "line": 130,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Cancel",
- "surface": "android",
- "id": "native.android.e82eac1ea98d5344"
- },
- {
- "kind": "ui-call",
- "line": 161,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Gateway Connection",
- "surface": "android",
- "id": "native.android.bd14ca8081e66fb5"
- },
{
"kind": "conditional-branch",
- "line": 163,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Connect to your gateway to get started.",
- "surface": "android",
- "id": "native.android.74a6a2d805c19a60"
- },
- {
- "kind": "conditional-branch",
- "line": 163,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Your gateway is active and ready.",
- "surface": "android",
- "id": "native.android.64a0ae87f54277e7"
- },
- {
- "kind": "ui-call",
- "line": 194,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Endpoint",
- "surface": "android",
- "id": "native.android.3c87c3eb8b76443d"
- },
- {
- "kind": "ui-call",
- "line": 216,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Status",
- "surface": "android",
- "id": "native.android.cb8ca12247f5574d"
- },
- {
- "kind": "ui-call",
- "line": 241,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Disconnect",
- "surface": "android",
- "id": "native.android.3947ebe9e7302445"
- },
- {
- "kind": "ui-call",
- "line": 310,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Connect Gateway",
- "surface": "android",
- "id": "native.android.29b6c84cc243897f"
- },
- {
- "kind": "conditional-branch",
- "line": 325,
+ "line": 335,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "Last gateway error",
"surface": "android",
@@ -923,7 +843,7 @@
},
{
"kind": "conditional-branch",
- "line": 325,
+ "line": 335,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "Pairing required",
"surface": "android",
@@ -931,7 +851,7 @@
},
{
"kind": "ui-call",
- "line": 336,
+ "line": 346,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "OpenClaw Android ${openClawAndroidVersionLabel()}",
"surface": "android",
@@ -939,23 +859,7 @@
},
{
"kind": "ui-call",
- "line": 357,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Copy Report for Claw",
- "surface": "android",
- "id": "native.android.b81ffcf00e1d5aa2"
- },
- {
- "kind": "ui-call",
- "line": 376,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Advanced controls",
- "surface": "android",
- "id": "native.android.54e06efb5730c9d3"
- },
- {
- "kind": "ui-call",
- "line": 377,
+ "line": 387,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "Setup code, endpoint, TLS, token, password, onboarding.",
"surface": "android",
@@ -963,7 +867,7 @@
},
{
"kind": "conditional-branch",
- "line": 381,
+ "line": 391,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "Collapse advanced controls",
"surface": "android",
@@ -971,7 +875,7 @@
},
{
"kind": "conditional-branch",
- "line": 381,
+ "line": 391,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "Expand advanced controls",
"surface": "android",
@@ -979,31 +883,7 @@
},
{
"kind": "ui-call",
- "line": 398,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Connection method",
- "surface": "android",
- "id": "native.android.cb057f35d269d945"
- },
- {
- "kind": "ui-named-argument",
- "line": 401,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Setup Code",
- "surface": "android",
- "id": "native.android.0faf4b5e32943100"
- },
- {
- "kind": "ui-named-argument",
- "line": 406,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Manual",
- "surface": "android",
- "id": "native.android.1477a054d25c5a3e"
- },
- {
- "kind": "ui-call",
- "line": 412,
+ "line": 422,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "Run these on the gateway host:",
"surface": "android",
@@ -1011,23 +891,15 @@
},
{
"kind": "ui-call",
- "line": 415,
+ "line": 425,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "For Tailscale or public hosts, use wss:// or Tailscale Serve. Private LAN ws:// remains supported.",
"surface": "android",
"id": "native.android.8b607ce7ba3ac4d3"
},
- {
- "kind": "ui-call",
- "line": 429,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Paste setup code",
- "surface": "android",
- "id": "native.android.8338a39bcb90b86e"
- },
{
"kind": "ui-named-argument",
- "line": 444,
+ "line": 454,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "Android Emulator",
"surface": "android",
@@ -1035,23 +907,15 @@
},
{
"kind": "ui-named-argument",
- "line": 453,
+ "line": 463,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "Localhost",
"surface": "android",
"id": "native.android.b28ff3f4d4bd3830"
},
- {
- "kind": "ui-call",
- "line": 463,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Host",
- "surface": "android",
- "id": "native.android.3cc6464a0aa1f0ef"
- },
{
"kind": "conditional-branch",
- "line": 480,
+ "line": 490,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "Port",
"surface": "android",
@@ -1059,7 +923,7 @@
},
{
"kind": "conditional-branch",
- "line": 480,
+ "line": 490,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "Port (optional, defaults to 443)",
"surface": "android",
@@ -1067,15 +931,7 @@
},
{
"kind": "ui-call",
- "line": 505,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Use TLS",
- "surface": "android",
- "id": "native.android.02693afaa85da5ea"
- },
- {
- "kind": "ui-call",
- "line": 506,
+ "line": 516,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "Turn this on for Tailscale or public hosts. Private LAN ws:// remains supported.",
"surface": "android",
@@ -1083,15 +939,7 @@
},
{
"kind": "ui-call",
- "line": 528,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Token (optional)",
- "surface": "android",
- "id": "native.android.795ba55a55ed1684"
- },
- {
- "kind": "ui-call",
- "line": 532,
+ "line": 542,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "token",
"surface": "android",
@@ -1099,36 +947,12 @@
},
{
"kind": "ui-call",
- "line": 541,
+ "line": 551,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
"source": "Password (optional)",
"surface": "android",
"id": "native.android.8123f2cfbe415437"
},
- {
- "kind": "ui-call",
- "line": 549,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "password",
- "surface": "android",
- "id": "native.android.eb1f4aca9bce2805"
- },
- {
- "kind": "ui-call",
- "line": 566,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Run onboarding again",
- "surface": "android",
- "id": "native.android.94891650ca526e96"
- },
- {
- "kind": "ui-call",
- "line": 651,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt",
- "source": "Resolved endpoint",
- "surface": "android",
- "id": "native.android.436f51d4042a34f3"
- },
{
"kind": "ui-named-argument",
"line": 52,
@@ -1649,41 +1473,9 @@
"surface": "android",
"id": "native.android.0bbe0d733b1328fd"
},
- {
- "kind": "ui-call",
- "line": 245,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
- "source": "Trust this gateway?",
- "surface": "android",
- "id": "native.android.40b4074a84478a80"
- },
- {
- "kind": "ui-call",
- "line": 247,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
- "source": "Verify the certificate fingerprint before continuing.\n\n${prompt.fingerprintSha256}",
- "surface": "android",
- "id": "native.android.644eda7a3020dd44"
- },
- {
- "kind": "ui-call",
- "line": 255,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
- "source": "Trust",
- "surface": "android",
- "id": "native.android.9ac2d4498b17d478"
- },
- {
- "kind": "ui-call",
- "line": 260,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
- "source": "Cancel",
- "surface": "android",
- "id": "native.android.e26ee07a1d1911be"
- },
{
"kind": "ui-named-argument",
- "line": 413,
+ "line": 430,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "OPENCLAW",
"surface": "android",
@@ -1691,7 +1483,7 @@
},
{
"kind": "ui-named-argument",
- "line": 418,
+ "line": 435,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Your personal AI assistant.\nExfoliate! Exfoliate!",
"surface": "android",
@@ -1699,7 +1491,7 @@
},
{
"kind": "ui-named-argument",
- "line": 428,
+ "line": 445,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Connect Gateway",
"surface": "android",
@@ -1707,39 +1499,7 @@
},
{
"kind": "ui-named-argument",
- "line": 538,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
- "source": "Gateway Setup",
- "surface": "android",
- "id": "native.android.57905d522fac1a5c"
- },
- {
- "kind": "ui-named-argument",
- "line": 543,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
- "source": "Scan setup code",
- "surface": "android",
- "id": "native.android.03939d81f3a41ea3"
- },
- {
- "kind": "ui-named-argument",
- "line": 551,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
- "source": "Nearby gateway",
- "surface": "android",
- "id": "native.android.3bc0c2a9b28903b2"
- },
- {
- "kind": "ui-named-argument",
- "line": 560,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
- "source": "Enter gateway URL",
- "surface": "android",
- "id": "native.android.a6ebbaf716b0006b"
- },
- {
- "kind": "ui-named-argument",
- "line": 568,
+ "line": 589,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Setup code issue",
"surface": "android",
@@ -1747,7 +1507,7 @@
},
{
"kind": "ui-named-argument",
- "line": 585,
+ "line": 606,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Advanced",
"surface": "android",
@@ -1755,7 +1515,7 @@
},
{
"kind": "ui-named-argument",
- "line": 594,
+ "line": 615,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Setup code",
"surface": "android",
@@ -1763,7 +1523,7 @@
},
{
"kind": "ui-named-argument",
- "line": 596,
+ "line": 617,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Host",
"surface": "android",
@@ -1771,7 +1531,7 @@
},
{
"kind": "ui-named-argument",
- "line": 597,
+ "line": 618,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Port",
"surface": "android",
@@ -1779,7 +1539,7 @@
},
{
"kind": "conditional-branch",
- "line": 600,
+ "line": 621,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "TLS off",
"surface": "android",
@@ -1787,7 +1547,7 @@
},
{
"kind": "conditional-branch",
- "line": 600,
+ "line": 621,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "TLS on",
"surface": "android",
@@ -1795,7 +1555,7 @@
},
{
"kind": "ui-named-argument",
- "line": 601,
+ "line": 622,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Local",
"surface": "android",
@@ -1803,7 +1563,7 @@
},
{
"kind": "ui-named-argument",
- "line": 603,
+ "line": 624,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Token optional",
"surface": "android",
@@ -1811,7 +1571,7 @@
},
{
"kind": "ui-named-argument",
- "line": 604,
+ "line": 625,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Password optional",
"surface": "android",
@@ -1819,7 +1579,7 @@
},
{
"kind": "ui-named-argument",
- "line": 609,
+ "line": 630,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Pair with Gateway",
"surface": "android",
@@ -1827,15 +1587,7 @@
},
{
"kind": "ui-named-argument",
- "line": 642,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
- "source": "Gateway Recovery",
- "surface": "android",
- "id": "native.android.6ef4415d701b3d7a"
- },
- {
- "kind": "ui-named-argument",
- "line": 678,
+ "line": 699,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Last gateway",
"surface": "android",
@@ -1843,7 +1595,7 @@
},
{
"kind": "conditional-branch",
- "line": 720,
+ "line": 741,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Retry connection",
"surface": "android",
@@ -1851,7 +1603,7 @@
},
{
"kind": "ui-named-argument",
- "line": 725,
+ "line": 746,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Edit connection",
"surface": "android",
@@ -1859,7 +1611,7 @@
},
{
"kind": "ui-named-argument",
- "line": 726,
+ "line": 747,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Copy diagnostic",
"surface": "android",
@@ -1867,7 +1619,7 @@
},
{
"kind": "ui-named-argument",
- "line": 760,
+ "line": 781,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Copy approval command",
"surface": "android",
@@ -1875,7 +1627,7 @@
},
{
"kind": "ui-named-argument",
- "line": 787,
+ "line": 808,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Allow permissions",
"surface": "android",
@@ -1883,7 +1635,7 @@
},
{
"kind": "ui-named-argument",
- "line": 792,
+ "line": 813,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "These permissions keep OpenClaw secure\nand useful.",
"surface": "android",
@@ -1891,7 +1643,7 @@
},
{
"kind": "ui-named-argument",
- "line": 870,
+ "line": 891,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Open $title",
"surface": "android",
@@ -1899,31 +1651,15 @@
},
{
"kind": "ui-call",
- "line": 927,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
- "source": "Permissions",
- "surface": "android",
- "id": "native.android.1f83a6973cd9d621"
- },
- {
- "kind": "ui-call",
- "line": 929,
+ "line": 952,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Choose what this phone can share with OpenClaw. You can change these later in Settings.",
"surface": "android",
"id": "native.android.f38ca3445453a6bb"
},
- {
- "kind": "ui-call",
- "line": 937,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
- "source": "Done",
- "surface": "android",
- "id": "native.android.552df4241451e350"
- },
{
"kind": "ui-named-argument",
- "line": 950,
+ "line": 973,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Back",
"surface": "android",
@@ -1931,7 +1667,7 @@
},
{
"kind": "ui-named-argument",
- "line": 954,
+ "line": 977,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Permission Setup",
"surface": "android",
@@ -1939,7 +1675,7 @@
},
{
"kind": "conditional-branch",
- "line": 1009,
+ "line": 1032,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Granted",
"surface": "android",
@@ -1947,7 +1683,7 @@
},
{
"kind": "conditional-branch",
- "line": 1009,
+ "line": 1032,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Not granted",
"surface": "android",
@@ -1955,7 +1691,7 @@
},
{
"kind": "ui-named-argument",
- "line": 1034,
+ "line": 1057,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Continue",
"surface": "android",
@@ -1963,7 +1699,7 @@
},
{
"kind": "ui-toast",
- "line": 1284,
+ "line": 1307,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Approval command copied",
"surface": "android",
@@ -1971,7 +1707,7 @@
},
{
"kind": "ui-toast",
- "line": 1310,
+ "line": 1333,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Diagnostic copied",
"surface": "android",
@@ -3649,33 +3385,9 @@
"surface": "android",
"id": "native.android.9f346a677f3367e7"
},
- {
- "kind": "ui-call",
- "line": 336,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
- "source": "Trust this gateway?",
- "surface": "android",
- "id": "native.android.5922535fe24f23d7"
- },
- {
- "kind": "ui-call",
- "line": 340,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
- "source": "Trust",
- "surface": "android",
- "id": "native.android.2526d4e2c33e53d6"
- },
- {
- "kind": "ui-call",
- "line": 345,
- "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
- "source": "Cancel",
- "surface": "android",
- "id": "native.android.d066cab1c65d5447"
- },
{
"kind": "ui-named-argument",
- "line": 424,
+ "line": 435,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Overview",
"surface": "android",
@@ -3683,7 +3395,7 @@
},
{
"kind": "ui-named-argument",
- "line": 469,
+ "line": 480,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "No recent sessions",
"surface": "android",
@@ -3691,7 +3403,7 @@
},
{
"kind": "ui-named-argument",
- "line": 471,
+ "line": 482,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Start Chat",
"surface": "android",
@@ -3699,7 +3411,7 @@
},
{
"kind": "ui-named-argument",
- "line": 531,
+ "line": 542,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "OpenClaw",
"surface": "android",
@@ -3707,7 +3419,7 @@
},
{
"kind": "ui-named-argument",
- "line": 539,
+ "line": 550,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Search",
"surface": "android",
@@ -3715,7 +3427,7 @@
},
{
"kind": "ui-named-argument",
- "line": 591,
+ "line": 602,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "ACTIVE AGENT",
"surface": "android",
@@ -3723,7 +3435,7 @@
},
{
"kind": "ui-named-argument",
- "line": 600,
+ "line": 611,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "View",
"surface": "android",
@@ -3731,7 +3443,7 @@
},
{
"kind": "conditional-branch",
- "line": 603,
+ "line": 614,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "$pendingRunCount active",
"surface": "android",
@@ -3739,7 +3451,7 @@
},
{
"kind": "conditional-branch",
- "line": 603,
+ "line": 614,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Idle",
"surface": "android",
@@ -3747,7 +3459,7 @@
},
{
"kind": "ui-named-argument",
- "line": 603,
+ "line": 614,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Runs",
"surface": "android",
@@ -3755,7 +3467,7 @@
},
{
"kind": "conditional-branch",
- "line": 604,
+ "line": 615,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "$sessionCount recent",
"surface": "android",
@@ -3763,7 +3475,7 @@
},
{
"kind": "ui-named-argument",
- "line": 604,
+ "line": 615,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Sessions",
"surface": "android",
@@ -3771,7 +3483,7 @@
},
{
"kind": "ui-named-argument",
- "line": 605,
+ "line": 616,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Cron",
"surface": "android",
@@ -3779,7 +3491,7 @@
},
{
"kind": "ui-named-argument",
- "line": 608,
+ "line": 619,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Chat",
"surface": "android",
@@ -3787,7 +3499,7 @@
},
{
"kind": "ui-named-argument",
- "line": 612,
+ "line": 623,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Reconnect gateway",
"surface": "android",
@@ -3795,7 +3507,7 @@
},
{
"kind": "ui-named-argument",
- "line": 757,
+ "line": 768,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Open ${card.title}",
"surface": "android",
@@ -3803,7 +3515,7 @@
},
{
"kind": "ui-named-argument",
- "line": 825,
+ "line": 836,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Talk",
"surface": "android",
@@ -3811,7 +3523,7 @@
},
{
"kind": "ui-named-argument",
- "line": 826,
+ "line": 837,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Open Talk",
"surface": "android",
@@ -3819,7 +3531,7 @@
},
{
"kind": "ui-named-argument",
- "line": 828,
+ "line": 839,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Talk settings",
"surface": "android",
@@ -3827,7 +3539,7 @@
},
{
"kind": "ui-named-argument",
- "line": 836,
+ "line": 847,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Recent Sessions",
"surface": "android",
@@ -3835,7 +3547,7 @@
},
{
"kind": "ui-named-argument",
- "line": 846,
+ "line": 857,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "View all",
"surface": "android",
@@ -3843,7 +3555,7 @@
},
{
"kind": "conditional-branch",
- "line": 964,
+ "line": 975,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "$onlineNodes/$nodeCount",
"surface": "android",
@@ -3851,7 +3563,7 @@
},
{
"kind": "conditional-branch",
- "line": 964,
+ "line": 975,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "None",
"surface": "android",
@@ -3859,7 +3571,7 @@
},
{
"kind": "conditional-branch",
- "line": 996,
+ "line": 1007,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Recent conversations",
"surface": "android",
@@ -3867,7 +3579,7 @@
},
{
"kind": "conditional-branch",
- "line": 1047,
+ "line": 1058,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Working · $pendingRunCount active ${pluralize(\"run\", pendingRunCount)}",
"surface": "android",
@@ -3875,7 +3587,7 @@
},
{
"kind": "ui-named-argument",
- "line": 1168,
+ "line": 1179,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Needs attention",
"surface": "android",
@@ -3883,7 +3595,7 @@
},
{
"kind": "ui-named-argument",
- "line": 1307,
+ "line": 1318,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Open session",
"surface": "android",
@@ -3891,7 +3603,7 @@
},
{
"kind": "ui-named-argument",
- "line": 1419,
+ "line": 1430,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Back to home",
"surface": "android",
@@ -3899,7 +3611,7 @@
},
{
"kind": "ui-named-argument",
- "line": 1422,
+ "line": 1433,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Settings",
"surface": "android",
@@ -3907,7 +3619,7 @@
},
{
"kind": "ui-named-argument",
- "line": 1425,
+ "line": 1436,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Search settings",
"surface": "android",
@@ -3915,7 +3627,7 @@
},
{
"kind": "conditional-branch",
- "line": 1443,
+ "line": 1454,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "$readyProviderCount ready",
"surface": "android",
@@ -3923,7 +3635,7 @@
},
{
"kind": "conditional-branch",
- "line": 1443,
+ "line": 1454,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Review readiness",
"surface": "android",
@@ -3931,7 +3643,7 @@
},
{
"kind": "conditional-branch",
- "line": 1453,
+ "line": 1464,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Speaker muted",
"surface": "android",
@@ -3939,7 +3651,7 @@
},
{
"kind": "conditional-branch",
- "line": 1453,
+ "line": 1464,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Speaker on",
"surface": "android",
@@ -3947,7 +3659,7 @@
},
{
"kind": "conditional-branch",
- "line": 1455,
+ "line": 1466,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Off",
"surface": "android",
@@ -3955,7 +3667,7 @@
},
{
"kind": "conditional-branch",
- "line": 1455,
+ "line": 1466,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Smart delivery",
"surface": "android",
@@ -3963,7 +3675,7 @@
},
{
"kind": "conditional-branch",
- "line": 1456,
+ "line": 1467,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Camera enabled",
"surface": "android",
@@ -3971,7 +3683,7 @@
},
{
"kind": "conditional-branch",
- "line": 1456,
+ "line": 1467,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Locked",
"surface": "android",
@@ -3979,7 +3691,7 @@
},
{
"kind": "ui-named-argument",
- "line": 1488,
+ "line": 1499,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "OpenClaw ${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})",
"surface": "android",
@@ -3987,7 +3699,7 @@
},
{
"kind": "conditional-branch",
- "line": 1491,
+ "line": 1502,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "All systems operational",
"surface": "android",
@@ -3995,7 +3707,7 @@
},
{
"kind": "conditional-branch",
- "line": 1491,
+ "line": 1502,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Gateway not connected",
"surface": "android",
@@ -4003,7 +3715,7 @@
},
{
"kind": "conditional-branch",
- "line": 1523,
+ "line": 1534,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "No provider usage",
"surface": "android",
@@ -4011,7 +3723,7 @@
},
{
"kind": "conditional-branch",
- "line": 1524,
+ "line": 1535,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "1 provider",
"surface": "android",
@@ -4019,7 +3731,7 @@
},
{
"kind": "conditional-branch",
- "line": 1525,
+ "line": 1536,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "$count providers",
"surface": "android",
@@ -4027,7 +3739,7 @@
},
{
"kind": "conditional-branch",
- "line": 1531,
+ "line": 1542,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "$ready/${skills.size} ready",
"surface": "android",
@@ -4035,7 +3747,7 @@
},
{
"kind": "conditional-branch",
- "line": 1531,
+ "line": 1542,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "No skills",
"surface": "android",
@@ -4043,7 +3755,7 @@
},
{
"kind": "ui-named-argument",
- "line": 1707,
+ "line": 1718,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "OpenClaw mobile",
"surface": "android",
@@ -4051,7 +3763,7 @@
},
{
"kind": "ui-named-argument",
- "line": 1711,
+ "line": 1722,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Open profile",
"surface": "android",
@@ -4059,7 +3771,7 @@
},
{
"kind": "ui-named-argument",
- "line": 1773,
+ "line": 1784,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Open ${row.title}",
"surface": "android",
@@ -4067,7 +3779,7 @@
},
{
"kind": "conditional-branch",
- "line": 1792,
+ "line": 1803,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt",
"source": "Main session",
"surface": "android",
@@ -5185,6 +4897,278 @@
"surface": "android",
"id": "native.android.a3c395b04ae7a621"
},
+ {
+ "kind": "resource-string",
+ "line": 3,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Gateway Connection",
+ "surface": "android",
+ "id": "native.android.55da01a287502809"
+ },
+ {
+ "kind": "resource-string",
+ "line": 4,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Connect Gateway",
+ "surface": "android",
+ "id": "native.android.edb177f35510f636"
+ },
+ {
+ "kind": "resource-string",
+ "line": 5,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Disconnect",
+ "surface": "android",
+ "id": "native.android.ed2b7c53127062b1"
+ },
+ {
+ "kind": "resource-string",
+ "line": 6,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Trust this gateway?",
+ "surface": "android",
+ "id": "native.android.cd32b06480d9bb69"
+ },
+ {
+ "kind": "resource-string",
+ "line": 7,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Trust and continue",
+ "surface": "android",
+ "id": "native.android.402c9af5ba395caf"
+ },
+ {
+ "kind": "resource-string",
+ "line": 8,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Cancel",
+ "surface": "android",
+ "id": "native.android.bc749f6034799c2e"
+ },
+ {
+ "kind": "resource-string",
+ "line": 9,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Endpoint",
+ "surface": "android",
+ "id": "native.android.c12edfa8fda16801"
+ },
+ {
+ "kind": "resource-string",
+ "line": 10,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Status",
+ "surface": "android",
+ "id": "native.android.75efde06ba05f289"
+ },
+ {
+ "kind": "resource-string",
+ "line": 11,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Your gateway is active and ready.",
+ "surface": "android",
+ "id": "native.android.3fa18ce9f5965142"
+ },
+ {
+ "kind": "resource-string",
+ "line": 12,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Connect to your gateway to get started.",
+ "surface": "android",
+ "id": "native.android.df305a8c797e5600"
+ },
+ {
+ "kind": "resource-string",
+ "line": 13,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Copy Report for Claw",
+ "surface": "android",
+ "id": "native.android.6b6a08e8d4eff2d2"
+ },
+ {
+ "kind": "resource-string",
+ "line": 14,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Advanced controls",
+ "surface": "android",
+ "id": "native.android.8f1072da28d67483"
+ },
+ {
+ "kind": "resource-string",
+ "line": 15,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Connection method",
+ "surface": "android",
+ "id": "native.android.a6739759bcab830c"
+ },
+ {
+ "kind": "resource-string",
+ "line": 16,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Setup Code",
+ "surface": "android",
+ "id": "native.android.139b14a5e9980de6"
+ },
+ {
+ "kind": "resource-string",
+ "line": 17,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Manual",
+ "surface": "android",
+ "id": "native.android.be082a5c0a39d06b"
+ },
+ {
+ "kind": "resource-string",
+ "line": 18,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Paste setup code",
+ "surface": "android",
+ "id": "native.android.9bab58464c4fc9b0"
+ },
+ {
+ "kind": "resource-string",
+ "line": 19,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Host",
+ "surface": "android",
+ "id": "native.android.f23d9864f1b619f7"
+ },
+ {
+ "kind": "resource-string",
+ "line": 20,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Use TLS",
+ "surface": "android",
+ "id": "native.android.5677de0e2a1c0faf"
+ },
+ {
+ "kind": "resource-string",
+ "line": 21,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Token (optional)",
+ "surface": "android",
+ "id": "native.android.9f17b363626f2516"
+ },
+ {
+ "kind": "resource-string",
+ "line": 22,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Password",
+ "surface": "android",
+ "id": "native.android.005e23b33d333f6a"
+ },
+ {
+ "kind": "resource-string",
+ "line": 23,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Run onboarding again",
+ "surface": "android",
+ "id": "native.android.a43f43c1338a6960"
+ },
+ {
+ "kind": "resource-string",
+ "line": 24,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Resolved endpoint",
+ "surface": "android",
+ "id": "native.android.8a14b91132d358be"
+ },
+ {
+ "kind": "resource-string",
+ "line": 25,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Gateway Setup",
+ "surface": "android",
+ "id": "native.android.3d9d01cc0af8727d"
+ },
+ {
+ "kind": "resource-string",
+ "line": 26,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Connect to your Gateway",
+ "surface": "android",
+ "id": "native.android.fff6a6f130e88354"
+ },
+ {
+ "kind": "resource-string",
+ "line": 27,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Scan setup code",
+ "surface": "android",
+ "id": "native.android.77a54beda22bfeb7"
+ },
+ {
+ "kind": "resource-string",
+ "line": 28,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Use your Gateway QR or setup code",
+ "surface": "android",
+ "id": "native.android.8f525f9218215b42"
+ },
+ {
+ "kind": "resource-string",
+ "line": 29,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Nearby gateway",
+ "surface": "android",
+ "id": "native.android.40da32c36971b959"
+ },
+ {
+ "kind": "resource-string",
+ "line": 30,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Enter gateway URL",
+ "surface": "android",
+ "id": "native.android.7423bd0086e6897e"
+ },
+ {
+ "kind": "resource-string",
+ "line": 31,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Connect using a manual URL",
+ "surface": "android",
+ "id": "native.android.c9420b6801f5a76f"
+ },
+ {
+ "kind": "resource-string",
+ "line": 32,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Permissions",
+ "surface": "android",
+ "id": "native.android.4b55356d9bf6e444"
+ },
+ {
+ "kind": "resource-string",
+ "line": 33,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Done",
+ "surface": "android",
+ "id": "native.android.c49a911b95af5d5d"
+ },
+ {
+ "kind": "resource-string",
+ "line": 34,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Verify the certificate fingerprint before trusting this gateway.\n\n%1$s",
+ "surface": "android",
+ "id": "native.android.288b83f93172c633"
+ },
+ {
+ "kind": "resource-string",
+ "line": 35,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "The gateway certificate changed. Continue only if you expected this.\n\nOld SHA-256:\n%1$s\n\nNew SHA-256:\n%2$s",
+ "surface": "android",
+ "id": "native.android.6ad2d3f084142bed"
+ },
+ {
+ "kind": "resource-string",
+ "line": 36,
+ "path": "apps/android/app/src/main/res/values/strings.xml",
+ "source": "Gateway Recovery",
+ "surface": "android",
+ "id": "native.android.6ffa3d752514836d"
+ },
{
"kind": "plist-string",
"line": 8,
diff --git a/apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt b/apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt
index 19551304dbf5..70e1b3f58d82 100644
--- a/apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt
+++ b/apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt
@@ -106,9 +106,13 @@ fun ConnectTabScreen(viewModel: MainViewModel) {
text = {
val message =
if (prompt.previousFingerprintSha256.isNullOrBlank()) {
- "First-time TLS connection.\n\nVerify this SHA-256 fingerprint before trusting:\n${prompt.fingerprintSha256}"
+ stringResource(R.string.gateway_trust_first_seen, prompt.fingerprintSha256)
} else {
- "The gateway TLS certificate changed. Only continue if you expected this.\n\nOld SHA-256 fingerprint:\n${prompt.previousFingerprintSha256}\n\nNew SHA-256 fingerprint:\n${prompt.fingerprintSha256}"
+ stringResource(
+ R.string.gateway_trust_changed,
+ prompt.previousFingerprintSha256,
+ prompt.fingerprintSha256,
+ )
}
Text(
message,
@@ -162,8 +166,11 @@ fun ConnectTabScreen(viewModel: MainViewModel) {
Column(verticalArrangement = Arrangement.spacedBy(6.dp)) {
Text(stringResource(R.string.gateway_connection), style = mobileTitle1, color = mobileText)
Text(
- if (isConnected) stringResource(R.string.connected_gateway_ready)
- else stringResource(R.string.connect_gateway_get_started),
+ if (isConnected) {
+ stringResource(R.string.connected_gateway_ready)
+ } else {
+ stringResource(R.string.connect_gateway_get_started)
+ },
style = mobileCallout,
color = mobileTextSecondary,
)
@@ -651,7 +658,11 @@ private fun CommandBlock(command: String) {
private fun EndpointPreview(endpoint: String) {
Column(verticalArrangement = Arrangement.spacedBy(4.dp)) {
HorizontalDivider(color = mobileBorder)
- Text("Resolved endpoint", style = mobileCaption1.copy(fontWeight = FontWeight.SemiBold), color = mobileTextSecondary)
+ Text(
+ stringResource(R.string.resolved_endpoint),
+ style = mobileCaption1.copy(fontWeight = FontWeight.SemiBold),
+ color = mobileTextSecondary,
+ )
Text(endpoint, style = mobileCallout.copy(fontFamily = FontFamily.Monospace), color = mobileText)
HorizontalDivider(color = mobileBorder)
}
diff --git a/apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt b/apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt
index 307bc46a5ef4..828816ef0986 100644
--- a/apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt
+++ b/apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt
@@ -251,8 +251,18 @@ fun OnboardingFlow(
)
},
text = {
+ val message =
+ if (prompt.previousFingerprintSha256.isNullOrBlank()) {
+ stringResource(R.string.gateway_trust_first_seen, prompt.fingerprintSha256)
+ } else {
+ stringResource(
+ R.string.gateway_trust_changed,
+ prompt.previousFingerprintSha256,
+ prompt.fingerprintSha256,
+ )
+ }
Text(
- "Verify the certificate fingerprint before continuing.\n\n${prompt.fingerprintSha256}",
+ message,
style = ClawTheme.type.body,
color = ClawTheme.colors.textMuted,
)
@@ -650,7 +660,7 @@ private fun GatewayRecoveryScreen(
ClawScaffold(modifier = modifier, contentPadding = PaddingValues(horizontal = 18.dp, vertical = 16.dp)) {
Column(modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.spacedBy(18.dp)) {
- OnboardingHeader(title = stringResource(R.string.gateway_setup), onBack = onBack)
+ OnboardingHeader(title = stringResource(R.string.gateway_recovery), onBack = onBack)
Spacer(modifier = Modifier.height(12.dp))
Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(12.dp)) {
Icon(
diff --git a/apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt b/apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt
index 30d7b5ef32c7..79b8c0730331 100644
--- a/apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt
+++ b/apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt
@@ -96,6 +96,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
@@ -325,24 +326,34 @@ private fun GatewayTrustDialog(
) {
val message =
if (prompt.previousFingerprintSha256.isNullOrBlank()) {
- "Verify the certificate fingerprint before trusting this gateway.\n\n${prompt.fingerprintSha256}"
+ stringResource(R.string.gateway_trust_first_seen, prompt.fingerprintSha256)
} else {
- "The gateway certificate changed. Continue only if you expected this.\n\nOld SHA-256:\n${prompt.previousFingerprintSha256}\n\nNew SHA-256:\n${prompt.fingerprintSha256}"
+ stringResource(
+ R.string.gateway_trust_changed,
+ prompt.previousFingerprintSha256,
+ prompt.fingerprintSha256,
+ )
}
AlertDialog(
onDismissRequest = onDecline,
containerColor = ClawTheme.colors.surfaceRaised,
- title = { Text("Trust this gateway?", style = ClawTheme.type.section, color = ClawTheme.colors.text) },
+ title = {
+ Text(
+ stringResource(R.string.trust_this_gateway),
+ style = ClawTheme.type.section,
+ color = ClawTheme.colors.text,
+ )
+ },
text = { Text(message, style = ClawTheme.type.body, color = ClawTheme.colors.textMuted) },
confirmButton = {
TextButton(onClick = onAccept) {
- Text("Trust")
+ Text(stringResource(R.string.trust_and_continue))
}
},
dismissButton = {
TextButton(onClick = onDecline) {
- Text("Cancel")
+ Text(stringResource(R.string.cancel))
}
},
)
diff --git a/apps/android/app/src/main/res/values-ar/strings.xml b/apps/android/app/src/main/res/values-ar/strings.xml
index 3304e4b15ede..0133dabda117 100644
--- a/apps/android/app/src/main/res/values-ar/strings.xml
+++ b/apps/android/app/src/main/res/values-ar/strings.xml
@@ -31,4 +31,7 @@
الاتصال باستخدام عنوان URL يدوي
الأذونات
تم
+ تحقق من بصمة الشهادة قبل الوثوق بهذه البوابة.\n\n%1$s
+ تم تغيير شهادة البوابة. تابع فقط إذا كنت تتوقع هذا التغيير.\n\nSHA-256 القديم:\n%1$s\n\nSHA-256 الجديد:\n%2$s
+ استرداد البوابة
diff --git a/apps/android/app/src/main/res/values-de/strings.xml b/apps/android/app/src/main/res/values-de/strings.xml
index 2ab4a6ecc9be..6f836659cf8e 100644
--- a/apps/android/app/src/main/res/values-de/strings.xml
+++ b/apps/android/app/src/main/res/values-de/strings.xml
@@ -31,4 +31,7 @@
Über eine manuelle URL verbinden
Berechtigungen
Fertig
+ Überprüfen Sie den Zertifikatfingerabdruck, bevor Sie diesem Gateway vertrauen.\n\n%1$s
+ Das Gateway-Zertifikat wurde geändert. Fahren Sie nur fort, wenn Sie diese Änderung erwartet haben.\n\nAlter SHA-256-Wert:\n%1$s\n\nNeuer SHA-256-Wert:\n%2$s
+ Gateway-Wiederherstellung
diff --git a/apps/android/app/src/main/res/values-es/strings.xml b/apps/android/app/src/main/res/values-es/strings.xml
index 4956875c7799..b55920f0f066 100644
--- a/apps/android/app/src/main/res/values-es/strings.xml
+++ b/apps/android/app/src/main/res/values-es/strings.xml
@@ -31,4 +31,7 @@
Conectar usando una URL manual
Permisos
Listo
+ Verifica la huella digital del certificado antes de confiar en este gateway.\n\n%1$s
+ El certificado del gateway cambió. Continúa solo si esperabas este cambio.\n\nSHA-256 anterior:\n%1$s\n\nSHA-256 nuevo:\n%2$s
+ Recuperación del gateway
diff --git a/apps/android/app/src/main/res/values-fa/strings.xml b/apps/android/app/src/main/res/values-fa/strings.xml
index dcd6b728952b..8f9252e506e3 100644
--- a/apps/android/app/src/main/res/values-fa/strings.xml
+++ b/apps/android/app/src/main/res/values-fa/strings.xml
@@ -31,4 +31,7 @@
اتصال با استفاده از URL دستی
مجوزها
انجام شد
+ پیش از اعتماد به این دروازه، اثر انگشت گواهی را تأیید کنید.\n\n%1$s
+ گواهی دروازه تغییر کرده است. فقط در صورتی ادامه دهید که انتظار این تغییر را داشتید.\n\nSHA-256 قدیمی:\n%1$s\n\nSHA-256 جدید:\n%2$s
+ بازیابی دروازه
diff --git a/apps/android/app/src/main/res/values-fr/strings.xml b/apps/android/app/src/main/res/values-fr/strings.xml
index 129c76214010..3d77aaaf2a08 100644
--- a/apps/android/app/src/main/res/values-fr/strings.xml
+++ b/apps/android/app/src/main/res/values-fr/strings.xml
@@ -31,4 +31,7 @@
Se connecter avec une URL manuelle
Autorisations
Terminé
+ Vérifiez l’empreinte du certificat avant d’accorder votre confiance à cette passerelle.\n\n%1$s
+ Le certificat de la passerelle a changé. Continuez uniquement si vous vous attendiez à ce changement.\n\nAncien SHA-256 :\n%1$s\n\nNouveau SHA-256 :\n%2$s
+ Récupération de la passerelle
diff --git a/apps/android/app/src/main/res/values-hi/strings.xml b/apps/android/app/src/main/res/values-hi/strings.xml
index 6ae542a925f9..61a42b9ea414 100644
--- a/apps/android/app/src/main/res/values-hi/strings.xml
+++ b/apps/android/app/src/main/res/values-hi/strings.xml
@@ -31,4 +31,7 @@
मैन्युअल URL का उपयोग करके कनेक्ट करें
अनुमतियाँ
हो गया
+ इस गेटवे पर भरोसा करने से पहले प्रमाणपत्र फ़िंगरप्रिंट सत्यापित करें।\n\n%1$s
+ गेटवे प्रमाणपत्र बदल गया है। केवल तभी जारी रखें जब आपको इस बदलाव की अपेक्षा थी।\n\nपुराना SHA-256:\n%1$s\n\nनया SHA-256:\n%2$s
+ गेटवे पुनर्प्राप्ति
diff --git a/apps/android/app/src/main/res/values-id/strings.xml b/apps/android/app/src/main/res/values-id/strings.xml
index f4e7d7d77ef7..b20a6ecfde53 100644
--- a/apps/android/app/src/main/res/values-id/strings.xml
+++ b/apps/android/app/src/main/res/values-id/strings.xml
@@ -31,4 +31,7 @@
Hubungkan menggunakan URL manual
Izin
Selesai
+ Verifikasi sidik jari sertifikat sebelum memercayai gateway ini.\n\n%1$s
+ Sertifikat gateway berubah. Lanjutkan hanya jika Anda mengharapkan perubahan ini.\n\nSHA-256 lama:\n%1$s\n\nSHA-256 baru:\n%2$s
+ Pemulihan gateway
diff --git a/apps/android/app/src/main/res/values-it/strings.xml b/apps/android/app/src/main/res/values-it/strings.xml
index a5b34a1fbc28..f4ce42501008 100644
--- a/apps/android/app/src/main/res/values-it/strings.xml
+++ b/apps/android/app/src/main/res/values-it/strings.xml
@@ -31,4 +31,7 @@
Connetti usando un URL manuale
Autorizzazioni
Fine
+ Verifica l’impronta digitale del certificato prima di considerare attendibile questo gateway.\n\n%1$s
+ Il certificato del gateway è cambiato. Continua solo se ti aspettavi questa modifica.\n\nSHA-256 precedente:\n%1$s\n\nNuovo SHA-256:\n%2$s
+ Ripristino del gateway
diff --git a/apps/android/app/src/main/res/values-ja/strings.xml b/apps/android/app/src/main/res/values-ja/strings.xml
index 289e9bd514a1..6b7283464a38 100644
--- a/apps/android/app/src/main/res/values-ja/strings.xml
+++ b/apps/android/app/src/main/res/values-ja/strings.xml
@@ -31,4 +31,7 @@
手動 URL で接続
権限
完了
+ このゲートウェイを信頼する前に、証明書のフィンガープリントを確認してください。\n\n%1$s
+ ゲートウェイの証明書が変更されました。想定した変更である場合のみ続行してください。\n\n以前の SHA-256:\n%1$s\n\n新しい SHA-256:\n%2$s
+ ゲートウェイの復旧
diff --git a/apps/android/app/src/main/res/values-ko/strings.xml b/apps/android/app/src/main/res/values-ko/strings.xml
index 62cf7ffeea4e..bafa7d2acd7e 100644
--- a/apps/android/app/src/main/res/values-ko/strings.xml
+++ b/apps/android/app/src/main/res/values-ko/strings.xml
@@ -31,4 +31,7 @@
수동 URL을 사용하여 연결
권한
완료
+ 이 게이트웨이를 신뢰하기 전에 인증서 지문을 확인하세요.\n\n%1$s
+ 게이트웨이 인증서가 변경되었습니다. 예상한 변경인 경우에만 계속하세요.\n\n이전 SHA-256:\n%1$s\n\n새 SHA-256:\n%2$s
+ 게이트웨이 복구
diff --git a/apps/android/app/src/main/res/values-nl/strings.xml b/apps/android/app/src/main/res/values-nl/strings.xml
index 1cb8015cbed1..136654d0a9b2 100644
--- a/apps/android/app/src/main/res/values-nl/strings.xml
+++ b/apps/android/app/src/main/res/values-nl/strings.xml
@@ -31,4 +31,7 @@
Verbinden met een handmatige URL
Machtigingen
Gereed
+ Controleer de certificaatvingerafdruk voordat je deze gateway vertrouwt.\n\n%1$s
+ Het gatewaycertificaat is gewijzigd. Ga alleen door als je deze wijziging verwachtte.\n\nOude SHA-256:\n%1$s\n\nNieuwe SHA-256:\n%2$s
+ Gatewayherstel
diff --git a/apps/android/app/src/main/res/values-pl/strings.xml b/apps/android/app/src/main/res/values-pl/strings.xml
index 101579b14f48..abf9bdc212ac 100644
--- a/apps/android/app/src/main/res/values-pl/strings.xml
+++ b/apps/android/app/src/main/res/values-pl/strings.xml
@@ -31,4 +31,7 @@
Połącz, używając ręcznego URL
Uprawnienia
Gotowe
+ Sprawdź odcisk certyfikatu, zanim zaufasz tej bramie.\n\n%1$s
+ Certyfikat bramy uległ zmianie. Kontynuuj tylko wtedy, gdy oczekujesz tej zmiany.\n\nStary SHA-256:\n%1$s\n\nNowy SHA-256:\n%2$s
+ Odzyskiwanie bramy
diff --git a/apps/android/app/src/main/res/values-pt-rBR/strings.xml b/apps/android/app/src/main/res/values-pt-rBR/strings.xml
index f58e7914ca89..e7bf5e1c0fe9 100644
--- a/apps/android/app/src/main/res/values-pt-rBR/strings.xml
+++ b/apps/android/app/src/main/res/values-pt-rBR/strings.xml
@@ -31,4 +31,7 @@
Conectar usando uma URL manual
Permissões
Concluído
+ Verifique a impressão digital do certificado antes de confiar neste gateway.\n\n%1$s
+ O certificado do gateway foi alterado. Continue somente se você esperava essa alteração.\n\nSHA-256 antigo:\n%1$s\n\nSHA-256 novo:\n%2$s
+ Recuperação do gateway
diff --git a/apps/android/app/src/main/res/values-ru/strings.xml b/apps/android/app/src/main/res/values-ru/strings.xml
index 4342321e6661..c96319ca5003 100644
--- a/apps/android/app/src/main/res/values-ru/strings.xml
+++ b/apps/android/app/src/main/res/values-ru/strings.xml
@@ -31,4 +31,7 @@
Подключиться с помощью URL вручную
Разрешения
Готово
+ Проверьте отпечаток сертификата, прежде чем доверять этому шлюзу.\n\n%1$s
+ Сертификат шлюза изменился. Продолжайте, только если вы ожидали это изменение.\n\nСтарый SHA-256:\n%1$s\n\nНовый SHA-256:\n%2$s
+ Восстановление шлюза
diff --git a/apps/android/app/src/main/res/values-sv/strings.xml b/apps/android/app/src/main/res/values-sv/strings.xml
index 0c813318613f..0cab4f414555 100644
--- a/apps/android/app/src/main/res/values-sv/strings.xml
+++ b/apps/android/app/src/main/res/values-sv/strings.xml
@@ -1,3 +1,37 @@
- OpenClaw-nod
+ OpenClaw Node
+ Gatewayanslutning
+ Anslut gateway
+ Koppla från
+ Lita på denna gateway?
+ Lita på och fortsätt
+ Avbryt
+ Slutpunkt
+ Status
+ Din gateway är aktiv och redo.
+ Anslut till din gateway för att komma igång.
+ Kopiera rapport för Claw
+ Avancerade kontroller
+ Anslutningsmetod
+ Konfigurationskod
+ Manuell
+ Klistra in konfigurationskod
+ Värd
+ Använd TLS
+ Token (valfritt)
+ Lösenord
+ Kör introduktionen igen
+ Löst slutpunkt
+ Gateway-konfiguration
+ Anslut till din gateway
+ Skanna konfigurationskod
+ Använd gatewayens QR-kod eller konfigurationskod
+ Gateway i närheten
+ Ange gateway-URL
+ Anslut med en manuell URL
+ Behörigheter
+ Klar
+ Verifiera certifikatets fingeravtryck innan du litar på denna gateway.\n\n%1$s
+ Gateway-certifikatet har ändrats. Fortsätt bara om du förväntade dig denna ändring.\n\nTidigare SHA-256:\n%1$s\n\nNy SHA-256:\n%2$s
+ Gateway-återställning
diff --git a/apps/android/app/src/main/res/values-th/strings.xml b/apps/android/app/src/main/res/values-th/strings.xml
index 0e7103ebe934..0ddbbb61a650 100644
--- a/apps/android/app/src/main/res/values-th/strings.xml
+++ b/apps/android/app/src/main/res/values-th/strings.xml
@@ -31,4 +31,7 @@
เชื่อมต่อโดยใช้ URL ด้วยตนเอง
สิทธิ์
เสร็จสิ้น
+ ตรวจสอบลายนิ้วมือของใบรับรองก่อนเชื่อถือเกตเวย์นี้\n\n%1$s
+ ใบรับรองของเกตเวย์มีการเปลี่ยนแปลง ดำเนินการต่อเมื่อคุณคาดว่าจะมีการเปลี่ยนแปลงนี้เท่านั้น\n\nSHA-256 เดิม:\n%1$s\n\nSHA-256 ใหม่:\n%2$s
+ การกู้คืนเกตเวย์
diff --git a/apps/android/app/src/main/res/values-tr/strings.xml b/apps/android/app/src/main/res/values-tr/strings.xml
index 58d5da946b86..017de5110d74 100644
--- a/apps/android/app/src/main/res/values-tr/strings.xml
+++ b/apps/android/app/src/main/res/values-tr/strings.xml
@@ -31,4 +31,7 @@
Manuel URL kullanarak bağlan
İzinler
Bitti
+ Bu ağ geçidine güvenmeden önce sertifika parmak izini doğrulayın.\n\n%1$s
+ Ağ geçidi sertifikası değişti. Yalnızca bu değişikliği bekliyorsanız devam edin.\n\nEski SHA-256:\n%1$s\n\nYeni SHA-256:\n%2$s
+ Ağ geçidi kurtarma
diff --git a/apps/android/app/src/main/res/values-uk/strings.xml b/apps/android/app/src/main/res/values-uk/strings.xml
index 3dfb642ecf6e..b86fd7926fde 100644
--- a/apps/android/app/src/main/res/values-uk/strings.xml
+++ b/apps/android/app/src/main/res/values-uk/strings.xml
@@ -31,4 +31,7 @@
Підключитися за допомогою URL-адреси вручну
Дозволи
Готово
+ Перевірте відбиток сертифіката, перш ніж довіряти цьому шлюзу.\n\n%1$s
+ Сертифікат шлюзу змінився. Продовжуйте, лише якщо ви очікували цю зміну.\n\nСтарий SHA-256:\n%1$s\n\nНовий SHA-256:\n%2$s
+ Відновлення шлюзу
diff --git a/apps/android/app/src/main/res/values-vi/strings.xml b/apps/android/app/src/main/res/values-vi/strings.xml
index eadcad7d96a6..cc77feeff37a 100644
--- a/apps/android/app/src/main/res/values-vi/strings.xml
+++ b/apps/android/app/src/main/res/values-vi/strings.xml
@@ -31,4 +31,7 @@
Kết nối bằng URL thủ công
Quyền
Xong
+ Xác minh dấu vân tay chứng chỉ trước khi tin cậy cổng này.\n\n%1$s
+ Chứng chỉ cổng đã thay đổi. Chỉ tiếp tục nếu bạn mong đợi thay đổi này.\n\nSHA-256 cũ:\n%1$s\n\nSHA-256 mới:\n%2$s
+ Khôi phục cổng
diff --git a/apps/android/app/src/main/res/values-zh-rCN/strings.xml b/apps/android/app/src/main/res/values-zh-rCN/strings.xml
index cbcb428d977b..383571c56c37 100644
--- a/apps/android/app/src/main/res/values-zh-rCN/strings.xml
+++ b/apps/android/app/src/main/res/values-zh-rCN/strings.xml
@@ -31,4 +31,7 @@
使用手动 URL 连接
权限
完成
+ 验证证书指纹后再信任此网关。\n\n%1$s
+ 网关证书已更改。仅当这是您预期的更改时才继续。\n\n旧 SHA-256:\n%1$s\n\n新 SHA-256:\n%2$s
+ 网关恢复
diff --git a/apps/android/app/src/main/res/values-zh-rTW/strings.xml b/apps/android/app/src/main/res/values-zh-rTW/strings.xml
index 5b3cbbb00192..5524a3ed3676 100644
--- a/apps/android/app/src/main/res/values-zh-rTW/strings.xml
+++ b/apps/android/app/src/main/res/values-zh-rTW/strings.xml
@@ -31,4 +31,7 @@
使用手動 URL 連接
權限
完成
+ 請先驗證憑證指紋,再信任此閘道。\n\n%1$s
+ 閘道憑證已變更。僅在這是您預期的變更時繼續。\n\n舊 SHA-256:\n%1$s\n\n新 SHA-256:\n%2$s
+ 閘道復原
diff --git a/apps/android/app/src/main/res/values/strings.xml b/apps/android/app/src/main/res/values/strings.xml
index aadfdd1aded6..a1afbe12da73 100644
--- a/apps/android/app/src/main/res/values/strings.xml
+++ b/apps/android/app/src/main/res/values/strings.xml
@@ -31,4 +31,7 @@
Connect using a manual URL
Permissions
Done
+ Verify the certificate fingerprint before trusting this gateway.\n\n%1$s
+ The gateway certificate changed. Continue only if you expected this.\n\nOld SHA-256:\n%1$s\n\nNew SHA-256:\n%2$s
+ Gateway Recovery