From fca3c463725b8de5fc309d58c2cca0c207b5c1d1 Mon Sep 17 00:00:00 2001 From: tapframe Date: Sun, 28 Sep 2025 12:33:58 +0530 Subject: [PATCH] perf opt for homesreen --- src/components/player/AndroidVideoPlayer.tsx | 72 +++++++++++++++++--- src/screens/HomeScreen.tsx | 4 +- 2 files changed, 65 insertions(+), 11 deletions(-) diff --git a/src/components/player/AndroidVideoPlayer.tsx b/src/components/player/AndroidVideoPlayer.tsx index 8be1d953..02184106 100644 --- a/src/components/player/AndroidVideoPlayer.tsx +++ b/src/components/player/AndroidVideoPlayer.tsx @@ -1834,8 +1834,10 @@ const AndroidVideoPlayer: React.FC = () => { } }; - // Keep screen awake during active playback (Android) + // Enhanced screen lock prevention - keep screen awake as soon as player mounts const keepAwakeModuleRef = useRef(null); + const keepAwakeActiveRef = useRef(false); + useEffect(() => { try { // Use require to avoid TS dynamic import constraints @@ -1848,23 +1850,75 @@ const AndroidVideoPlayer: React.FC = () => { } }, []); - // Toggle keep-awake based on playback state + // Activate keep-awake immediately when player mounts and keep it active useEffect(() => { const mod = keepAwakeModuleRef.current; if (!mod) return; + const activate = mod.activateKeepAwakeAsync || mod.activateKeepAwake; const deactivate = mod.deactivateKeepAwakeAsync || mod.deactivateKeepAwake; + + // Activate immediately when component mounts try { - if (!paused && isPlayerReady && duration > 0) { - activate && activate(); - } else { - deactivate && deactivate(); + if (activate && !keepAwakeActiveRef.current) { + activate(); + keepAwakeActiveRef.current = true; + logger.log('[AndroidVideoPlayer] Screen lock prevention activated on mount'); } - } catch (_e) {} + } catch (error) { + logger.warn('[AndroidVideoPlayer] Failed to activate keep-awake:', error); + } + + // Keep it active throughout the entire player session + const keepAliveInterval = setInterval(() => { + try { + if (activate && !keepAwakeActiveRef.current) { + activate(); + keepAwakeActiveRef.current = true; + } + } catch (error) { + logger.warn('[AndroidVideoPlayer] Failed to maintain keep-awake:', error); + } + }, 5000); // Re-activate every 5 seconds to ensure it stays active + return () => { - try { deactivate && deactivate(); } catch (_e) {} + clearInterval(keepAliveInterval); + try { + if (deactivate && keepAwakeActiveRef.current) { + deactivate(); + keepAwakeActiveRef.current = false; + logger.log('[AndroidVideoPlayer] Screen lock prevention deactivated on unmount'); + } + } catch (error) { + logger.warn('[AndroidVideoPlayer] Failed to deactivate keep-awake:', error); + } }; - }, [paused, isPlayerReady, duration]); + }, []); // Empty dependency array - only run on mount/unmount + + // Additional keep-awake activation on app state changes + useEffect(() => { + const mod = keepAwakeModuleRef.current; + if (!mod) return; + + const activate = mod.activateKeepAwakeAsync || mod.activateKeepAwake; + + const handleAppStateChange = (nextAppState: string) => { + if (nextAppState === 'active') { + try { + if (activate && !keepAwakeActiveRef.current) { + activate(); + keepAwakeActiveRef.current = true; + logger.log('[AndroidVideoPlayer] Screen lock prevention re-activated on app foreground'); + } + } catch (error) { + logger.warn('[AndroidVideoPlayer] Failed to re-activate keep-awake on app foreground:', error); + } + } + }; + + const subscription = AppState.addEventListener('change', handleAppStateChange); + return () => subscription?.remove(); + }, []); const handleErrorExit = () => { try { diff --git a/src/screens/HomeScreen.tsx b/src/screens/HomeScreen.tsx index d6b305f8..293aed72 100644 --- a/src/screens/HomeScreen.tsx +++ b/src/screens/HomeScreen.tsx @@ -503,7 +503,7 @@ const HomeScreen = () => { await new Promise(resolve => setTimeout(resolve, 100)); } - navigation.navigate('Player', { + navigation.navigate(Platform.OS === 'ios' ? 'PlayerIOS' : 'PlayerAndroid', { uri: stream.url, title: featuredContent.name, year: featuredContent.year, @@ -516,7 +516,7 @@ const HomeScreen = () => { logger.error('[HomeScreen] Error in handlePlayStream:', error); // Fallback: navigate anyway - navigation.navigate('Player', { + navigation.navigate(Platform.OS === 'ios' ? 'PlayerIOS' : 'PlayerAndroid', { uri: stream.url, title: featuredContent.name, year: featuredContent.year,