import { ScreenOrientationEnum, useSettings } from "@/utils/atoms/settings"; import { BACKGROUND_FETCH_TASK, registerBackgroundFetchAsync, unregisterBackgroundFetchAsync, } from "@/utils/background-tasks"; import { Ionicons } from "@expo/vector-icons"; import * as BackgroundFetch from "expo-background-fetch"; import { useRouter } from "expo-router"; import * as ScreenOrientation from "expo-screen-orientation"; import * as TaskManager from "expo-task-manager"; import React, { useEffect, useMemo } from "react"; import { Linking, Switch, TouchableOpacity } from "react-native"; import { toast } from "sonner-native"; import { Text } from "../common/Text"; import { ListGroup } from "../list/ListGroup"; import { ListItem } from "../list/ListItem"; import { useTranslation } from "react-i18next"; import DisabledSetting from "@/components/settings/DisabledSetting"; import Dropdown from "@/components/common/Dropdown"; export const OtherSettings: React.FC = () => { const router = useRouter(); const [settings, updateSettings, pluginSettings] = useSettings(); const { t } = useTranslation(); /******************** * Background task *******************/ const checkStatusAsync = async () => { await BackgroundFetch.getStatusAsync(); return await TaskManager.isTaskRegisteredAsync(BACKGROUND_FETCH_TASK); }; useEffect(() => { (async () => { const registered = await checkStatusAsync(); if (settings?.autoDownload === true && !registered) { registerBackgroundFetchAsync(); toast.success("Background downloads enabled"); } else if (settings?.autoDownload === false && registered) { unregisterBackgroundFetchAsync(); toast.info("Background downloads disabled"); } else if (settings?.autoDownload === true && registered) { // Don't to anything } else if (settings?.autoDownload === false && !registered) { // Don't to anything } else { updateSettings({ autoDownload: false }); } })(); }, [settings?.autoDownload]); /********************** *********************/ const disabled = useMemo( () => pluginSettings?.autoRotate?.locked === true && pluginSettings?.defaultVideoOrientation?.locked === true && pluginSettings?.safeAreaInControlsEnabled?.locked === true && pluginSettings?.showCustomMenuLinks?.locked === true && pluginSettings?.hiddenLibraries?.locked === true && pluginSettings?.disableHapticFeedback?.locked === true, [pluginSettings] ); const orientations = [ ScreenOrientation.OrientationLock.DEFAULT, ScreenOrientation.OrientationLock.PORTRAIT_UP, ScreenOrientation.OrientationLock.LANDSCAPE_LEFT, ScreenOrientation.OrientationLock.LANDSCAPE_RIGHT, ]; if (!settings) return null; return ( updateSettings({ autoRotate: value })} /> ScreenOrientationEnum[item]} title={ {t(ScreenOrientationEnum[settings.defaultVideoOrientation])} } label={t("home.settings.other.orientation")} onSelected={(defaultVideoOrientation) => updateSettings({ defaultVideoOrientation }) } /> updateSettings({ safeAreaInControlsEnabled: value }) } /> Linking.openURL( "https://jellyfin.org/docs/general/clients/web-config/#custom-menu-links" ) } > updateSettings({ showCustomMenuLinks: value }) } /> router.push("/settings/hide-libraries/page")} title={t("home.settings.other.hide_libraries")} showArrow /> updateSettings({ disableHapticFeedback }) } /> ); };