import React, { useState, useRef } from 'react'; import { View, TextInput, StyleSheet, Animated } from 'react-native'; import { useTVEventHandler } from 'react-native'; import { ThemedText } from '@/components/ThemedText'; import { SettingsSection } from './SettingsSection'; import { useSettingsStore } from '@/stores/settingsStore'; import { useButtonAnimation } from '@/hooks/useAnimation'; interface LiveStreamSectionProps { onChanged: () => void; onFocus?: () => void; onBlur?: () => void; } export const LiveStreamSection: React.FC = ({ onChanged, onFocus, onBlur }) => { const { m3uUrl, setM3uUrl } = useSettingsStore(); const [isInputFocused, setIsInputFocused] = useState(false); const [isSectionFocused, setIsSectionFocused] = useState(false); const inputRef = useRef(null); const inputAnimationStyle = useButtonAnimation(isSectionFocused, 1.01); const handleUrlChange = (url: string) => { setM3uUrl(url); onChanged(); }; const handleSectionFocus = () => { setIsSectionFocused(true); onFocus?.(); }; const handleSectionBlur = () => { setIsSectionFocused(false); onBlur?.(); }; const handleTVEvent = React.useCallback( (event: any) => { if (isSectionFocused && event.eventType === "select") { inputRef.current?.focus(); } }, [isSectionFocused] ); useTVEventHandler(handleTVEvent); return ( 直播源地址 setIsInputFocused(true)} onBlur={() => setIsInputFocused(false)} /> ); }; const styles = StyleSheet.create({ sectionTitle: { fontSize: 16, fontWeight: 'bold', marginBottom: 8, }, inputContainer: { marginBottom: 12, }, input: { height: 50, borderWidth: 2, borderRadius: 8, paddingHorizontal: 15, fontSize: 16, backgroundColor: '#3a3a3c', color: 'white', borderColor: 'transparent', }, inputFocused: { borderColor: '#007AFF', shadowColor: '#007AFF', shadowOffset: { width: 0, height: 0 }, shadowOpacity: 0.8, shadowRadius: 10, elevation: 5, }, });