File tree Expand file tree Collapse file tree
apps/polycentric/src/features/post/ImageViewer Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -176,7 +176,9 @@ export function ImageViewer({
176176 if ( scale . value > 1 ) {
177177 translateX . value = savedTranslateX . value + e . translationX ;
178178 translateY . value = savedTranslateY . value + e . translationY ;
179- } else {
179+ } else if ( scale . value === 1 ) {
180+ // Only drag-to-dismiss at natural size; ignore the centroid
181+ // drift while a pinch is shrinking the image.
180182 dismissY . value = e . translationY ;
181183 }
182184 } )
@@ -186,6 +188,13 @@ export function ImageViewer({
186188 savedTranslateY . value = translateY . value ;
187189 return ;
188190 }
191+ if ( scale . value < 1 ) {
192+ // A pinch-to-close is in progress; let the pinch decide
193+ // whether to dismiss, so we don't double-fire onClose (which
194+ // on Android popped an extra screen).
195+ dismissY . value = withTiming ( 0 , { duration : 150 } ) ;
196+ return ;
197+ }
189198 const dismiss =
190199 Math . abs ( e . translationY ) > CLOSE_DISTANCE ||
191200 Math . abs ( e . velocityY ) > CLOSE_VELOCITY ;
Original file line number Diff line number Diff line change 11import { router } from 'expo-router' ;
2- import { useCallback } from 'react' ;
2+ import { useCallback , useRef } from 'react' ;
33import { ImageViewer } from './ImageViewer' ;
44import { useImageViewerStore } from './useImageViewerStore' ;
55
@@ -13,7 +13,13 @@ export default function ImageViewerScreen() {
1313 const images = useImageViewerStore ( ( s ) => s . images ) ;
1414 const index = useImageViewerStore ( ( s ) => s . index ) ;
1515
16+ // Guard against double-dismiss: simultaneous pinch + pan can both fire
17+ // close, and `router.canGoBack()` may still read true before the first
18+ // back() settles — popping an extra screen (notably on Android).
19+ const closing = useRef ( false ) ;
1620 const onClose = useCallback ( ( ) => {
21+ if ( closing . current ) return ;
22+ closing . current = true ;
1723 if ( router . canGoBack ( ) ) router . back ( ) ;
1824 } , [ ] ) ;
1925
You can’t perform that action at this time.
0 commit comments