import { Ionicons } from "@expo/vector-icons"; import { useMemo } from "react"; import { useTranslation } from "react-i18next"; import { Platform, View, type ViewProps } from "react-native"; import { Switch } from "react-native-gesture-handler"; import { AudioTranscodeMode, useSettings } from "@/utils/atoms/settings"; import { Text } from "../common/Text"; import { ListGroup } from "../list/ListGroup"; import { ListItem } from "../list/ListItem"; import { PlatformDropdown } from "../PlatformDropdown"; import { useMedia } from "./MediaContext"; interface Props extends ViewProps {} export const AudioToggles: React.FC = ({ ...props }) => { const isTv = Platform.isTV; const media = useMedia(); const { pluginSettings } = useSettings(); const { settings, updateSettings } = media; const cultures = media.cultures; const { t } = useTranslation(); const optionGroups = useMemo(() => { const options = [ { type: "radio" as const, label: t("home.settings.audio.none"), value: "none", selected: !settings?.defaultAudioLanguage, onPress: () => updateSettings({ defaultAudioLanguage: null }), }, ...(cultures?.map((culture) => ({ type: "radio" as const, label: culture.DisplayName || culture.ThreeLetterISOLanguageName || "Unknown", value: culture.ThreeLetterISOLanguageName || culture.DisplayName || "unknown", selected: culture.ThreeLetterISOLanguageName === settings?.defaultAudioLanguage?.ThreeLetterISOLanguageName, onPress: () => updateSettings({ defaultAudioLanguage: culture }), })) || []), ]; return [ { options, }, ]; }, [cultures, settings?.defaultAudioLanguage, t, updateSettings]); const audioTranscodeModeLabels: Record = { [AudioTranscodeMode.Auto]: t("home.settings.audio.transcode_mode.auto"), [AudioTranscodeMode.ForceStereo]: t( "home.settings.audio.transcode_mode.stereo", ), [AudioTranscodeMode.Allow51]: t("home.settings.audio.transcode_mode.5_1"), [AudioTranscodeMode.AllowAll]: t( "home.settings.audio.transcode_mode.passthrough", ), }; const audioTranscodeModeOptions = useMemo( () => [ { options: [ { type: "radio" as const, label: t("home.settings.audio.transcode_mode.auto"), value: AudioTranscodeMode.Auto, selected: settings?.audioTranscodeMode === AudioTranscodeMode.Auto || !settings?.audioTranscodeMode, onPress: () => updateSettings({ audioTranscodeMode: AudioTranscodeMode.Auto }), }, { type: "radio" as const, label: t("home.settings.audio.transcode_mode.stereo"), value: AudioTranscodeMode.ForceStereo, selected: settings?.audioTranscodeMode === AudioTranscodeMode.ForceStereo, onPress: () => updateSettings({ audioTranscodeMode: AudioTranscodeMode.ForceStereo, }), }, { type: "radio" as const, label: t("home.settings.audio.transcode_mode.5_1"), value: AudioTranscodeMode.Allow51, selected: settings?.audioTranscodeMode === AudioTranscodeMode.Allow51, onPress: () => updateSettings({ audioTranscodeMode: AudioTranscodeMode.Allow51, }), }, { type: "radio" as const, label: t("home.settings.audio.transcode_mode.passthrough"), value: AudioTranscodeMode.AllowAll, selected: settings?.audioTranscodeMode === AudioTranscodeMode.AllowAll, onPress: () => updateSettings({ audioTranscodeMode: AudioTranscodeMode.AllowAll, }), }, ], }, ], [settings?.audioTranscodeMode, t, updateSettings], ); if (isTv) return null; if (!settings) return null; return ( {t("home.settings.audio.audio_hint")} } > updateSettings({ rememberAudioSelections: value }) } /> {settings?.defaultAudioLanguage?.DisplayName || t("home.settings.audio.none")} } title={t("home.settings.audio.language")} /> { audioTranscodeModeLabels[ settings?.audioTranscodeMode || AudioTranscodeMode.Auto ] } } title={t("home.settings.audio.transcode_mode.title")} /> ); };