react-native-gesture-handler 2.13.4 → 2.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +3 -2
- package/android/gradle.properties +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +36 -72
- package/android/src/main/java/com/swmansion/gesturehandler/react/Extensions.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +12 -14
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +8 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +34 -88
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +18 -12
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/FlingGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/GestureHandlerEventDataBuilder.kt +22 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/HoverGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/LongPressGestureHandlerEventDataBuilder.kt +33 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/ManualGestureHandlerEventDataBuilder.kt +5 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/NativeGestureHandlerEventDataBuilder.kt +18 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PanGestureHandlerEventDataBuilder.kt +42 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PinchGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/RotationGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/TapGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/jni/CMakeLists.txt +14 -2
- package/ios/Handlers/RNHoverHandler.m +15 -14
- package/ios/RNGestureHandler.m +11 -0
- package/ios/RNGestureHandlerButtonComponentView.mm +2 -0
- package/lib/commonjs/components/gestureHandlerRootHOC.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js +1 -1
- package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js.map +1 -1
- package/lib/commonjs/getReactNativeVersion.js +22 -0
- package/lib/commonjs/getReactNativeVersion.js.map +1 -0
- package/lib/commonjs/getReactNativeVersion.web.js +11 -0
- package/lib/commonjs/getReactNativeVersion.web.js.map +1 -0
- package/lib/commonjs/handlers/gestureHandlerCommon.js +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +13 -3
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js +8 -0
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +39 -37
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/commonjs/utils.js +0 -13
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +4 -6
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +4 -15
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js +27 -29
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerEventManager.js +13 -3
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/components/gestureHandlerRootHOC.js.map +1 -1
- package/lib/module/components/touchables/TouchableNativeFeedback.android.js +1 -1
- package/lib/module/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
- package/lib/module/components/touchables/TouchableWithoutFeedback.js.map +1 -1
- package/lib/module/getReactNativeVersion.js +10 -0
- package/lib/module/getReactNativeVersion.js.map +1 -0
- package/lib/module/getReactNativeVersion.web.js +4 -0
- package/lib/module/getReactNativeVersion.web.js.map +1 -0
- package/lib/module/handlers/gestureHandlerCommon.js +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +12 -3
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js +8 -0
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.js +44 -42
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/module/utils.js +0 -6
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +4 -6
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +4 -15
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js +27 -29
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web/tools/PointerEventManager.js +12 -3
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/typescript/ActionType.d.ts +1 -1
- package/lib/typescript/Directions.d.ts +1 -1
- package/lib/typescript/PlatformConstants.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
- package/lib/typescript/State.d.ts +1 -1
- package/lib/typescript/TouchEventType.d.ts +1 -1
- package/lib/typescript/components/DrawerLayout.d.ts +9 -9
- package/lib/typescript/components/GestureButtons.d.ts +3 -3
- package/lib/typescript/components/GestureComponents.d.ts +6 -6
- package/lib/typescript/components/GestureComponents.web.d.ts +1 -1
- package/lib/typescript/components/GestureHandlerRootView.android.d.ts +2 -1
- package/lib/typescript/components/GestureHandlerRootView.d.ts +2 -1
- package/lib/typescript/components/GestureHandlerRootView.web.d.ts +2 -1
- package/lib/typescript/components/Swipeable.d.ts +4 -4
- package/lib/typescript/components/gestureHandlerRootHOC.d.ts +1 -1
- package/lib/typescript/components/touchables/GenericTouchable.d.ts +4 -3
- package/lib/typescript/components/touchables/TouchableHighlight.d.ts +4 -3
- package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +7 -6
- package/lib/typescript/components/touchables/TouchableOpacity.d.ts +3 -2
- package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +1 -1
- package/lib/typescript/getReactNativeVersion.d.ts +4 -0
- package/lib/typescript/getReactNativeVersion.web.d.ts +1 -0
- package/lib/typescript/handlers/FlingGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/LongPressGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +3 -3
- package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/PinchGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/RotationGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/TapGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/createHandler.d.ts +1 -1
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +11 -10
- package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +32 -32
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -2
- package/lib/typescript/handlers/gestures/flingGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +2 -2
- package/lib/typescript/handlers/gestures/gesture.d.ts +7 -5
- package/lib/typescript/handlers/gestures/gestureComposition.d.ts +4 -4
- package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +3 -1
- package/lib/typescript/handlers/gestures/hoverGesture.d.ts +3 -3
- package/lib/typescript/handlers/gestures/longPressGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/manualGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/nativeGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/panGesture.d.ts +2 -2
- package/lib/typescript/handlers/gestures/pinchGesture.d.ts +2 -2
- package/lib/typescript/handlers/gestures/rotationGesture.d.ts +2 -2
- package/lib/typescript/handlers/gestures/tapGesture.d.ts +1 -1
- package/lib/typescript/jestUtils/jestUtils.d.ts +6 -6
- package/lib/typescript/typeUtils.d.ts +1 -1
- package/lib/typescript/utils.d.ts +1 -5
- package/lib/typescript/web/interfaces.d.ts +4 -3
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +0 -1
- package/lib/typescript/web/tools/InteractionManager.d.ts +2 -1
- package/lib/typescript/web_hammer/GestureHandler.d.ts +2 -2
- package/package.json +7 -7
- package/src/components/gestureHandlerRootHOC.tsx +1 -3
- package/src/components/touchables/TouchableNativeFeedback.android.tsx +2 -1
- package/src/components/touchables/TouchableWithoutFeedback.tsx +3 -3
- package/src/getReactNativeVersion.ts +11 -0
- package/src/getReactNativeVersion.web.ts +3 -0
- package/src/handlers/gestureHandlerCommon.ts +6 -1
- package/src/handlers/gestures/GestureDetector.tsx +9 -6
- package/src/handlers/gestures/gesture.ts +9 -1
- package/src/handlers/gestures/gestureStateManager.ts +42 -40
- package/src/utils.ts +0 -8
- package/src/web/handlers/FlingGestureHandler.ts +5 -5
- package/src/web/handlers/GestureHandler.ts +1 -1
- package/src/web/interfaces.ts +1 -0
- package/src/web/tools/GestureHandlerOrchestrator.ts +4 -13
- package/src/web/tools/InteractionManager.ts +37 -30
- package/src/web/tools/PointerEventManager.ts +14 -3
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +0 -8
- /package/android/{src/fabric → fabric/src/main}/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +0 -0
- /package/android/{src/fabric → fabric/src/main}/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +0 -0
package/android/build.gradle
CHANGED
|
@@ -139,6 +139,7 @@ android {
|
|
|
139
139
|
cppFlags "-O2", "-frtti", "-fexceptions", "-Wall", "-Werror", "-std=c++17", "-DANDROID"
|
|
140
140
|
arguments "-DAPP_BUILD_DIR=${appProject.buildDir}",
|
|
141
141
|
"-DREACT_NATIVE_DIR=${REACT_NATIVE_DIR}",
|
|
142
|
+
"-DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}",
|
|
142
143
|
"-DANDROID_STL=c++_shared"
|
|
143
144
|
abiFilters (*reactNativeArchitectures())
|
|
144
145
|
}
|
|
@@ -179,11 +180,11 @@ android {
|
|
|
179
180
|
}
|
|
180
181
|
|
|
181
182
|
if (isNewArchitectureEnabled()) {
|
|
182
|
-
srcDirs += 'src/
|
|
183
|
+
srcDirs += 'fabric/src/main/java'
|
|
183
184
|
} else {
|
|
184
185
|
// this folder also includes files from codegen so the library can compile with
|
|
185
186
|
// codegen turned off
|
|
186
|
-
srcDirs += 'src/
|
|
187
|
+
srcDirs += 'paper/src/main/java'
|
|
187
188
|
}
|
|
188
189
|
}
|
|
189
190
|
}
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
# Specifies the JVM arguments used for the daemon process.
|
|
11
11
|
# The setting is particularly useful for tweaking memory settings.
|
|
12
|
-
# Default value: -Xmx10248m -XX:
|
|
13
|
-
org.gradle.jvmargs=-Xmx2048m -XX:
|
|
12
|
+
# Default value: -Xmx10248m -XX:MaxMetaspaceSize=256m
|
|
13
|
+
org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
|
|
14
14
|
|
|
15
15
|
# When configured, Gradle will run in incubating parallel mode.
|
|
16
16
|
# This option should only be used with decoupled projects. More details, visit
|
package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt
CHANGED
|
@@ -19,13 +19,9 @@ class GestureHandlerOrchestrator(
|
|
|
19
19
|
* traversing view hierarchy and looking for gesture handlers.
|
|
20
20
|
*/
|
|
21
21
|
var minimumAlphaForTraversal = DEFAULT_MIN_ALPHA_FOR_TRAVERSAL
|
|
22
|
-
|
|
23
|
-
private val
|
|
24
|
-
private val
|
|
25
|
-
private val preparedHandlers = arrayOfNulls<GestureHandler<*>?>(SIMULTANEOUS_GESTURE_HANDLER_LIMIT)
|
|
26
|
-
private val handlersToCancel = arrayOfNulls<GestureHandler<*>?>(SIMULTANEOUS_GESTURE_HANDLER_LIMIT)
|
|
27
|
-
private var gestureHandlersCount = 0
|
|
28
|
-
private var awaitingHandlersCount = 0
|
|
22
|
+
private val gestureHandlers = arrayListOf<GestureHandler<*>>()
|
|
23
|
+
private val awaitingHandlers = arrayListOf<GestureHandler<*>>()
|
|
24
|
+
private val preparedHandlers = arrayListOf<GestureHandler<*>>()
|
|
29
25
|
private var isHandlingTouch = false
|
|
30
26
|
private var handlingChangeSemaphore = 0
|
|
31
27
|
private var finishedHandlersCleanupScheduled = false
|
|
@@ -60,23 +56,9 @@ class GestureHandlerOrchestrator(
|
|
|
60
56
|
}
|
|
61
57
|
}
|
|
62
58
|
|
|
63
|
-
private inline fun compactHandlersIf(handlers: Array<GestureHandler<*>?>, count: Int, predicate: (handler: GestureHandler<*>?) -> Boolean): Int {
|
|
64
|
-
var out = 0
|
|
65
|
-
for (i in 0 until count) {
|
|
66
|
-
if (predicate(handlers[i])) {
|
|
67
|
-
handlers[out++] = handlers[i]
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return out
|
|
71
|
-
}
|
|
72
|
-
|
|
73
59
|
private fun cleanupFinishedHandlers() {
|
|
74
|
-
|
|
75
|
-
for (i in gestureHandlersCount - 1 downTo 0) {
|
|
76
|
-
val handler = gestureHandlers[i]!!
|
|
60
|
+
for (handler in gestureHandlers.asReversed()) {
|
|
77
61
|
if (isFinished(handler.state) && !handler.isAwaiting) {
|
|
78
|
-
gestureHandlers[i] = null
|
|
79
|
-
shouldCleanEmptyCells = true
|
|
80
62
|
handler.reset()
|
|
81
63
|
handler.apply {
|
|
82
64
|
isActive = false
|
|
@@ -85,17 +67,14 @@ class GestureHandlerOrchestrator(
|
|
|
85
67
|
}
|
|
86
68
|
}
|
|
87
69
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
}
|
|
70
|
+
|
|
71
|
+
gestureHandlers.removeAll { isFinished(it.state) && !it.isAwaiting }
|
|
72
|
+
|
|
93
73
|
finishedHandlersCleanupScheduled = false
|
|
94
74
|
}
|
|
95
75
|
|
|
96
76
|
private fun hasOtherHandlerToWaitFor(handler: GestureHandler<*>): Boolean {
|
|
97
|
-
for (
|
|
98
|
-
val otherHandler = gestureHandlers[i]!!
|
|
77
|
+
for (otherHandler in gestureHandlers) {
|
|
99
78
|
if (!isFinished(otherHandler.state) && shouldHandlerWaitForOther(handler, otherHandler)) {
|
|
100
79
|
return true
|
|
101
80
|
}
|
|
@@ -115,9 +94,7 @@ class GestureHandlerOrchestrator(
|
|
|
115
94
|
}
|
|
116
95
|
|
|
117
96
|
private fun cleanupAwaitingHandlers() {
|
|
118
|
-
|
|
119
|
-
handler!!.isAwaiting
|
|
120
|
-
}
|
|
97
|
+
awaitingHandlers.removeAll { !it.isAwaiting }
|
|
121
98
|
}
|
|
122
99
|
|
|
123
100
|
/*package*/
|
|
@@ -125,9 +102,8 @@ class GestureHandlerOrchestrator(
|
|
|
125
102
|
handlingChangeSemaphore += 1
|
|
126
103
|
if (isFinished(newState)) {
|
|
127
104
|
// if there were handlers awaiting completion of this handler, we can trigger active state
|
|
128
|
-
for (
|
|
129
|
-
|
|
130
|
-
if (shouldHandlerWaitForOther(otherHandler!!, handler)) {
|
|
105
|
+
for (otherHandler in awaitingHandlers) {
|
|
106
|
+
if (shouldHandlerWaitForOther(otherHandler, handler)) {
|
|
131
107
|
if (newState == GestureHandler.STATE_END) {
|
|
132
108
|
// gesture has ended, we need to kill the awaiting handler
|
|
133
109
|
otherHandler.cancel()
|
|
@@ -182,21 +158,15 @@ class GestureHandlerOrchestrator(
|
|
|
182
158
|
shouldResetProgress = true
|
|
183
159
|
activationIndex = this@GestureHandlerOrchestrator.activationIndex++
|
|
184
160
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
for (i in 0 until gestureHandlersCount) {
|
|
188
|
-
val otherHandler = gestureHandlers[i]!!
|
|
161
|
+
|
|
162
|
+
for (otherHandler in gestureHandlers.asReversed()) {
|
|
189
163
|
if (shouldHandlerBeCancelledBy(otherHandler, handler)) {
|
|
190
|
-
|
|
164
|
+
otherHandler.cancel()
|
|
191
165
|
}
|
|
192
166
|
}
|
|
193
|
-
for (i in toCancelCount - 1 downTo 0) {
|
|
194
|
-
handlersToCancel[i]!!.cancel()
|
|
195
|
-
}
|
|
196
167
|
|
|
197
168
|
// Clear all awaiting handlers waiting for the current handler to fail
|
|
198
|
-
for (
|
|
199
|
-
val otherHandler = awaitingHandlers[i]!!
|
|
169
|
+
for (otherHandler in awaitingHandlers.reversed()) {
|
|
200
170
|
if (shouldHandlerBeCancelledBy(otherHandler, handler)) {
|
|
201
171
|
otherHandler.cancel()
|
|
202
172
|
otherHandler.isAwaiting = false
|
|
@@ -218,32 +188,31 @@ class GestureHandlerOrchestrator(
|
|
|
218
188
|
private fun deliverEventToGestureHandlers(event: MotionEvent) {
|
|
219
189
|
// Copy handlers to "prepared handlers" array, because the list of active handlers can change
|
|
220
190
|
// as a result of state updates
|
|
221
|
-
|
|
191
|
+
preparedHandlers.clear()
|
|
192
|
+
preparedHandlers.addAll(gestureHandlers)
|
|
222
193
|
|
|
223
|
-
gestureHandlers.copyInto(preparedHandlers, 0, 0, handlersCount)
|
|
224
194
|
// We want to deliver events to active handlers first in order of their activation (handlers
|
|
225
195
|
// that activated first will first get event delivered). Otherwise we deliver events in the
|
|
226
196
|
// order in which handlers has been added ("most direct" children goes first). Therefore we rely
|
|
227
197
|
// on Arrays.sort providing a stable sort (as children are registered in order in which they
|
|
228
198
|
// should be tested)
|
|
229
|
-
preparedHandlers.sortWith(handlersComparator
|
|
230
|
-
for (
|
|
231
|
-
deliverEventToGestureHandler(
|
|
199
|
+
preparedHandlers.sortWith(handlersComparator)
|
|
200
|
+
for (handler in preparedHandlers) {
|
|
201
|
+
deliverEventToGestureHandler(handler, event)
|
|
232
202
|
}
|
|
233
203
|
}
|
|
234
204
|
|
|
235
205
|
private fun cancelAll() {
|
|
236
|
-
for (
|
|
237
|
-
|
|
206
|
+
for (handler in awaitingHandlers.reversed()) {
|
|
207
|
+
handler.cancel()
|
|
238
208
|
}
|
|
239
209
|
// Copy handlers to "prepared handlers" array, because the list of active handlers can change
|
|
240
210
|
// as a result of state updates
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
preparedHandlers[i]!!.cancel()
|
|
211
|
+
preparedHandlers.clear()
|
|
212
|
+
preparedHandlers.addAll(gestureHandlers)
|
|
213
|
+
|
|
214
|
+
for (handler in gestureHandlers.reversed()) {
|
|
215
|
+
handler.cancel()
|
|
247
216
|
}
|
|
248
217
|
}
|
|
249
218
|
|
|
@@ -325,7 +294,7 @@ class GestureHandlerOrchestrator(
|
|
|
325
294
|
return parent === wrapperView
|
|
326
295
|
}
|
|
327
296
|
|
|
328
|
-
fun isAnyHandlerActive() = gestureHandlers.any { it
|
|
297
|
+
fun isAnyHandlerActive() = gestureHandlers.any { it.state == GestureHandler.STATE_ACTIVE }
|
|
329
298
|
|
|
330
299
|
/**
|
|
331
300
|
* Transforms an event in the coordinates of wrapperView into the coordinate space of the received view.
|
|
@@ -399,13 +368,11 @@ class GestureHandlerOrchestrator(
|
|
|
399
368
|
}
|
|
400
369
|
|
|
401
370
|
private fun addAwaitingHandler(handler: GestureHandler<*>) {
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
return
|
|
405
|
-
}
|
|
371
|
+
if (awaitingHandlers.contains(handler)) {
|
|
372
|
+
return
|
|
406
373
|
}
|
|
407
|
-
|
|
408
|
-
awaitingHandlers
|
|
374
|
+
|
|
375
|
+
awaitingHandlers.add(handler)
|
|
409
376
|
with(handler) {
|
|
410
377
|
isAwaiting = true
|
|
411
378
|
activationIndex = this@GestureHandlerOrchestrator.activationIndex++
|
|
@@ -413,13 +380,11 @@ class GestureHandlerOrchestrator(
|
|
|
413
380
|
}
|
|
414
381
|
|
|
415
382
|
private fun recordHandlerIfNotPresent(handler: GestureHandler<*>, view: View) {
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
return
|
|
419
|
-
}
|
|
383
|
+
if (gestureHandlers.contains(handler)) {
|
|
384
|
+
return
|
|
420
385
|
}
|
|
421
|
-
|
|
422
|
-
gestureHandlers
|
|
386
|
+
|
|
387
|
+
gestureHandlers.add(handler)
|
|
423
388
|
handler.isActive = false
|
|
424
389
|
handler.isAwaiting = false
|
|
425
390
|
handler.activationIndex = Int.MAX_VALUE
|
|
@@ -608,7 +573,6 @@ class GestureHandlerOrchestrator(
|
|
|
608
573
|
companion object {
|
|
609
574
|
// The limit doesn't necessarily need to exists, it was just simpler to implement it that way
|
|
610
575
|
// it is also more allocation-wise efficient to have a fixed limit
|
|
611
|
-
private const val SIMULTANEOUS_GESTURE_HANDLER_LIMIT = 20
|
|
612
576
|
|
|
613
577
|
// Be default fully transparent views can receive touch
|
|
614
578
|
private const val DEFAULT_MIN_ALPHA_FOR_TRAVERSAL = 0f
|
|
@@ -13,4 +13,4 @@ val ReactContext.UIManager: UIManagerModule
|
|
|
13
13
|
get() = this.getNativeModule(UIManagerModule::class.java)!!
|
|
14
14
|
|
|
15
15
|
fun Context.isScreenReaderOn() =
|
|
16
|
-
(getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager).
|
|
16
|
+
(getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager).isTouchExplorationEnabled
|
|
@@ -12,9 +12,10 @@ import com.facebook.react.bridge.WritableMap
|
|
|
12
12
|
import com.facebook.react.uimanager.events.Event
|
|
13
13
|
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
14
14
|
import com.swmansion.gesturehandler.core.GestureHandler
|
|
15
|
+
import com.swmansion.gesturehandler.react.eventbuilders.GestureHandlerEventDataBuilder
|
|
15
16
|
|
|
16
17
|
class RNGestureHandlerEvent private constructor() : Event<RNGestureHandlerEvent>() {
|
|
17
|
-
private var
|
|
18
|
+
private var dataBuilder: GestureHandlerEventDataBuilder<*>? = null
|
|
18
19
|
private var coalescingKey: Short = 0
|
|
19
20
|
|
|
20
21
|
// On the new architecture, native animated expects event names prefixed with `top` instead of `on`,
|
|
@@ -26,17 +27,17 @@ class RNGestureHandlerEvent private constructor() : Event<RNGestureHandlerEvent>
|
|
|
26
27
|
|
|
27
28
|
private fun <T : GestureHandler<T>> init(
|
|
28
29
|
handler: T,
|
|
29
|
-
|
|
30
|
+
dataBuilder: GestureHandlerEventDataBuilder<T>,
|
|
30
31
|
useNativeAnimatedName: Boolean
|
|
31
32
|
) {
|
|
32
33
|
super.init(handler.view!!.id)
|
|
33
|
-
|
|
34
|
-
coalescingKey = handler.eventCoalescingKey
|
|
34
|
+
this.dataBuilder = dataBuilder
|
|
35
35
|
this.useTopPrefixedName = useNativeAnimatedName
|
|
36
|
+
coalescingKey = handler.eventCoalescingKey
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
override fun onDispose() {
|
|
39
|
-
|
|
40
|
+
dataBuilder = null
|
|
40
41
|
EVENTS_POOL.release(this)
|
|
41
42
|
}
|
|
42
43
|
|
|
@@ -47,7 +48,7 @@ class RNGestureHandlerEvent private constructor() : Event<RNGestureHandlerEvent>
|
|
|
47
48
|
override fun getCoalescingKey() = coalescingKey
|
|
48
49
|
|
|
49
50
|
override fun dispatch(rctEventEmitter: RCTEventEmitter) {
|
|
50
|
-
rctEventEmitter.receiveEvent(viewTag, EVENT_NAME,
|
|
51
|
+
rctEventEmitter.receiveEvent(viewTag, EVENT_NAME, createEventData(dataBuilder!!))
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
companion object {
|
|
@@ -58,20 +59,17 @@ class RNGestureHandlerEvent private constructor() : Event<RNGestureHandlerEvent>
|
|
|
58
59
|
|
|
59
60
|
fun <T : GestureHandler<T>> obtain(
|
|
60
61
|
handler: T,
|
|
61
|
-
|
|
62
|
+
dataBuilder: GestureHandlerEventDataBuilder<T>,
|
|
62
63
|
useTopPrefixedName: Boolean = false
|
|
63
64
|
): RNGestureHandlerEvent =
|
|
64
65
|
(EVENTS_POOL.acquire() ?: RNGestureHandlerEvent()).apply {
|
|
65
|
-
init(handler,
|
|
66
|
+
init(handler, dataBuilder, useTopPrefixedName)
|
|
66
67
|
}
|
|
67
68
|
|
|
68
|
-
fun
|
|
69
|
-
|
|
70
|
-
dataExtractor: RNGestureHandlerEventDataExtractor<T>?
|
|
69
|
+
fun createEventData(
|
|
70
|
+
dataBuilder: GestureHandlerEventDataBuilder<*>
|
|
71
71
|
): WritableMap = Arguments.createMap().apply {
|
|
72
|
-
|
|
73
|
-
putInt("handlerTag", handler.tag)
|
|
74
|
-
putInt("state", handler.state)
|
|
72
|
+
dataBuilder.buildEventData(this)
|
|
75
73
|
}
|
|
76
74
|
}
|
|
77
75
|
}
|
|
@@ -9,6 +9,8 @@ import com.swmansion.gesturehandler.core.NativeViewGestureHandler
|
|
|
9
9
|
class RNGestureHandlerInteractionManager : GestureHandlerInteractionController {
|
|
10
10
|
private val waitForRelations = SparseArray<IntArray>()
|
|
11
11
|
private val simultaneousRelations = SparseArray<IntArray>()
|
|
12
|
+
private val blockingRelations = SparseArray<IntArray>()
|
|
13
|
+
|
|
12
14
|
fun dropRelationsForHandlerWithTag(handlerTag: Int) {
|
|
13
15
|
waitForRelations.remove(handlerTag)
|
|
14
16
|
simultaneousRelations.remove(handlerTag)
|
|
@@ -33,6 +35,10 @@ class RNGestureHandlerInteractionManager : GestureHandlerInteractionController {
|
|
|
33
35
|
val tags = convertHandlerTagsArray(config, KEY_SIMULTANEOUS_HANDLERS)
|
|
34
36
|
simultaneousRelations.put(handler.tag, tags)
|
|
35
37
|
}
|
|
38
|
+
if (config.hasKey(KEY_BLOCKS_HANDLERS)) {
|
|
39
|
+
val tags = convertHandlerTagsArray(config, KEY_BLOCKS_HANDLERS)
|
|
40
|
+
blockingRelations.put(handler.tag, tags)
|
|
41
|
+
}
|
|
36
42
|
}
|
|
37
43
|
|
|
38
44
|
override fun shouldWaitForHandlerFailure(handler: GestureHandler<*>, otherHandler: GestureHandler<*>) =
|
|
@@ -41,7 +47,7 @@ class RNGestureHandlerInteractionManager : GestureHandlerInteractionController {
|
|
|
41
47
|
override fun shouldRequireHandlerToWaitForFailure(
|
|
42
48
|
handler: GestureHandler<*>,
|
|
43
49
|
otherHandler: GestureHandler<*>,
|
|
44
|
-
) = false
|
|
50
|
+
) = blockingRelations[handler.tag]?.any { tag -> tag == otherHandler.tag } ?: false
|
|
45
51
|
|
|
46
52
|
override fun shouldHandlerBeCancelledBy(handler: GestureHandler<*>, otherHandler: GestureHandler<*>): Boolean {
|
|
47
53
|
if (otherHandler is NativeViewGestureHandler) {
|
|
@@ -63,5 +69,6 @@ class RNGestureHandlerInteractionManager : GestureHandlerInteractionController {
|
|
|
63
69
|
companion object {
|
|
64
70
|
private const val KEY_WAIT_FOR = "waitFor"
|
|
65
71
|
private const val KEY_SIMULTANEOUS_HANDLERS = "simultaneousHandlers"
|
|
72
|
+
private const val KEY_BLOCKS_HANDLERS = "blocksHandlers"
|
|
66
73
|
}
|
|
67
74
|
}
|
|
@@ -30,6 +30,16 @@ import com.swmansion.gesturehandler.core.PinchGestureHandler
|
|
|
30
30
|
import com.swmansion.gesturehandler.core.RotationGestureHandler
|
|
31
31
|
import com.swmansion.gesturehandler.core.TapGestureHandler
|
|
32
32
|
import com.swmansion.gesturehandler.dispatchEvent
|
|
33
|
+
import com.swmansion.gesturehandler.react.eventbuilders.FlingGestureHandlerEventDataBuilder
|
|
34
|
+
import com.swmansion.gesturehandler.react.eventbuilders.GestureHandlerEventDataBuilder
|
|
35
|
+
import com.swmansion.gesturehandler.react.eventbuilders.HoverGestureHandlerEventDataBuilder
|
|
36
|
+
import com.swmansion.gesturehandler.react.eventbuilders.LongPressGestureHandlerEventDataBuilder
|
|
37
|
+
import com.swmansion.gesturehandler.react.eventbuilders.ManualGestureHandlerEventDataBuilder
|
|
38
|
+
import com.swmansion.gesturehandler.react.eventbuilders.NativeGestureHandlerEventDataBuilder
|
|
39
|
+
import com.swmansion.gesturehandler.react.eventbuilders.PanGestureHandlerEventDataBuilder
|
|
40
|
+
import com.swmansion.gesturehandler.react.eventbuilders.PinchGestureHandlerEventDataBuilder
|
|
41
|
+
import com.swmansion.gesturehandler.react.eventbuilders.RotationGestureHandlerEventDataBuilder
|
|
42
|
+
import com.swmansion.gesturehandler.react.eventbuilders.TapGestureHandlerEventDataBuilder
|
|
33
43
|
|
|
34
44
|
// NativeModule.onCatalystInstanceDestroy() was deprecated in favor of NativeModule.invalidate()
|
|
35
45
|
// ref: https://github.com/facebook/react-native/commit/18c8417290823e67e211bde241ae9dde27b72f17
|
|
@@ -40,7 +50,7 @@ import com.swmansion.gesturehandler.dispatchEvent
|
|
|
40
50
|
@ReactModule(name = RNGestureHandlerModule.MODULE_NAME)
|
|
41
51
|
class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
|
|
42
52
|
ReactContextBaseJavaModule(reactContext), GestureHandlerStateManager {
|
|
43
|
-
private abstract class HandlerFactory<T : GestureHandler<T>>
|
|
53
|
+
private abstract class HandlerFactory<T : GestureHandler<T>> {
|
|
44
54
|
abstract val type: Class<T>
|
|
45
55
|
abstract val name: String
|
|
46
56
|
abstract fun create(context: Context?): T
|
|
@@ -63,9 +73,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
|
|
|
63
73
|
}
|
|
64
74
|
}
|
|
65
75
|
|
|
66
|
-
|
|
67
|
-
eventData.putDouble("numberOfPointers", handler.numberOfPointers.toDouble())
|
|
68
|
-
}
|
|
76
|
+
abstract fun createEventBuilder(handler: T): GestureHandlerEventDataBuilder<T>
|
|
69
77
|
}
|
|
70
78
|
|
|
71
79
|
private class NativeViewGestureHandlerFactory : HandlerFactory<NativeViewGestureHandler>() {
|
|
@@ -88,10 +96,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
|
|
|
88
96
|
}
|
|
89
97
|
}
|
|
90
98
|
|
|
91
|
-
override fun
|
|
92
|
-
super.extractEventData(handler, eventData)
|
|
93
|
-
eventData.putBoolean("pointerInside", handler.isWithinBounds)
|
|
94
|
-
}
|
|
99
|
+
override fun createEventBuilder(handler: NativeViewGestureHandler) = NativeGestureHandlerEventDataBuilder(handler)
|
|
95
100
|
}
|
|
96
101
|
|
|
97
102
|
private class TapGestureHandlerFactory : HandlerFactory<TapGestureHandler>() {
|
|
@@ -127,15 +132,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
|
|
|
127
132
|
}
|
|
128
133
|
}
|
|
129
134
|
|
|
130
|
-
override fun
|
|
131
|
-
super.extractEventData(handler, eventData)
|
|
132
|
-
with(eventData) {
|
|
133
|
-
putDouble("x", PixelUtil.toDIPFromPixel(handler.lastRelativePositionX).toDouble())
|
|
134
|
-
putDouble("y", PixelUtil.toDIPFromPixel(handler.lastRelativePositionY).toDouble())
|
|
135
|
-
putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowX).toDouble())
|
|
136
|
-
putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowY).toDouble())
|
|
137
|
-
}
|
|
138
|
-
}
|
|
135
|
+
override fun createEventBuilder(handler: TapGestureHandler) = TapGestureHandlerEventDataBuilder(handler)
|
|
139
136
|
}
|
|
140
137
|
|
|
141
138
|
private class LongPressGestureHandlerFactory : HandlerFactory<LongPressGestureHandler>() {
|
|
@@ -156,16 +153,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
|
|
|
156
153
|
}
|
|
157
154
|
}
|
|
158
155
|
|
|
159
|
-
override fun
|
|
160
|
-
super.extractEventData(handler, eventData)
|
|
161
|
-
with(eventData) {
|
|
162
|
-
putDouble("x", PixelUtil.toDIPFromPixel(handler.lastRelativePositionX).toDouble())
|
|
163
|
-
putDouble("y", PixelUtil.toDIPFromPixel(handler.lastRelativePositionY).toDouble())
|
|
164
|
-
putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowX).toDouble())
|
|
165
|
-
putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowY).toDouble())
|
|
166
|
-
putInt("duration", handler.duration)
|
|
167
|
-
}
|
|
168
|
-
}
|
|
156
|
+
override fun createEventBuilder(handler: LongPressGestureHandler) = LongPressGestureHandlerEventDataBuilder(handler)
|
|
169
157
|
}
|
|
170
158
|
|
|
171
159
|
private class PanGestureHandlerFactory : HandlerFactory<PanGestureHandler>() {
|
|
@@ -247,19 +235,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
|
|
|
247
235
|
}
|
|
248
236
|
}
|
|
249
237
|
|
|
250
|
-
override fun
|
|
251
|
-
super.extractEventData(handler, eventData)
|
|
252
|
-
with(eventData) {
|
|
253
|
-
putDouble("x", PixelUtil.toDIPFromPixel(handler.lastRelativePositionX).toDouble())
|
|
254
|
-
putDouble("y", PixelUtil.toDIPFromPixel(handler.lastRelativePositionY).toDouble())
|
|
255
|
-
putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowX).toDouble())
|
|
256
|
-
putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowY).toDouble())
|
|
257
|
-
putDouble("translationX", PixelUtil.toDIPFromPixel(handler.translationX).toDouble())
|
|
258
|
-
putDouble("translationY", PixelUtil.toDIPFromPixel(handler.translationY).toDouble())
|
|
259
|
-
putDouble("velocityX", PixelUtil.toDIPFromPixel(handler.velocityX).toDouble())
|
|
260
|
-
putDouble("velocityY", PixelUtil.toDIPFromPixel(handler.velocityY).toDouble())
|
|
261
|
-
}
|
|
262
|
-
}
|
|
238
|
+
override fun createEventBuilder(handler: PanGestureHandler) = PanGestureHandlerEventDataBuilder(handler)
|
|
263
239
|
}
|
|
264
240
|
|
|
265
241
|
private class PinchGestureHandlerFactory : HandlerFactory<PinchGestureHandler>() {
|
|
@@ -270,15 +246,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
|
|
|
270
246
|
return PinchGestureHandler()
|
|
271
247
|
}
|
|
272
248
|
|
|
273
|
-
override fun
|
|
274
|
-
super.extractEventData(handler, eventData)
|
|
275
|
-
with(eventData) {
|
|
276
|
-
putDouble("scale", handler.scale)
|
|
277
|
-
putDouble("focalX", PixelUtil.toDIPFromPixel(handler.focalPointX).toDouble())
|
|
278
|
-
putDouble("focalY", PixelUtil.toDIPFromPixel(handler.focalPointY).toDouble())
|
|
279
|
-
putDouble("velocity", handler.velocity)
|
|
280
|
-
}
|
|
281
|
-
}
|
|
249
|
+
override fun createEventBuilder(handler: PinchGestureHandler) = PinchGestureHandlerEventDataBuilder(handler)
|
|
282
250
|
}
|
|
283
251
|
|
|
284
252
|
private class FlingGestureHandlerFactory : HandlerFactory<FlingGestureHandler>() {
|
|
@@ -299,15 +267,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
|
|
|
299
267
|
}
|
|
300
268
|
}
|
|
301
269
|
|
|
302
|
-
override fun
|
|
303
|
-
super.extractEventData(handler, eventData)
|
|
304
|
-
with(eventData) {
|
|
305
|
-
putDouble("x", PixelUtil.toDIPFromPixel(handler.lastRelativePositionX).toDouble())
|
|
306
|
-
putDouble("y", PixelUtil.toDIPFromPixel(handler.lastRelativePositionY).toDouble())
|
|
307
|
-
putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowX).toDouble())
|
|
308
|
-
putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowY).toDouble())
|
|
309
|
-
}
|
|
310
|
-
}
|
|
270
|
+
override fun createEventBuilder(handler: FlingGestureHandler) = FlingGestureHandlerEventDataBuilder(handler)
|
|
311
271
|
}
|
|
312
272
|
|
|
313
273
|
private class RotationGestureHandlerFactory : HandlerFactory<RotationGestureHandler>() {
|
|
@@ -318,15 +278,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
|
|
|
318
278
|
return RotationGestureHandler()
|
|
319
279
|
}
|
|
320
280
|
|
|
321
|
-
override fun
|
|
322
|
-
super.extractEventData(handler, eventData)
|
|
323
|
-
with(eventData) {
|
|
324
|
-
putDouble("rotation", handler.rotation)
|
|
325
|
-
putDouble("anchorX", PixelUtil.toDIPFromPixel(handler.anchorX).toDouble())
|
|
326
|
-
putDouble("anchorY", PixelUtil.toDIPFromPixel(handler.anchorY).toDouble())
|
|
327
|
-
putDouble("velocity", handler.velocity)
|
|
328
|
-
}
|
|
329
|
-
}
|
|
281
|
+
override fun createEventBuilder(handler: RotationGestureHandler) = RotationGestureHandlerEventDataBuilder(handler)
|
|
330
282
|
}
|
|
331
283
|
|
|
332
284
|
private class ManualGestureHandlerFactory : HandlerFactory<ManualGestureHandler>() {
|
|
@@ -336,6 +288,8 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
|
|
|
336
288
|
override fun create(context: Context?): ManualGestureHandler {
|
|
337
289
|
return ManualGestureHandler()
|
|
338
290
|
}
|
|
291
|
+
|
|
292
|
+
override fun createEventBuilder(handler: ManualGestureHandler) = ManualGestureHandlerEventDataBuilder(handler)
|
|
339
293
|
}
|
|
340
294
|
|
|
341
295
|
private class HoverGestureHandlerFactory : HandlerFactory<HoverGestureHandler>() {
|
|
@@ -346,15 +300,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
|
|
|
346
300
|
return HoverGestureHandler()
|
|
347
301
|
}
|
|
348
302
|
|
|
349
|
-
override fun
|
|
350
|
-
super.extractEventData(handler, eventData)
|
|
351
|
-
with(eventData) {
|
|
352
|
-
putDouble("x", PixelUtil.toDIPFromPixel(handler.lastRelativePositionX).toDouble())
|
|
353
|
-
putDouble("y", PixelUtil.toDIPFromPixel(handler.lastRelativePositionY).toDouble())
|
|
354
|
-
putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowX).toDouble())
|
|
355
|
-
putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowY).toDouble())
|
|
356
|
-
}
|
|
357
|
-
}
|
|
303
|
+
override fun createEventBuilder(handler: HoverGestureHandler) = HoverGestureHandlerEventDataBuilder(handler)
|
|
358
304
|
}
|
|
359
305
|
|
|
360
306
|
private val eventListener = object : OnTouchEventListener {
|
|
@@ -466,7 +412,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
|
|
|
466
412
|
fun install(): Boolean {
|
|
467
413
|
return try {
|
|
468
414
|
SoLoader.loadLibrary("gesturehandler")
|
|
469
|
-
val jsContext = reactApplicationContext.javaScriptContextHolder
|
|
415
|
+
val jsContext = reactApplicationContext.javaScriptContextHolder!!
|
|
470
416
|
decorateRuntime(jsContext.get())
|
|
471
417
|
true
|
|
472
418
|
} catch (exception: Exception) {
|
|
@@ -551,32 +497,32 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
|
|
|
551
497
|
return
|
|
552
498
|
}
|
|
553
499
|
if (handler.state == GestureHandler.STATE_ACTIVE) {
|
|
554
|
-
val handlerFactory = findFactoryForHandler(handler)
|
|
500
|
+
val handlerFactory = findFactoryForHandler(handler) ?: return
|
|
555
501
|
|
|
556
502
|
if (handler.actionType == GestureHandler.ACTION_TYPE_REANIMATED_WORKLET) {
|
|
557
503
|
// Reanimated worklet
|
|
558
|
-
val event = RNGestureHandlerEvent.obtain(handler, handlerFactory)
|
|
504
|
+
val event = RNGestureHandlerEvent.obtain(handler, handlerFactory.createEventBuilder(handler))
|
|
559
505
|
sendEventForReanimated(event)
|
|
560
506
|
} else if (handler.actionType == GestureHandler.ACTION_TYPE_NATIVE_ANIMATED_EVENT) {
|
|
561
507
|
// Animated with useNativeDriver: true
|
|
562
508
|
val event = RNGestureHandlerEvent.obtain(
|
|
563
509
|
handler,
|
|
564
|
-
handlerFactory,
|
|
510
|
+
handlerFactory.createEventBuilder(handler),
|
|
565
511
|
useTopPrefixedName = BuildConfig.REACT_NATIVE_MINOR_VERSION >= 71
|
|
566
512
|
)
|
|
567
513
|
sendEventForNativeAnimatedEvent(event)
|
|
568
514
|
} else if (handler.actionType == GestureHandler.ACTION_TYPE_JS_FUNCTION_OLD_API) {
|
|
569
515
|
// JS function, Animated.event with useNativeDriver: false using old API
|
|
570
516
|
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
|
|
571
|
-
val data = RNGestureHandlerEvent.createEventData(handler
|
|
517
|
+
val data = RNGestureHandlerEvent.createEventData(handlerFactory.createEventBuilder(handler))
|
|
572
518
|
sendEventForDeviceEvent(RNGestureHandlerEvent.EVENT_NAME, data)
|
|
573
519
|
} else {
|
|
574
|
-
val event = RNGestureHandlerEvent.obtain(handler, handlerFactory)
|
|
520
|
+
val event = RNGestureHandlerEvent.obtain(handler, handlerFactory.createEventBuilder(handler))
|
|
575
521
|
sendEventForDirectEvent(event)
|
|
576
522
|
}
|
|
577
523
|
} else if (handler.actionType == GestureHandler.ACTION_TYPE_JS_FUNCTION_NEW_API) {
|
|
578
524
|
// JS function, Animated.event with useNativeDriver: false using new API
|
|
579
|
-
val data = RNGestureHandlerEvent.createEventData(handler
|
|
525
|
+
val data = RNGestureHandlerEvent.createEventData(handlerFactory.createEventBuilder(handler))
|
|
580
526
|
sendEventForDeviceEvent(RNGestureHandlerEvent.EVENT_NAME, data)
|
|
581
527
|
}
|
|
582
528
|
}
|
|
@@ -589,26 +535,26 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
|
|
|
589
535
|
// root containers use negative tags, we don't need to dispatch events for them to the JS
|
|
590
536
|
return
|
|
591
537
|
}
|
|
592
|
-
val handlerFactory = findFactoryForHandler(handler)
|
|
538
|
+
val handlerFactory = findFactoryForHandler(handler) ?: return
|
|
593
539
|
|
|
594
540
|
if (handler.actionType == GestureHandler.ACTION_TYPE_REANIMATED_WORKLET) {
|
|
595
541
|
// Reanimated worklet
|
|
596
|
-
val event = RNGestureHandlerStateChangeEvent.obtain(handler, newState, oldState, handlerFactory)
|
|
542
|
+
val event = RNGestureHandlerStateChangeEvent.obtain(handler, newState, oldState, handlerFactory.createEventBuilder(handler))
|
|
597
543
|
sendEventForReanimated(event)
|
|
598
544
|
} else if (handler.actionType == GestureHandler.ACTION_TYPE_NATIVE_ANIMATED_EVENT ||
|
|
599
545
|
handler.actionType == GestureHandler.ACTION_TYPE_JS_FUNCTION_OLD_API
|
|
600
546
|
) {
|
|
601
547
|
// JS function or Animated.event with useNativeDriver: false with old API
|
|
602
548
|
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
|
|
603
|
-
val data = RNGestureHandlerStateChangeEvent.createEventData(handler,
|
|
549
|
+
val data = RNGestureHandlerStateChangeEvent.createEventData(handlerFactory.createEventBuilder(handler), newState, oldState)
|
|
604
550
|
sendEventForDeviceEvent(RNGestureHandlerStateChangeEvent.EVENT_NAME, data)
|
|
605
551
|
} else {
|
|
606
|
-
val event = RNGestureHandlerStateChangeEvent.obtain(handler, newState, oldState, handlerFactory)
|
|
552
|
+
val event = RNGestureHandlerStateChangeEvent.obtain(handler, newState, oldState, handlerFactory.createEventBuilder(handler))
|
|
607
553
|
sendEventForDirectEvent(event)
|
|
608
554
|
}
|
|
609
555
|
} else if (handler.actionType == GestureHandler.ACTION_TYPE_JS_FUNCTION_NEW_API) {
|
|
610
556
|
// JS function or Animated.event with useNativeDriver: false with new API
|
|
611
|
-
val data = RNGestureHandlerStateChangeEvent.createEventData(handler,
|
|
557
|
+
val data = RNGestureHandlerStateChangeEvent.createEventData(handlerFactory.createEventBuilder(handler), newState, oldState)
|
|
612
558
|
sendEventForDeviceEvent(RNGestureHandlerStateChangeEvent.EVENT_NAME, data)
|
|
613
559
|
}
|
|
614
560
|
}
|
package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt
CHANGED
|
@@ -40,7 +40,7 @@ class RNGestureHandlerRootView(context: Context?) : ReactViewGroup(context) {
|
|
|
40
40
|
override fun dispatchGenericMotionEvent(event: MotionEvent) =
|
|
41
41
|
if (_enabled && rootHelper!!.dispatchTouchEvent(event)) {
|
|
42
42
|
true
|
|
43
|
-
} else super.
|
|
43
|
+
} else super.dispatchGenericMotionEvent(event)
|
|
44
44
|
|
|
45
45
|
override fun requestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {
|
|
46
46
|
if (_enabled) {
|