Files
bsky-social-app/patches/react-native-pager-view+6.6.1.patch
T
gpp 5130d19ebd [Android] Fix taps triggering while swiping (#7459)
* [Android] Fix taps triggering while swiping

* Revert "[Android] Try to disambiguate taps from swipes (#7448)"

This reverts commit 96054f4add.

* Update patch to match callstack/react-native-pager-view#961

* Make it symmetrical

---------

Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
2025-01-17 02:02:59 +00:00

73 lines
3.2 KiB
Diff

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
new file mode 100644
index 0000000..b64fccc
Binary files /dev/null and b/node_modules/react-native-pager-view/android/build/tmp/kotlin-classes/debug/com/reactnativepagerview/NestedScrollableHost.class differ
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
index 91d9946..87b58d0 100644
--- 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
@@ -8,6 +8,7 @@ import android.view.ViewConfiguration
import android.widget.FrameLayout
import androidx.viewpager2.widget.ViewPager2
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
+import com.facebook.react.uimanager.events.NativeGestureUtil
import kotlin.math.absoluteValue
import kotlin.math.sign
@@ -27,6 +28,7 @@ class NestedScrollableHost : FrameLayout {
private var touchSlop = 0
private var initialX = 0f
private var initialY = 0f
+ private var nativeGestureStarted: Boolean = false
private val parentViewPager: ViewPager2?
get() {
var v: View? = parent as? View
@@ -57,17 +59,14 @@ class NestedScrollableHost : FrameLayout {
}
private fun handleInterceptTouchEvent(e: MotionEvent) {
- val orientation = parentViewPager?.orientation ?: return
-
- // Early return if child can't scroll in same direction as parent
- if (!canChildScroll(orientation, -1f) && !canChildScroll(orientation, 1f)) {
- return
- }
+ val orientation = parentViewPager?.orientation
if (e.action == MotionEvent.ACTION_DOWN) {
initialX = e.x
initialY = e.y
- parent.requestDisallowInterceptTouchEvent(true)
+ if (orientation != null) {
+ parent.requestDisallowInterceptTouchEvent(true)
+ }
} else if (e.action == MotionEvent.ACTION_MOVE) {
val dx = e.x - initialX
val dy = e.y - initialY
@@ -78,6 +77,10 @@ class NestedScrollableHost : FrameLayout {
val scaledDy = dy.absoluteValue * if (isVpHorizontal) 1f else .5f
if (scaledDx > touchSlop || scaledDy > touchSlop) {
+ NativeGestureUtil.notifyNativeGestureStarted(this, e)
+ nativeGestureStarted = true
+
+ if (orientation == null) return
if (isVpHorizontal == (scaledDy > scaledDx)) {
// Gesture is perpendicular, allow all parents to intercept
parent.requestDisallowInterceptTouchEvent(false)
@@ -94,4 +97,14 @@ class NestedScrollableHost : FrameLayout {
}
}
}
+
+ override fun onTouchEvent(e: MotionEvent): Boolean {
+ if (e.actionMasked == MotionEvent.ACTION_UP) {
+ if (nativeGestureStarted) {
+ NativeGestureUtil.notifyNativeGestureEnded(this, e)
+ nativeGestureStarted = false
+ }
+ }
+ return super.onTouchEvent(e)
+ }
}