···11-diff --git a/node_modules/react-native-pager-view/android/build/tmp/kotlin-classes/debug/com/reactnativepagerview/NestedScrollableHost.class b/node_modules/react-native-pager-view/android/build/tmp/kotlin-classes/debug/com/reactnativepagerview/NestedScrollableHost.class
22-new file mode 100644
33-index 0000000..b64fccc
44-Binary files /dev/null and b/node_modules/react-native-pager-view/android/build/tmp/kotlin-classes/debug/com/reactnativepagerview/NestedScrollableHost.class differ
55-diff --git a/node_modules/react-native-pager-view/android/src/main/java/com/reactnativepagerview/NestedScrollableHost.kt b/node_modules/react-native-pager-view/android/src/main/java/com/reactnativepagerview/NestedScrollableHost.kt
66-index 91d9946..87b58d0 100644
77---- a/node_modules/react-native-pager-view/android/src/main/java/com/reactnativepagerview/NestedScrollableHost.kt
88-+++ b/node_modules/react-native-pager-view/android/src/main/java/com/reactnativepagerview/NestedScrollableHost.kt
99-@@ -8,6 +8,7 @@ import android.view.ViewConfiguration
1010- import android.widget.FrameLayout
1111- import androidx.viewpager2.widget.ViewPager2
1212- import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
1313-+import com.facebook.react.uimanager.events.NativeGestureUtil
1414- import kotlin.math.absoluteValue
1515- import kotlin.math.sign
1616-1717-@@ -27,6 +28,7 @@ class NestedScrollableHost : FrameLayout {
1818- private var touchSlop = 0
1919- private var initialX = 0f
2020- private var initialY = 0f
2121-+ private var nativeGestureStarted: Boolean = false
2222- private val parentViewPager: ViewPager2?
2323- get() {
2424- var v: View? = parent as? View
2525-@@ -57,17 +59,14 @@ class NestedScrollableHost : FrameLayout {
2626- }
2727-2828- private fun handleInterceptTouchEvent(e: MotionEvent) {
2929-- val orientation = parentViewPager?.orientation ?: return
3030--
3131-- // Early return if child can't scroll in same direction as parent
3232-- if (!canChildScroll(orientation, -1f) && !canChildScroll(orientation, 1f)) {
3333-- return
3434-- }
3535-+ val orientation = parentViewPager?.orientation
3636-3737- if (e.action == MotionEvent.ACTION_DOWN) {
3838- initialX = e.x
3939- initialY = e.y
4040-- parent.requestDisallowInterceptTouchEvent(true)
4141-+ if (orientation != null) {
4242-+ parent.requestDisallowInterceptTouchEvent(true)
4343-+ }
4444- } else if (e.action == MotionEvent.ACTION_MOVE) {
4545- val dx = e.x - initialX
4646- val dy = e.y - initialY
4747-@@ -78,6 +77,10 @@ class NestedScrollableHost : FrameLayout {
4848- val scaledDy = dy.absoluteValue * if (isVpHorizontal) 1f else .5f
4949-5050- if (scaledDx > touchSlop || scaledDy > touchSlop) {
5151-+ NativeGestureUtil.notifyNativeGestureStarted(this, e)
5252-+ nativeGestureStarted = true
5353-+
5454-+ if (orientation == null) return
5555- if (isVpHorizontal == (scaledDy > scaledDx)) {
5656- // Gesture is perpendicular, allow all parents to intercept
5757- parent.requestDisallowInterceptTouchEvent(false)
5858-@@ -94,4 +97,14 @@ class NestedScrollableHost : FrameLayout {
5959- }
6060- }
6161- }
6262-+
6363-+ override fun onTouchEvent(e: MotionEvent): Boolean {
6464-+ if (e.actionMasked == MotionEvent.ACTION_UP) {
6565-+ if (nativeGestureStarted) {
6666-+ NativeGestureUtil.notifyNativeGestureEnded(this, e)
6767-+ nativeGestureStarted = false
6868-+ }
6969-+ }
7070-+ return super.onTouchEvent(e)
7171-+ }
7272- }
+40-2
src/view/com/pager/Pager.tsx
···11-import React, {forwardRef, useCallback, useContext} from 'react'
11+import React, {Children, forwardRef, useCallback, useContext} from 'react'
22import {View} from 'react-native'
33import {DrawerGestureContext} from 'react-native-drawer-layout'
44import {Gesture, GestureDetector} from 'react-native-gesture-handler'
···1717} from 'react-native-reanimated'
1818import {useFocusEffect} from '@react-navigation/native'
19192020+import {isAndroid} from '#/platform/detection'
2021import {useSetDrawerSwipeDisabled} from '#/state/shell'
2122import {atoms as a, native} from '#/alf'
2223···148149 style={[a.flex_1]}
149150 initialPage={initialPage}
150151 onPageScroll={handlePageScroll}>
151151- {children}
152152+ {isAndroid
153153+ ? Children.map(children, child => (
154154+ <CaptureSwipesAndroid>{child}</CaptureSwipesAndroid>
155155+ ))
156156+ : children}
152157 </AnimatedPagerView>
153158 </GestureDetector>
154159 </View>
155160 )
156161 },
157162)
163163+164164+// HACK.
165165+// This works around https://github.com/callstack/react-native-pager-view/issues/960.
166166+// It appears that the Pressables inside the pager get confused if there's enough work
167167+// happening on the JS thread, and mistakingly interpret a pager swipe as a tap.
168168+// We can prevent this by stealing all horizontal movements from the tree inside.
169169+function CaptureSwipesAndroid({children}: {children: React.ReactNode}) {
170170+ const lastTouchStart = React.useRef<{x: number; y: number} | null>(null)
171171+ return (
172172+ <View
173173+ onTouchStart={e => {
174174+ lastTouchStart.current = {
175175+ x: e.nativeEvent.pageX,
176176+ y: e.nativeEvent.pageY,
177177+ }
178178+ }}
179179+ onMoveShouldSetResponderCapture={e => {
180180+ const coords = lastTouchStart.current
181181+ if (!coords) {
182182+ return false
183183+ }
184184+ const dx = Math.abs(e.nativeEvent.pageX - coords.x)
185185+ if (dx > 0) {
186186+ // This is a horizontal movement and will result in a swipe.
187187+ // Prevent pager children from receiving this touch.
188188+ return true
189189+ }
190190+ return false
191191+ }}>
192192+ {children}
193193+ </View>
194194+ )
195195+}
158196159197function usePagerHandlers(
160198 handlers: {