Commit Graph

830 Commits

Author SHA1 Message Date
WhatsSkiLL
c680312ef6 feat(android): add chat command controls (#98796) 2026-07-03 19:23:06 -04:00
Ben.Li
b623ff738d fix(android): parse talk directive aliases case-insensitively (#99592) 2026-07-03 12:41:08 -07:00
Ben.Li
b6e6799755 fix(android): block self-package notification forwarding in allowlist mode (#99568)
Always reject the OpenClaw app package in allowsPackage, matching the
blocklist fail-closed behavior and preventing gateway/node forwarding loops.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-03 12:38:58 -07:00
Ben.Li
57d0747185 fix(android): filter device and internal sessions from thread picker (#99557)
* fix(android): filter device and internal sessions from thread picker

Align SessionFilters with iOS isRecentChatSession so agent device sessions,
internal main aliases, and onboarding keys do not appear in recent choices.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): tighten chat session filtering

* fix(android): preserve access to stale chat sessions

* chore(android): sync native i18n inventory

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 12:35:03 -07:00
Ben.Li
6b253eb341 fix(android): reject IPv6 zone IDs in gateway endpoint URLs (#99570)
* fix(android): normalize IPv6 zone IDs in gateway endpoint hosts

Strip interface zones during endpoint parsing so link-local URLs like
ws://[fe80::1%25eth0] connect using socket-ready literals such as fe80::1.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): reject IPv6 zone IDs in gateway endpoint URLs

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): reject scoped IPv6 gateway hosts

* chore(android): sync native i18n inventory

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 12:12:03 -07:00
Ben.Li
df1452799b fix(android): preserve numeric invoke error codes (#99591)
* fix(android): preserve numeric invoke error codes

* fix(android): tighten invoke error code parsing

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 11:24:50 -07:00
christopheraaronhogg
ab2761f3a5 improve: make native chat scrolling reader-managed (#98258)
* improve native chat scroll behavior

* add native chat scroll proof harnesses

* fix(android): jump native chat to live content

* fix(mobile): harden reader-managed chat scrolling

* fix(android): preserve prompt anchor through completion

* fix(android): gate follow changes on user scroll

* fix(ios): handle optimistic chat rollback

* fix(mobile): harden reader boundary transitions

* fix(mobile): expose newer content after restore

* fix(android): preserve restored reader identity

* test(ios): prove reader pause and resume

* fix(android): scope restored reader state to session

* chore(i18n): sync native chat inventory

* fix(mobile): harden reader scroll recovery

* chore(i18n): sync native inventory after rebase

---------

Co-authored-by: Chris Hogg <chrishogg@Chriss-Mac-mini-3.local>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 06:57:16 -07:00
Jesse Merhi
64318d7624 Rework Android gateway onboarding setup (#98752)
* feat(android): rework gateway onboarding setup

* fix(android): restore protocol mismatch onboarding guidance

* fix(android): sync onboarding native i18n

* fix(android): preserve LAN manual setup prefill

* fix(android): refine onboarding node approval step

* fix(android): polish onboarding recovery actions

* test(android): cover onboarding protocol mismatch copy

* fix(android): separate onboarding node approval

* fix(android): guard onboarding node approval transitions

* fix(android): keep onboarding approval states reachable

* fix(android): wait for node access before onboarding continue

* fix(android): refresh node approval after operator handoff

* fix(android): refresh onboarding approval states

* fix(android): require approval after onboarding permission changes

* fix(android): keep onboarding approval gates active

* fix(android): preserve permission reapproval state

* fix(android): skip node approval on legacy gateways

* fix(android): wait for node approval refresh

* fix(android): preserve camera setting on upgrade

* fix(android): avoid stuck approval check spinner

* fix(android): request talk secrets on operator connects

* fix(android): avoid missed node approval completion

* fix(android): keep nearby LAN setup local

* fix(android): complete onboarding after node approval

* fix(android): reconcile onboarding with gateway auth plans

* chore(android): refresh native i18n inventory after rebase

* Fix Android onboarding review edge cases

* Fix native i18n onboarding sentinels
2026-07-03 21:20:12 +10:00
Peter Steinberger
1c7229dead fix(android): expose exact gateway recovery actions (#99414)
* fix(android): expose exact gateway recovery actions

* fix(android): keep auth recovery actionable

* fix(android): cover terminal gateway auth states

* fix(android): keep recovery commands current

* fix(android): reset gateway-scoped recovery state

* fix(android): keep auth rate limits terminal

* fix(android): expire approval ids before refresh

* chore(i18n): refresh Android recovery inventory
2026-07-03 00:30:25 -07:00
Colin Johnson
7cfc66ad07 fix(android): derive Voice readiness from Gateway catalog (#98269)
* fix(android): derive voice readiness from Gateway catalog

Co-authored-by: Colin <colin@solvely.net>

* chore(android): sync native i18n inventory

* test(gateway): use registered realtime provider ids

* fix(gateway): satisfy Talk catalog lint

* chore(android): refresh voice i18n inventory

* fix(talk): preserve runtime readiness semantics

* fix(talk): make catalog readiness authoritative

* fix(talk): validate selected provider readiness

* fix(android): honor authoritative talk readiness

* fix(android): inventory voice readiness copy

* fix(talk): report runtime-selected catalog provider

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 23:32:03 -07:00
Rain
df350e6720 fix(android): render chat content through Markdown (#88899)
* fix(android): render all chat text as Markdown

Co-authored-by: Pluviobyte <Pluviobyte@users.noreply.github.com>

* chore(android): sync native i18n inventory

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Pluviobyte <Pluviobyte@users.noreply.github.com>
2026-07-02 21:38:28 -07:00
joshavant
6aabf07dd7 docs: document android license maintenance 2026-07-02 22:06:58 -05:00
joshavant
166938b7df android: add licenses settings screen 2026-07-02 22:06:58 -05:00
Peter Steinberger
af9ab9f193 fix(android): use Bluetooth microphones for voice capture (#99259)
* fix(android): route voice capture through Bluetooth microphones

* chore(i18n): refresh Android voice source inventory
2026-07-02 16:44:40 -07:00
Colin Johnson
ffda2f00a0 fix: keep Android gateway settings save idempotent (#98277)
* fix(android): keep gateway settings save idempotent

* fix(android): centralize gateway settings auth ownership

Co-authored-by: Colin <colin@solvely.net>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 15:53:47 -07:00
Ashish Patel
8229f62ac3 fix(android): queue node events until gateway connect (#92602)
* fix(android): queue notification events until gateway ready

Co-authored-by: Ashish Patel <shriganesh.patel@gmail.com>

* style(android): format notification gateway changes

* style(android): fix gateway resolver formatting

* chore(android): sync native i18n inventory

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 15:36:14 -07:00
NianJiu
00599dd1ed fix: clean up Android camera clips on cancellation (#99153)
* fix: clean up Android camera clips on cancellation

* fix(android): own camera clip cleanup lifecycle

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 13:53:29 -07:00
NianJiu
c20171ddfc fix: require Android contact and calendar write permissions (#99204)
* fix: require Android contact and calendar write permissions

* test(android): cover partial permission grants

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 13:20:07 -07:00
Ben.Li
a51b06fd4d fix(android): strip ws scheme prefix from manual gateway host input (#99110)
* fix(android): strip ws scheme prefix from manual gateway host input

Reject bare ws:// in the Host field and normalize pasted ws:// LAN URLs
so manual onboarding resolves the real hostname instead of host ws.
Fixes #87216.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): preserve complete manual gateway endpoints

* fix(android): preserve gateway i18n inventory

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 11:43:31 -07:00
NianJiu
db7bfc618d fix: require Android contact and calendar write permissions in onboarding (#99158)
* fix: require Android contact and calendar write permissions in onboarding

* refactor(android): share required onboarding permission groups

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 11:36:56 -07:00
Ben.Li
97ad0b7c21 fix(android): bracket IPv6 hosts in manual gateway URL composition (#99107)
* fix(android): bracket IPv6 hosts in manual gateway URL composition

Reuse formatGatewayAuthority when building manual gateway URLs so IPv6
loopback and LAN hosts parse correctly during onboarding connect setup.

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(android): cover bracketed IPv6 gateway hosts

* fix(android): avoid gateway i18n inventory churn

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 11:28:18 -07:00
NianJiu
36361fc2a0 fix(android): preserve split SMS permission grants (#99147)
* fix: preserve split SMS permission grants

* refactor(android): generalize split permission grant merging

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 11:21:00 -07:00
Ben.Li
f2a708468a fix(android): ignore chat events with missing assistant role in voice text extraction (#99123)
* fix(android): ignore chat events with missing assistant role in voice text extraction

Voice chat event parsing now rejects messages without an explicit assistant role,
matching ChatController fail-closed behavior and preventing accidental TTS playback.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): require canonical assistant role for voice events

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 11:18:12 -07:00
NeatGuyCoding
76ccd17ac3 test(android): poll for stale TLS probe cleanup in auth test (#83826)
* test(android): poll for stale TLS probe cleanup in auth test

Signed-off-by: NeatGuyCoding <15627489+NeatGuyCoding@users.noreply.github.com>

* test(android): await stale TLS probe job

Co-authored-by: NeatGuyCoding <15627489+NeatGuyCoding@users.noreply.github.com>

---------

Signed-off-by: NeatGuyCoding <15627489+NeatGuyCoding@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 07:18:27 -07:00
Masato Hoshino
40d4e32110 fix(android): show specific gateway auth-recovery reason instead of generic label (#98698)
* fix(android): distinguish gateway auth-recovery reasons instead of one generic label

gatewaySummary()/gatewayStatusLabel() collapsed every auth failure (expired
setup QR, missing/invalid token, missing/invalid password, stale device
identity) into "Authentication needed", discarding the already-computed
MainViewModel.gatewayConnectionProblem signal consumed elsewhere in the app
(OnboardingFlow's recoveryGatewayAuthDetail). Thread it into both status
labels via a shared gatewayAuthNeededSummary() helper so the Overview and
Settings screens tell the user which recovery action applies.

Fixes #98046

* test(android): lock gateway auth-needed labels to the real unauthorized message format

Verified against src/gateway/server/ws-connection/auth-messages.ts:
formatGatewayAuthFailureMessage always returns strings starting with
"unauthorized", which contains the "auth" substring the status-text gate
checks for. Add tests using the exact real-world message text (not just
synthetic "auth failed" strings) so this stays regression-locked.

* fix(android): widen the auth-needed status gate to cover device-identity failures

CONTROL_UI_DEVICE_IDENTITY_REQUIRED/DEVICE_IDENTITY_REQUIRED real gateway
messages ("device identity required", "control ui requires device
identity...") don't contain "auth", so the status.contains("auth") gate
never reached their specific label. Add "device identity" as an additional
substring the gate checks for those two codes, with regression tests using
the exact real message text (message-handler.ts).

Verified via GitHub-style codex review round 2 (round 1's "unauthorized
doesn't contain auth" claim was checked against source and rejected as
false — "unauthorized" does contain "auth" — but this second, narrower
finding about device-identity codes held up under the same source check).

* fix(android): centralize gateway auth status labels

* fix(android): correlate gateway connection diagnostics

* chore(android): align native i18n inventory after rebase

* fix(android): preserve retryable pairing guidance

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 06:50:26 -07:00
NianJiu
0ccdef5dcf [codex] Cancel Android gateway pending RPCs on close (#98067)
* fix: cancel Android gateway pending RPCs on close

* fix(android): isolate pending RPCs per connection

* style(android): separate RPC waiter invariant

* chore(android): align native i18n inventory

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 06:39:44 -07:00
NianJiu
e3f46d0926 [codex] Gate Android Talk capture starts in background (#98055)
* fix: gate Android talk capture starts

* refactor(android): make Talk capture policy explicit

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 06:22:26 -07:00
NianJiu
98e97661da [codex] Fix Android camera snap cleanup (#98040)
* fix: release Android camera snap use case

* fix(android): release one-shot camera capture promptly

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 05:10:02 -07:00
Lokimorty
a8c7657cd7 fix(android): return settings details to their originating tab on Back (#98914)
* fix(android): return settings details to their originating tab on Back

* chore(i18n): refresh native string inventory for shell back label
2026-07-02 09:52:59 +01:00
NianJiu
04e4c3719d [codex] Support Android selected photo access (#98059)
* fix: support Android selected photo access

* fix(android): expose selected photo access in settings

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 09:36:58 +01:00
Voscko
f2abf57d32 fix(android): make offline chat actionable (#94566)
* fix(android): make offline chat actionable

* fix(android): use structured offline recovery state

* chore(i18n): sync native string inventory

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 09:25:12 +01:00
Josh Avant
0cdce79221 docs: update mobile app release messaging (#98843) 2026-07-01 21:11:56 -05:00
joshavant
03d23c56d1 Document Android release failure stop rule 2026-07-01 18:09:57 -05:00
joshavant
0ea304d02f Add Android release agent guardrails 2026-07-01 18:09:57 -05:00
joshavant
341231831b chore(android): prepare 2026.6.11 Play release 2026-07-01 17:26:11 -05:00
Vincent Koc
9c130388a3 fix(android): validate resource apostrophe syntax 2026-07-01 03:43:03 -07:00
Vincent Koc
03d3f49c3d fix(android): preserve Swedish app name 2026-07-01 03:43:03 -07:00
Vincent Koc
2fa4445529 fix(android): complete localized gateway trust flows 2026-07-01 03:43:03 -07:00
Vincent Koc
844775a6de feat(android): localize every native locale 2026-07-01 03:43:03 -07:00
Vincent Koc
af00b0bebf feat(android): localize gateway onboarding 2026-07-01 03:43:03 -07:00
Josh Avant
f55abc0606 Fix Android QR scan pairing flow (#98483) 2026-07-01 03:27:02 -05:00
joshavant
491a6c846d fix(android): hide status bar in release screenshots 2026-07-01 03:04:52 -05:00
Josh Avant
6495358f17 fix: Android setup codes accept local mDNS gateway hosts (#98439)
* Fix Android mDNS setup-code cleartext policy

* Align Android gateway diagnostics cleartext guidance
2026-07-01 01:18:49 -05:00
Josh Avant
ad59492d3c fix: show actionable mobile protocol mismatch recovery (#98385)
* Fix mobile protocol mismatch recovery

* Test iOS protocol mismatch connect failures

* Fix iOS protocol mismatch problem actions
2026-07-01 00:11:03 -05:00
Josh Avant
21d1e1f0fc Fix Android TLS fingerprint timeout handling (#98366) 2026-06-30 22:35:45 -05:00
Daniel Nylander
339d19b089 Add Swedish mobile app localization (#98043)
* feat: add Swedish mobile app localization

* fix: remove dead Swedish watch extension localization

* docs: document iOS metadata locale directories

---------

Co-authored-by: Daniel Nylander <daniel@danielnylander.se>
2026-06-30 18:15:04 -07:00
qingminlong
0d275c8c9d fix(android): clarify gateway auth recovery states (#98094)
* fix(android): clarify gateway auth recovery states

* fix(android): preserve retryable pairing recovery copy

* fix(android): prefer auth recovery detail before stale address

* fix(android): show auth recovery while approval loads
2026-06-30 17:53:51 -07:00
joshavant
ff35f3bb2c Track mobile release SHAs with refs 2026-06-26 18:54:45 -05:00
Vincent Koc
0671c08900 chore(release): close out 2026.6.10 on main (#96271)
* chore(release): close out 2026.6.10 on main

* chore(release): align native app metadata for 2026.6.10

* chore(release): sync Android 2026.6.10 notes

* docs(changelog): preserve 2026.6.9 history

* docs(changelog): preserve 2026.6.9 history
2026-06-24 11:51:14 +08:00
joshavant
9405b8f075 chore(android): prepare 2026.6.9 Play release 2026-06-23 14:23:52 -05:00