feat: add player lock button

This commit is contained in:
chrisk325 2026-03-22 15:43:55 +05:30 committed by GitHub
parent 56b292f79a
commit fbc32bcd22
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -30,6 +30,7 @@ import { useSettings } from '../../hooks/useSettings';
// Shared Components // Shared Components
import { GestureControls, PauseOverlay, SpeedActivatedOverlay } from './components'; import { GestureControls, PauseOverlay, SpeedActivatedOverlay } from './components';
import { LockOverlay, LockOverlayRef } from './modals/LockOverlay';
import LoadingOverlay from './modals/LoadingOverlay'; import LoadingOverlay from './modals/LoadingOverlay';
import PlayerControls from './controls/PlayerControls'; import PlayerControls from './controls/PlayerControls';
import { AudioTrackModal } from './modals/AudioTrackModal'; import { AudioTrackModal } from './modals/AudioTrackModal';
@ -91,6 +92,8 @@ const AndroidVideoPlayer: React.FC = () => {
const mpvPlayerRef = useRef<MpvPlayerRef>(null); const mpvPlayerRef = useRef<MpvPlayerRef>(null);
const exoPlayerRef = useRef<any>(null); const exoPlayerRef = useRef<any>(null);
const pinchRef = useRef(null); const pinchRef = useRef(null);
const lockOverlayRef = useRef<LockOverlayRef>(null);
const [isLocked, setIsLocked] = useState(false);
const tracksHook = usePlayerTracks(); const tracksHook = usePlayerTracks();
const [currentStreamUrl, setCurrentStreamUrl] = useState<string>(uri); const [currentStreamUrl, setCurrentStreamUrl] = useState<string>(uri);
@ -271,7 +274,6 @@ const AndroidVideoPlayer: React.FC = () => {
const nextEpisodeHook = useNextEpisode(type, season, episode, groupedEpisodes, (metadataResult as any)?.groupedEpisodes, episodeId); const nextEpisodeHook = useNextEpisode(type, season, episode, groupedEpisodes, (metadataResult as any)?.groupedEpisodes, episodeId);
const { segments: skipIntervals, outroSegment } = useSkipSegments({ const { segments: skipIntervals, outroSegment } = useSkipSegments({
imdbId: resolvedImdbId || (id?.startsWith('tt') ? id : undefined), imdbId: resolvedImdbId || (id?.startsWith('tt') ? id : undefined),
type, type,
@ -1047,6 +1049,7 @@ const AndroidVideoPlayer: React.FC = () => {
controlsVisible={playerState.showControls} controlsVisible={playerState.showControls}
controlsExtraOffset={100} controlsExtraOffset={100}
/> />
<View pointerEvents={isLocked ? 'none' : 'box-none'} style={StyleSheet.absoluteFill}>
<GestureControls <GestureControls
screenDimensions={playerState.screenDimensions} screenDimensions={playerState.screenDimensions}
gestureControls={gestureControls} gestureControls={gestureControls}
@ -1070,6 +1073,7 @@ const AndroidVideoPlayer: React.FC = () => {
seekToTime={controlsHook.seekToTime} seekToTime={controlsHook.seekToTime}
formatTime={formatTime} formatTime={formatTime}
/> />
</View>
{/* Buffering Indicator (Visible when controls are hidden) */} {/* Buffering Indicator (Visible when controls are hidden) */}
{playerState.isBuffering && !playerState.showControls && ( {playerState.isBuffering && !playerState.showControls && (
@ -1078,6 +1082,7 @@ const AndroidVideoPlayer: React.FC = () => {
</View> </View>
)} )}
<View pointerEvents={isLocked ? 'none' : 'box-none'} style={StyleSheet.absoluteFill}>
<PlayerControls <PlayerControls
showControls={playerState.showControls} showControls={playerState.showControls}
fadeAnim={fadeAnim} fadeAnim={fadeAnim}
@ -1130,6 +1135,20 @@ const AndroidVideoPlayer: React.FC = () => {
onEnterPictureInPicture={handleEnterPictureInPicture} onEnterPictureInPicture={handleEnterPictureInPicture}
isBuffering={playerState.isBuffering} isBuffering={playerState.isBuffering}
imdbId={resolvedImdbId} imdbId={resolvedImdbId}
onLock={() => lockOverlayRef.current?.lock()}
/>
</View>
<LockOverlay
ref={lockOverlayRef}
onHideControls={() => {
setIsLocked(true);
playerState.setShowControls(false);
}}
onShowControls={() => {
setIsLocked(false);
playerState.setShowControls(true);
}}
/> />
<SpeedActivatedOverlay <SpeedActivatedOverlay