diff options
Diffstat (limited to 'src/screens/moments/CameraScreen.tsx')
-rw-r--r-- | src/screens/moments/CameraScreen.tsx | 61 |
1 files changed, 47 insertions, 14 deletions
diff --git a/src/screens/moments/CameraScreen.tsx b/src/screens/moments/CameraScreen.tsx index c3ecdb14..483bfe38 100644 --- a/src/screens/moments/CameraScreen.tsx +++ b/src/screens/moments/CameraScreen.tsx @@ -33,6 +33,8 @@ const CameraScreen: React.FC<CameraScreenProps> = ({route, navigation}) => { const [isRecording, setIsRecording] = useState<boolean>(false); const [pictureProcessing, setPictureProcessing] = useState<boolean>(false); const [mounted, setMounted] = useState<boolean>(false); + const [vidUri, setVidUri] = useState<string>(); + const [videoRecordStart, setVideoRecordStart] = useState<boolean>(false); useFocusEffect( useCallback(() => { @@ -43,6 +45,9 @@ const CameraScreen: React.FC<CameraScreenProps> = ({route, navigation}) => { // reset in case we have returned to this screen setPictureProcessing(false); + // reset in case this wasn't properly called + setIsRecording(false); + // in case the preview image gets stuck if (mounted) { cameraRef?.current?.resumePreview(); @@ -121,6 +126,25 @@ const CameraScreen: React.FC<CameraScreenProps> = ({route, navigation}) => { setCameraType(cameraType === 'front' ? 'back' : 'front'); } }} + onRecordingStart={(event: { + nativeEvent: { + uri: string; + videoOrientation: number; + deviceOrientation: number; + }; + }) => { + console.log('start', event.nativeEvent.uri); + setIsRecording(true); + setVidUri(event.nativeEvent.uri); + setVideoRecordStart(true); + }} + onRecordingEnd={() => { + if (videoRecordStart && vidUri) { + navigateToEditMedia(vidUri); + } + setVideoRecordStart(false); + setIsRecording(false); + }} /> {!pictureProcessing && ( <View style={[styles.bottomContainer, {bottom: tabBarHeight}]}> @@ -132,29 +156,38 @@ const CameraScreen: React.FC<CameraScreenProps> = ({route, navigation}) => { : styles.captureButtonContainer } activeOpacity={1} - onLongPress={() => { - takeVideo(cameraRef, (vid) => navigateToEditMedia(vid.uri)); - setIsRecording(true); + onLongPress={async () => { + const resetAndStartCameraRecording = async () => { + if (await cameraRef.current?.isRecording()) { + cameraRef.current?.stopRecording(); + } + }; + + await resetAndStartCameraRecording(); + takeVideo(cameraRef, (vid) => setVidUri(vid.uri)); }} onPressOut={async () => { const cancelRecording = async () => { - if (await cameraRef.current?.isRecording()) { + if (isRecording && (await cameraRef.current?.isRecording())) { cameraRef.current?.stopRecording(); - setIsRecording(false); + } else { + takePicture(cameraRef, (pic) => navigateToEditMedia(pic.uri)); } + setIsRecording(false); }; + setPictureProcessing(true); cancelRecording(); // tmp fix for when the animation glitches during the beginning of // recording causing onPressOut to not be detected. - setTimeout(() => { - cancelRecording(); - }, 500); - setTimeout(() => { - cancelRecording(); - }, 1000); - setTimeout(() => { - cancelRecording(); - }, 1500); + // setTimeout(() => { + // cancelRecording(); + // }, 500); + // setTimeout(() => { + // cancelRecording(); + // }, 1000); + // setTimeout(() => { + // cancelRecording(); + // }, 1500); }} onPress={() => { if (!pictureProcessing) { |