import { CurrentlyPlayingBar } from "@/components/CurrentlyPlayingBar"; import { JellyfinProvider } from "@/providers/JellyfinProvider"; import { JobQueueProvider } from "@/providers/JobQueueProvider"; import { PlaybackProvider } from "@/providers/PlaybackProvider"; import { useSettings } from "@/utils/atoms/settings"; import { ActionSheetProvider } from "@expo/react-native-action-sheet"; import { BottomSheetModalProvider } from "@gorhom/bottom-sheet"; import { DarkTheme, ThemeProvider } from "@react-navigation/native"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { useFonts } from "expo-font"; import { useKeepAwake } from "expo-keep-awake"; import { Stack } from "expo-router"; import * as ScreenOrientation from "expo-screen-orientation"; import * as SplashScreen from "expo-splash-screen"; import { StatusBar } from "expo-status-bar"; import { Provider as JotaiProvider } from "jotai"; import { useEffect, useRef } from "react"; import { GestureHandlerRootView } from "react-native-gesture-handler"; import "react-native-reanimated"; // Prevent the splash screen from auto-hiding before asset loading is complete. SplashScreen.preventAutoHideAsync(); export const unstable_settings = { initialRouteName: "/index", }; export default function RootLayout() { const [loaded] = useFonts({ SpaceMono: require("../assets/fonts/SpaceMono-Regular.ttf"), }); useEffect(() => { if (loaded) { SplashScreen.hideAsync(); } }, [loaded]); if (!loaded) { return null; } return ( ); } function Layout() { const [settings, updateSettings] = useSettings(); useKeepAwake(); const queryClientRef = useRef( new QueryClient({ defaultOptions: { queries: { staleTime: 60 * 1000, refetchOnMount: true, refetchOnReconnect: true, refetchOnWindowFocus: true, retryOnMount: true, }, }, }) ); useEffect(() => { if (settings?.autoRotate === true) ScreenOrientation.lockAsync(ScreenOrientation.OrientationLock.DEFAULT); else ScreenOrientation.lockAsync( ScreenOrientation.OrientationLock.PORTRAIT_UP ); }, [settings]); return ( ); }