import React from 'react'; import { View, Text, TouchableOpacity, ScrollView, Dimensions } from 'react-native'; import { MaterialIcons } from '@expo/vector-icons'; import Animated, { FadeIn, FadeOut, SlideInRight, SlideOutRight, } from 'react-native-reanimated'; import { getTrackDisplayName, DEBUG_MODE } from '../utils/playerUtils'; import { logger } from '../../../utils/logger'; import { SelectedTrack, SelectedTrackType } from 'react-native-video'; interface AudioTrackModalProps { showAudioModal: boolean; setShowAudioModal: (show: boolean) => void; vlcAudioTracks: Array<{id: number, name: string, language?: string}>; selectedAudioTrack: SelectedTrack | null; selectAudioTrack: (trackSelection: SelectedTrack) => void; } const { width } = Dimensions.get('window'); const MENU_WIDTH = Math.min(width * 0.85, 400); export const AudioTrackModal: React.FC = ({ showAudioModal, setShowAudioModal, vlcAudioTracks, selectedAudioTrack, selectAudioTrack, }) => { const handleClose = () => { setShowAudioModal(false); }; // Debug logging when modal opens React.useEffect(() => { if (showAudioModal && DEBUG_MODE) { logger.log(`[AudioTrackModal] Modal opened with selectedAudioTrack:`, selectedAudioTrack); logger.log(`[AudioTrackModal] Available tracks:`, vlcAudioTracks); if (selectedAudioTrack?.type === 'index' && selectedAudioTrack.value !== undefined) { const selectedTrack = vlcAudioTracks.find(track => track.id === selectedAudioTrack.value); if (selectedTrack) { logger.log(`[AudioTrackModal] Selected track found: ${selectedTrack.name} (${selectedTrack.language})`); } else { logger.warn(`[AudioTrackModal] Selected track ${selectedAudioTrack.value} not found in available tracks`); } } else if (selectedAudioTrack?.type === 'system') { logger.log(`[AudioTrackModal] Using system auto-selection`); } } }, [showAudioModal, selectedAudioTrack, vlcAudioTracks]); if (!showAudioModal) return null; return ( <> {/* Backdrop */} {/* Side Menu */} {/* Header */} Audio Tracks {/* Audio Tracks */} Available Tracks ({vlcAudioTracks.length}) {vlcAudioTracks.map((track) => { // Determine if track is selected let isSelected = false; if (selectedAudioTrack?.type === 'index' && selectedAudioTrack.value === track.id) { isSelected = true; } else if (selectedAudioTrack?.type === 'system' && track.id === vlcAudioTracks[0]?.id) { // Show first track as selected when using system selection isSelected = true; } // All tracks are now available for selection return ( { if (DEBUG_MODE) { logger.log(`[AudioTrackModal] Selecting track: ${track.id} (${track.name})`); } selectAudioTrack({ type: SelectedTrackType.INDEX, value: track.id }); // Close modal after selection setTimeout(() => { setShowAudioModal(false); }, 200); }} activeOpacity={0.7} > {getTrackDisplayName(track)} {track.language && ( {track.language.toUpperCase()} )} {isSelected && ( )} ); })} {vlcAudioTracks.length === 0 && ( No audio tracks available )} ); };