Skip to content

fix(mobile): keep names, times and previews readable after theme switches and at large text - #2443

Merged
DeepSeekBots merged 7 commits into
mainfrom
claude/ios-qol-pull-to-compose-t1kgmy
Oct 21, 2026
Merged

DeepSeekBots merged 7 commits into
mainfrom
claude/ios-qol-pull-to-compose-t1kgmy

Conversation

@DoodleBears

@DoodleBears DoodleBears commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Vain · project thread

Before:

  • On Android, after a light/dark switch, chat-list and Send to rows could show names cut short ("Atl…", "QA Loun…", "13:…").
  • With large text, chat-list names were squeezed beside the time and broke mid-word.
  • Activity tab labels broke mid-word ("待你处/理").
  • Environment tabs were capped at 220pt.
  • On Android, flicking up in a chat whose messages didn't fill the screen never opened the keyboard.

After:

  • Rows remeasure on every theme or font-scale change.
  • With large text (font scale > 1.3), a chat-list name takes the full row (up to 2 lines) and the time moves to the line below. Previews and in-chat activity lines can use 2 lines.
  • Activity tab labels shrink to stay on one line.
  • An environment tab can take up to 3/5 of the screen width.
  • On Android, flick-to-type works in short chats too.

How:

  • Following fix(mobile): remount the Android chat title when its theme or name changes #2416, the text columns are keyed on ${theme.scheme}:${theme.fontScale}:name.
  • numberOfLines and the row direction follow theme.largeText.
  • environmentTab.widthRatio: 0.6 replaces the 220pt cap, and tabLabel.minimumFontScale is used with adjustsFontSizeToFit.
  • On Android, the chat list's content is kept one hairline taller than the viewport, so the list always sends drag events.

Verification:

  • tsc, oxlint, oxfmt, the source policy check, the release ledger check and the mobile tests (995) pass.
  • Android phone, default and max font: PASS. Flick-to-type was 8/8 in both a short and a long DM; on main it was 0/8 and 5/8. Six theme switches cut nothing.
  • iOS Simulator at AX5, light and dark: PASS. Results and screenshots are in the PR comments.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TYsJ1DZQ7Vd8sKVs6MMhdF

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsJ1DZQ7Vd8sKVs6MMhdF
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsJ1DZQ7Vd8sKVs6MMhdF
@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 16 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 2 included reviews currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: ff3f63c7-c509-46a1-9431-dfd2ff966b7a
📥 Commits

Reviewing files that changed from the base of the PR and between 9af4bf2 and 454919c.

📒 Files selected for processing: 10
  • apps/mobile/DESIGN.md
  • apps/mobile/src/ui/chat/activity-row.tsx
  • apps/mobile/src/ui/chat/conversation-row.tsx
  • apps/mobile/src/ui/chat/conversation-screen.tsx
  • apps/mobile/src/ui/chat/source-name.tsx
  • apps/mobile/src/ui/design/tokens.ts
  • apps/mobile/src/ui/shell/activity-feed.tsx
  • apps/mobile/src/ui/shell/activity-tabs.tsx
  • apps/mobile/src/ui/shell/environment-pager.tsx
  • changes/2443-android-row-names.md
✨ Finishing Touches: 💡 1
🛠️ Fix failing CI checks: 💡
  • Commit to this branch
  • Create a new PR
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsJ1DZQ7Vd8sKVs6MMhdF
@DoodleBears DoodleBears changed the title fix(mobile): remeasure Android row names after a theme switch fix(mobile): keep names, times and previews readable after theme switches and at large text Oct 21, 2026
… the screen

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsJ1DZQ7Vd8sKVs6MMhdF
DoodleBears added a commit that referenced this pull request Oct 21, 2026
…eenshots

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Copy link
Copy Markdown
Contributor Author

Android phone result: PASS, with one small note (Xiaomi, Android 16 / HyperOS 3, this branch at fd129dd, debug build with Metro, isolated QA Host)

Screenshots: 2443-android/phone (commit 691a169)

Check Files Result
Chats list, default and max font (2.0) 1-chats-{default,maxfont}-light.png Default: the long Bot name ("Atlas 发布助理 Release Coordination Assistant") is cut on one line. The time (14:22) is complete and the preview is cut normally. Max font: the name wraps to two lines, and the time and preview stay visible.
Send-to sheet after sharing one image 2-send-to-{default,maxfont}-light.png Names and times are complete at both sizes.
Computer tabs with a long name (in 1-chats-*) With QAWorkstationLongComputerName2443, the tab reaches 732/1220 px (about 60%) before the ellipsis.
Activity 4-activity-{default,maxfont}-light.png Default: in the "其他未读" rows the name is cut, but the time is complete. Note: at max font the segmented tab labels wrap mid-word ("待你处/理", "与你有/关", "其他未/读").
Dark/light switch ×6 on Chats 5-chats-switch{1..6}-{dark,light}.png No name or time was cut (no "QA Loun…" or "13:…").
Flick up on newest message ×8 6-flick-short-dm-light.png, 7-flick-long-dm-light.png Short DM (two messages, not a full screen): 8/8. Long DM: 8/8. On main these were 0/8 and 5/8. Controls: a downward swipe, and an upward swipe that only scrolls back to the bottom, did not open the keyboard.
Short DM open 8-short-dm-open-frames-light.png The first frame shows the loading spinner. The DM then rests on the newest message, and the frames after that are identical (no jiggle).

Dev-only: the debug build kept showing a LogBox error, "Cannot set prop 'modifiers' on view … ComposeFunctionHolder" (DynamicFromMap conversion failed), in 9-logbox-modifiers-error-light.png. A release build does not show it, but it may point at a modifier the native side drops.


Generated by Claude Code

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsJ1DZQ7Vd8sKVs6MMhdF

Copy link
Copy Markdown
Contributor Author

iOS 27 Simulator at 2634c06: passes at the default size, but Chats and Send to fail at AX5. I tested in light and dark, at the default size and at the largest accessibility size (AX5). Two Bots and the computer were given long names temporarily.

Default AX5
Chats list ✅ Long names end in an ellipsis. The time stays on line 1 and the preview on line 2. ❌ Names break mid-word over two lines ("Revi / ew…", "Xiao / ce t…"). The time and the computer glyph keep their full width, so the name gets only about 1/3 of the row.
Send to ✅ ❌ The same row breaks the same way.
Computer tabs, long name ✅ The tab takes about 52% of the width, within 3/5. ⚠️ "Works…" takes about 41%, with spare room to its right.
Activity ✅ ✅ All 3 labels stay on one line. Nit: each label shrinks on its own, so the sizes differ. The row title also drops the kind ("Rhea" instead of "Assignment · Rhea").
Dark → light on Chats ✅ Pixel-identical, and nothing is truncated.
Chats AX5 light Send to AX5 light Activity AX5 light Activity AX5 dark

All 14 shots are in .github/pr-screenshots/2443/ on claude/2443-ios-shots @ 8327383.


Generated by Claude Code

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsJ1DZQ7Vd8sKVs6MMhdF
DoodleBears added a commit that referenced this pull request Oct 21, 2026
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Copy link
Copy Markdown
Contributor Author

AX5 recheck at 90fa796: pass for Chats and Send to, in light and dark on iOS 27, with the same long Bot names. Names wrap at word boundaries over up to 2 lines ("Review / Room", "Xiaoce the / Extremely…"). The time drops to the next line, and the preview follows it. Nothing breaks mid-word.

  • The computer glyph isn't inline with the name. It sits at the far right of the row, centred against the name block. It reads fine.
  • A nit that predates this PR: in the dark Send to sheet, the list rows sit on a darker band than the sheet surface around them, at default size too.
Light Dark
Chats AX5
Send to AX5

Generated by Claude Code

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsJ1DZQ7Vd8sKVs6MMhdF
@DeepSeekBots
DeepSeekBots merged commit c0e7161 into main Oct 21, 2026
11 checks passed
DoodleBears added a commit that referenced this pull request Oct 21, 2026
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Copy link
Copy Markdown
Contributor Author

Android phone recheck: Activity tabs at max font: PASS (Xiaomi, Android 16 / HyperOS 3, release build from main e1caf4f with this PR merged)

Screenshots: 2443-android/phone (commit 4c7b178), 10-tabs-*.png

  • Default font, light and dark: "待你处理", "与你有关" and "其他未读" each sit on one line, and the selected underline is correct.
  • Max font (2.0), light and dark: each of the three tabs is still on one line with the full text. The earlier mid-word wrapping ("待你处/理", "与你有/关", "其他未/读") is gone. The rows on the "其他未读" tab are fine too.

Generated by Claude Code

@DoodleBears
DoodleBears deleted the claude/ios-qol-pull-to-compose-t1kgmy branch October 28, 2026 04:24
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