diff --git a/apps/expo/src/app/camera.tsx b/apps/expo/src/app/camera.tsx index 8e762d9..e9ab94e 100644 --- a/apps/expo/src/app/camera.tsx +++ b/apps/expo/src/app/camera.tsx @@ -4,6 +4,7 @@ import type { NativeStackNavigationProp } from "@react-navigation/native-stack"; import type * as React from "react"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { + BackHandler, InteractionManager, Pressable, StyleSheet, @@ -213,6 +214,14 @@ export default function CameraPage(): React.ReactElement { onFlipCameraPressed(); }, [onFlipCameraPressed]); + const clearSelectedRecipient = useCallback(() => { + navigation.setParams({ defaultRecipientId: undefined }); + navigation.navigate("Main", { screen: "Friends" }); + }, [navigation]); + const clearSelectedRecipientInPlace = useCallback(() => { + navigation.setParams({ defaultRecipientId: undefined }); + }, [navigation]); + // On focus, revalidate the session in case cookie exists but session expired useFocusEffect( useCallback(() => { @@ -261,6 +270,22 @@ export default function CameraPage(): React.ReactElement { void requestPermissions(); }, [isCameraInitialized, isActive, requestPermissions]); + useFocusEffect( + useCallback(() => { + if (!defaultRecipientId) return; + + const backHandler = BackHandler.addEventListener( + "hardwareBackPress", + () => { + clearSelectedRecipient(); + return true; + }, + ); + + return () => backHandler.remove(); + }, [clearSelectedRecipient, defaultRecipientId]), + ); + const videoHdr = format?.supportsVideoHdr && enableHdr; const photoHdr = format?.supportsPhotoHdr && enableHdr && !videoHdr; @@ -364,10 +389,7 @@ export default function CameraPage(): React.ReactElement { Sending to {selectedFriend.name} { - // Clear the pre-selection by resetting navigation params - navigation.setParams({ defaultRecipientId: undefined }); - }} + onPress={clearSelectedRecipientInPlace} style={styles.clearButton} >