From 984c359bb4b6d6858c8f9048e78a19c2c6e65a83 Mon Sep 17 00:00:00 2001 From: Linus Rath <139418639+rathlinus@users.noreply.github.com> Date: Thu, 15 Oct 2026 02:53:07 +0200 Subject: [PATCH] fix: end the unified inbox and scheduled lists above the gesture bar --- src/screens/ScheduledScreen.tsx | 8 +++++--- src/screens/UnifiedInboxScreen.tsx | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/screens/ScheduledScreen.tsx b/src/screens/ScheduledScreen.tsx index 861bb165..dbb77ae3 100644 --- a/src/screens/ScheduledScreen.tsx +++ b/src/screens/ScheduledScreen.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { View, Text, StyleSheet, FlatList, ActivityIndicator, Pressable, Alert, Modal, Platform, } from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; +import { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context'; import { ArrowLeft, Clock, MoreHorizontal } from 'lucide-react-native'; import DateTimePicker, { type DateTimePickerEvent } from '@react-native-community/datetimepicker'; import type { NativeStackScreenProps } from '@react-navigation/native-stack'; @@ -33,6 +33,7 @@ export default function ScheduledScreen({ navigation }: Props) { const c = useColors(); const styles = React.useMemo(() => makeStyles(c), [c]); const t = useLocaleStore((s) => s.t); + const insets = useSafeAreaInsets(); const locale = useLocaleStore((s) => s.locale); const timeFormat = useSettingsStore((s) => s.timeFormat); const mailboxes = useEmailStore((s) => s.mailboxes); @@ -276,7 +277,7 @@ export default function ScheduledScreen({ navigation }: Props) { ] : []; return ( - + navigation.goBack()} @@ -316,7 +317,8 @@ export default function ScheduledScreen({ navigation }: Props) { keyExtractor={(i) => i.emailSubmissionId} renderItem={renderItem} ItemSeparatorComponent={() => } - contentContainerStyle={styles.listContent} + // A stack screen has no tab bar: the list ends clear of the gesture bar. + contentContainerStyle={[styles.listContent, { paddingBottom: insets.bottom + spacing.sm }]} refreshing={loading} onRefresh={() => { void load(); }} /> diff --git a/src/screens/UnifiedInboxScreen.tsx b/src/screens/UnifiedInboxScreen.tsx index 27c99e4b..2dd4aada 100644 --- a/src/screens/UnifiedInboxScreen.tsx +++ b/src/screens/UnifiedInboxScreen.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { View, Text, StyleSheet, FlatList, ActivityIndicator, Pressable, TextInput, Alert, AppState, } from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; +import { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context'; import { useFocusEffect } from '@react-navigation/native'; import { ArrowLeft, Star, Paperclip, AlertTriangle, Search, X, Square, SquareCheck, @@ -49,6 +49,7 @@ export default function UnifiedInboxScreen({ navigation, route }: Props) { const c = useColors(); const styles = React.useMemo(() => makeStyles(c), [c]); const t = useLocaleStore((s) => s.t); + const insets = useSafeAreaInsets(); const role: UnifiedRole = route.params?.role ?? 'inbox'; const view: CrossView | undefined = route.params?.view; const accounts = useAccountStore((s) => s.accounts); @@ -381,7 +382,7 @@ export default function UnifiedInboxScreen({ navigation, route }: Props) { }; return ( - + {selectionMode ? ( { void loadMore(); }} onEndReachedThreshold={0.3} ListFooterComponent={loadingMore ? : null} - contentContainerStyle={{ paddingBottom: 40 }} + // A stack screen has no tab bar: the list ends clear of the gesture bar. + contentContainerStyle={{ paddingBottom: insets.bottom + 40 }} /> )}