From 169192e4bf0a8493fcb54ef09399380a5ac69b7e Mon Sep 17 00:00:00 2001 From: Pixel Perfect Date: Sun, 11 Oct 2026 23:46:56 -0700 Subject: [PATCH 1/5] fix(mobile): round shared Android sheets and Chat settings --- .../src/components/ui/Sheet.android.tsx | 5 +- .../settings/SettingsFollowUpRouteScreen.tsx | 69 +++++++++---------- 2 files changed, 36 insertions(+), 38 deletions(-) diff --git a/apps/mobile/src/components/ui/Sheet.android.tsx b/apps/mobile/src/components/ui/Sheet.android.tsx index 08f8b8ad9a4a..5aa9e77a4f6c 100644 --- a/apps/mobile/src/components/ui/Sheet.android.tsx +++ b/apps/mobile/src/components/ui/Sheet.android.tsx @@ -3,6 +3,7 @@ import { View } from "react-native"; import { FormSheet } from "react-native-screens"; import { useResolveClassNames } from "uniwind"; import { AndroidSheetHeader } from "./AndroidScreenHeader"; +import { ScreenContent } from "./ScreenContent"; import type { SheetProps } from "./Sheet.types"; export type { SheetProps } from "./Sheet.types"; @@ -20,8 +21,8 @@ export function Sheet(props: SheetProps) { > {/* Android FormSheet does not bound flex children. Material drags target the first scroll view, so place content before the header. */} - {props.children} - setIsOpen(false)} /> + {props.children} + setIsOpen(false)} hideBottomBorder /> ); diff --git a/apps/mobile/src/features/settings/SettingsFollowUpRouteScreen.tsx b/apps/mobile/src/features/settings/SettingsFollowUpRouteScreen.tsx index a86ec0c6d354..f7e1680159c0 100644 --- a/apps/mobile/src/features/settings/SettingsFollowUpRouteScreen.tsx +++ b/apps/mobile/src/features/settings/SettingsFollowUpRouteScreen.tsx @@ -1,17 +1,15 @@ import { ScreenScrollView as ScrollView } from "../../components/ui/ScreenScrollView"; import { useAtomSet, useAtomValue } from "@effect/atom-react"; -import { useNavigation } from "@react-navigation/native"; import { AsyncResult } from "effect/reactivity"; import { Platform, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; -import { AndroidScreenHeader } from "../../components/ui/AndroidScreenHeader"; import { AppText as Text } from "../../components/ui/AppText"; -import { NativeStackScreenOptions } from "../../native/StackHeader"; import { DEFAULT_FOLLOW_UP_BEHAVIOR, type FollowUpBehavior } from "../../lib/followUpBehavior"; import { mobilePreferencesAtom, updateMobilePreferencesAtom } from "../../state/preferences"; import { SettingsChoiceRow } from "./components/SettingsChoiceRow"; import { SettingsSection } from "./components/SettingsSection"; +import { SettingsScreen } from "./components/SettingsScreen"; const FOLLOW_UP_OPTIONS: ReadonlyArray<{ readonly behavior: FollowUpBehavior; @@ -31,7 +29,6 @@ const FOLLOW_UP_OPTIONS: ReadonlyArray<{ ]; export function SettingsFollowUpRouteScreen() { - const navigation = useNavigation(); const insets = useSafeAreaInsets(); const preferencesResult = useAtomValue(mobilePreferencesAtom); const savePreferences = useAtomSet(updateMobilePreferencesAtom); @@ -40,39 +37,39 @@ export function SettingsFollowUpRouteScreen() { ? (preferencesResult.value.followUpBehavior ?? DEFAULT_FOLLOW_UP_BEHAVIOR) : null; - return ( + const content = ( + + + {FOLLOW_UP_OPTIONS.map((option, index) => ( + 0} + disabled={!preferencesReady} + onPress={() => savePreferences({ followUpBehavior: option.behavior })} + /> + ))} + + + Long-press the send button to use the other option for a single message. With a hardware + keyboard, hold Command while sending. + + + ); + + return Platform.OS === "android" ? ( + {content} + ) : ( - {Platform.OS === "android" ? ( - <> - - navigation.goBack()} /> - - ) : null} - - - {FOLLOW_UP_OPTIONS.map((option, index) => ( - 0} - disabled={!preferencesReady} - onPress={() => savePreferences({ followUpBehavior: option.behavior })} - /> - ))} - - - Long-press the send button to use the other option for a single message. With a hardware - keyboard, hold Command while sending. - - + {content} ); } From 72f5b12fb0e02a09455783073afae63d517b98d4 Mon Sep 17 00:00:00 2001 From: Pixel Perfect Date: Mon, 26 Oct 2026 23:13:04 -0700 Subject: [PATCH 2/5] fix(mobile): align Android sheet handle and header surfaces --- apps/mobile/src/components/ui/Sheet.android.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/mobile/src/components/ui/Sheet.android.tsx b/apps/mobile/src/components/ui/Sheet.android.tsx index 5aa9e77a4f6c..487b1cb86894 100644 --- a/apps/mobile/src/components/ui/Sheet.android.tsx +++ b/apps/mobile/src/components/ui/Sheet.android.tsx @@ -8,7 +8,7 @@ import type { SheetProps } from "./Sheet.types"; export type { SheetProps } from "./Sheet.types"; export function Sheet(props: SheetProps) { - const containerStyle = useResolveClassNames("bg-sheet"); + const containerStyle = useResolveClassNames("bg-header"); const [isOpen, setIsOpen] = useState(true); return ( {/* Android FormSheet does not bound flex children. Material drags target the first scroll view, so place content before the header. */} - + {props.children} - setIsOpen(false)} hideBottomBorder /> + setIsOpen(false)} + hideBottomBorder + compact + /> ); From 73d22c6ce3a33afdc667582d33a4410b24521acc Mon Sep 17 00:00:00 2001 From: Pixel Perfect Date: Mon, 26 Oct 2026 23:25:54 -0700 Subject: [PATCH 3/5] fix(mobile): keep the Android sheet grip within its header --- apps/mobile/src/components/ui/Sheet.android.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/mobile/src/components/ui/Sheet.android.tsx b/apps/mobile/src/components/ui/Sheet.android.tsx index 487b1cb86894..784e7e372966 100644 --- a/apps/mobile/src/components/ui/Sheet.android.tsx +++ b/apps/mobile/src/components/ui/Sheet.android.tsx @@ -14,7 +14,7 @@ export function Sheet(props: SheetProps) { + ); From 6f251cbcf7d201f65e676ad13f4e019d8c62dbfd Mon Sep 17 00:00:00 2001 From: Pixel Perfect Date: Mon, 26 Oct 2026 23:33:20 -0700 Subject: [PATCH 4/5] fix(mobile): give the sheet grip and title a little room --- apps/mobile/src/components/ui/Sheet.android.tsx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/mobile/src/components/ui/Sheet.android.tsx b/apps/mobile/src/components/ui/Sheet.android.tsx index 784e7e372966..3013f4df847d 100644 --- a/apps/mobile/src/components/ui/Sheet.android.tsx +++ b/apps/mobile/src/components/ui/Sheet.android.tsx @@ -22,12 +22,14 @@ export function Sheet(props: SheetProps) { {/* Android FormSheet does not bound flex children. Material drags target the first scroll view, so place content before the header. */} {props.children} - setIsOpen(false)} - hideBottomBorder - compact - /> + + setIsOpen(false)} + hideBottomBorder + compact + /> + Date: Mon, 26 Oct 2026 23:37:13 -0700 Subject: [PATCH 5/5] fix(mobile): align sheet content with standard header geometry --- apps/mobile/src/components/ui/Sheet.android.tsx | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/apps/mobile/src/components/ui/Sheet.android.tsx b/apps/mobile/src/components/ui/Sheet.android.tsx index 3013f4df847d..ac222485cf05 100644 --- a/apps/mobile/src/components/ui/Sheet.android.tsx +++ b/apps/mobile/src/components/ui/Sheet.android.tsx @@ -22,14 +22,7 @@ export function Sheet(props: SheetProps) { {/* Android FormSheet does not bound flex children. Material drags target the first scroll view, so place content before the header. */} {props.children} - - setIsOpen(false)} - hideBottomBorder - compact - /> - + setIsOpen(false)} hideBottomBorder />