Commit Graph

823 Commits

Author SHA1 Message Date
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
Vincent Koc
33206ee583 fix(ci): use available Android SDK platform
Restores Android CI to a publicly installable SDK platform and keeps Gradle compileSdk aligned with the workflow install/cache key. Rolls back the API-37-only AndroidX core slice until Android 37 is available to hosted CI, while preserving the unrelated Kotlin dependency bump.

Verification:
- Google SDK repository index check: android-36 exists; android-37/android-37.0 do not.
- git diff --check
- Testbox changed gate: tbx_01kvs3r1bc925pxya94zey23c8
- PR CI: 68 successful, 12 skipped, 0 failing, 0 pending; Android build/play and both Android unit-test lanes passed.
2026-06-23 10:18:28 +08:00
Vincent Koc
9b9b058ebf refactor(android): share health status rows 2026-06-23 08:58:54 +08:00
Vincent Koc
026123dc76 refactor(android): share plain icon button component 2026-06-23 08:49:55 +08:00
Voscko
ea56b135c8 feat(android): add settings detail panels (#95148)
* feat(android): add settings detail panels

* fix(android): strip escaped ansi log codes
2026-06-23 00:40:24 +00:00
Colin Johnson
e39249100e fix: route Android exec approvals to in-app inbox (#95593)
* fix: route Android exec approvals to in-app inbox

* fix: read nested Android exec approval commands
2026-06-22 19:00:16 -05:00
Colin Johnson
5e342c774d improve: refresh Android overview control surface (#95557)
* improve android overview control surface

* fix android lint gates

* fix android voice e2e debug broadcast

* harden android voice e2e receiver

* fix(android): clarify Talk entry copy

---------

Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
2026-06-22 18:57:33 -05:00
Vincent Koc
af328b2b21 refactor(android): remove orphan helpers and aliases 2026-06-23 05:22:56 +08:00