fix(mobile): prevent overlapping text and UI on Android chat messages - #11611
Exotic209093 wants to merge 1 commit into
Conversation
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a focused Android/mobile rendering fix that constrains markdown layout and preserves fixed-size icons to prevent chat text and controls from overlapping. It changes only localized presentation behavior and introduces no schema, security, billing, infrastructure, or product-default changes. You can add or adjust custom eligibility rules. Learn more. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a38624ba75
ℹ️ 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".
| // bubbles: wide markdown blocks cause children to be positioned at | ||
| // intrinsic width before the container is clamped, overlapping the | ||
| // timestamp/copy button row. Pinning the width removes that pass. | ||
| const assistantHasWideBlock = hasWideMarkdownBlock(message.text, WIDE_MARKDOWN_BLOCK_OPTIONS); |
There was a problem hiding this comment.
Reuse the existing wide-block result
For every assistant-message render, this repeats the identical hasWideMarkdownBlock call already made in hasWideBlock above. On Android, ordinary long messages without an early match make the helper split and scan the entire message twice; while an assistant response is streaming, that redundant linear work and allocation recurs on every update in the performance-sensitive feed. Use the existing hasWideBlock value for the assistant width condition instead.
AGENTS.md reference: AGENTS.md:L15-L17
Useful? React with 👍 / 👎.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (1)
Included review availability: Your plan provides up to 10 included reviews per hour; 7 remain after this review. 📝 WalkthroughWalkthroughThe mobile thread feed prevents inline icons from shrinking, contains wide markdown list content, and pins assistant rows with wide blocks to full width. ChangesAndroid message layout
Priority: ➖ Normal Estimated code review effort: 2 (Simple) | ~10 minutes Change: Bug fix · Severity of issue fixed: Medium Suggested reviewers: Merge Risk: ⚪ Minimal · up to The Android chat layout changes address the reported overlap paths without an established regression; the PR is mergeable. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 2⚔️ Resolve merge conflicts 💡
🛠️ Fix failing CI checks 💡
🧪 Generate unit tests (beta)
Comment |
Fixes reproduced on an Android emulator and from upstream reports. Feed: Android stops drawing a text view past the GPU's maximum texture height, so a long list rendered as one selectable Text lost its tail and took seconds per frame to draw. Long lists now split into 40-item chunks. Wide assistant markdown blocks keep a pinned width; the feed reserves bottom padding. Keyboard: the feed re-pins after keyboard transitions settle and when the composer collapses; the back gesture collapses the composer; sticky composers only follow the keyboard after a fresh show or real focus (upstream pingdotgg#8212). Terminal: hardware Enter no longer moves focus off the terminal; keyboards that use deleteSurroundingText (FUTO) send Backspace; forward delete works. Also: stream haptics no longer buzz every 320ms on Android and all haptics use the system engine; thread settings apply on tap without Save; typed pairing codes are normalized to the server format; non-git projects fall back to the current checkout instead of a dead worktree default; user CA certificates are trusted; Ctrl/Cmd+Enter sends from a hardware keyboard; thread rename, project favicons in the filter, tablet sidebar toggle, desktop-window density, route titles, Material You review colors, bottom gesture-bar insets, and the composer placeholder clipping (upstream PRs pingdotgg#11503, pingdotgg#11370, pingdotgg#11339, pingdotgg#8200, pingdotgg#8717, pingdotgg#11445, pingdotgg#6003, pingdotgg#5052, pingdotgg#8362, pingdotgg#10709, pingdotgg#11611, pingdotgg#8800, adapted).
Assistant message containers had no width constraint, so Android Yoga unclamped-pass layout caused timestamps and copy buttons to overlap message text. List item content columns also lacked flexShrink, letting favicon icons bleed into text. Applied the same hasWideMarkdownBlock width-pinning already used for user bubbles, added flexShrink and overflow hidden to list content, and pinned favicon images to fixed size.
Fixes #11119
Summary by CodeRabbit