Skip to content

feat(android): improve iOS UI parity and connection recovery - #12

Merged
spullara merged 28 commits into
mainfrom
feat/android-ui-parity
Nov 10, 2026
Merged

spullara merged 28 commits into
mainfrom
feat/android-ui-parity

Conversation

@wookiehangover

@wookiehangover wookiehangover commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

Android’s workspace navigation, conversation controls and recovery screens had diverged from the iOS companion. This draft brings the audited flows closer to the iOS reference and includes the subsequent workspace-list and Intent-menu refinements.

Changes

  • Keep Send available beside Stop; page and collapse questions with whole-row selection; compact queued messages.
  • Add workspace grouping/search and status metadata, compact rows without descriptions, clearer details, left/right edge drawers, Search beside the grouping control and a soft header fade.
  • Use Intent dandelion/close artwork and a reversible menu-button morph, including the grey open state.
  • Improve pairing/trust guidance, reconnect feedback and ownership refresh. Stop retrying WebSocket 401/403 rejection while retaining retry for transient failures.
  • Render inline note tasks, linked status and relation navigation; improve creation choices and transfer confirmation/recovery.
  • Polish Assistant history, settings, agent groups/watched links and terminal controls. Add local terminal names, saved browser previews and workspace script controls that disable offline.
  • Add bounded numbered/wrappable file reading, explicit external PDF-reader access and searchable Git commit files/details.

Reference: iOS 6a814fbb24f70a6870ed9ba94868c4339d4374cd (1.1.9). ios-parity.json records implemented scope and remaining gaps.

Validation

  • ./gradlew build ktlintCheck detekt test :app:assembleDebugAndroidTest passed on final head 7fd6951ed3533b451c2d2d437de1cce6742eac1e.
  • Both IntentLauncherTest cases passed on Android 16, including animation reversal, appearance changes, dismissal and action callbacks; final light/dark captures reviewed.
  • Earlier integrated runs exercised conversation/question controls, notes/tasks, pairing, creation/transfer, workspace details/drawers, files/Git, agents/terminals and browser/script resources.
  • Workspace edge gestures/search and list scrolling/group restoration were checked on the emulator; the fade scenario passed in both themes. These broader device runs preceded the final icon-only change.

Screenshots

Captures use test/demo data on the Android 16 emulator.

State Light Dark
Final Intent menu Intent menu in light theme Intent menu in dark theme
Workspace header fade Workspace header fade in light theme Workspace header fade in dark theme

Remaining verification and scope

Keep this as a draft. Live Tailcat/camera/permission flows, live transfer/script execution, TalkBack/large text, tablets and background behavior still need device checks. The app remains under development.

Deferred: top-level PR browsing, slash-skill catalog integration, full note editing, synchronized terminal names, full code/diff highlighting, in-app accessible PDF extraction, script creation/output/history and host-tab discovery.

Agent-Id: agent-8b9aee76-7bdc-4d92-9460-8a4b8413cf00
Agent-Id: agent-80a680b1-853c-4c77-acd1-1f16a2547b98
Agent-Id: agent-968fb0f7-42ea-49ae-8018-b9daff41d8f4
Agent-Id: agent-8b9aee76-7bdc-4d92-9460-8a4b8413cf00
Agent-Id: agent-25628ca4-6026-4ad5-978c-45514efff063
Agent-Id: agent-8b9aee76-7bdc-4d92-9460-8a4b8413cf00
Agent-Id: agent-ca87ea41-9c43-47c2-92a5-c252e8514d7d
Agent-Id: agent-df1cbbdc-ede0-4b63-b5f2-9b2bbdbdaf1c
Agent-Id: agent-c5cdff93-5d3b-4985-8a28-235dcf07156e
Agent-Id: agent-fe419160-357e-488e-84d1-52b808610f76
Agent-Id: agent-270f7447-ce07-48b5-84a8-56b7476677f4
Agent-Id: agent-df1cbbdc-ede0-4b63-b5f2-9b2bbdbdaf1c
Agent-Id: agent-ca87ea41-9c43-47c2-92a5-c252e8514d7d
Agent-Id: agent-ce8cbd9d-4410-4569-b9ee-af8caa8b0892
Agent-Id: agent-c5cdff93-5d3b-4985-8a28-235dcf07156e
Agent-Id: agent-c5cdff93-5d3b-4985-8a28-235dcf07156e
Agent-Id: agent-ce8cbd9d-4410-4569-b9ee-af8caa8b0892
Agent-Id: agent-270f7447-ce07-48b5-84a8-56b7476677f4
Agent-Id: agent-ce8cbd9d-4410-4569-b9ee-af8caa8b0892
Agent-Id: agent-ce8cbd9d-4410-4569-b9ee-af8caa8b0892
Agent-Id: agent-ce8cbd9d-4410-4569-b9ee-af8caa8b0892
Agent-Id: agent-ce8cbd9d-4410-4569-b9ee-af8caa8b0892
Agent-Id: agent-ce8cbd9d-4410-4569-b9ee-af8caa8b0892
Agent-Id: agent-ce8cbd9d-4410-4569-b9ee-af8caa8b0892
Agent-Id: agent-ce8cbd9d-4410-4569-b9ee-af8caa8b0892
@wookiehangover
wookiehangover marked this pull request as ready for review November 10, 2026 00:09
wookiehangover and others added 2 commits November 10, 2026 00:10
Agent-Id: agent-ce8cbd9d-4410-4569-b9ee-af8caa8b0892
The grouping row drew the search button even with no workspaces.
Show it only when workspaces exist or a search is open.

The recent-delegate swipe test now accepts the agent name in both the
header and the empty conversation state.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@spullara

Copy link
Copy Markdown
Contributor

Tested on a Pixel 9 Pro XL (Android 16, CP1A.260405.005), build without Tailcat.

  • Full androidTest suite on the phone: 160/162 passed. The 2 failures matched CI.
  • 6ff399c fixes both:
    • The workspace list showed the search button with no workspaces. It now shows only when workspaces exist or a search is open.
    • The recent-delegate swipe test expected one "Recent delegate" node. The screen shows the name in the header and the empty state, so the test now checks the first match.
  • After the fix: build ktlintCheck detekt test passed (JDK 21), and PageSearchTest + WorkspaceActionsTest passed on the phone (8/8).
  • The app installed over the existing build and kept saved connections.

Not covered: a live connection. The saved hosts were a Tailcat address and a different LAN.

Note: on current Android 16 builds, Espresso 3.5.0 (pulled in by Compose ui-test) fails with NoSuchMethodException: InputManager.getInstance. I used espresso-core 3.7.0 locally only. main needs that bump in a separate PR.

🤖 Generated with Claude Code

Edge swipes were hard to start on Android because system Back covers
most of the left edge. A horizontal swipe that starts on the Workspaces
heading row now opens Connections (right) or Agent history (left).
Edge swipes still work.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@spullara
spullara merged commit a968539 into main Nov 10, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants