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.
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) {