Skip to content

improve(ios): simplify Talk controls and composer alignment#98736

Merged
steipete merged 3 commits into
mainfrom
codex/ios-controls-polish
Jul 1, 2026
Merged

improve(ios): simplify Talk controls and composer alignment#98736
steipete merged 3 commits into
mainfrom
codex/ios-controls-polish

Conversation

@steipete

@steipete steipete commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Related: #98452

AI-assisted: Codex implemented and validated this maintainer-requested UI follow-up.

What Problem This Solves

The iOS Talk screen still spent a large card on two labeled switches and a settings row, the Appearance picker repeated the selected option in helper text, and Chat's realtime-audio control sat slightly below the text field's visual center. These small inconsistencies made the newly simplified interface feel heavier and less precise than the surrounding iOS 26 design.

Why This Change Was Made

This follow-up replaces the Talk switch card with three compact, 44-point circular Liquid Glass controls, using a prominent blue selected state plus explicit accessibility labels and On/Off values. It removes the redundant Appearance explanation and centers Chat's audio control within the composer's resting field while preserving bottom-aligned composer growth.

User Impact

  • Talk presents the same speakerphone, background-listening, and settings actions in a compact icon bar.
  • Selected Talk modes remain immediately visible without destructive red switch chrome.
  • Appearance selection is clearer and occupies less vertical space.
  • Chat's audio control is visually centered at rest; the text field still grows as the draft wraps.
  • Voice settings routing, persisted appearance selection, toggle state, Dynamic Type behavior, and accessibility semantics remain intact.

Evidence

  • iPhone 17 Pro simulator, iOS 26.0.
  • OpenClawBrandTests + RootTabsSourceGuardTests: passed.
  • OpenClawSnapshotUITests.testAppearancePickerHasNoRedundantDescription: passed.
  • OpenClawSnapshotUITests.testTalkUsesCompactIconControls: passed; verifies all three icon controls, removes switch elements, and proves speakerphone state mutation.
  • OpenClawSnapshotUITests.testChatComposerStartsCompactAndGrowsWithDraft: passed; the audio control and field midpoints differ by no more than one point, and multiline growth still works.
  • OpenClawSnapshotUITests.testLiveGatewayControlOverviewNavigation: passed against the running real Gateway via short-lived setup-code pairing; Control connected and Overview opened end to end.
  • Native i18n tooling: 87/87 focused tests passed; regenerated inventory is deterministic.
  • Production SwiftFormat/SwiftLint build phases and git diff --check: passed. Existing warning-only lint findings are outside this patch.
  • Fresh structured Codex autoreview: clean, no accepted/actionable findings (0.93 confidence).

Before and after

Matched 1206 x 2622 iPhone fixture captures. The baseline is the just-landed #98452 design; the right side is this focused cleanup.

Surface Before After
Appearance Before: Appearance picker repeats the current Light selection in helper text After: Appearance is a compact segmented picker without redundant helper text
Talk controls Before: Speakerphone and background listening occupy a labeled switch card After: compact circular icon controls with a prominent selected speaker state
Chat composer Before: realtime audio button sits slightly low inside the resting composer After: realtime audio button is vertically centered inside the resting composer

@openclaw-barnacle openclaw-barnacle Bot added app: ios App: ios size: M maintainer Maintainer-authored PR labels Jul 1, 2026
@clawsweeper

clawsweeper Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs changes before merge. Reviewed July 1, 2026, 7:46 PM ET / 23:46 UTC.

Summary
The PR replaces the iOS Talk switch card with compact icon controls, removes the Appearance picker helper text, centers Chat's realtime-audio control, and updates iOS UI coverage, App Review notes, and native i18n inventory.

PR surface: Docs 0, Other +28. Total +28 across 9 files.

Reproducibility: yes. for the review finding: PR-head source leaves talk.background.enabled false by default and only keeps Talk active in background when that key is true, while the changed note says only to confirm the button is highlighted. The inspected Talk screenshot also shows the background-listening button off.

Review metrics: none identified.

Merge readiness
Overall: 🦐 gold shrimp
Proof: 🦞 diamond lobster ✨ media proof bonus
Patch quality: 🦐 gold shrimp
Result: needs maintainer review before merge.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Update apps/ios/APP-REVIEW-NOTES.md so reviewers enable background listening if the button is off before starting the background-audio test.
  • Let exact-head CI finish and get maintainer visual acceptance for the protected iOS affordance change.

Risk before merge

  • [P1] The App Review background-audio flow can fail if reviewers are told only to confirm the background-listening button is highlighted even though fresh/default state leaves it off.
  • [P1] The protected maintainer label means the visual direction still needs explicit maintainer acceptance before merge.

Maintainer options:

  1. Fix the App Review step (recommended)
    Update the background-audio walkthrough to tell reviewers to enable the background-listening button when it is not highlighted before starting Talk.
  2. Accept the review-note risk
    Maintainers may intentionally accept the current wording only if they know App Review devices will already have background listening enabled.
  3. Pause for design acceptance
    Pause the PR if maintainers want to revisit the new compact Talk controls before repairing the review instructions.
Copy recommended automerge instruction
@clawsweeper automerge

Special instructions:
Update `apps/ios/APP-REVIEW-NOTES.md` so the Talk + Background Audio steps explicitly enable the background-listening button if it is off before starting Talk; do not change runtime defaults, settings keys, or the Talk UI implementation.

Next step before merge

  • [P2] A one-line App Review note mismatch is a safe narrow repair; maintainer visual acceptance remains a separate protected-label decision.

Security
Cleared: Cleared: the diff is limited to Swift UI, UI tests, App Review notes, and native i18n inventory with no dependency, CI, auth, secret, package, or code-execution surface change.

Review findings

  • [P2] Tell reviewers to enable background listening — apps/ios/APP-REVIEW-NOTES.md:82
Review details

Best possible solution:

Keep the focused iOS UI polish, but update the App Review background-audio steps so reviewers explicitly enable background listening before backgrounding the app, then wait for maintainer visual acceptance.

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

Yes for the review finding: PR-head source leaves talk.background.enabled false by default and only keeps Talk active in background when that key is true, while the changed note says only to confirm the button is highlighted. The inspected Talk screenshot also shows the background-listening button off.

Is this the best way to solve the issue?

No until the App Review note is corrected; the UI implementation itself is an appropriate owner-boundary polish, but the review walkthrough needs to match the default state and background runtime contract.

Full review comments:

  • [P2] Tell reviewers to enable background listening — apps/ios/APP-REVIEW-NOTES.md:82
    Line 82 still says to confirm the background-listening button is highlighted, but PR-head code initializes talk.background.enabled to false and NodeAppModel.setScenePhase only keeps Talk active in the background when that key is true. The PR screenshot also shows the middle background button off, so this App Review flow can fail unless the step tells reviewers to enable the button when it is off.
    Confidence: 0.87

Overall correctness: patch is incorrect
Overall confidence: 0.87

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 17482a402680.

Label changes

Label changes:

  • add merge-risk: 🚨 other: Merging with the current App Review note can make the background-audio review flow fail even though CI and screenshots do not cover that exact instruction path.
  • add rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • add status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (screenshot): Sufficient: the PR provides inspectable iPhone before/after screenshots for Settings, Talk, and Chat plus focused simulator and live-gateway validation notes for the changed UI behavior.
  • remove rating: 🐚 platinum hermit: Current PR rating is rating: 🦐 gold shrimp, so this older rating label is no longer current.
  • remove status: 👀 ready for maintainer look: Current PR status label is status: ⏳ waiting on author.

Label justifications:

  • P3: This is low-risk iOS UI polish and App Review note cleanup, not an urgent runtime, data, security, or channel-delivery fix.
  • merge-risk: 🚨 other: Merging with the current App Review note can make the background-audio review flow fail even though CI and screenshots do not cover that exact instruction path.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (screenshot): Sufficient: the PR provides inspectable iPhone before/after screenshots for Settings, Talk, and Chat plus focused simulator and live-gateway validation notes for the changed UI behavior.
  • proof: sufficient: Contributor real behavior proof is sufficient. Sufficient: the PR provides inspectable iPhone before/after screenshots for Settings, Talk, and Chat plus focused simulator and live-gateway validation notes for the changed UI behavior.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. Sufficient: the PR provides inspectable iPhone before/after screenshots for Settings, Talk, and Chat plus focused simulator and live-gateway validation notes for the changed UI behavior.
Evidence reviewed

PR surface:

Docs 0, Other +28. Total +28 across 9 files.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 0 0 0 0
Docs 1 2 2 0
Config 0 0 0 0
Generated 0 0 0 0
Other 8 254 226 +28
Total 9 256 228 +28

Acceptance criteria:

  • [P1] git diff --check.
  • [P1] Read apps/ios/Sources/Design/TalkProTab.swift and apps/ios/Sources/Model/NodeAppModel.swift to confirm the updated wording matches the background-listening default and background behavior.

What I checked:

  • Repository policy read: Root review policy was read fully and applied; it requires reading beyond the diff and keeps protected maintainer-labeled PRs under explicit maintainer handling. (AGENTS.md:1, 17482a402680)
  • Scoped iOS policy read: The iOS scoped policy was read fully; it adds App Store release guardrails and did not add a separate line-level release-process blocker for this UI PR. (apps/ios/AGENTS.md:1, 17482a402680)
  • App Review note mismatch: At PR head, the changed Talk + Background Audio walkthrough tells reviewers to confirm the background-listening button is highlighted. (apps/ios/APP-REVIEW-NOTES.md:82, 2b22fc44ad46)
  • Background listening default: At PR head, Talk still initializes talk.background.enabled with a false default, so a fresh/default review state is not highlighted. (apps/ios/Sources/Design/TalkProTab.swift:8, 2b22fc44ad46)
  • Background runtime contract: At PR head, setScenePhase only keeps Talk active in the background when talk.background.enabled is true, so the App Review note must explicitly enable that control before backgrounding. (apps/ios/Sources/Model/NodeAppModel.swift:466, 2b22fc44ad46)
  • Talk implementation shape: At PR head, Talk uses the new compact control bar and keeps speaker/background controls wired to the existing bindings. (apps/ios/Sources/Design/TalkProTab.swift:159, 2b22fc44ad46)

Likely related people:

  • steipete: Authored and merged the related iOS 26 Liquid Glass redesign that set the current Talk, Settings, and shared Chat composer baseline this PR follows up on. (role: recent iOS redesign owner; confidence: high; commits: 8502ef6c598b; files: apps/ios/Sources/Design/TalkProTab.swift, apps/ios/Sources/Design/SettingsProTabSections.swift, apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatComposer.swift)
  • Eva: Current-main blame attributes the older Talk controls, Appearance section, and shared composer scaffolding to this baseline commit before the iOS 26 redesign reshaped the area. (role: baseline code contributor; confidence: medium; commits: bfc4e1dcb54c; files: apps/ios/Sources/Design/TalkProTab.swift, apps/ios/Sources/Design/SettingsProTabSections.swift, apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatComposer.swift)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8d2af7765b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/ios/UITests/OpenClawSnapshotUITests.swift
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦞 diamond lobster Very strong PR readiness with only minor 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. labels Jul 1, 2026
@steipete steipete self-assigned this Jul 1, 2026
@steipete
steipete force-pushed the codex/ios-controls-polish branch from 4c2df02 to cef5112 Compare July 1, 2026 23:13
@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. and removed rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. labels Jul 1, 2026
@steipete
steipete force-pushed the codex/ios-controls-polish branch from 339e5d0 to 2b22fc4 Compare July 1, 2026 23:40

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2b22fc44ad

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

self.compactAccessory(self.attachmentPicker)

HStack(alignment: .bottom, spacing: 8) {
HStack(alignment: .center, spacing: 8) {

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.

P2 Badge Keep the realtime control bottom-aligned after wrapping

When the clean composer draft wraps to multiple lines, editorOverlay becomes taller but this inner stack now centers the realtime button inside that taller field. The outer row still bottom-aligns the attachment and send controls, so in expanded drafts the realtime control floats above the other composer controls instead of staying aligned with them; keep the resting midpoint fix with an alignment guide or offset rather than changing the expanded-state stack alignment.

Useful? React with 👍 / 👎.

@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed 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. labels Jul 1, 2026
@steipete
steipete merged commit 3e50f41 into main Jul 1, 2026
95 of 101 checks passed
@steipete
steipete deleted the codex/ios-controls-polish branch July 1, 2026 23:48
@steipete

steipete commented Jul 1, 2026

Copy link
Copy Markdown
Contributor Author

Merged via squash.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 2, 2026
…#98736)

* refactor(ios): streamline talk and composer controls

* test(ios): restore Talk control state

* chore(ios): refresh native i18n inventory
chenyangjun-xy pushed a commit to chenyangjun-xy/openclaw that referenced this pull request Jul 3, 2026
…#98736)

* refactor(ios): streamline talk and composer controls

* test(ios): restore Talk control state

* chore(ios): refresh native i18n inventory
sheyanmin pushed a commit to sheyanmin/openclaw that referenced this pull request Jul 8, 2026
…#98736)

* refactor(ios): streamline talk and composer controls

* test(ios): restore Talk control state

* chore(ios): refresh native i18n inventory
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: ios App: ios maintainer Maintainer-authored PR P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. size: M status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant