From b3ec4e0c01e75561c38332b52c551387254d61e4 Mon Sep 17 00:00:00 2001 From: AdityasahuX07 Date: Tue, 23 Dec 2025 15:17:18 +0530 Subject: [PATCH] Video player Ui changes --- src/components/player/modals/SpeedModal.tsx | 301 +++++++------------- 1 file changed, 96 insertions(+), 205 deletions(-) diff --git a/src/components/player/modals/SpeedModal.tsx b/src/components/player/modals/SpeedModal.tsx index 2bb7bcc6a..4e1580346 100644 --- a/src/components/player/modals/SpeedModal.tsx +++ b/src/components/player/modals/SpeedModal.tsx @@ -1,11 +1,13 @@ import React from 'react'; -import { View, Text, TouchableOpacity, Platform, useWindowDimensions, ScrollView, StyleSheet } from 'react-native'; +import { View, Text, TouchableOpacity, useWindowDimensions, StyleSheet } from 'react-native'; import { MaterialIcons } from '@expo/vector-icons'; import Animated, { FadeIn, FadeOut, - SlideInRight, - SlideOutRight, + SlideInDown, + SlideOutDown, + useAnimatedStyle, + withTiming, } from 'react-native-reanimated'; interface SpeedModalProps { @@ -19,7 +21,31 @@ interface SpeedModalProps { setHoldToSpeedValue: (speed: number) => void; } -export const SpeedModal: React.FC = ({ +const MorphingButton = ({ label, isSelected, onPress, isSmall = false }: any) => { + const animatedStyle = useAnimatedStyle(() => { + return { + // Linear transition from 40 (Pill) to 10 (Rectangle) + borderRadius: withTiming(isSelected ? 10 : 40, { duration: 250 }), + backgroundColor: withTiming(isSelected ? (isSmall ? 'rgba(255,255,255,0.2)' : 'white') : 'rgba(255,255,255,0.06)', { duration: 50 }), + }; + }); + + return ( + + + + {label} + + + + ); +}; + +const SpeedModal: React.FC = ({ showSpeedModal, setShowSpeedModal, currentSpeed, @@ -30,219 +56,84 @@ export const SpeedModal: React.FC = ({ setHoldToSpeedValue, }) => { const { width } = useWindowDimensions(); - const MENU_WIDTH = Math.min(width * 0.85, 400); - - const speedPresets = [0.5, 1.0, 1.5, 2.0, 2.5]; - const holdSpeedOptions = [1.5, 2.0]; - - const handleClose = () => { - setShowSpeedModal(false); - }; - - const handleSpeedSelect = (speed: number) => { - setPlaybackSpeed(speed); - }; - - const handleHoldSpeedSelect = (speed: number) => { - setHoldToSpeedValue(speed); - }; + const speedPresets = [0.5, 1.0, 1.25, 1.5, 2.0, 2.5]; + const holdSpeedOptions = [1.0, 2.0, 3.0]; if (!showSpeedModal) return null; return ( - - - + + setShowSpeedModal(false)} + > + - - - - Playback Speed - - - - - {/* Current Speed Display */} - + - - - + + Playback Speed + + + {/* Speed Selection Row */} + + {speedPresets.map((speed) => ( + setPlaybackSpeed(speed)} + /> + ))} + + + + + {/* On Hold Section */} + + setHoldToSpeedEnabled(!holdToSpeedEnabled)} + style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', marginBottom: holdToSpeedEnabled ? 15 : 0 }} + > + On Hold + - Current: {currentSpeed}x - - - + + + - {/* Speed Presets */} - - - Speed Presets - - - - {speedPresets.map((speed) => { - const isSelected = currentSpeed === speed; - return ( - handleSpeedSelect(speed)} - style={{ - paddingHorizontal: 16, - paddingVertical: 12, - borderRadius: 12, - backgroundColor: isSelected ? 'white' : 'rgba(255,255,255,0.06)', - borderWidth: 1, - borderColor: isSelected ? 'white' : 'rgba(255,255,255,0.1)', - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', - }} - activeOpacity={0.7} - > - - {speed}x - - {isSelected && } - - ); - })} - - - - {/* Hold-to-Speed Settings */} - - - - - Hold-to-Speed - - - - {/* Enable Toggle */} - - Enable Hold Speed - setHoldToSpeedEnabled(!holdToSpeedEnabled)} - > - - - - - {/* Hold Speed Selector */} {holdToSpeedEnabled && ( - - Hold Speed - - {holdSpeedOptions.map((speed) => { - const isSelected = holdToSpeedValue === speed; - return ( - handleHoldSpeedSelect(speed)} - style={{ - paddingHorizontal: 16, - paddingVertical: 8, - borderRadius: 20, - backgroundColor: isSelected ? 'white' : 'rgba(255,255,255,0.06)', - borderWidth: 1, - borderColor: isSelected ? 'white' : 'rgba(255,255,255,0.1)', - }} - activeOpacity={0.7} - > - - {speed}x - - - ); - })} - - + + {holdSpeedOptions.map((speed) => ( + setHoldToSpeedValue(speed)} + /> + ))} + )} - - {/* Info Text */} - - - - - - Hold left/right sides - - - Hold and press the left or right side of the video player to temporarily boost playback speed. - - - - - - + + ); };