import { useFonts } from "expo-font"; import { Stack } from "expo-router"; import * as SplashScreen from "expo-splash-screen"; import { useEffect } from "react"; import "react-native-reanimated"; import { I18nProvider } from "@/lib/i18n"; import { configureNotificationHandler } from "@/lib/notifications"; import { SessionProvider } from "@/lib/session"; import { SettingsProvider } from "@/lib/settings-provider"; import { ThemeProvider } from "@/lib/theme"; // Registers the driver background-location task. Imported for the side effect // alone: Android can restart the app process headlessly to deliver a location // update, and the task must already be defined when the bundle finishes // evaluating — which means at module scope, not inside a component. import "@/lib/location-task"; // Prevent the splash screen from auto-hiding before asset loading is complete. SplashScreen.preventAutoHideAsync(); // A ride offer that arrives while the app is open still needs to be seen — the // driver may be on another screen, and they only have 15 seconds to answer. configureNotificationHandler(); const RootLayout = () => { const [loaded] = useFonts({ "Jakarta-Bold": require("../assets/fonts/PlusJakartaSans-Bold.ttf"), "Jakarta-ExtraBold": require("../assets/fonts/PlusJakartaSans-ExtraBold.ttf"), "Jakarta-ExtraLight": require("../assets/fonts/PlusJakartaSans-ExtraLight.ttf"), "Jakarta-Light": require("../assets/fonts/PlusJakartaSans-Light.ttf"), "Jakarta-Medium": require("../assets/fonts/PlusJakartaSans-Medium.ttf"), "Jakarta-Regular": require("../assets/fonts/PlusJakartaSans-Regular.ttf"), "Jakarta-SemiBold": require("../assets/fonts/PlusJakartaSans-SemiBold.ttf"), }); useEffect(() => { if (loaded) { SplashScreen.hideAsync(); } }, [loaded]); if (!loaded) { return null; } return ( ); }; export default RootLayout;