Repository navigation
fix(android): find existing settings through search - #139035
Conversation
Share destination labels, icons, categories, and Desktop availability between Settings Home and search. Preserve existing Back ownership and provider navigation while removing duplicate row metadata and per-command callbacks. Classify the mascot as an infinite Compose animation so shell behavior can be tested without overriding the animation clock.
Keep the TLS peer open until the probe completes, and let the publication test release its held factory. Cancel an unpublished socket if the factory is interrupted. Preserve the client deadlines and coroutine assertions.
Use literal UI lookups so the existing localization extractor includes each phone theme mode. Remove the unused English-label reverse lookup; saved system/dark/light values remain unchanged.
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: blocked before merge. Reviewed September 5, 2026, 10:07 AM ET / 14:07 UTC. ClawSweeper reviewWhat this changesMakes existing Android settings searchable through shared destination metadata, exposes theme labels to localization extraction, and adjusts animation and test-fixture lifecycles. Merge readiness⛔ Blocked before merge - 1 item remains The search repair remains useful: current main and v2026.9.1 still omit existing settings from search. No introduced correctness defect was found, and the source-only revision follows the locale-refresh ownership contract. Priority: P2 Review scores
Verification
How this fits togetherAndroid’s search palette turns typed queries into navigation actions within the companion app. Settings Home and search now share destination metadata while the existing shell continues to own navigation and Back behavior. flowchart TD
A[Overview or Settings search] --> B[Localized query matching]
C[Shared settings destinations] --> D[Settings home]
C --> E[Desktop availability filter]
E --> B
B --> F[Existing navigation owner]
F --> G[Settings detail or Providers]
G --> H[Back to originating screen]
Before merge
Agent review detailsSecurityNone. PR surfaceTests +145, Docs +1, Other +15. Total +161 across 13 files. View PR surface stats
Review metrics
Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Keep one shared destination catalog and the existing navigation owner; deliver generated theme translations through locale refresh, then restore the documented French selection regression. Do we have a high-confidence way to reproduce the issue? Yes, from source: searching Appearance, Profile, or Licenses cannot match the five actions on current main. Installed before/after results are supplied; this review did not execute the app. Is this the best way to solve the issue? Yes for the search and extraction repair: sharing destination metadata avoids another competing search list, and literal theme lookups use the existing localization pipeline without changing saved preferences. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against df78d38ccca7. LabelsLabel justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
History |
|
@clawsweeper re-review The source-only revision follows the required native locale-refresh ownership boundary. Generated resources are excluded; the PR body distinguishes the earlier combined French artifact from current source-only proof and records the subsequent generated-refresh and regression-test handoff. All 18 changed checks, 16 inventory tests, and 68 focused Android executions passed; Codex P2 review is clean. Exact-head hosted CI remains required. |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
Merged via squash.
|
* fix(android): make settings destinations searchable Share destination labels, icons, categories, and Desktop availability between Settings Home and search. Preserve existing Back ownership and provider navigation while removing duplicate row metadata and per-command callbacks. Classify the mascot as an infinite Compose animation so shell behavior can be tested without overriding the animation clock. * test(android): bind gateway fixtures to test lifetimes Keep the TLS peer open until the probe completes, and let the publication test release its held factory. Cancel an unpublished socket if the factory is interrupted. Preserve the client deadlines and coroutine assertions. * fix(android): localize appearance mode labels Use literal UI lookups so the existing localization extractor includes each phone theme mode. Remove the unused English-label reverse lookup; saved system/dark/light values remain unchanged. * fix(android): hand generated settings labels to locale refresh
The source branch is in
openclaw/openclaw, not a contributor fork.What Problem This Solves
Fixes an issue where users searching for existing Android settings such as Appearance, Profile, or Licenses received “No actions found.” Search filtered five quick actions instead of the destinations exposed by Settings.
Also repairs the source-extraction cause of Dark/Light remaining English after selecting a translated app language. Delivery of those generated translations follows the normal Native App Locale Refresh PR, not this source-only PR.
Why This Change Was Made
Settings Home and search now share typed destination titles, icons, categories, and availability. One dispatcher preserves the navigation owner: Back returns to the originating screen, Providers & Models keeps its standalone route, and Sign Out remains an explicit account action. Duplicate metadata and per-command callbacks are removed.
Theme labels use literal localized UI lookups, making them visible to the existing extraction pipeline; the unused English-label API is removed. Saved system/dark/light values are unchanged. The mascot’s existing frame loop now uses Compose’s infinite-animation API, matching the waveform and allowing shell tests to reach idle under the existing infinite-animation test policy, without app-specific or OS animation toggles.
The pinned Compose animation-core 1.12.0 AAR was independently inspected: without an
InfiniteAnimationPolicy, its helper invokes the samewithFrameNanoscallback; the matching test policy recognizes infinite operations under auto-advance. Pose math and reactive OS reduced-motion handling are unchanged. This closes the reviewer’s unavailable dependency-read check; no animation-smoothness claim is made.User Impact
Existing settings are discoverable by displayed name or category, including while offline. Home section order, summaries, status dots, Profile, and the bottom Licenses section remain unchanged. No configuration, permission, persistence, protocol, or dependency contract changes are introduced by this PR.
Evidence
This revision deliberately contains source and the native-source inventory only. The previous combined revision failed CI preflight because generated locale artifacts must land separately; no gate was bypassed. Exact-head hosted CI33970480734 completed successfully, including both phone-flavor tests, Wear tests, Play/Wear APK builds, Android lint, and the required openclaw/ci-gate.
The normal main-triggered Native App Locale Refresh workflow owns the generated Android lookup table and translated resources. After that generated PR lands, the following source PR will restore the byte-identical French resource/selection regression retained from the combined revision. Until then, this source-only artifact does not claim translated Dark/Light labels.
Source-only verification: all 18 selected changed-file checks passed; all 16 native-inventory tests passed; 68 focused Android executions passed across Play and Third Party with no failures, errors, or skips. The added extraction regression fails against the previous dynamic-label source and passes against the literal phone-owned labels. Native inventory verification and the actual CI generated/source isolation check passed. Codex P2 review reported no actionable findings.
Earlier combined-artifact and unchanged-search evidence follows; it is not exact-head generated-resource proof for the source-only revision:
967efd2a44c5, SHA-2564ff7121c7f6971169df5f428d6a8a7ecb1b8cb689b5bf742dfec739dfbf0811e) passed a separate 4-case, 11-step installed round-trip: same-UID update, French labels, Light → Dark → original effective Dark, and App language restored to System. Nine available Settings fields matched the expected state, including the normal local theme-edit metadata; chat header/draft fields remain outside this proof. Original captures and execution records were independently reviewed, and all owned native resources and the Testbox were closed.Installed search before and after
These inspected, synthetic-only captures show the search implementation, which is unchanged in the source-only revision. They are not after-proof for the additional theme-label repair.
Earlier combined-artifact French theme round-trip
These inspected, synthetic-only original captures are from the successful combined
967efd2a44c5run. They show the intended result with generated translations present, not the current source-only artifact.Authored Android production is +230/-215 (net +15), justified by the shared searchable-destination owner and localized labels. Tests are +197/-52; no generated locale artifacts are changed. Native-source inventory-site relocation is counted separately.
A separate Settings-row layout follow-up records the existing French Providers & Models title clipping beside its long status. The unrelated Apple catalog extraction refresh is also tracked separately; neither is claimed fixed here.
Latest review disposition
The September 5 14:07 UTC review of
e2323a6f3d6dreports no introduced code defect and accepts the unchanged installed search evidence. Its remaining note is the reviewer’s DNS limitation, not a demonstrated dependency failure. The maintainer directly inspected the pinned Compose 1.12.0 AAR/helper and test-policy implementation and the original installed captures; those checks are described above. The chosen mitigation remains one shared destination catalog, the existing navigation owner, and workflow-owned generated translations followed by the retained French regression. No finding is silently skipped, no gate is waived, and no source-only French translation or animation-smoothness claim is made.