From 83df75915ee63e47017cb348646230162dfaad33 Mon Sep 17 00:00:00 2001 From: tapframe Date: Fri, 24 Oct 2025 21:38:40 +0530 Subject: [PATCH] added hold to boost speed android --- src/components/player/AndroidVideoPlayer.tsx | 114 +++++++++++++------ 1 file changed, 77 insertions(+), 37 deletions(-) diff --git a/src/components/player/AndroidVideoPlayer.tsx b/src/components/player/AndroidVideoPlayer.tsx index a515196..dc9f926 100644 --- a/src/components/player/AndroidVideoPlayer.tsx +++ b/src/components/player/AndroidVideoPlayer.tsx @@ -5,7 +5,7 @@ import Video, { VideoRef, SelectedTrack, SelectedTrackType, BufferingStrategyTyp import FastImage from '@d11/react-native-fast-image'; import { useNavigation, useRoute, RouteProp, useFocusEffect } from '@react-navigation/native'; import { RootStackParamList } from '../../navigation/AppNavigator'; -import { PinchGestureHandler, PanGestureHandler, TapGestureHandler, State, PinchGestureHandlerGestureEvent, PanGestureHandlerGestureEvent, TapGestureHandlerGestureEvent } from 'react-native-gesture-handler'; +import { PinchGestureHandler, PanGestureHandler, TapGestureHandler, LongPressGestureHandler, State, PinchGestureHandlerGestureEvent, PanGestureHandlerGestureEvent, TapGestureHandlerGestureEvent, LongPressGestureHandlerGestureEvent } from 'react-native-gesture-handler'; import RNImmersiveMode from 'react-native-immersive-mode'; import * as ScreenOrientation from 'expo-screen-orientation'; import { storageService } from '../../services/storageService'; @@ -216,6 +216,10 @@ const AndroidVideoPlayer: React.FC = () => { const [rnVideoAudioTracks, setRnVideoAudioTracks] = useState>([]); const [rnVideoTextTracks, setRnVideoTextTracks] = useState>([]); + // Speed boost state for hold-to-speed-up feature + const [isSpeedBoosted, setIsSpeedBoosted] = useState(false); + const [originalSpeed, setOriginalSpeed] = useState(1.0); + // Debounce track updates to prevent excessive processing const trackUpdateTimeoutRef = useRef(null); @@ -805,6 +809,26 @@ const AndroidVideoPlayer: React.FC = () => { } }; + // Long press gesture handlers for speed boost + const onLongPressActivated = useCallback(() => { + if (!isSpeedBoosted && playbackSpeed !== 2.0) { + setOriginalSpeed(playbackSpeed); + setPlaybackSpeed(2.0); + setIsSpeedBoosted(true); + + logger.log('[AndroidVideoPlayer] Speed boost activated: 2x'); + } + }, [isSpeedBoosted, playbackSpeed]); + + const onLongPressEnd = useCallback(() => { + if (isSpeedBoosted) { + setPlaybackSpeed(originalSpeed); + setIsSpeedBoosted(false); + + logger.log('[AndroidVideoPlayer] Speed boost deactivated, restored to:', originalSpeed); + } + }, [isSpeedBoosted, originalSpeed]); + const resetZoom = () => { const targetZoom = is16by9Content ? 1.1 : 1; setZoomScale(targetZoom); @@ -3216,55 +3240,71 @@ const AndroidVideoPlayer: React.FC = () => { } ]} > - {/* Combined gesture handler for left side - brightness + tap */} - - - - - + + + + + - {/* Combined gesture handler for right side - volume + tap */} - - - - - + + + + + {/* Center area tap handler - handles both show and hide */}