react-native-gesture-handler 1.10.3 → 2.1.2

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 (382) hide show
  1. package/README.md +7 -6
  2. package/android/build.gradle +49 -1
  3. package/android/common/src/main/java/com/swmansion/common/GestureHandlerStateManager.kt +5 -0
  4. package/android/gradle.properties +19 -0
  5. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +18 -0
  6. package/android/lib/src/main/java/com/swmansion/gesturehandler/Extensions.kt +11 -0
  7. package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt +96 -0
  8. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +713 -0
  9. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.kt +8 -0
  10. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +562 -0
  11. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.kt +8 -0
  12. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +21 -0
  13. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.kt +49 -0
  14. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +97 -0
  15. package/android/lib/src/main/java/com/swmansion/gesturehandler/ManualGestureHandler.kt +11 -0
  16. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +129 -0
  17. package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.kt +9 -0
  18. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +289 -0
  19. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +88 -0
  20. package/android/lib/src/main/java/com/swmansion/gesturehandler/{PointerEventsConfig.java → PointerEventsConfig.kt} +3 -5
  21. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.kt +125 -0
  22. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt +79 -0
  23. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +167 -0
  24. package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.kt +10 -0
  25. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +348 -0
  26. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +57 -0
  27. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +59 -0
  28. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +8 -0
  29. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +61 -0
  30. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +686 -0
  31. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.kt +17 -0
  32. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +95 -0
  33. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +132 -0
  34. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.kt +5 -0
  35. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +68 -0
  36. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +34 -0
  37. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +66 -0
  38. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +69 -0
  39. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +51 -0
  40. package/ios/Handlers/RNFlingHandler.m +78 -5
  41. package/ios/Handlers/RNForceTouchHandler.m +29 -4
  42. package/ios/Handlers/RNLongPressHandler.m +105 -3
  43. package/ios/Handlers/RNManualHandler.h +4 -0
  44. package/ios/Handlers/RNManualHandler.m +73 -0
  45. package/ios/Handlers/RNNativeViewHandler.m +30 -2
  46. package/ios/Handlers/RNPanHandler.m +64 -4
  47. package/ios/Handlers/RNPinchHandler.m +61 -2
  48. package/ios/Handlers/RNRotationHandler.m +60 -1
  49. package/ios/Handlers/RNTapHandler.m +55 -8
  50. package/ios/RNGestureHandler.h +18 -4
  51. package/ios/RNGestureHandler.m +123 -13
  52. package/ios/RNGestureHandlerEvents.h +9 -0
  53. package/ios/RNGestureHandlerEvents.m +34 -0
  54. package/ios/RNGestureHandlerManager.h +7 -0
  55. package/ios/RNGestureHandlerManager.m +62 -34
  56. package/ios/RNGestureHandlerModule.m +39 -3
  57. package/ios/RNGestureHandlerPointerTracker.h +25 -0
  58. package/ios/RNGestureHandlerPointerTracker.m +237 -0
  59. package/ios/RNGestureHandlerRegistry.h +1 -0
  60. package/ios/RNGestureHandlerRegistry.m +10 -0
  61. package/ios/RNGestureHandlerStateManager.h +5 -0
  62. package/ios/RNManualActivationRecognizer.h +10 -0
  63. package/ios/RNManualActivationRecognizer.m +80 -0
  64. package/ios/RNRootViewGestureRecognizer.m +1 -1
  65. package/ios/RNTouchEventType.h +9 -0
  66. package/lib/commonjs/EventType.js +16 -0
  67. package/lib/commonjs/EventType.js.map +1 -0
  68. package/lib/commonjs/GestureHandlerRootView.android.js +1 -13
  69. package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
  70. package/lib/commonjs/GestureHandlerRootView.js +11 -3
  71. package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
  72. package/lib/commonjs/RNGestureHandlerModule.js +3 -1
  73. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  74. package/lib/commonjs/RNGestureHandlerModule.web.js +2 -2
  75. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  76. package/lib/commonjs/components/DrawerLayout.js +41 -37
  77. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  78. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  79. package/lib/commonjs/components/GestureComponents.js +31 -12
  80. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  81. package/lib/commonjs/components/Swipeable.js +10 -6
  82. package/lib/commonjs/components/Swipeable.js.map +1 -1
  83. package/lib/commonjs/components/touchables/GenericTouchable.js +2 -1
  84. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  85. package/lib/commonjs/components/touchables/TouchableOpacity.js +1 -1
  86. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  87. package/lib/commonjs/gestureHandlerRootHOC.js +1 -1
  88. package/lib/commonjs/gestureHandlerRootHOC.js.map +1 -1
  89. package/lib/commonjs/handlers/FlingGestureHandler.js +23 -0
  90. package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -0
  91. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +44 -0
  92. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -0
  93. package/lib/commonjs/handlers/LongPressGestureHandler.js +23 -0
  94. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -0
  95. package/lib/commonjs/handlers/NativeViewGestureHandler.js +6 -4
  96. package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
  97. package/lib/commonjs/handlers/PanGestureHandler.js +121 -0
  98. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -0
  99. package/lib/commonjs/handlers/PinchGestureHandler.js +21 -0
  100. package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -0
  101. package/lib/commonjs/handlers/RotationGestureHandler.js +21 -0
  102. package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -0
  103. package/lib/commonjs/handlers/TapGestureHandler.js +23 -0
  104. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -0
  105. package/lib/commonjs/handlers/createHandler.js +52 -83
  106. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  107. package/lib/commonjs/handlers/gestureHandlerCommon.js +80 -0
  108. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -0
  109. package/lib/commonjs/handlers/gestures/GestureDetector.js +440 -0
  110. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -0
  111. package/lib/commonjs/handlers/gestures/eventReceiver.js +135 -0
  112. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -0
  113. package/lib/commonjs/handlers/gestures/flingGesture.js +34 -0
  114. package/lib/commonjs/handlers/gestures/flingGesture.js.map +1 -0
  115. package/lib/commonjs/handlers/gestures/forceTouchGesture.js +65 -0
  116. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -0
  117. package/lib/commonjs/handlers/gestures/gesture.js +193 -0
  118. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -0
  119. package/lib/commonjs/handlers/gestures/gestureComposition.js +94 -0
  120. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -0
  121. package/lib/commonjs/handlers/gestures/gestureObjects.js +85 -0
  122. package/lib/commonjs/handlers/gestures/gestureObjects.js.map +1 -0
  123. package/lib/commonjs/handlers/gestures/gestureStateManager.js +58 -0
  124. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -0
  125. package/lib/commonjs/handlers/gestures/longPressGesture.js +34 -0
  126. package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -0
  127. package/lib/commonjs/handlers/gestures/manualGesture.js +31 -0
  128. package/lib/commonjs/handlers/gestures/manualGesture.js.map +1 -0
  129. package/lib/commonjs/handlers/gestures/nativeGesture.js +34 -0
  130. package/lib/commonjs/handlers/gestures/nativeGesture.js.map +1 -0
  131. package/lib/commonjs/handlers/gestures/panGesture.js +144 -0
  132. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -0
  133. package/lib/commonjs/handlers/gestures/pinchGesture.js +45 -0
  134. package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -0
  135. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +24 -0
  136. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -0
  137. package/lib/commonjs/handlers/gestures/rotationGesture.js +45 -0
  138. package/lib/commonjs/handlers/gestures/rotationGesture.js.map +1 -0
  139. package/lib/commonjs/handlers/gestures/tapGesture.js +59 -0
  140. package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -0
  141. package/lib/commonjs/handlers/handlersRegistry.js +31 -0
  142. package/lib/commonjs/handlers/handlersRegistry.js.map +1 -0
  143. package/lib/commonjs/index.js +146 -8
  144. package/lib/commonjs/index.js.map +1 -1
  145. package/lib/commonjs/init.js +13 -0
  146. package/lib/commonjs/init.js.map +1 -0
  147. package/lib/commonjs/mocks.js +31 -2
  148. package/lib/commonjs/mocks.js.map +1 -1
  149. package/lib/commonjs/utils.js +15 -0
  150. package/lib/commonjs/utils.js.map +1 -0
  151. package/lib/commonjs/web/Errors.js +1 -1
  152. package/lib/commonjs/web/Errors.js.map +1 -1
  153. package/lib/commonjs/web/GestureHandler.js +4 -6
  154. package/lib/commonjs/web/GestureHandler.js.map +1 -1
  155. package/lib/commonjs/web/NodeManager.js +8 -2
  156. package/lib/commonjs/web/NodeManager.js.map +1 -1
  157. package/lib/module/EventType.js +8 -0
  158. package/lib/module/EventType.js.map +1 -0
  159. package/lib/module/GestureHandlerRootView.android.js +2 -14
  160. package/lib/module/GestureHandlerRootView.android.js.map +1 -1
  161. package/lib/module/GestureHandlerRootView.js +5 -1
  162. package/lib/module/GestureHandlerRootView.js.map +1 -1
  163. package/lib/module/RNGestureHandlerModule.js +3 -1
  164. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  165. package/lib/module/RNGestureHandlerModule.web.js +2 -2
  166. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  167. package/lib/module/components/DrawerLayout.js +43 -40
  168. package/lib/module/components/DrawerLayout.js.map +1 -1
  169. package/lib/module/components/GestureButtons.js.map +1 -1
  170. package/lib/module/components/GestureComponents.js +29 -11
  171. package/lib/module/components/GestureComponents.js.map +1 -1
  172. package/lib/module/components/Swipeable.js +9 -6
  173. package/lib/module/components/Swipeable.js.map +1 -1
  174. package/lib/module/components/touchables/GenericTouchable.js +2 -1
  175. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  176. package/lib/module/components/touchables/TouchableOpacity.js +1 -1
  177. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  178. package/lib/module/gestureHandlerRootHOC.js +1 -1
  179. package/lib/module/gestureHandlerRootHOC.js.map +1 -1
  180. package/lib/module/handlers/FlingGestureHandler.js +10 -0
  181. package/lib/module/handlers/FlingGestureHandler.js.map +1 -0
  182. package/lib/module/handlers/ForceTouchGestureHandler.js +29 -0
  183. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -0
  184. package/lib/module/handlers/LongPressGestureHandler.js +10 -0
  185. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -0
  186. package/lib/module/handlers/NativeViewGestureHandler.js +4 -3
  187. package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
  188. package/lib/module/handlers/PanGestureHandler.js +106 -0
  189. package/lib/module/handlers/PanGestureHandler.js.map +1 -0
  190. package/lib/module/handlers/PinchGestureHandler.js +9 -0
  191. package/lib/module/handlers/PinchGestureHandler.js.map +1 -0
  192. package/lib/module/handlers/RotationGestureHandler.js +9 -0
  193. package/lib/module/handlers/RotationGestureHandler.js.map +1 -0
  194. package/lib/module/handlers/TapGestureHandler.js +10 -0
  195. package/lib/module/handlers/TapGestureHandler.js.map +1 -0
  196. package/lib/module/handlers/createHandler.js +41 -76
  197. package/lib/module/handlers/createHandler.js.map +1 -1
  198. package/lib/module/handlers/gestureHandlerCommon.js +66 -0
  199. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -0
  200. package/lib/module/handlers/gestures/GestureDetector.js +402 -0
  201. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -0
  202. package/lib/module/handlers/gestures/eventReceiver.js +120 -0
  203. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -0
  204. package/lib/module/handlers/gestures/flingGesture.js +24 -0
  205. package/lib/module/handlers/gestures/flingGesture.js.map +1 -0
  206. package/lib/module/handlers/gestures/forceTouchGesture.js +56 -0
  207. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -0
  208. package/lib/module/handlers/gestures/gesture.js +175 -0
  209. package/lib/module/handlers/gestures/gesture.js.map +1 -0
  210. package/lib/module/handlers/gestures/gestureComposition.js +79 -0
  211. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -0
  212. package/lib/module/handlers/gestures/gestureObjects.js +67 -0
  213. package/lib/module/handlers/gestures/gestureObjects.js.map +1 -0
  214. package/lib/module/handlers/gestures/gestureStateManager.js +48 -0
  215. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -0
  216. package/lib/module/handlers/gestures/longPressGesture.js +24 -0
  217. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -0
  218. package/lib/module/handlers/gestures/manualGesture.js +22 -0
  219. package/lib/module/handlers/gestures/manualGesture.js.map +1 -0
  220. package/lib/module/handlers/gestures/nativeGesture.js +24 -0
  221. package/lib/module/handlers/gestures/nativeGesture.js.map +1 -0
  222. package/lib/module/handlers/gestures/panGesture.js +135 -0
  223. package/lib/module/handlers/gestures/panGesture.js.map +1 -0
  224. package/lib/module/handlers/gestures/pinchGesture.js +36 -0
  225. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -0
  226. package/lib/module/handlers/gestures/reanimatedWrapper.js +19 -0
  227. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -0
  228. package/lib/module/handlers/gestures/rotationGesture.js +36 -0
  229. package/lib/module/handlers/gestures/rotationGesture.js.map +1 -0
  230. package/lib/module/handlers/gestures/tapGesture.js +49 -0
  231. package/lib/module/handlers/gestures/tapGesture.js.map +1 -0
  232. package/lib/module/handlers/handlersRegistry.js +16 -0
  233. package/lib/module/handlers/handlersRegistry.js.map +1 -0
  234. package/lib/module/index.js +22 -1
  235. package/lib/module/index.js.map +1 -1
  236. package/lib/module/init.js +5 -0
  237. package/lib/module/init.js.map +1 -0
  238. package/lib/module/mocks.js +31 -2
  239. package/lib/module/mocks.js.map +1 -1
  240. package/lib/module/utils.js +8 -0
  241. package/lib/module/utils.js.map +1 -0
  242. package/lib/module/web/Errors.js +1 -1
  243. package/lib/module/web/Errors.js.map +1 -1
  244. package/lib/module/web/GestureHandler.js +4 -6
  245. package/lib/module/web/GestureHandler.js.map +1 -1
  246. package/lib/module/web/NodeManager.js +8 -2
  247. package/lib/module/web/NodeManager.js.map +1 -1
  248. package/lib/typescript/EventType.d.ts +8 -0
  249. package/lib/typescript/GestureHandlerRootView.android.d.ts +2 -4
  250. package/lib/typescript/GestureHandlerRootView.d.ts +5 -2
  251. package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
  252. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  253. package/lib/typescript/components/DrawerLayout.d.ts +50 -1
  254. package/lib/typescript/components/GestureButtons.d.ts +36 -0
  255. package/lib/typescript/components/GestureComponents.d.ts +8 -35
  256. package/lib/typescript/components/Swipeable.d.ts +73 -6
  257. package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -2
  258. package/lib/typescript/components/touchables/TouchableHighlight.d.ts +1 -0
  259. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +1 -0
  260. package/lib/typescript/handlers/FlingGestureHandler.d.ts +33 -0
  261. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +43 -0
  262. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +55 -0
  263. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +19 -4
  264. package/lib/typescript/handlers/PanGestureHandler.d.ts +137 -0
  265. package/lib/typescript/handlers/PinchGestureHandler.d.ts +28 -0
  266. package/lib/typescript/handlers/RotationGestureHandler.d.ts +28 -0
  267. package/lib/typescript/handlers/TapGestureHandler.d.ts +56 -0
  268. package/lib/typescript/handlers/createHandler.d.ts +1 -1
  269. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +62 -0
  270. package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +8 -1
  271. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +16 -0
  272. package/lib/typescript/handlers/gestures/eventReceiver.d.ts +2 -0
  273. package/lib/typescript/handlers/gestures/flingGesture.d.ts +9 -0
  274. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +16 -0
  275. package/lib/typescript/handlers/gestures/gesture.d.ts +97 -0
  276. package/lib/typescript/handlers/gestures/gestureComposition.d.ts +21 -0
  277. package/lib/typescript/handlers/gestures/gestureObjects.d.ts +39 -0
  278. package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +9 -0
  279. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +9 -0
  280. package/lib/typescript/handlers/gestures/manualGesture.d.ts +7 -0
  281. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +9 -0
  282. package/lib/typescript/handlers/gestures/panGesture.d.ts +26 -0
  283. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +12 -0
  284. package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts +14 -0
  285. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +12 -0
  286. package/lib/typescript/handlers/gestures/tapGesture.d.ts +14 -0
  287. package/lib/typescript/handlers/handlersRegistry.d.ts +6 -0
  288. package/lib/typescript/index.d.ts +29 -2
  289. package/lib/typescript/init.d.ts +1 -0
  290. package/lib/typescript/mocks.d.ts +21 -2
  291. package/lib/typescript/utils.d.ts +1 -0
  292. package/lib/typescript/web/FlingGestureHandler.d.ts +0 -1
  293. package/lib/typescript/web/GestureHandler.d.ts +0 -1
  294. package/lib/typescript/web/PanGestureHandler.d.ts +0 -1
  295. package/lib/typescript/web/PinchGestureHandler.d.ts +0 -1
  296. package/lib/typescript/web/PressGestureHandler.d.ts +0 -1
  297. package/lib/typescript/web/RotationGestureHandler.d.ts +0 -1
  298. package/lib/typescript/web/TapGestureHandler.d.ts +0 -1
  299. package/package.json +8 -5
  300. package/src/EventType.ts +10 -0
  301. package/src/GestureHandlerRootView.android.tsx +9 -25
  302. package/src/GestureHandlerRootView.tsx +11 -2
  303. package/src/RNGestureHandlerModule.ts +5 -1
  304. package/src/RNGestureHandlerModule.web.ts +1 -0
  305. package/src/components/DrawerLayout.tsx +114 -41
  306. package/src/components/GestureButtons.tsx +45 -5
  307. package/src/components/GestureComponents.tsx +47 -41
  308. package/src/components/Swipeable.tsx +108 -21
  309. package/src/components/touchables/GenericTouchable.tsx +2 -1
  310. package/src/components/touchables/TouchableOpacity.tsx +1 -1
  311. package/src/handlers/FlingGestureHandler.ts +57 -0
  312. package/src/handlers/ForceTouchGestureHandler.ts +83 -0
  313. package/src/handlers/LongPressGestureHandler.ts +84 -0
  314. package/src/handlers/NativeViewGestureHandler.ts +31 -7
  315. package/src/handlers/PanGestureHandler.ts +321 -0
  316. package/src/handlers/PinchGestureHandler.ts +46 -0
  317. package/src/handlers/RotationGestureHandler.ts +46 -0
  318. package/src/handlers/TapGestureHandler.ts +90 -0
  319. package/src/handlers/createHandler.ts +54 -79
  320. package/src/handlers/gestureHandlerCommon.ts +185 -0
  321. package/src/handlers/gestureHandlerTypesCompat.ts +19 -5
  322. package/src/handlers/gestures/GestureDetector.tsx +519 -0
  323. package/src/handlers/gestures/eventReceiver.ts +151 -0
  324. package/src/handlers/gestures/flingGesture.ts +27 -0
  325. package/src/handlers/gestures/forceTouchGesture.ts +74 -0
  326. package/src/handlers/gestures/gesture.ts +292 -0
  327. package/src/handlers/gestures/gestureComposition.ts +109 -0
  328. package/src/handlers/gestures/gestureObjects.ts +79 -0
  329. package/src/handlers/gestures/gestureStateManager.ts +60 -0
  330. package/src/handlers/gestures/longPressGesture.ts +27 -0
  331. package/src/handlers/gestures/manualGesture.ts +31 -0
  332. package/src/handlers/gestures/nativeGesture.ts +27 -0
  333. package/src/handlers/gestures/panGesture.ts +147 -0
  334. package/src/handlers/gestures/pinchGesture.ts +51 -0
  335. package/src/handlers/gestures/reanimatedWrapper.ts +45 -0
  336. package/src/handlers/gestures/rotationGesture.ts +51 -0
  337. package/src/handlers/gestures/tapGesture.ts +52 -0
  338. package/src/handlers/handlersRegistry.ts +22 -0
  339. package/src/index.ts +57 -17
  340. package/src/init.ts +5 -0
  341. package/src/mocks.ts +42 -2
  342. package/src/utils.ts +7 -0
  343. package/src/web/GestureHandler.ts +1 -2
  344. package/src/web/NodeManager.ts +5 -0
  345. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.java +0 -23
  346. package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.java +0 -110
  347. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.java +0 -531
  348. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.java +0 -8
  349. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.java +0 -543
  350. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.java +0 -10
  351. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.java +0 -29
  352. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.java +0 -53
  353. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.java +0 -81
  354. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.java +0 -110
  355. package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.java +0 -8
  356. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.java +0 -312
  357. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.java +0 -109
  358. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.java +0 -169
  359. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.java +0 -96
  360. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.java +0 -172
  361. package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.java +0 -10
  362. package/android/src/main/java/com/facebook/react/views/modal/RNGHModalUtils.java +0 -21
  363. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.java +0 -296
  364. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.java +0 -72
  365. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java +0 -77
  366. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.java +0 -8
  367. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.java +0 -86
  368. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.java +0 -731
  369. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.java +0 -31
  370. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.java +0 -101
  371. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.java +0 -151
  372. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.java +0 -7
  373. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.java +0 -76
  374. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.java +0 -49
  375. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java +0 -82
  376. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.java +0 -61
  377. package/lib/commonjs/handlers/gestureHandlers.js +0 -236
  378. package/lib/commonjs/handlers/gestureHandlers.js.map +0 -1
  379. package/lib/module/handlers/gestureHandlers.js +0 -216
  380. package/lib/module/handlers/gestureHandlers.js.map +0 -1
  381. package/lib/typescript/handlers/gestureHandlers.d.ts +0 -158
  382. package/src/handlers/gestureHandlers.ts +0 -511
@@ -0,0 +1,686 @@
1
+ package com.swmansion.gesturehandler.react
2
+
3
+ import android.content.Context
4
+ import android.view.MotionEvent
5
+ import android.view.ViewGroup
6
+ import com.facebook.react.ReactRootView
7
+ import com.facebook.react.bridge.*
8
+ import com.facebook.react.module.annotations.ReactModule
9
+ import com.facebook.react.uimanager.PixelUtil
10
+ import com.facebook.react.uimanager.UIBlock
11
+ import com.swmansion.common.GestureHandlerStateManager
12
+ import com.swmansion.gesturehandler.*
13
+ import java.util.*
14
+
15
+ @ReactModule(name = RNGestureHandlerModule.MODULE_NAME)
16
+ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
17
+ : ReactContextBaseJavaModule(reactContext), GestureHandlerStateManager {
18
+ private abstract class HandlerFactory<T : GestureHandler<T>> : RNGestureHandlerEventDataExtractor<T> {
19
+ abstract val type: Class<T>
20
+ abstract val name: String
21
+ abstract fun create(context: Context?): T
22
+ open fun configure(handler: T, config: ReadableMap) {
23
+ handler.resetConfig()
24
+ if (config.hasKey(KEY_SHOULD_CANCEL_WHEN_OUTSIDE)) {
25
+ handler.setShouldCancelWhenOutside(config.getBoolean(KEY_SHOULD_CANCEL_WHEN_OUTSIDE))
26
+ }
27
+ if (config.hasKey(KEY_ENABLED)) {
28
+ handler.setEnabled(config.getBoolean(KEY_ENABLED))
29
+ }
30
+ if (config.hasKey(KEY_HIT_SLOP)) {
31
+ handleHitSlopProperty(handler, config)
32
+ }
33
+ if (config.hasKey(KEY_NEEDS_POINTER_DATA)) {
34
+ handler.needsPointerData = config.getBoolean(KEY_NEEDS_POINTER_DATA)
35
+ }
36
+ if (config.hasKey(KEY_MANUAL_ACTIVATION)) {
37
+ handler.setManualActivation(config.getBoolean(KEY_MANUAL_ACTIVATION))
38
+ }
39
+ }
40
+
41
+ override fun extractEventData(handler: T, eventData: WritableMap) {
42
+ eventData.putDouble("numberOfPointers", handler.numberOfPointers.toDouble())
43
+ }
44
+ }
45
+
46
+ private class NativeViewGestureHandlerFactory : HandlerFactory<NativeViewGestureHandler>() {
47
+ override val type = NativeViewGestureHandler::class.java
48
+ override val name = "NativeViewGestureHandler"
49
+
50
+ override fun create(context: Context?): NativeViewGestureHandler {
51
+ return NativeViewGestureHandler()
52
+ }
53
+
54
+ override fun configure(handler: NativeViewGestureHandler, config: ReadableMap) {
55
+ super.configure(handler, config)
56
+ if (config.hasKey(KEY_NATIVE_VIEW_SHOULD_ACTIVATE_ON_START)) {
57
+ handler.setShouldActivateOnStart(
58
+ config.getBoolean(KEY_NATIVE_VIEW_SHOULD_ACTIVATE_ON_START))
59
+ }
60
+ if (config.hasKey(KEY_NATIVE_VIEW_DISALLOW_INTERRUPTION)) {
61
+ handler.setDisallowInterruption(config.getBoolean(KEY_NATIVE_VIEW_DISALLOW_INTERRUPTION))
62
+ }
63
+ }
64
+
65
+ override fun extractEventData(handler: NativeViewGestureHandler, eventData: WritableMap) {
66
+ super.extractEventData(handler, eventData)
67
+ eventData.putBoolean("pointerInside", handler.isWithinBounds)
68
+ }
69
+ }
70
+
71
+ private class TapGestureHandlerFactory : HandlerFactory<TapGestureHandler>() {
72
+ override val type = TapGestureHandler::class.java
73
+ override val name = "TapGestureHandler"
74
+
75
+ override fun create(context: Context?): TapGestureHandler {
76
+ return TapGestureHandler()
77
+ }
78
+
79
+ override fun configure(handler: TapGestureHandler, config: ReadableMap) {
80
+ super.configure(handler, config)
81
+ if (config.hasKey(KEY_TAP_NUMBER_OF_TAPS)) {
82
+ handler.setNumberOfTaps(config.getInt(KEY_TAP_NUMBER_OF_TAPS))
83
+ }
84
+ if (config.hasKey(KEY_TAP_MAX_DURATION_MS)) {
85
+ handler.setMaxDurationMs(config.getInt(KEY_TAP_MAX_DURATION_MS).toLong())
86
+ }
87
+ if (config.hasKey(KEY_TAP_MAX_DELAY_MS)) {
88
+ handler.setMaxDelayMs(config.getInt(KEY_TAP_MAX_DELAY_MS).toLong())
89
+ }
90
+ if (config.hasKey(KEY_TAP_MAX_DELTA_X)) {
91
+ handler.setMaxDx(PixelUtil.toPixelFromDIP(config.getDouble(KEY_TAP_MAX_DELTA_X)))
92
+ }
93
+ if (config.hasKey(KEY_TAP_MAX_DELTA_Y)) {
94
+ handler.setMaxDy(PixelUtil.toPixelFromDIP(config.getDouble(KEY_TAP_MAX_DELTA_Y)))
95
+ }
96
+ if (config.hasKey(KEY_TAP_MAX_DIST)) {
97
+ handler.setMaxDist(PixelUtil.toPixelFromDIP(config.getDouble(KEY_TAP_MAX_DIST)))
98
+ }
99
+ if (config.hasKey(KEY_TAP_MIN_POINTERS)) {
100
+ handler.setMinNumberOfPointers(config.getInt(KEY_TAP_MIN_POINTERS))
101
+ }
102
+ }
103
+
104
+ override fun extractEventData(handler: TapGestureHandler, eventData: WritableMap) {
105
+ super.extractEventData(handler, eventData)
106
+ with(eventData) {
107
+ putDouble("x", PixelUtil.toDIPFromPixel(handler.lastRelativePositionX).toDouble())
108
+ putDouble("y", PixelUtil.toDIPFromPixel(handler.lastRelativePositionY).toDouble())
109
+ putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.lastAbsolutePositionX).toDouble())
110
+ putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.lastAbsolutePositionY).toDouble())
111
+ }
112
+ }
113
+ }
114
+
115
+ private class LongPressGestureHandlerFactory : HandlerFactory<LongPressGestureHandler>() {
116
+ override val type = LongPressGestureHandler::class.java
117
+ override val name = "LongPressGestureHandler"
118
+
119
+ override fun create(context: Context?): LongPressGestureHandler {
120
+ return LongPressGestureHandler((context)!!)
121
+ }
122
+
123
+ override fun configure(handler: LongPressGestureHandler, config: ReadableMap) {
124
+ super.configure(handler, config)
125
+ if (config.hasKey(KEY_LONG_PRESS_MIN_DURATION_MS)) {
126
+ handler.minDurationMs = config.getInt(KEY_LONG_PRESS_MIN_DURATION_MS).toLong()
127
+ }
128
+ if (config.hasKey(KEY_LONG_PRESS_MAX_DIST)) {
129
+ handler.setMaxDist(PixelUtil.toPixelFromDIP(config.getDouble(KEY_LONG_PRESS_MAX_DIST)))
130
+ }
131
+ }
132
+
133
+ override fun extractEventData(handler: LongPressGestureHandler, eventData: WritableMap) {
134
+ super.extractEventData(handler, eventData)
135
+ with(eventData) {
136
+ putDouble("x", PixelUtil.toDIPFromPixel(handler.lastRelativePositionX).toDouble())
137
+ putDouble("y", PixelUtil.toDIPFromPixel(handler.lastRelativePositionY).toDouble())
138
+ putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.lastAbsolutePositionX).toDouble())
139
+ putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.lastAbsolutePositionY).toDouble())
140
+ putInt("duration", handler.duration)
141
+ }
142
+ }
143
+ }
144
+
145
+ private class PanGestureHandlerFactory : HandlerFactory<PanGestureHandler>() {
146
+ override val type = PanGestureHandler::class.java
147
+ override val name = "PanGestureHandler"
148
+
149
+ override fun create(context: Context?): PanGestureHandler {
150
+ return PanGestureHandler(context)
151
+ }
152
+
153
+ override fun configure(handler: PanGestureHandler, config: ReadableMap) {
154
+ super.configure(handler, config)
155
+ var hasCustomActivationCriteria = false
156
+ if (config.hasKey(KEY_PAN_ACTIVE_OFFSET_X_START)) {
157
+ handler.setActiveOffsetXStart(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_ACTIVE_OFFSET_X_START)))
158
+ hasCustomActivationCriteria = true
159
+ }
160
+ if (config.hasKey(KEY_PAN_ACTIVE_OFFSET_X_END)) {
161
+ handler.setActiveOffsetXEnd(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_ACTIVE_OFFSET_X_END)))
162
+ hasCustomActivationCriteria = true
163
+ }
164
+ if (config.hasKey(KEY_PAN_FAIL_OFFSET_RANGE_X_START)) {
165
+ handler.setFailOffsetXStart(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_FAIL_OFFSET_RANGE_X_START)))
166
+ hasCustomActivationCriteria = true
167
+ }
168
+ if (config.hasKey(KEY_PAN_FAIL_OFFSET_RANGE_X_END)) {
169
+ handler.setFailOffsetXEnd(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_FAIL_OFFSET_RANGE_X_END)))
170
+ hasCustomActivationCriteria = true
171
+ }
172
+ if (config.hasKey(KEY_PAN_ACTIVE_OFFSET_Y_START)) {
173
+ handler.setActiveOffsetYStart(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_ACTIVE_OFFSET_Y_START)))
174
+ hasCustomActivationCriteria = true
175
+ }
176
+ if (config.hasKey(KEY_PAN_ACTIVE_OFFSET_Y_END)) {
177
+ handler.setActiveOffsetYEnd(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_ACTIVE_OFFSET_Y_END)))
178
+ hasCustomActivationCriteria = true
179
+ }
180
+ if (config.hasKey(KEY_PAN_FAIL_OFFSET_RANGE_Y_START)) {
181
+ handler.setFailOffsetYStart(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_FAIL_OFFSET_RANGE_Y_START)))
182
+ hasCustomActivationCriteria = true
183
+ }
184
+ if (config.hasKey(KEY_PAN_FAIL_OFFSET_RANGE_Y_END)) {
185
+ handler.setFailOffsetYEnd(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_FAIL_OFFSET_RANGE_Y_END)))
186
+ hasCustomActivationCriteria = true
187
+ }
188
+ if (config.hasKey(KEY_PAN_MIN_VELOCITY)) {
189
+ // This value is actually in DPs/ms, but we can use the same function as for converting
190
+ // from DPs to pixels as the unit we're converting is in the numerator
191
+ handler.setMinVelocity(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_MIN_VELOCITY)))
192
+ hasCustomActivationCriteria = true
193
+ }
194
+ if (config.hasKey(KEY_PAN_MIN_VELOCITY_X)) {
195
+ handler.setMinVelocityX(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_MIN_VELOCITY_X)))
196
+ hasCustomActivationCriteria = true
197
+ }
198
+ if (config.hasKey(KEY_PAN_MIN_VELOCITY_Y)) {
199
+ handler.setMinVelocityY(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_MIN_VELOCITY_Y)))
200
+ hasCustomActivationCriteria = true
201
+ }
202
+
203
+ // PanGestureHandler sets minDist by default, if there are custom criteria specified we want
204
+ // to reset that setting and use provided criteria instead.
205
+ if (config.hasKey(KEY_PAN_MIN_DIST)) {
206
+ handler.setMinDist(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_MIN_DIST)))
207
+ } else if (hasCustomActivationCriteria) {
208
+ handler.setMinDist(Float.MAX_VALUE)
209
+ }
210
+ if (config.hasKey(KEY_PAN_MIN_POINTERS)) {
211
+ handler.setMinPointers(config.getInt(KEY_PAN_MIN_POINTERS))
212
+ }
213
+ if (config.hasKey(KEY_PAN_MAX_POINTERS)) {
214
+ handler.setMaxPointers(config.getInt(KEY_PAN_MAX_POINTERS))
215
+ }
216
+ if (config.hasKey(KEY_PAN_AVG_TOUCHES)) {
217
+ handler.setAverageTouches(config.getBoolean(KEY_PAN_AVG_TOUCHES))
218
+ }
219
+ }
220
+
221
+ override fun extractEventData(handler: PanGestureHandler, eventData: WritableMap) {
222
+ super.extractEventData(handler, eventData)
223
+ with(eventData) {
224
+ putDouble("x", PixelUtil.toDIPFromPixel(handler.lastRelativePositionX).toDouble())
225
+ putDouble("y", PixelUtil.toDIPFromPixel(handler.lastRelativePositionY).toDouble())
226
+ putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.lastAbsolutePositionX).toDouble())
227
+ putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.lastAbsolutePositionY).toDouble())
228
+ putDouble("translationX", PixelUtil.toDIPFromPixel(handler.translationX).toDouble())
229
+ putDouble("translationY", PixelUtil.toDIPFromPixel(handler.translationY).toDouble())
230
+ putDouble("velocityX", PixelUtil.toDIPFromPixel(handler.velocityX).toDouble())
231
+ putDouble("velocityY", PixelUtil.toDIPFromPixel(handler.velocityY).toDouble())
232
+ }
233
+ }
234
+ }
235
+
236
+ private class PinchGestureHandlerFactory : HandlerFactory<PinchGestureHandler>() {
237
+ override val type = PinchGestureHandler::class.java
238
+ override val name = "PinchGestureHandler"
239
+
240
+ override fun create(context: Context?): PinchGestureHandler {
241
+ return PinchGestureHandler()
242
+ }
243
+
244
+ override fun extractEventData(handler: PinchGestureHandler, eventData: WritableMap) {
245
+ super.extractEventData(handler, eventData)
246
+ with(eventData) {
247
+ putDouble("scale", handler.scale)
248
+ putDouble("focalX", PixelUtil.toDIPFromPixel(handler.focalPointX).toDouble())
249
+ putDouble("focalY", PixelUtil.toDIPFromPixel(handler.focalPointY).toDouble())
250
+ putDouble("velocity", handler.velocity)
251
+ }
252
+ }
253
+ }
254
+
255
+ private class FlingGestureHandlerFactory : HandlerFactory<FlingGestureHandler>() {
256
+ override val type = FlingGestureHandler::class.java
257
+ override val name = "FlingGestureHandler"
258
+
259
+ override fun create(context: Context?): FlingGestureHandler {
260
+ return FlingGestureHandler()
261
+ }
262
+
263
+ override fun configure(handler: FlingGestureHandler, config: ReadableMap) {
264
+ super.configure(handler, config)
265
+ if (config.hasKey(KEY_NUMBER_OF_POINTERS)) {
266
+ handler.numberOfPointersRequired = config.getInt(KEY_NUMBER_OF_POINTERS)
267
+ }
268
+ if (config.hasKey(KEY_DIRECTION)) {
269
+ handler.direction = config.getInt(KEY_DIRECTION)
270
+ }
271
+ }
272
+
273
+ override fun extractEventData(handler: FlingGestureHandler, eventData: WritableMap) {
274
+ super.extractEventData(handler, eventData)
275
+ with(eventData) {
276
+ putDouble("x", PixelUtil.toDIPFromPixel(handler.lastRelativePositionX).toDouble())
277
+ putDouble("y", PixelUtil.toDIPFromPixel(handler.lastRelativePositionY).toDouble())
278
+ putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.lastAbsolutePositionX).toDouble())
279
+ putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.lastAbsolutePositionY).toDouble())
280
+ }
281
+ }
282
+ }
283
+
284
+ private class RotationGestureHandlerFactory : HandlerFactory<RotationGestureHandler>() {
285
+ override val type = RotationGestureHandler::class.java
286
+ override val name = "RotationGestureHandler"
287
+
288
+ override fun create(context: Context?): RotationGestureHandler {
289
+ return RotationGestureHandler()
290
+ }
291
+
292
+ override fun extractEventData(handler: RotationGestureHandler, eventData: WritableMap) {
293
+ super.extractEventData(handler, eventData)
294
+ with(eventData) {
295
+ putDouble("rotation", handler.rotation)
296
+ putDouble("anchorX", PixelUtil.toDIPFromPixel(handler.anchorX).toDouble())
297
+ putDouble("anchorY", PixelUtil.toDIPFromPixel(handler.anchorY).toDouble())
298
+ putDouble("velocity", handler.velocity)
299
+ }
300
+ }
301
+ }
302
+
303
+ private class ManualGestureHandlerFactory : HandlerFactory<ManualGestureHandler>() {
304
+ override val type = ManualGestureHandler::class.java
305
+ override val name = "ManualGestureHandler"
306
+
307
+ override fun create(context: Context?): ManualGestureHandler {
308
+ return ManualGestureHandler()
309
+ }
310
+ }
311
+
312
+ private val eventListener = object : OnTouchEventListener {
313
+ override fun <T : GestureHandler<T>> onHandlerUpdate(handler: T, event: MotionEvent) {
314
+ this@RNGestureHandlerModule.onHandlerUpdate(handler, event)
315
+ }
316
+
317
+ override fun <T : GestureHandler<T>> onStateChange(handler: T, newState: Int, oldState: Int) {
318
+ this@RNGestureHandlerModule.onStateChange(handler, newState, oldState)
319
+ }
320
+
321
+ override fun <T : GestureHandler<T>> onTouchEvent(handler: T) {
322
+ this@RNGestureHandlerModule.onTouchEvent(handler)
323
+ }
324
+ }
325
+ private val handlerFactories = arrayOf<HandlerFactory<*>>(
326
+ NativeViewGestureHandlerFactory(),
327
+ TapGestureHandlerFactory(),
328
+ LongPressGestureHandlerFactory(),
329
+ PanGestureHandlerFactory(),
330
+ PinchGestureHandlerFactory(),
331
+ RotationGestureHandlerFactory(),
332
+ FlingGestureHandlerFactory(),
333
+ ManualGestureHandlerFactory(),
334
+ )
335
+ val registry: RNGestureHandlerRegistry = RNGestureHandlerRegistry()
336
+ private val interactionManager = RNGestureHandlerInteractionManager()
337
+ private val roots: MutableList<RNGestureHandlerRootHelper> = ArrayList()
338
+ private val enqueuedRootViewInit: MutableList<Int> = ArrayList()
339
+ override fun getName() = MODULE_NAME
340
+
341
+ @ReactMethod
342
+ @Suppress("UNCHECKED_CAST")
343
+ fun <T : GestureHandler<T>> createGestureHandler(
344
+ handlerName: String, handlerTag: Int, config: ReadableMap,
345
+ ) {
346
+ for (handlerFactory in handlerFactories as Array<HandlerFactory<T>>) {
347
+ if (handlerFactory.name == handlerName) {
348
+ val handler = handlerFactory.create(reactApplicationContext).apply {
349
+ tag = handlerTag
350
+ setOnTouchEventListener(eventListener)
351
+ }
352
+ registry.registerHandler(handler)
353
+ interactionManager.configureInteractions(handler, config)
354
+ handlerFactory.configure(handler, config)
355
+ return
356
+ }
357
+ }
358
+ throw JSApplicationIllegalArgumentException("Invalid handler name $handlerName")
359
+ }
360
+
361
+ @ReactMethod
362
+ fun attachGestureHandler(handlerTag: Int, viewTag: Int, useDeviceEvents: Boolean) {
363
+ tryInitializeHandlerForReactRootView(viewTag)
364
+
365
+ if (!registry.attachHandlerToView(handlerTag, viewTag, useDeviceEvents)) {
366
+ throw JSApplicationIllegalArgumentException("Handler with tag $handlerTag does not exists")
367
+ }
368
+ }
369
+
370
+ @ReactMethod
371
+ @Suppress("UNCHECKED_CAST")
372
+ fun <T : GestureHandler<T>> updateGestureHandler(handlerTag: Int, config: ReadableMap) {
373
+ val handler = registry.getHandler(handlerTag) as T?
374
+ if (handler != null) {
375
+ val factory = findFactoryForHandler(handler)
376
+ if (factory != null) {
377
+ interactionManager.dropRelationsForHandlerWithTag(handlerTag)
378
+ interactionManager.configureInteractions(handler, config)
379
+ factory.configure(handler, config)
380
+ }
381
+ }
382
+ }
383
+
384
+ @ReactMethod
385
+ fun dropGestureHandler(handlerTag: Int) {
386
+ interactionManager.dropRelationsForHandlerWithTag(handlerTag)
387
+ registry.dropHandler(handlerTag)
388
+ }
389
+
390
+ @ReactMethod
391
+ fun handleSetJSResponder(viewTag: Int, blockNativeResponder: Boolean) {
392
+ val rootView = findRootHelperForViewAncestor(viewTag)
393
+ rootView?.handleSetJSResponder(viewTag, blockNativeResponder)
394
+ }
395
+
396
+ @ReactMethod
397
+ fun handleClearJSResponder() {
398
+ }
399
+
400
+ override fun setGestureHandlerState(handlerTag: Int, newState: Int) {
401
+ registry.getHandler(handlerTag)?.let { handler ->
402
+ when (newState) {
403
+ GestureHandler.STATE_ACTIVE -> handler.activate(force = true)
404
+ GestureHandler.STATE_BEGAN -> handler.begin()
405
+ GestureHandler.STATE_END -> handler.end()
406
+ GestureHandler.STATE_FAILED -> handler.fail()
407
+ GestureHandler.STATE_CANCELLED -> handler.cancel()
408
+ }
409
+ }
410
+ }
411
+
412
+ override fun getConstants(): Map<String, Any> {
413
+ return mapOf(
414
+ "State" to mapOf(
415
+ "UNDETERMINED" to GestureHandler.STATE_UNDETERMINED,
416
+ "BEGAN" to GestureHandler.STATE_BEGAN,
417
+ "ACTIVE" to GestureHandler.STATE_ACTIVE,
418
+ "CANCELLED" to GestureHandler.STATE_CANCELLED,
419
+ "FAILED" to GestureHandler.STATE_FAILED,
420
+ "END" to GestureHandler.STATE_END
421
+ ),
422
+ "Direction" to mapOf(
423
+ "RIGHT" to GestureHandler.DIRECTION_RIGHT,
424
+ "LEFT" to GestureHandler.DIRECTION_LEFT,
425
+ "UP" to GestureHandler.DIRECTION_UP,
426
+ "DOWN" to GestureHandler.DIRECTION_DOWN
427
+ )
428
+ )
429
+ }
430
+
431
+ override fun onCatalystInstanceDestroy() {
432
+ registry.dropAllHandlers()
433
+ interactionManager.reset()
434
+ synchronized(roots) {
435
+ while (roots.isNotEmpty()) {
436
+ val sizeBefore: Int = roots.size
437
+ val root: RNGestureHandlerRootHelper = roots[0]
438
+ val reactRootView: ViewGroup = root.rootView
439
+ if (reactRootView is RNGestureHandlerEnabledRootView) {
440
+ reactRootView.tearDown()
441
+ } else {
442
+ root.tearDown()
443
+ }
444
+ if (roots.size >= sizeBefore) {
445
+ throw IllegalStateException("Expected root helper to get unregistered while tearing down")
446
+ }
447
+ }
448
+ }
449
+ super.onCatalystInstanceDestroy()
450
+ }
451
+
452
+ private fun tryInitializeHandlerForReactRootView(ancestorViewTag: Int) {
453
+ val uiManager = reactApplicationContext.UIManager
454
+ val rootViewTag = uiManager.resolveRootTagFromReactTag(ancestorViewTag)
455
+ if (rootViewTag < 1) {
456
+ throw JSApplicationIllegalArgumentException("Could find root view for a given ancestor with tag $ancestorViewTag")
457
+ }
458
+ synchronized(roots) {
459
+ for (root in roots) {
460
+ val rootView: ViewGroup = root.rootView
461
+ if (rootView is ReactRootView && rootView.rootViewTag == rootViewTag) {
462
+ // we have found root helper registered for a given react root, we don't need to
463
+ // initialize a new one then
464
+ return
465
+ }
466
+ }
467
+ }
468
+ synchronized(enqueuedRootViewInit) {
469
+ if (rootViewTag in enqueuedRootViewInit) {
470
+ // root view initialization already enqueued -> we skip
471
+ return
472
+ }
473
+ enqueuedRootViewInit.add(rootViewTag)
474
+ }
475
+ // root helper for a given root tag has not been found, we may wat to check if the root view is
476
+ // an instance of RNGestureHandlerEnabledRootView and then initialize gesture handler with it
477
+ uiManager.addUIBlock(UIBlock { nativeViewHierarchyManager ->
478
+ val view = nativeViewHierarchyManager.resolveView(rootViewTag)
479
+ if (view is RNGestureHandlerEnabledRootView) {
480
+ view.initialize()
481
+ } else {
482
+ // Seems like the root view is something else than RNGestureHandlerEnabledRootView, this
483
+ // is fine though as long as gestureHandlerRootHOC is used in JS
484
+ // FIXME: check and warn about gestureHandlerRootHOC
485
+ }
486
+ synchronized(enqueuedRootViewInit) { enqueuedRootViewInit.remove(rootViewTag) }
487
+ })
488
+ }
489
+
490
+ fun registerRootHelper(root: RNGestureHandlerRootHelper) {
491
+ synchronized(roots) {
492
+ if (root in roots) {
493
+ throw IllegalStateException("Root helper$root already registered")
494
+ }
495
+ roots.add(root)
496
+ }
497
+ }
498
+
499
+ fun unregisterRootHelper(root: RNGestureHandlerRootHelper) {
500
+ synchronized(roots) { roots.remove(root) }
501
+ }
502
+
503
+ private fun findRootHelperForViewAncestor(viewTag: Int): RNGestureHandlerRootHelper? {
504
+ val uiManager = reactApplicationContext.UIManager
505
+ val rootViewTag = uiManager.resolveRootTagFromReactTag(viewTag)
506
+ if (rootViewTag < 1) {
507
+ return null
508
+ }
509
+ synchronized(roots) {
510
+ return roots.firstOrNull {
511
+ it.rootView is ReactRootView && it.rootView.rootViewTag == rootViewTag
512
+ }
513
+ }
514
+ }
515
+
516
+ @Suppress("UNCHECKED_CAST")
517
+ private fun <T : GestureHandler<T>> findFactoryForHandler(handler: GestureHandler<T>): HandlerFactory<T>? =
518
+ handlerFactories.firstOrNull { it.type == handler.javaClass } as HandlerFactory<T>?
519
+
520
+ private fun <T : GestureHandler<T>> onHandlerUpdate(handler: T, motionEvent: MotionEvent) {
521
+ if (handler.tag < 0) {
522
+ // root containers use negative tags, we don't need to dispatch events for them to the JS
523
+ return
524
+ }
525
+ if (handler.state == GestureHandler.STATE_ACTIVE) {
526
+ val handlerFactory = findFactoryForHandler(handler)
527
+
528
+ if (handler.usesDeviceEvents) {
529
+ val data = RNGestureHandlerEvent.createEventData(handler, handlerFactory)
530
+
531
+ reactApplicationContext
532
+ .deviceEventEmitter
533
+ .emit(RNGestureHandlerEvent.EVENT_NAME, data)
534
+ } else {
535
+ reactApplicationContext
536
+ .UIManager
537
+ .eventDispatcher.let {
538
+ val event = RNGestureHandlerEvent.obtain(handler, handlerFactory)
539
+ it.dispatchEvent(event)
540
+ }
541
+ }
542
+ }
543
+ }
544
+
545
+ private fun <T : GestureHandler<T>> onStateChange(handler: T, newState: Int, oldState: Int) {
546
+ if (handler.tag < 0) {
547
+ // root containers use negative tags, we don't need to dispatch events for them to the JS
548
+ return
549
+ }
550
+ val handlerFactory = findFactoryForHandler(handler)
551
+
552
+ if (handler.usesDeviceEvents) {
553
+ val data = RNGestureHandlerStateChangeEvent.createEventData(
554
+ handler,
555
+ handlerFactory,
556
+ newState,
557
+ oldState,
558
+ )
559
+
560
+ reactApplicationContext
561
+ .deviceEventEmitter
562
+ .emit(RNGestureHandlerStateChangeEvent.EVENT_NAME, data)
563
+ } else {
564
+ reactApplicationContext
565
+ .UIManager
566
+ .eventDispatcher.let {
567
+ val event =
568
+ RNGestureHandlerStateChangeEvent.obtain(handler, newState, oldState, handlerFactory)
569
+ it.dispatchEvent(event)
570
+ }
571
+ }
572
+ }
573
+
574
+ private fun <T : GestureHandler<T>> onTouchEvent(handler: T) {
575
+ if (handler.tag < 0) {
576
+ // root containers use negative tags, we don't need to dispatch events for them to the JS
577
+ return
578
+ }
579
+ if (handler.state == GestureHandler.STATE_BEGAN || handler.state == GestureHandler.STATE_ACTIVE
580
+ || handler.state == GestureHandler.STATE_UNDETERMINED || handler.view != null) {
581
+ if (handler.usesDeviceEvents) {
582
+ val data = RNGestureHandlerTouchEvent.createEventData(handler)
583
+
584
+ reactApplicationContext
585
+ .deviceEventEmitter
586
+ .emit(RNGestureHandlerTouchEvent.EVENT_NAME, data)
587
+ } else {
588
+ reactApplicationContext
589
+ .UIManager
590
+ .eventDispatcher.let {
591
+ val event = RNGestureHandlerTouchEvent.obtain(handler)
592
+ it.dispatchEvent(event)
593
+ }
594
+ }
595
+ }
596
+ }
597
+
598
+ companion object {
599
+ const val MODULE_NAME = "RNGestureHandlerModule"
600
+ private const val KEY_SHOULD_CANCEL_WHEN_OUTSIDE = "shouldCancelWhenOutside"
601
+ private const val KEY_ENABLED = "enabled"
602
+ private const val KEY_NEEDS_POINTER_DATA = "needsPointerData"
603
+ private const val KEY_MANUAL_ACTIVATION = "manualActivation"
604
+ private const val KEY_HIT_SLOP = "hitSlop"
605
+ private const val KEY_HIT_SLOP_LEFT = "left"
606
+ private const val KEY_HIT_SLOP_TOP = "top"
607
+ private const val KEY_HIT_SLOP_RIGHT = "right"
608
+ private const val KEY_HIT_SLOP_BOTTOM = "bottom"
609
+ private const val KEY_HIT_SLOP_VERTICAL = "vertical"
610
+ private const val KEY_HIT_SLOP_HORIZONTAL = "horizontal"
611
+ private const val KEY_HIT_SLOP_WIDTH = "width"
612
+ private const val KEY_HIT_SLOP_HEIGHT = "height"
613
+ private const val KEY_NATIVE_VIEW_SHOULD_ACTIVATE_ON_START = "shouldActivateOnStart"
614
+ private const val KEY_NATIVE_VIEW_DISALLOW_INTERRUPTION = "disallowInterruption"
615
+ private const val KEY_TAP_NUMBER_OF_TAPS = "numberOfTaps"
616
+ private const val KEY_TAP_MAX_DURATION_MS = "maxDurationMs"
617
+ private const val KEY_TAP_MAX_DELAY_MS = "maxDelayMs"
618
+ private const val KEY_TAP_MAX_DELTA_X = "maxDeltaX"
619
+ private const val KEY_TAP_MAX_DELTA_Y = "maxDeltaY"
620
+ private const val KEY_TAP_MAX_DIST = "maxDist"
621
+ private const val KEY_TAP_MIN_POINTERS = "minPointers"
622
+ private const val KEY_LONG_PRESS_MIN_DURATION_MS = "minDurationMs"
623
+ private const val KEY_LONG_PRESS_MAX_DIST = "maxDist"
624
+ private const val KEY_PAN_ACTIVE_OFFSET_X_START = "activeOffsetXStart"
625
+ private const val KEY_PAN_ACTIVE_OFFSET_X_END = "activeOffsetXEnd"
626
+ private const val KEY_PAN_FAIL_OFFSET_RANGE_X_START = "failOffsetXStart"
627
+ private const val KEY_PAN_FAIL_OFFSET_RANGE_X_END = "failOffsetXEnd"
628
+ private const val KEY_PAN_ACTIVE_OFFSET_Y_START = "activeOffsetYStart"
629
+ private const val KEY_PAN_ACTIVE_OFFSET_Y_END = "activeOffsetYEnd"
630
+ private const val KEY_PAN_FAIL_OFFSET_RANGE_Y_START = "failOffsetYStart"
631
+ private const val KEY_PAN_FAIL_OFFSET_RANGE_Y_END = "failOffsetYEnd"
632
+ private const val KEY_PAN_MIN_DIST = "minDist"
633
+ private const val KEY_PAN_MIN_VELOCITY = "minVelocity"
634
+ private const val KEY_PAN_MIN_VELOCITY_X = "minVelocityX"
635
+ private const val KEY_PAN_MIN_VELOCITY_Y = "minVelocityY"
636
+ private const val KEY_PAN_MIN_POINTERS = "minPointers"
637
+ private const val KEY_PAN_MAX_POINTERS = "maxPointers"
638
+ private const val KEY_PAN_AVG_TOUCHES = "avgTouches"
639
+ private const val KEY_NUMBER_OF_POINTERS = "numberOfPointers"
640
+ private const val KEY_DIRECTION = "direction"
641
+
642
+ private fun handleHitSlopProperty(handler: GestureHandler<*>, config: ReadableMap) {
643
+ if (config.getType(KEY_HIT_SLOP) == ReadableType.Number) {
644
+ val hitSlop = PixelUtil.toPixelFromDIP(config.getDouble(KEY_HIT_SLOP))
645
+ handler.setHitSlop(hitSlop, hitSlop, hitSlop, hitSlop, GestureHandler.HIT_SLOP_NONE, GestureHandler.HIT_SLOP_NONE)
646
+ } else {
647
+ val hitSlop = config.getMap(KEY_HIT_SLOP)!!
648
+ var left = GestureHandler.HIT_SLOP_NONE
649
+ var top = GestureHandler.HIT_SLOP_NONE
650
+ var right = GestureHandler.HIT_SLOP_NONE
651
+ var bottom = GestureHandler.HIT_SLOP_NONE
652
+ var width = GestureHandler.HIT_SLOP_NONE
653
+ var height = GestureHandler.HIT_SLOP_NONE
654
+ if (hitSlop.hasKey(KEY_HIT_SLOP_HORIZONTAL)) {
655
+ val horizontalPad = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_HORIZONTAL))
656
+ right = horizontalPad
657
+ left = right
658
+ }
659
+ if (hitSlop.hasKey(KEY_HIT_SLOP_VERTICAL)) {
660
+ val verticalPad = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_VERTICAL))
661
+ bottom = verticalPad
662
+ top = bottom
663
+ }
664
+ if (hitSlop.hasKey(KEY_HIT_SLOP_LEFT)) {
665
+ left = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_LEFT))
666
+ }
667
+ if (hitSlop.hasKey(KEY_HIT_SLOP_TOP)) {
668
+ top = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_TOP))
669
+ }
670
+ if (hitSlop.hasKey(KEY_HIT_SLOP_RIGHT)) {
671
+ right = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_RIGHT))
672
+ }
673
+ if (hitSlop.hasKey(KEY_HIT_SLOP_BOTTOM)) {
674
+ bottom = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_BOTTOM))
675
+ }
676
+ if (hitSlop.hasKey(KEY_HIT_SLOP_WIDTH)) {
677
+ width = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_WIDTH))
678
+ }
679
+ if (hitSlop.hasKey(KEY_HIT_SLOP_HEIGHT)) {
680
+ height = PixelUtil.toPixelFromDIP(hitSlop.getDouble(KEY_HIT_SLOP_HEIGHT))
681
+ }
682
+ handler.setHitSlop(left, top, right, bottom, width, height)
683
+ }
684
+ }
685
+ }
686
+ }