Skip to content

improve: refresh Android overview control surface#95557

Merged
joshavant merged 5 commits into
openclaw:mainfrom
Solvely-Colin:codex/android-overview-control-surface
Jun 22, 2026
Merged

improve: refresh Android overview control surface#95557
joshavant merged 5 commits into
openclaw:mainfrom
Solvely-Colin:codex/android-overview-control-surface

Conversation

@Solvely-Colin

@Solvely-Colin Solvely-Colin commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

Resolves a problem where the Android Overview and adjacent main tabs felt visually heavier and flatter than the intended native mobile control surface. The Overview also over-emphasized warning states and dashboard-like boxes, which made real gateway/node/session state harder to scan.

Why This Change Was Made

This refresh treats the generated concept as visual direction, not a data contract: the Overview now uses stronger hierarchy, layered dark surfaces, semantic status/icon treatment, a prominent Talk entry point, real agent/session/node/provider signals, and aligned Chat/Voice/Settings styling without adding fake CPU, memory, token, integration, or live-session data. Bottom navigation destinations remain unchanged.

The follow-up lint pass also clears Android platform lint blockers around legacy storage permission capping, Android 13 notification permission access, API-level annotations, non-exported debug-only receiver exposure, and Android package visibility.

Proof media is stored separately in the proof-assets repo, not in this OpenClaw code branch.

AI-assisted: yes. This was implemented and reviewed with Codex; I understand the code changes and kept the implementation bound to existing Android app data/routes rather than generated concept-only placeholders.

User Impact

Android users get a cleaner mobile control surface that makes gateway health, node approval state, node/device status, sessions, Talk, Chat, and settings easier to understand at a glance. Existing routes remain wired to real screens, and the Overview continues to show only data already exposed by the Android app/view model.

Evidence

Fresh proof from the installed Android APK:

Fresh Android tabs

Android tab walk

Before/after comparison:

Before and after tabs

Proof bundle:
https://github.com/Solvely-Colin/pr-proof-assets/tree/openclaw-android-overview-control-surface-20260621/openclaw-android-overview-control-surface-20260621

Validation on rebased commit bcd16901bc over origin/main 2f33999898:

  • codex review --base origin/main - passed with no actionable correctness issues. The review command's own default Android test probe was blocked by the shell's missing default Java runtime, so Android Gradle proof below was run separately with explicit JAVA_HOME/SDK env.
  • .agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main - passed with no accepted/actionable findings; reported patch correct.
  • git diff --check origin/main...HEAD - passed
  • bash -n apps/android/scripts/voice-e2e.sh - passed
  • adb shell run-as ai.openclaw.app am broadcast --user 0 -a ai.openclaw.app.debug.RUN_VOICE_E2E -n ai.openclaw.app/.VoiceE2eReceiver --es mode stop - passed; receiver wrote {"ok":true,"mode":"stop"} through the signature-protected debug path.
  • JAVA_HOME=/opt/homebrew/opt/java ANDROID_HOME="$HOME/Library/Android/sdk" ANDROID_SDK_ROOT="$HOME/Library/Android/sdk" PATH="/opt/homebrew/opt/java/bin:$PATH" ./gradlew :app:ktlintCheck - passed
  • JAVA_HOME=/opt/homebrew/opt/java ANDROID_HOME="$HOME/Library/Android/sdk" ANDROID_SDK_ROOT="$HOME/Library/Android/sdk" PATH="/opt/homebrew/opt/java/bin:$PATH" ./gradlew :app:lintPlayDebug - passed
  • JAVA_HOME=/opt/homebrew/opt/java ANDROID_HOME="$HOME/Library/Android/sdk" ANDROID_SDK_ROOT="$HOME/Library/Android/sdk" PATH="/opt/homebrew/opt/java/bin:$PATH" ./gradlew :app:testPlayDebugUnitTest --tests ai.openclaw.app.ui.ShellScreenLogicTest - passed
  • JAVA_HOME=/opt/homebrew/opt/java ANDROID_HOME="$HOME/Library/Android/sdk" ANDROID_SDK_ROOT="$HOME/Library/Android/sdk" PATH="/opt/homebrew/opt/java/bin:$PATH" ./gradlew :app:assemblePlayDebug - passed

@clawsweeper

clawsweeper Bot commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

Thanks for the contribution. ClawSweeper proposes closing this for now: the implementation may be reasonable, but passing review and proof does not establish that OpenClaw should add this product surface.

Close for now: the branch is coherent, proof-backed, and I found no concrete correctness or security finding, but it is a broad contributor-authored Android control-surface/product-navigation refresh without maintainer-confirmed product direction.

This is a proposal only until the separate default-off apply policy is enabled and all live maintainer-signal checks pass. A maintainer can sponsor the direction, request a narrower version, or apply clawsweeper:human-review to keep it open.

Review details

Best possible solution:

Keep the current Android surface unless an Android owner sponsors this direction; use #46058 for broader scoping or ask for narrower owner-approved UI or hardening slices.

Do we have a high-confidence way to reproduce the issue?

Not applicable: this is an Android UI/product refresh rather than a broken existing behavior report. The PR supplies installed-APK screenshots/GIF proof for the changed tabs.

Is this the best way to solve the issue?

No for landing as-is: the implementation appears coherent, but the best path is maintainer-confirmed Android product direction or narrower owner-approved slices rather than an unsponsored broad control-surface refresh.

Security review:

Security review cleared: No concrete security or supply-chain regression found; the debug receiver is non-exported and signature-permission gated on the PR head.

AGENTS.md: found and applied where relevant.

What I checked:

Likely related people:

  • vincentkoc: Current checkout blame and GitHub commit metadata map the Android shell/settings baseline and recent app/docs touches to Vincent Koc. (role: recent Android shell baseline contributor; confidence: high; commits: 600bace8537a, c645ec4555c0, 0500b410c567; files: apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt, apps/android/app/src/main/java/ai/openclaw/app/ui/SettingsScreens.kt, apps/android/app/src/main/java/ai/openclaw/app/MainViewModel.kt)
  • obviyus: GitHub commit metadata maps Ayaan Zaidi to Android assistant launch and chat-flow commits adjacent to the mobile surface this PR refreshes. (role: Android chat and assistant-entry feature-history contributor; confidence: high; commits: fcf708665ca6, 186647cb749b, 34a5c47351d1; files: apps/android/app/src/main/java/ai/openclaw/app/MainViewModel.kt, apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatScreen.kt, apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt)
  • steipete: Recent Android docs/history and platform-positioning commits map to Peter Steinberger, and the remaining blocker is official Android product posture. (role: adjacent Android docs and product-scope contributor; confidence: medium; commits: bc910942e20c, 3d65b14019a0, 391a3d6eaf2d; files: docs/platforms/android.md, apps/android/README.md)

Codex review notes: model internal, reasoning high; reviewed against 63fdc57b3ac2.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: 🎥 video Contributor real behavior proof includes video or recording evidence. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. labels Jun 21, 2026
@Solvely-Colin
Solvely-Colin force-pushed the codex/android-overview-control-surface branch 2 times, most recently from e569d36 to bcd1690 Compare June 21, 2026 14:07
@Solvely-Colin
Solvely-Colin marked this pull request as ready for review June 21, 2026 14:09
Copilot AI review requested due to automatic review settings June 21, 2026 14:09
@clawsweeper clawsweeper Bot added proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. and removed proof: 🎥 video Contributor real behavior proof includes video or recording evidence. labels Jun 21, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refreshes the Android app’s “Overview” and adjacent tab control surfaces to better match a native mobile hierarchy (layered dark surfaces, semantic statuses, more scannable gateway/node/session signals), and follows up with Android lint/manifest hardening for permissions and debug-only components.

Changes:

  • Reworks Overview/Chat/Voice/Sessions headers and key panels to use a consistent, more native-feeling control surface (status pill, metric tiles, Talk entry point, session source labeling).
  • Introduces a dedicated Settings destination for “Providers & Models” and routes attention/rows accordingly.
  • Fixes Android lint blockers via manifest and API annotation updates, plus tighter debug receiver permissions and updated voice E2E scripting.

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated no comments.

Show a summary per file
File Description
apps/android/scripts/voice-e2e.sh Runs the debug voice E2E broadcast as the app user (run-as) to align with the tightened debug receiver exposure.
apps/android/app/src/test/java/ai/openclaw/app/ui/ShellScreenLogicTest.kt Adds/updates unit coverage for new Overview header/metrics/agent/session-source logic and updated settings routing.
apps/android/app/src/play/AndroidManifest.xml Removes scoped media/storage permissions from the Play flavor merged manifest and caps legacy storage permission by SDK.
apps/android/app/src/main/java/ai/openclaw/app/ui/VoiceScreen.kt Refreshes Voice header styling and Talk orb visual treatment (logo header, stronger hierarchy).
apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt Major Overview redesign: status pill, primary panel, metric grid, Talk entry, session source labels, and Providers & Models settings row.
apps/android/app/src/main/java/ai/openclaw/app/ui/SettingsScreens.kt Adds ProvidersModels route and wires it into settings navigation.
apps/android/app/src/main/java/ai/openclaw/app/ui/SessionsScreen.kt Renames “Live” filter to “Current” and updates spacing/typography to match refreshed surfaces.
apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt Treats notification permission as granted on pre-Android 13 devices to match platform behavior.
apps/android/app/src/main/java/ai/openclaw/app/ui/design/ClawSurfaces.kt Updates default panel surface styling (alpha/elevation) to support the new layered look.
apps/android/app/src/main/java/ai/openclaw/app/ui/design/ClawNavigation.kt Refines bottom nav surface elevation/alpha and selected-state styling to reduce “heavy/flat” feel.
apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatScreen.kt Updates Chat header and message bubble surfaces to the refreshed styling and status semantics.
apps/android/app/src/main/java/ai/openclaw/app/node/DeviceHandler.kt Adds lint-suppressed helper for installed-app visibility that respects Android package-visibility constraints.
apps/android/app/src/main/java/ai/openclaw/app/gateway/GatewayDiscovery.kt Replaces @TargetApi with @RequiresApi for modern API annotations.
apps/android/app/src/main/java/ai/openclaw/app/chat/ChatController.kt Minor formatting/structure adjustments to session entry parsing.
apps/android/app/src/debug/AndroidManifest.xml Locks down the debug-only voice E2E receiver with a signature permission and exported=false.

@Solvely-Colin

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@clawsweeper clawsweeper Bot added proof: 🎥 video Contributor real behavior proof includes video or recording evidence. and removed proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. labels Jun 21, 2026
@joshavant joshavant self-assigned this Jun 22, 2026
@joshavant
joshavant force-pushed the codex/android-overview-control-surface branch from c6f63f6 to 9ea48a9 Compare June 22, 2026 23:43
@joshavant
joshavant merged commit 5e342c7 into openclaw:main Jun 22, 2026
38 of 39 checks passed
@clawsweeper clawsweeper Bot mentioned this pull request Jun 23, 2026
25 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: android App: android merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: 🎥 video Contributor real behavior proof includes video or recording evidence. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: XL status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants