From 2e3a94cc15e9f0157dc4af14504718aa3fa6ce35 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Mon, 9 Nov 2026 16:39:01 +0000 Subject: [PATCH 1/6] fix(mobile): Android Git overview sheet scrolls its content Material's bottom sheet routes drags to the first nested-scrolling native view, and the AppBar's Compose buttons came before the scroll view, so the list never moved. Render the content first and reverse the column on Android only, as GitCommitSheet already does. Co-Authored-By: Claude Opus 5.5 --- .../mobile/src/features/threads/git/GitOverviewSheet.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx b/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx index 43e541083688f..04351f608e80e 100644 --- a/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx +++ b/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx @@ -344,10 +344,16 @@ function GitOverviewSheetContent(props: GitOverviewSheetProps) { }; return ( + // Material sheet drags follow the first nested-scrolling native view, and the AppBar's + // Compose buttons are some, so Android renders content first and reverses the column. + {content} navigation.goBack()} refresh={refresh} /> - {content} ); } From b4d844eb0dbf667b58fd25d03050ee5160f8f96e Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Mon, 9 Nov 2026 16:45:07 +0000 Subject: [PATCH 2/6] fix(mobile): Android inspector sheet routes drags to the visible pane The Git and Files panes are prewarmed together, so the hidden pane mounted first and the Material sheet sent drags to its header instead of the Git list. Co-Authored-By: Claude Opus 5.5 --- apps/mobile/src/features/layout/inspector-host.android.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/mobile/src/features/layout/inspector-host.android.tsx b/apps/mobile/src/features/layout/inspector-host.android.tsx index 9537811916f07..236e22080204b 100644 --- a/apps/mobile/src/features/layout/inspector-host.android.tsx +++ b/apps/mobile/src/features/layout/inspector-host.android.tsx @@ -53,7 +53,8 @@ export function InspectorPanes(props: { position: "absolute", inset: 0, opacity: visible ? 1 : 0, - zIndex: visible ? 1 : 0, + // A lower zIndex mounts first, and Material sheet drags follow the first scroll view. + zIndex: visible ? 0 : 1, }} > From cff1dd9c93b883d32edd603496a81d9cfcab311f Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Mon, 9 Nov 2026 17:22:07 +0000 Subject: [PATCH 3/6] fix(mobile): Android Git overview list scrolls back up instead of collapsing the sheet Co-Authored-By: Claude Opus 5.5 --- apps/mobile/src/features/threads/git/GitOverviewSheet.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx b/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx index 04351f608e80e..97fa2940e90c1 100644 --- a/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx +++ b/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx @@ -240,8 +240,12 @@ function GitOverviewSheetContent(props: GitOverviewSheetProps) { paddingTop: 8, gap: Platform.OS === "android" ? 8 : 14, }} + // Android wraps a RefreshControl's list in a layout the sheet takes for the list and reads + // as unable to scroll up, so dragging down collapsed the sheet; the AppBar refreshes there. refreshControl={ - void handleRefresh()} /> + Platform.OS === "ios" ? ( + void handleRefresh()} /> + ) : undefined } > From 2b5847ae4ccccad14fde6de0d58e2b8227cd723a Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Mon, 9 Nov 2026 17:55:43 +0000 Subject: [PATCH 4/6] fix(mobile): keep pull-to-refresh in the Android Git inspector column Co-Authored-By: Claude Opus 5.5 --- apps/mobile/src/components/ui/AppBar.types.ts | 2 +- .../src/features/threads/git/GitOverviewSheet.tsx | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/mobile/src/components/ui/AppBar.types.ts b/apps/mobile/src/components/ui/AppBar.types.ts index a77811be81d39..73de142960a2f 100644 --- a/apps/mobile/src/components/ui/AppBar.types.ts +++ b/apps/mobile/src/components/ui/AppBar.types.ts @@ -78,7 +78,7 @@ export interface AppBarProps { readonly titleContent?: ReactNode; readonly subtitle?: string | null; readonly actions?: ReadonlyArray; - /** Pull-to-refresh is the gesture on both platforms; Android also lists this in the overflow menu. */ + /** The screen supplies pull-to-refresh (not Android sheets); Android also lists this in the overflow menu. */ readonly refresh?: Pick; readonly menus?: ReadonlyArray; readonly search?: AppBarSearch; diff --git a/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx b/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx index 97fa2940e90c1..63cc48805fb96 100644 --- a/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx +++ b/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx @@ -227,6 +227,11 @@ function GitOverviewSheetContent(props: GitOverviewSheetProps) { setIsRefreshing(false); }; + // Android wraps a RefreshControl's list in a layout a bottom sheet reads as unable to scroll up, + // so dragging down collapsed the sheet; sheets refresh from the AppBar instead. + const inAndroidSheet = + Platform.OS === "android" && (!isInspector || closeInspectorSheet !== null); + const content = ( void handleRefresh()} /> - ) : undefined + ) } > From 67efe2137da47a378ad33f20ad4d23a864deffa9 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Mon, 9 Nov 2026 18:48:18 +0000 Subject: [PATCH 5/6] fix(mobile): state the Android sheet refresh rule, keep the AppBar refresh doc Co-Authored-By: Claude Opus 5.5 --- apps/mobile/src/components/ui/AppBar.types.ts | 2 +- apps/mobile/src/features/threads/git/GitOverviewSheet.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/mobile/src/components/ui/AppBar.types.ts b/apps/mobile/src/components/ui/AppBar.types.ts index 73de142960a2f..a77811be81d39 100644 --- a/apps/mobile/src/components/ui/AppBar.types.ts +++ b/apps/mobile/src/components/ui/AppBar.types.ts @@ -78,7 +78,7 @@ export interface AppBarProps { readonly titleContent?: ReactNode; readonly subtitle?: string | null; readonly actions?: ReadonlyArray; - /** The screen supplies pull-to-refresh (not Android sheets); Android also lists this in the overflow menu. */ + /** Pull-to-refresh is the gesture on both platforms; Android also lists this in the overflow menu. */ readonly refresh?: Pick; readonly menus?: ReadonlyArray; readonly search?: AppBarSearch; diff --git a/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx b/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx index 63cc48805fb96..ccd00c8d40f37 100644 --- a/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx +++ b/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx @@ -227,8 +227,8 @@ function GitOverviewSheetContent(props: GitOverviewSheetProps) { setIsRefreshing(false); }; - // Android wraps a RefreshControl's list in a layout a bottom sheet reads as unable to scroll up, - // so dragging down collapsed the sheet; sheets refresh from the AppBar instead. + // An Android bottom sheet reads a RefreshControl's list as unable to scroll up and drags itself + // instead, so Android sheets refresh from the AppBar. const inAndroidSheet = Platform.OS === "android" && (!isInspector || closeInspectorSheet !== null); From cf0d8387fdcb737f0e8b9ad49620424ad1b5dcf7 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Tue, 10 Nov 2026 03:38:34 +0000 Subject: [PATCH 6/6] fix(mobile): Git overview refresh comment matches Android sheet behaviour Co-Authored-By: Claude Opus 5.5 --- apps/mobile/src/features/threads/git/GitOverviewSheet.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx b/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx index ccd00c8d40f37..112274dde86b3 100644 --- a/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx +++ b/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx @@ -228,7 +228,7 @@ function GitOverviewSheetContent(props: GitOverviewSheetProps) { }; // An Android bottom sheet reads a RefreshControl's list as unable to scroll up and drags itself - // instead, so Android sheets refresh from the AppBar. + // instead, so Android sheets omit it; status still refreshes in the background. const inAndroidSheet = Platform.OS === "android" && (!isInspector || closeInspectorSheet !== null);