react-native-gesture-handler 1.10.3 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
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
+ }