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 ? (