authorgravatar for me@pixp.ccAlex <me@pixp.cc> 2026-09-26 00:23:44-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-09-26 02:23:44-05:00
logdab9561cae8817bea24442c1dc7e28996de9c52e
treee05a96efb2406fc4ef4742dcd0becef9316aa882
parent92f0af24a359f64df8f480049913cbdbd9ea6d29
signature Signed by PGP key B5690EEEBB952194

fix(mobile): keep composer within folded screen after resume (#13310)


1 files changed, 5 insertions(+), 3 deletions(-)

apps/mobile/src/features/threads/ThreadDetailScreen.tsx+5-3
...@@ -679,10 +679,12 @@ export const ThreadDetailScreen = memo(function ThreadDetailScreen(props: Thread...@@ -679,10 +679,12 @@ export const ThreadDetailScreen = memo(function ThreadDetailScreen(props: Thread
679 const isSplitLayout = layoutVariant === "split";679 const isSplitLayout = layoutVariant === "split";
680 const contentMaxWidth = isSplitLayout ? CHAT_CONTENT_MAX_WIDTH : undefined;680 const contentMaxWidth = isSplitLayout ? CHAT_CONTENT_MAX_WIDTH : undefined;
681 const workspaceContentWidth = useWorkspaceContentWidth();681 const workspaceContentWidth = useWorkspaceContentWidth();
682 // Clearing animated width can retain the unfolded width after Android resumes folded.
683 // Assign both layouts explicitly so the dock always follows its current parent.
682 const composerWidthStyle = useAnimatedStyle(() =>684 const composerWidthStyle = useAnimatedStyle(() =>
683 isSplitLayout && workspaceContentWidth !== null685 isSplitLayout && workspaceContentWidth !== null
684 ? { width: workspaceContentWidth.value, right: undefined }686 ? { width: workspaceContentWidth.value }
685 : { width: undefined, right: 0 },687 : { width: "100%" },
686 );688 );
687 const selectedInstanceId = props.selectedThread.modelSelection.instanceId;689 const selectedInstanceId = props.selectedThread.modelSelection.instanceId;
688 useStreamingHaptics(props.selectedThread.id, props.selectedThreadFeed);690 useStreamingHaptics(props.selectedThread.id, props.selectedThreadFeed);
...@@ -964,7 +966,7 @@ export const ThreadDetailScreen = memo(function ThreadDetailScreen(props: Thread...@@ -964,7 +966,7 @@ export const ThreadDetailScreen = memo(function ThreadDetailScreen(props: Thread
964 <Animated.View966 <Animated.View
965 layout={COMPOSER_LAYOUT_TRANSITION}967 layout={COMPOSER_LAYOUT_TRANSITION}
966 pointerEvents="box-none"968 pointerEvents="box-none"
967 style={[{ position: "absolute", bottom: 0, left: 0, right: 0 }, composerWidthStyle]}969 style={[{ position: "absolute", bottom: 0, left: 0 }, composerWidthStyle]}
968 >970 >
969 {/* No paddingTop here: the overlay's measured height becomes the971 {/* No paddingTop here: the overlay's measured height becomes the
970 list's bottom inset, so any padding above the pill/composer972 list's bottom inset, so any padding above the pill/composer