diff --git a/src/components/player/AndroidVideoPlayer.tsx b/src/components/player/AndroidVideoPlayer.tsx index 485ac44..2495275 100644 --- a/src/components/player/AndroidVideoPlayer.tsx +++ b/src/components/player/AndroidVideoPlayer.tsx @@ -401,7 +401,7 @@ const AndroidVideoPlayer: React.FC = () => { const [currentSubtitle, setCurrentSubtitle] = useState(''); const [customSubtitleVersion, setCustomSubtitleVersion] = useState(0); const [subtitleSize, setSubtitleSize] = useState(DEFAULT_SUBTITLE_SIZE); - const [subtitleBackground, setSubtitleBackground] = useState(true); + const [subtitleBackground, setSubtitleBackground] = useState(false); // iOS seeking helpers const iosWasPausedDuringSeekRef = useRef(null); const wasPlayingBeforeDragRef = useRef(false); @@ -409,11 +409,11 @@ const AndroidVideoPlayer: React.FC = () => { const [subtitleTextColor, setSubtitleTextColor] = useState('#FFFFFF'); const [subtitleBgOpacity, setSubtitleBgOpacity] = useState(0.7); const [subtitleTextShadow, setSubtitleTextShadow] = useState(true); - const [subtitleOutline, setSubtitleOutline] = useState(false); + const [subtitleOutline, setSubtitleOutline] = useState(true); const [subtitleOutlineColor, setSubtitleOutlineColor] = useState('#000000'); - const [subtitleOutlineWidth, setSubtitleOutlineWidth] = useState(2); + const [subtitleOutlineWidth, setSubtitleOutlineWidth] = useState(4); const [subtitleAlign, setSubtitleAlign] = useState<'center' | 'left' | 'right'>('center'); - const [subtitleBottomOffset, setSubtitleBottomOffset] = useState(20); + const [subtitleBottomOffset, setSubtitleBottomOffset] = useState(10); const [subtitleLetterSpacing, setSubtitleLetterSpacing] = useState(0); const [subtitleLineHeightMultiplier, setSubtitleLineHeightMultiplier] = useState(1.2); const [subtitleOffsetSec, setSubtitleOffsetSec] = useState(0); @@ -2309,9 +2309,14 @@ const AndroidVideoPlayer: React.FC = () => { } catch {} } try { await AsyncStorage.removeItem(SUBTITLE_SIZE_KEY); } catch {} + return; } + // If no saved settings, use default + setSubtitleSize(DEFAULT_SUBTITLE_SIZE); } catch (error) { logger.error('[AndroidVideoPlayer] Error loading subtitle size:', error); + // Fallback to default on error + setSubtitleSize(DEFAULT_SUBTITLE_SIZE); } }; @@ -2950,7 +2955,7 @@ const AndroidVideoPlayer: React.FC = () => { ]); const increaseSubtitleSize = () => { - const newSize = Math.min(subtitleSize + 2, 32); + const newSize = Math.min(subtitleSize + 2, 80); saveSubtitleSize(newSize); }; diff --git a/src/components/player/KSPlayerCore.tsx b/src/components/player/KSPlayerCore.tsx index 0d63312..760f144 100644 --- a/src/components/player/KSPlayerCore.tsx +++ b/src/components/player/KSPlayerCore.tsx @@ -159,16 +159,16 @@ const KSPlayerCore: React.FC = () => { const [customSubtitles, setCustomSubtitles] = useState([]); const [currentSubtitle, setCurrentSubtitle] = useState(''); const [subtitleSize, setSubtitleSize] = useState(DEFAULT_SUBTITLE_SIZE); - const [subtitleBackground, setSubtitleBackground] = useState(true); + const [subtitleBackground, setSubtitleBackground] = useState(false); // External subtitle customization const [subtitleTextColor, setSubtitleTextColor] = useState('#FFFFFF'); const [subtitleBgOpacity, setSubtitleBgOpacity] = useState(0.7); const [subtitleTextShadow, setSubtitleTextShadow] = useState(true); - const [subtitleOutline, setSubtitleOutline] = useState(false); + const [subtitleOutline, setSubtitleOutline] = useState(true); const [subtitleOutlineColor, setSubtitleOutlineColor] = useState('#000000'); - const [subtitleOutlineWidth, setSubtitleOutlineWidth] = useState(2); + const [subtitleOutlineWidth, setSubtitleOutlineWidth] = useState(4); const [subtitleAlign, setSubtitleAlign] = useState<'center' | 'left' | 'right'>('center'); - const [subtitleBottomOffset, setSubtitleBottomOffset] = useState(20); + const [subtitleBottomOffset, setSubtitleBottomOffset] = useState(10); const [subtitleLetterSpacing, setSubtitleLetterSpacing] = useState(0); const [subtitleLineHeightMultiplier, setSubtitleLineHeightMultiplier] = useState(1.2); const [subtitleOffsetSec, setSubtitleOffsetSec] = useState(0); @@ -1694,9 +1694,14 @@ const KSPlayerCore: React.FC = () => { } catch {} } try { await AsyncStorage.removeItem(SUBTITLE_SIZE_KEY); } catch {} + return; } + // If no saved settings, use default + setSubtitleSize(DEFAULT_SUBTITLE_SIZE); } catch (error) { logger.error('[VideoPlayer] Error loading subtitle size:', error); + // Fallback to default on error + setSubtitleSize(DEFAULT_SUBTITLE_SIZE); } }; @@ -2260,7 +2265,7 @@ const KSPlayerCore: React.FC = () => { }, [selectedAudioTrack, ksAudioTracks]); const increaseSubtitleSize = () => { - const newSize = Math.min(subtitleSize + 2, 32); + const newSize = Math.min(subtitleSize + 2, 80); saveSubtitleSize(newSize); }; diff --git a/src/components/player/modals/SubtitleModals.tsx b/src/components/player/modals/SubtitleModals.tsx index 8019096..d3269b8 100644 --- a/src/components/player/modals/SubtitleModals.tsx +++ b/src/components/player/modals/SubtitleModals.tsx @@ -599,11 +599,11 @@ export const SubtitleModals: React.FC = ({ setSubtitleTextColor('#FFFFFF'); setSubtitleBgOpacity(0.7); setSubtitleTextShadow(true); - setSubtitleOutline(false); + setSubtitleOutline(true); setSubtitleOutlineColor('#000000'); - setSubtitleOutlineWidth(2); + setSubtitleOutlineWidth(4); setSubtitleAlign('center'); - setSubtitleBottomOffset(20); + setSubtitleBottomOffset(10); setSubtitleLetterSpacing(0); setSubtitleLineHeightMultiplier(1.2); }} @@ -616,7 +616,7 @@ export const SubtitleModals: React.FC = ({ setSubtitleTextColor('#FFD700'); setSubtitleOutline(true); setSubtitleOutlineColor('#000000'); - setSubtitleOutlineWidth(2); + setSubtitleOutlineWidth(4); setSubtitleBgOpacity(0.3); setSubtitleTextShadow(false); }} @@ -643,7 +643,7 @@ export const SubtitleModals: React.FC = ({ setSubtitleTextColor('#FFFFFF'); setSubtitleBgOpacity(0.6); setSubtitleTextShadow(true); - setSubtitleOutline(false); + setSubtitleOutline(true); setSubtitleAlign('center'); setSubtitleLineHeightMultiplier(1.3); }} @@ -765,39 +765,12 @@ export const SubtitleModals: React.FC = ({ - {/* Shadow & Outline */} - - {/* Shadow */} - - Text Shadow - setSubtitleTextShadow(!subtitleTextShadow)} style={{ paddingHorizontal: 10, paddingVertical: 8, borderRadius: 10, backgroundColor: subtitleTextShadow ? 'rgba(255,255,255,0.18)' : 'rgba(255,255,255,0.08)', borderWidth: 1, borderColor: 'rgba(255,255,255,0.15)', alignItems: 'center' }}> - {subtitleTextShadow ? 'On' : 'Off'} - - - {/* Outline */} - - Outline - { - const next = !subtitleOutline; - setSubtitleOutline(next); - if (next) { - // Apply sensible defaults when enabling outline unless user already set larger values - if (subtitleSize < 24) { - // increase by calling increase handler enough times or provide a direct setter via size controls - // We only have +/- handlers here, so set via stepping until >= 24 - const steps = Math.ceil((24 - subtitleSize) / 1); // size is integer steps - for (let i = 0; i < steps; i++) { - increaseSubtitleSize(); - } - } - if (subtitleBottomOffset < 40) { - setSubtitleBottomOffset(40); - } - } - }} style={{ paddingHorizontal: 10, paddingVertical: 8, borderRadius: 10, backgroundColor: subtitleOutline ? 'rgba(255,255,255,0.18)' : 'rgba(255,255,255,0.08)', borderWidth: 1, borderColor: 'rgba(255,255,255,0.15)', alignItems: 'center' }}> - {subtitleOutline ? 'On' : 'Off'} - - + {/* Shadow */} + + Text Shadow + setSubtitleTextShadow(!subtitleTextShadow)} style={{ paddingHorizontal: 10, paddingVertical: 8, borderRadius: 10, backgroundColor: subtitleTextShadow ? 'rgba(255,255,255,0.18)' : 'rgba(255,255,255,0.08)', borderWidth: 1, borderColor: 'rgba(255,255,255,0.15)', alignItems: 'center' }}> + {subtitleTextShadow ? 'On' : 'Off'} + {/* Outline color & width */} @@ -881,11 +854,11 @@ export const SubtitleModals: React.FC = ({ setSubtitleTextColor('#FFFFFF'); setSubtitleBgOpacity(0.7); setSubtitleTextShadow(true); - setSubtitleOutline(false); + setSubtitleOutline(true); setSubtitleOutlineColor('#000000'); - setSubtitleOutlineWidth(2); + setSubtitleOutlineWidth(4); setSubtitleAlign('center'); - setSubtitleBottomOffset(20); + setSubtitleBottomOffset(10); setSubtitleLetterSpacing(0); setSubtitleLineHeightMultiplier(1.2); setSubtitleOffsetSec(0); diff --git a/src/components/player/utils/playerTypes.ts b/src/components/player/utils/playerTypes.ts index 3f2c5d8..a65f854 100644 --- a/src/components/player/utils/playerTypes.ts +++ b/src/components/player/utils/playerTypes.ts @@ -7,7 +7,7 @@ export const RESUME_PREF = { }; export const SUBTITLE_SIZE_KEY = '@subtitle_size_preference'; -export const DEFAULT_SUBTITLE_SIZE = 16; +export const DEFAULT_SUBTITLE_SIZE = 50; // Define the TrackPreferenceType for audio/text tracks export type TrackPreferenceType = 'system' | 'disabled' | 'title' | 'language' | 'index';