react-native-gesture-handler 2.13.4 → 2.14.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. package/android/build.gradle +3 -2
  2. package/android/gradle.properties +2 -2
  3. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +36 -72
  4. package/android/src/main/java/com/swmansion/gesturehandler/react/Extensions.kt +1 -1
  5. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +12 -14
  6. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +8 -1
  7. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +34 -88
  8. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +1 -1
  9. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +18 -12
  10. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/FlingGestureHandlerEventDataBuilder.kt +30 -0
  11. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/GestureHandlerEventDataBuilder.kt +22 -0
  12. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/HoverGestureHandlerEventDataBuilder.kt +30 -0
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/LongPressGestureHandlerEventDataBuilder.kt +33 -0
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/ManualGestureHandlerEventDataBuilder.kt +5 -0
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/NativeGestureHandlerEventDataBuilder.kt +18 -0
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PanGestureHandlerEventDataBuilder.kt +42 -0
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PinchGestureHandlerEventDataBuilder.kt +30 -0
  18. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/RotationGestureHandlerEventDataBuilder.kt +30 -0
  19. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/TapGestureHandlerEventDataBuilder.kt +30 -0
  20. package/android/src/main/jni/CMakeLists.txt +14 -2
  21. package/ios/Handlers/RNHoverHandler.m +15 -14
  22. package/ios/RNGestureHandler.m +11 -0
  23. package/ios/RNGestureHandlerButtonComponentView.mm +2 -0
  24. package/lib/commonjs/components/gestureHandlerRootHOC.js.map +1 -1
  25. package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js +1 -1
  26. package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  27. package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js.map +1 -1
  28. package/lib/commonjs/getReactNativeVersion.js +22 -0
  29. package/lib/commonjs/getReactNativeVersion.js.map +1 -0
  30. package/lib/commonjs/getReactNativeVersion.web.js +11 -0
  31. package/lib/commonjs/getReactNativeVersion.web.js.map +1 -0
  32. package/lib/commonjs/handlers/gestureHandlerCommon.js +1 -1
  33. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  34. package/lib/commonjs/handlers/gestures/GestureDetector.js +13 -3
  35. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  36. package/lib/commonjs/handlers/gestures/gesture.js +8 -0
  37. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  38. package/lib/commonjs/handlers/gestures/gestureStateManager.js +39 -37
  39. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
  40. package/lib/commonjs/utils.js +0 -13
  41. package/lib/commonjs/utils.js.map +1 -1
  42. package/lib/commonjs/web/handlers/FlingGestureHandler.js +4 -6
  43. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  44. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  45. package/lib/commonjs/web/interfaces.js.map +1 -1
  46. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +4 -15
  47. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  48. package/lib/commonjs/web/tools/InteractionManager.js +27 -29
  49. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  50. package/lib/commonjs/web/tools/PointerEventManager.js +13 -3
  51. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  52. package/lib/module/components/gestureHandlerRootHOC.js.map +1 -1
  53. package/lib/module/components/touchables/TouchableNativeFeedback.android.js +1 -1
  54. package/lib/module/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  55. package/lib/module/components/touchables/TouchableWithoutFeedback.js.map +1 -1
  56. package/lib/module/getReactNativeVersion.js +10 -0
  57. package/lib/module/getReactNativeVersion.js.map +1 -0
  58. package/lib/module/getReactNativeVersion.web.js +4 -0
  59. package/lib/module/getReactNativeVersion.web.js.map +1 -0
  60. package/lib/module/handlers/gestureHandlerCommon.js +1 -1
  61. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  62. package/lib/module/handlers/gestures/GestureDetector.js +12 -3
  63. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  64. package/lib/module/handlers/gestures/gesture.js +8 -0
  65. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  66. package/lib/module/handlers/gestures/gestureStateManager.js +44 -42
  67. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  68. package/lib/module/utils.js +0 -6
  69. package/lib/module/utils.js.map +1 -1
  70. package/lib/module/web/handlers/FlingGestureHandler.js +4 -6
  71. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  72. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  73. package/lib/module/web/interfaces.js.map +1 -1
  74. package/lib/module/web/tools/GestureHandlerOrchestrator.js +4 -15
  75. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  76. package/lib/module/web/tools/InteractionManager.js +27 -29
  77. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  78. package/lib/module/web/tools/PointerEventManager.js +12 -3
  79. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  80. package/lib/typescript/ActionType.d.ts +1 -1
  81. package/lib/typescript/Directions.d.ts +1 -1
  82. package/lib/typescript/PlatformConstants.d.ts +1 -1
  83. package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
  84. package/lib/typescript/State.d.ts +1 -1
  85. package/lib/typescript/TouchEventType.d.ts +1 -1
  86. package/lib/typescript/components/DrawerLayout.d.ts +9 -9
  87. package/lib/typescript/components/GestureButtons.d.ts +3 -3
  88. package/lib/typescript/components/GestureComponents.d.ts +6 -6
  89. package/lib/typescript/components/GestureComponents.web.d.ts +1 -1
  90. package/lib/typescript/components/GestureHandlerRootView.android.d.ts +2 -1
  91. package/lib/typescript/components/GestureHandlerRootView.d.ts +2 -1
  92. package/lib/typescript/components/GestureHandlerRootView.web.d.ts +2 -1
  93. package/lib/typescript/components/Swipeable.d.ts +4 -4
  94. package/lib/typescript/components/gestureHandlerRootHOC.d.ts +1 -1
  95. package/lib/typescript/components/touchables/GenericTouchable.d.ts +4 -3
  96. package/lib/typescript/components/touchables/TouchableHighlight.d.ts +4 -3
  97. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +7 -6
  98. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +3 -2
  99. package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +1 -1
  100. package/lib/typescript/getReactNativeVersion.d.ts +4 -0
  101. package/lib/typescript/getReactNativeVersion.web.d.ts +1 -0
  102. package/lib/typescript/handlers/FlingGestureHandler.d.ts +2 -2
  103. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -2
  104. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +2 -2
  105. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +3 -3
  106. package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -2
  107. package/lib/typescript/handlers/PinchGestureHandler.d.ts +2 -2
  108. package/lib/typescript/handlers/RotationGestureHandler.d.ts +2 -2
  109. package/lib/typescript/handlers/TapGestureHandler.d.ts +2 -2
  110. package/lib/typescript/handlers/createHandler.d.ts +1 -1
  111. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +11 -10
  112. package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +32 -32
  113. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -2
  114. package/lib/typescript/handlers/gestures/flingGesture.d.ts +1 -1
  115. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +2 -2
  116. package/lib/typescript/handlers/gestures/gesture.d.ts +7 -5
  117. package/lib/typescript/handlers/gestures/gestureComposition.d.ts +4 -4
  118. package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +3 -1
  119. package/lib/typescript/handlers/gestures/hoverGesture.d.ts +3 -3
  120. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +1 -1
  121. package/lib/typescript/handlers/gestures/manualGesture.d.ts +1 -1
  122. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +1 -1
  123. package/lib/typescript/handlers/gestures/panGesture.d.ts +2 -2
  124. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +2 -2
  125. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +2 -2
  126. package/lib/typescript/handlers/gestures/tapGesture.d.ts +1 -1
  127. package/lib/typescript/jestUtils/jestUtils.d.ts +6 -6
  128. package/lib/typescript/typeUtils.d.ts +1 -1
  129. package/lib/typescript/utils.d.ts +1 -5
  130. package/lib/typescript/web/interfaces.d.ts +4 -3
  131. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +0 -1
  132. package/lib/typescript/web/tools/InteractionManager.d.ts +2 -1
  133. package/lib/typescript/web_hammer/GestureHandler.d.ts +2 -2
  134. package/package.json +7 -7
  135. package/src/components/gestureHandlerRootHOC.tsx +1 -3
  136. package/src/components/touchables/TouchableNativeFeedback.android.tsx +2 -1
  137. package/src/components/touchables/TouchableWithoutFeedback.tsx +3 -3
  138. package/src/getReactNativeVersion.ts +11 -0
  139. package/src/getReactNativeVersion.web.ts +3 -0
  140. package/src/handlers/gestureHandlerCommon.ts +6 -1
  141. package/src/handlers/gestures/GestureDetector.tsx +9 -6
  142. package/src/handlers/gestures/gesture.ts +9 -1
  143. package/src/handlers/gestures/gestureStateManager.ts +42 -40
  144. package/src/utils.ts +0 -8
  145. package/src/web/handlers/FlingGestureHandler.ts +5 -5
  146. package/src/web/handlers/GestureHandler.ts +1 -1
  147. package/src/web/interfaces.ts +1 -0
  148. package/src/web/tools/GestureHandlerOrchestrator.ts +4 -13
  149. package/src/web/tools/InteractionManager.ts +37 -30
  150. package/src/web/tools/PointerEventManager.ts +14 -3
  151. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +0 -8
  152. /package/android/{src/fabric → fabric/src/main}/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +0 -0
  153. /package/android/{src/fabric → fabric/src/main}/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +0 -0
  154. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +0 -0
  155. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +0 -0
  156. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +0 -0
  157. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +0 -0
  158. /package/android/{src/paper → paper/src/main}/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +0 -0
@@ -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/fabric/java'
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/paper/java'
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:MaxPermSize=256m
13
- org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
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
@@ -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 gestureHandlers = arrayOfNulls<GestureHandler<*>?>(SIMULTANEOUS_GESTURE_HANDLER_LIMIT)
24
- private val awaitingHandlers = arrayOfNulls<GestureHandler<*>?>(SIMULTANEOUS_GESTURE_HANDLER_LIMIT)
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
- var shouldCleanEmptyCells = false
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
- if (shouldCleanEmptyCells) {
89
- gestureHandlersCount = compactHandlersIf(gestureHandlers, gestureHandlersCount) { handler ->
90
- handler != null
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 (i in 0 until gestureHandlersCount) {
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
- awaitingHandlersCount = compactHandlersIf(awaitingHandlers, awaitingHandlersCount) { handler ->
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 (i in 0 until awaitingHandlersCount) {
129
- val otherHandler = awaitingHandlers[i]
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
- var toCancelCount = 0
186
- // Cancel all handlers that are required to be cancel upon current handler's activation
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
- handlersToCancel[toCancelCount++] = otherHandler
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 (i in awaitingHandlersCount - 1 downTo 0) {
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
- val handlersCount = gestureHandlersCount
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, 0, handlersCount)
230
- for (i in 0 until handlersCount) {
231
- deliverEventToGestureHandler(preparedHandlers[i]!!, event)
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 (i in awaitingHandlersCount - 1 downTo 0) {
237
- awaitingHandlers[i]!!.cancel()
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
- val handlersCount = gestureHandlersCount
242
- for (i in 0 until handlersCount) {
243
- preparedHandlers[i] = gestureHandlers[i]
244
- }
245
- for (i in handlersCount - 1 downTo 0) {
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?.state == GestureHandler.STATE_ACTIVE }
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
- for (i in 0 until awaitingHandlersCount) {
403
- if (awaitingHandlers[i] === handler) {
404
- return
405
- }
371
+ if (awaitingHandlers.contains(handler)) {
372
+ return
406
373
  }
407
- check(awaitingHandlersCount < awaitingHandlers.size) { "Too many recognizers" }
408
- awaitingHandlers[awaitingHandlersCount++] = handler
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
- for (i in 0 until gestureHandlersCount) {
417
- if (gestureHandlers[i] === handler) {
418
- return
419
- }
383
+ if (gestureHandlers.contains(handler)) {
384
+ return
420
385
  }
421
- check(gestureHandlersCount < gestureHandlers.size) { "Too many recognizers" }
422
- gestureHandlers[gestureHandlersCount++] = handler
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).isEnabled
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 extraData: WritableMap? = null
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
- dataExtractor: RNGestureHandlerEventDataExtractor<T>?,
30
+ dataBuilder: GestureHandlerEventDataBuilder<T>,
30
31
  useNativeAnimatedName: Boolean
31
32
  ) {
32
33
  super.init(handler.view!!.id)
33
- extraData = createEventData(handler, dataExtractor)
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
- extraData = null
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, extraData)
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
- dataExtractor: RNGestureHandlerEventDataExtractor<T>?,
62
+ dataBuilder: GestureHandlerEventDataBuilder<T>,
62
63
  useTopPrefixedName: Boolean = false
63
64
  ): RNGestureHandlerEvent =
64
65
  (EVENTS_POOL.acquire() ?: RNGestureHandlerEvent()).apply {
65
- init(handler, dataExtractor, useTopPrefixedName)
66
+ init(handler, dataBuilder, useTopPrefixedName)
66
67
  }
67
68
 
68
- fun <T : GestureHandler<T>> createEventData(
69
- handler: T,
70
- dataExtractor: RNGestureHandlerEventDataExtractor<T>?
69
+ fun createEventData(
70
+ dataBuilder: GestureHandlerEventDataBuilder<*>
71
71
  ): WritableMap = Arguments.createMap().apply {
72
- dataExtractor?.extractEventData(handler, this)
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>> : RNGestureHandlerEventDataExtractor<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
- override fun extractEventData(handler: T, eventData: WritableMap) {
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 extractEventData(handler: NativeViewGestureHandler, eventData: WritableMap) {
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 extractEventData(handler: TapGestureHandler, eventData: WritableMap) {
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 extractEventData(handler: LongPressGestureHandler, eventData: WritableMap) {
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 extractEventData(handler: PanGestureHandler, eventData: WritableMap) {
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 extractEventData(handler: PinchGestureHandler, eventData: WritableMap) {
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 extractEventData(handler: FlingGestureHandler, eventData: WritableMap) {
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 extractEventData(handler: RotationGestureHandler, eventData: WritableMap) {
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 extractEventData(handler: HoverGestureHandler, eventData: WritableMap) {
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, handlerFactory)
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, handlerFactory)
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, handlerFactory, newState, oldState)
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, handlerFactory, newState, oldState)
557
+ val data = RNGestureHandlerStateChangeEvent.createEventData(handlerFactory.createEventBuilder(handler), newState, oldState)
612
558
  sendEventForDeviceEvent(RNGestureHandlerStateChangeEvent.EVENT_NAME, data)
613
559
  }
614
560
  }
@@ -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.dispatchTouchEvent(event)
43
+ } else super.dispatchGenericMotionEvent(event)
44
44
 
45
45
  override fun requestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {
46
46
  if (_enabled) {