From da090342c22c147adf6e0cc038be38e84e5f29a0 Mon Sep 17 00:00:00 2001 From: Exotic209093 <134711311+Exotic209093@users.noreply.github.com> Date: Sun, 13 Sep 2026 19:09:02 +0100 Subject: [PATCH 1/2] fix(mobile): prevent overlapping text and UI on Android chat messages Fixes #11119 --- apps/mobile/src/features/threads/ThreadFeed.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/mobile/src/features/threads/ThreadFeed.tsx b/apps/mobile/src/features/threads/ThreadFeed.tsx index c0ab6f726ccf..3344e147de7b 100644 --- a/apps/mobile/src/features/threads/ThreadFeed.tsx +++ b/apps/mobile/src/features/threads/ThreadFeed.tsx @@ -615,6 +615,7 @@ const markdownLinkStyles = StyleSheet.create({ height: 14, marginHorizontal: 3, transform: [{ translateY: 2 }], + flexShrink: 0, }, favicon: { borderRadius: 3, @@ -1142,7 +1143,7 @@ function useMarkdownStyles( > {ordered ? `${start + index}.` : "•"} - + @@ -1638,10 +1639,16 @@ function renderFeedEntry( return null; } + // Assistant messages hit the same Android unclamped-pass bug as user + // 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); const enterAnimated = isFreshTimestamp(message.createdAt); return ( {renderedText.trim().length > 0 ? ( From 66f3d9040ae6da092862a95a4499146096ef0c5a Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 17 Sep 2026 11:09:00 -0700 Subject: [PATCH 2/2] style(mobile): use utility classes for Android chat layout --- apps/mobile/src/features/threads/ThreadFeed.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/apps/mobile/src/features/threads/ThreadFeed.tsx b/apps/mobile/src/features/threads/ThreadFeed.tsx index 3344e147de7b..0fdd3bc94db9 100644 --- a/apps/mobile/src/features/threads/ThreadFeed.tsx +++ b/apps/mobile/src/features/threads/ThreadFeed.tsx @@ -1143,7 +1143,7 @@ function useMarkdownStyles( > {ordered ? `${start + index}.` : "•"} - + @@ -1643,12 +1643,10 @@ function renderFeedEntry( // 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); const enterAnimated = isFreshTimestamp(message.createdAt); return ( {renderedText.trim().length > 0 ? (