import React from 'react'; import { View, Text, TouchableOpacity, ScrollView, Dimensions } from 'react-native'; import { MaterialIcons } from '@expo/vector-icons'; import { BlurView } from 'expo-blur'; import Animated, { FadeIn, FadeOut, useAnimatedStyle, useSharedValue, withTiming, } from 'react-native-reanimated'; import { LinearGradient } from 'expo-linear-gradient'; import { styles } from '../utils/playerStyles'; import { getTrackDisplayName } from '../utils/playerUtils'; interface AudioTrackModalProps { showAudioModal: boolean; setShowAudioModal: (show: boolean) => void; vlcAudioTracks: Array<{id: number, name: string, language?: string}>; selectedAudioTrack: number | null; selectAudioTrack: (trackId: number) => void; } const { width, height } = Dimensions.get('window'); const MODAL_WIDTH = Math.min(width - 32, 520); const MODAL_MAX_HEIGHT = height * 0.85; const AudioBadge = ({ text, color, bgColor, icon }: { text: string; color: string; bgColor: string; icon?: string; }) => ( {icon && ( )} {text} ); export const AudioTrackModal: React.FC = ({ showAudioModal, setShowAudioModal, vlcAudioTracks, selectedAudioTrack, selectAudioTrack, }) => { const modalOpacity = useSharedValue(0); React.useEffect(() => { if (showAudioModal) { modalOpacity.value = withTiming(1, { duration: 200 }); } }, [showAudioModal]); const modalStyle = useAnimatedStyle(() => ({ opacity: modalOpacity.value, })); const handleClose = () => { modalOpacity.value = withTiming(0, { duration: 150 }); setTimeout(() => setShowAudioModal(false), 150); }; if (!showAudioModal) return null; return ( Audio Tracks Choose from {vlcAudioTracks.length} available track{vlcAudioTracks.length !== 1 ? 's' : ''} {vlcAudioTracks.length > 0 ? vlcAudioTracks.map((track) => ( { selectAudioTrack(track.id); handleClose(); }} activeOpacity={0.85} > {getTrackDisplayName(track)} {selectedAudioTrack === track.id && ( ACTIVE )} {track.language && ( )} )) : ( No audio tracks found No audio tracks are available for this content.{'\n'}Try a different source or check your connection. )} ); }; export default AudioTrackModal;