react-native-gesture-handler 1.10.3 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (384) hide show
  1. package/README.md +10 -8
  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 +744 -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 +596 -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 +292 -0
  19. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +90 -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 +81 -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/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  53. package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
  54. package/ios/RNGestureHandlerEvents.h +9 -0
  55. package/ios/RNGestureHandlerEvents.m +34 -0
  56. package/ios/RNGestureHandlerManager.h +7 -0
  57. package/ios/RNGestureHandlerManager.m +62 -34
  58. package/ios/RNGestureHandlerModule.m +39 -3
  59. package/ios/RNGestureHandlerPointerTracker.h +25 -0
  60. package/ios/RNGestureHandlerPointerTracker.m +237 -0
  61. package/ios/RNGestureHandlerRegistry.h +1 -0
  62. package/ios/RNGestureHandlerRegistry.m +10 -0
  63. package/ios/RNGestureHandlerStateManager.h +5 -0
  64. package/ios/RNManualActivationRecognizer.h +10 -0
  65. package/ios/RNManualActivationRecognizer.m +80 -0
  66. package/ios/RNRootViewGestureRecognizer.m +1 -1
  67. package/ios/RNTouchEventType.h +9 -0
  68. package/lib/commonjs/EventType.js +16 -0
  69. package/lib/commonjs/EventType.js.map +1 -0
  70. package/lib/commonjs/GestureHandlerRootView.android.js +1 -13
  71. package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
  72. package/lib/commonjs/GestureHandlerRootView.js +11 -3
  73. package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
  74. package/lib/commonjs/RNGestureHandlerModule.js +3 -1
  75. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  76. package/lib/commonjs/RNGestureHandlerModule.web.js +2 -2
  77. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  78. package/lib/commonjs/components/DrawerLayout.js +41 -37
  79. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  80. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  81. package/lib/commonjs/components/GestureComponents.js +31 -12
  82. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  83. package/lib/commonjs/components/Swipeable.js +10 -6
  84. package/lib/commonjs/components/Swipeable.js.map +1 -1
  85. package/lib/commonjs/components/touchables/GenericTouchable.js +2 -1
  86. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  87. package/lib/commonjs/components/touchables/TouchableOpacity.js +1 -1
  88. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  89. package/lib/commonjs/gestureHandlerRootHOC.js +1 -1
  90. package/lib/commonjs/gestureHandlerRootHOC.js.map +1 -1
  91. package/lib/commonjs/handlers/FlingGestureHandler.js +23 -0
  92. package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -0
  93. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +44 -0
  94. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -0
  95. package/lib/commonjs/handlers/LongPressGestureHandler.js +23 -0
  96. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -0
  97. package/lib/commonjs/handlers/NativeViewGestureHandler.js +6 -4
  98. package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
  99. package/lib/commonjs/handlers/PanGestureHandler.js +121 -0
  100. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -0
  101. package/lib/commonjs/handlers/PinchGestureHandler.js +21 -0
  102. package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -0
  103. package/lib/commonjs/handlers/RotationGestureHandler.js +21 -0
  104. package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -0
  105. package/lib/commonjs/handlers/TapGestureHandler.js +23 -0
  106. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -0
  107. package/lib/commonjs/handlers/createHandler.js +65 -84
  108. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  109. package/lib/commonjs/handlers/gestureHandlerCommon.js +80 -0
  110. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -0
  111. package/lib/commonjs/handlers/gestures/GestureDetector.js +440 -0
  112. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -0
  113. package/lib/commonjs/handlers/gestures/eventReceiver.js +135 -0
  114. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -0
  115. package/lib/commonjs/handlers/gestures/flingGesture.js +34 -0
  116. package/lib/commonjs/handlers/gestures/flingGesture.js.map +1 -0
  117. package/lib/commonjs/handlers/gestures/forceTouchGesture.js +65 -0
  118. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -0
  119. package/lib/commonjs/handlers/gestures/gesture.js +193 -0
  120. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -0
  121. package/lib/commonjs/handlers/gestures/gestureComposition.js +94 -0
  122. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -0
  123. package/lib/commonjs/handlers/gestures/gestureObjects.js +85 -0
  124. package/lib/commonjs/handlers/gestures/gestureObjects.js.map +1 -0
  125. package/lib/commonjs/handlers/gestures/gestureStateManager.js +58 -0
  126. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -0
  127. package/lib/commonjs/handlers/gestures/longPressGesture.js +34 -0
  128. package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -0
  129. package/lib/commonjs/handlers/gestures/manualGesture.js +31 -0
  130. package/lib/commonjs/handlers/gestures/manualGesture.js.map +1 -0
  131. package/lib/commonjs/handlers/gestures/nativeGesture.js +34 -0
  132. package/lib/commonjs/handlers/gestures/nativeGesture.js.map +1 -0
  133. package/lib/commonjs/handlers/gestures/panGesture.js +144 -0
  134. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -0
  135. package/lib/commonjs/handlers/gestures/pinchGesture.js +45 -0
  136. package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -0
  137. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +24 -0
  138. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -0
  139. package/lib/commonjs/handlers/gestures/rotationGesture.js +45 -0
  140. package/lib/commonjs/handlers/gestures/rotationGesture.js.map +1 -0
  141. package/lib/commonjs/handlers/gestures/tapGesture.js +59 -0
  142. package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -0
  143. package/lib/commonjs/handlers/handlersRegistry.js +31 -0
  144. package/lib/commonjs/handlers/handlersRegistry.js.map +1 -0
  145. package/lib/commonjs/index.js +40 -8
  146. package/lib/commonjs/index.js.map +1 -1
  147. package/lib/commonjs/init.js +13 -0
  148. package/lib/commonjs/init.js.map +1 -0
  149. package/lib/commonjs/mocks.js +31 -2
  150. package/lib/commonjs/mocks.js.map +1 -1
  151. package/lib/commonjs/utils.js +15 -0
  152. package/lib/commonjs/utils.js.map +1 -0
  153. package/lib/commonjs/web/Errors.js +1 -1
  154. package/lib/commonjs/web/Errors.js.map +1 -1
  155. package/lib/commonjs/web/GestureHandler.js +4 -6
  156. package/lib/commonjs/web/GestureHandler.js.map +1 -1
  157. package/lib/commonjs/web/NodeManager.js +8 -2
  158. package/lib/commonjs/web/NodeManager.js.map +1 -1
  159. package/lib/module/EventType.js +8 -0
  160. package/lib/module/EventType.js.map +1 -0
  161. package/lib/module/GestureHandlerRootView.android.js +2 -14
  162. package/lib/module/GestureHandlerRootView.android.js.map +1 -1
  163. package/lib/module/GestureHandlerRootView.js +5 -1
  164. package/lib/module/GestureHandlerRootView.js.map +1 -1
  165. package/lib/module/RNGestureHandlerModule.js +3 -1
  166. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  167. package/lib/module/RNGestureHandlerModule.web.js +2 -2
  168. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  169. package/lib/module/components/DrawerLayout.js +43 -40
  170. package/lib/module/components/DrawerLayout.js.map +1 -1
  171. package/lib/module/components/GestureButtons.js.map +1 -1
  172. package/lib/module/components/GestureComponents.js +29 -11
  173. package/lib/module/components/GestureComponents.js.map +1 -1
  174. package/lib/module/components/Swipeable.js +9 -6
  175. package/lib/module/components/Swipeable.js.map +1 -1
  176. package/lib/module/components/touchables/GenericTouchable.js +2 -1
  177. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  178. package/lib/module/components/touchables/TouchableOpacity.js +1 -1
  179. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  180. package/lib/module/gestureHandlerRootHOC.js +1 -1
  181. package/lib/module/gestureHandlerRootHOC.js.map +1 -1
  182. package/lib/module/handlers/FlingGestureHandler.js +10 -0
  183. package/lib/module/handlers/FlingGestureHandler.js.map +1 -0
  184. package/lib/module/handlers/ForceTouchGestureHandler.js +29 -0
  185. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -0
  186. package/lib/module/handlers/LongPressGestureHandler.js +10 -0
  187. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -0
  188. package/lib/module/handlers/NativeViewGestureHandler.js +4 -3
  189. package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
  190. package/lib/module/handlers/PanGestureHandler.js +106 -0
  191. package/lib/module/handlers/PanGestureHandler.js.map +1 -0
  192. package/lib/module/handlers/PinchGestureHandler.js +9 -0
  193. package/lib/module/handlers/PinchGestureHandler.js.map +1 -0
  194. package/lib/module/handlers/RotationGestureHandler.js +9 -0
  195. package/lib/module/handlers/RotationGestureHandler.js.map +1 -0
  196. package/lib/module/handlers/TapGestureHandler.js +10 -0
  197. package/lib/module/handlers/TapGestureHandler.js.map +1 -0
  198. package/lib/module/handlers/createHandler.js +55 -77
  199. package/lib/module/handlers/createHandler.js.map +1 -1
  200. package/lib/module/handlers/gestureHandlerCommon.js +66 -0
  201. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -0
  202. package/lib/module/handlers/gestures/GestureDetector.js +402 -0
  203. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -0
  204. package/lib/module/handlers/gestures/eventReceiver.js +120 -0
  205. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -0
  206. package/lib/module/handlers/gestures/flingGesture.js +24 -0
  207. package/lib/module/handlers/gestures/flingGesture.js.map +1 -0
  208. package/lib/module/handlers/gestures/forceTouchGesture.js +56 -0
  209. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -0
  210. package/lib/module/handlers/gestures/gesture.js +175 -0
  211. package/lib/module/handlers/gestures/gesture.js.map +1 -0
  212. package/lib/module/handlers/gestures/gestureComposition.js +79 -0
  213. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -0
  214. package/lib/module/handlers/gestures/gestureObjects.js +67 -0
  215. package/lib/module/handlers/gestures/gestureObjects.js.map +1 -0
  216. package/lib/module/handlers/gestures/gestureStateManager.js +48 -0
  217. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -0
  218. package/lib/module/handlers/gestures/longPressGesture.js +24 -0
  219. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -0
  220. package/lib/module/handlers/gestures/manualGesture.js +22 -0
  221. package/lib/module/handlers/gestures/manualGesture.js.map +1 -0
  222. package/lib/module/handlers/gestures/nativeGesture.js +24 -0
  223. package/lib/module/handlers/gestures/nativeGesture.js.map +1 -0
  224. package/lib/module/handlers/gestures/panGesture.js +135 -0
  225. package/lib/module/handlers/gestures/panGesture.js.map +1 -0
  226. package/lib/module/handlers/gestures/pinchGesture.js +36 -0
  227. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -0
  228. package/lib/module/handlers/gestures/reanimatedWrapper.js +19 -0
  229. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -0
  230. package/lib/module/handlers/gestures/rotationGesture.js +36 -0
  231. package/lib/module/handlers/gestures/rotationGesture.js.map +1 -0
  232. package/lib/module/handlers/gestures/tapGesture.js +49 -0
  233. package/lib/module/handlers/gestures/tapGesture.js.map +1 -0
  234. package/lib/module/handlers/handlersRegistry.js +16 -0
  235. package/lib/module/handlers/handlersRegistry.js.map +1 -0
  236. package/lib/module/index.js +11 -1
  237. package/lib/module/index.js.map +1 -1
  238. package/lib/module/init.js +5 -0
  239. package/lib/module/init.js.map +1 -0
  240. package/lib/module/mocks.js +31 -2
  241. package/lib/module/mocks.js.map +1 -1
  242. package/lib/module/utils.js +8 -0
  243. package/lib/module/utils.js.map +1 -0
  244. package/lib/module/web/Errors.js +1 -1
  245. package/lib/module/web/Errors.js.map +1 -1
  246. package/lib/module/web/GestureHandler.js +4 -6
  247. package/lib/module/web/GestureHandler.js.map +1 -1
  248. package/lib/module/web/NodeManager.js +8 -2
  249. package/lib/module/web/NodeManager.js.map +1 -1
  250. package/lib/typescript/EventType.d.ts +8 -0
  251. package/lib/typescript/GestureHandlerRootView.android.d.ts +2 -4
  252. package/lib/typescript/GestureHandlerRootView.d.ts +5 -2
  253. package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
  254. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  255. package/lib/typescript/components/DrawerLayout.d.ts +50 -1
  256. package/lib/typescript/components/GestureButtons.d.ts +36 -0
  257. package/lib/typescript/components/GestureComponents.d.ts +8 -35
  258. package/lib/typescript/components/Swipeable.d.ts +73 -6
  259. package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -2
  260. package/lib/typescript/components/touchables/TouchableHighlight.d.ts +1 -0
  261. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +1 -0
  262. package/lib/typescript/handlers/FlingGestureHandler.d.ts +33 -0
  263. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +43 -0
  264. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +55 -0
  265. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +19 -4
  266. package/lib/typescript/handlers/PanGestureHandler.d.ts +137 -0
  267. package/lib/typescript/handlers/PinchGestureHandler.d.ts +28 -0
  268. package/lib/typescript/handlers/RotationGestureHandler.d.ts +28 -0
  269. package/lib/typescript/handlers/TapGestureHandler.d.ts +56 -0
  270. package/lib/typescript/handlers/createHandler.d.ts +1 -1
  271. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +62 -0
  272. package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +8 -1
  273. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +16 -0
  274. package/lib/typescript/handlers/gestures/eventReceiver.d.ts +2 -0
  275. package/lib/typescript/handlers/gestures/flingGesture.d.ts +9 -0
  276. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +16 -0
  277. package/lib/typescript/handlers/gestures/gesture.d.ts +97 -0
  278. package/lib/typescript/handlers/gestures/gestureComposition.d.ts +21 -0
  279. package/lib/typescript/handlers/gestures/gestureObjects.d.ts +39 -0
  280. package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +9 -0
  281. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +9 -0
  282. package/lib/typescript/handlers/gestures/manualGesture.d.ts +7 -0
  283. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +9 -0
  284. package/lib/typescript/handlers/gestures/panGesture.d.ts +26 -0
  285. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +12 -0
  286. package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts +14 -0
  287. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +12 -0
  288. package/lib/typescript/handlers/gestures/tapGesture.d.ts +14 -0
  289. package/lib/typescript/handlers/handlersRegistry.d.ts +6 -0
  290. package/lib/typescript/index.d.ts +29 -2
  291. package/lib/typescript/init.d.ts +1 -0
  292. package/lib/typescript/mocks.d.ts +21 -2
  293. package/lib/typescript/utils.d.ts +1 -0
  294. package/lib/typescript/web/FlingGestureHandler.d.ts +0 -1
  295. package/lib/typescript/web/GestureHandler.d.ts +0 -1
  296. package/lib/typescript/web/PanGestureHandler.d.ts +0 -1
  297. package/lib/typescript/web/PinchGestureHandler.d.ts +0 -1
  298. package/lib/typescript/web/PressGestureHandler.d.ts +0 -1
  299. package/lib/typescript/web/RotationGestureHandler.d.ts +0 -1
  300. package/lib/typescript/web/TapGestureHandler.d.ts +0 -1
  301. package/package.json +8 -5
  302. package/src/EventType.ts +10 -0
  303. package/src/GestureHandlerRootView.android.tsx +9 -25
  304. package/src/GestureHandlerRootView.tsx +11 -2
  305. package/src/RNGestureHandlerModule.ts +5 -1
  306. package/src/RNGestureHandlerModule.web.ts +1 -0
  307. package/src/components/DrawerLayout.tsx +114 -41
  308. package/src/components/GestureButtons.tsx +45 -5
  309. package/src/components/GestureComponents.tsx +47 -41
  310. package/src/components/Swipeable.tsx +108 -21
  311. package/src/components/touchables/GenericTouchable.tsx +2 -1
  312. package/src/components/touchables/TouchableOpacity.tsx +1 -1
  313. package/src/handlers/FlingGestureHandler.ts +57 -0
  314. package/src/handlers/ForceTouchGestureHandler.ts +83 -0
  315. package/src/handlers/LongPressGestureHandler.ts +84 -0
  316. package/src/handlers/NativeViewGestureHandler.ts +31 -7
  317. package/src/handlers/PanGestureHandler.ts +321 -0
  318. package/src/handlers/PinchGestureHandler.ts +46 -0
  319. package/src/handlers/RotationGestureHandler.ts +46 -0
  320. package/src/handlers/TapGestureHandler.ts +90 -0
  321. package/src/handlers/createHandler.ts +67 -79
  322. package/src/handlers/gestureHandlerCommon.ts +185 -0
  323. package/src/handlers/gestureHandlerTypesCompat.ts +19 -5
  324. package/src/handlers/gestures/GestureDetector.tsx +519 -0
  325. package/src/handlers/gestures/eventReceiver.ts +151 -0
  326. package/src/handlers/gestures/flingGesture.ts +27 -0
  327. package/src/handlers/gestures/forceTouchGesture.ts +74 -0
  328. package/src/handlers/gestures/gesture.ts +292 -0
  329. package/src/handlers/gestures/gestureComposition.ts +109 -0
  330. package/src/handlers/gestures/gestureObjects.ts +79 -0
  331. package/src/handlers/gestures/gestureStateManager.ts +60 -0
  332. package/src/handlers/gestures/longPressGesture.ts +27 -0
  333. package/src/handlers/gestures/manualGesture.ts +31 -0
  334. package/src/handlers/gestures/nativeGesture.ts +27 -0
  335. package/src/handlers/gestures/panGesture.ts +147 -0
  336. package/src/handlers/gestures/pinchGesture.ts +51 -0
  337. package/src/handlers/gestures/reanimatedWrapper.ts +45 -0
  338. package/src/handlers/gestures/rotationGesture.ts +51 -0
  339. package/src/handlers/gestures/tapGesture.ts +52 -0
  340. package/src/handlers/handlersRegistry.ts +22 -0
  341. package/src/index.ts +57 -17
  342. package/src/init.ts +5 -0
  343. package/src/mocks.ts +42 -2
  344. package/src/utils.ts +7 -0
  345. package/src/web/GestureHandler.ts +1 -2
  346. package/src/web/NodeManager.ts +5 -0
  347. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.java +0 -23
  348. package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.java +0 -110
  349. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.java +0 -531
  350. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.java +0 -8
  351. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.java +0 -543
  352. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.java +0 -10
  353. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.java +0 -29
  354. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.java +0 -53
  355. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.java +0 -81
  356. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.java +0 -110
  357. package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.java +0 -8
  358. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.java +0 -312
  359. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.java +0 -109
  360. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.java +0 -169
  361. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.java +0 -96
  362. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.java +0 -172
  363. package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.java +0 -10
  364. package/android/src/main/java/com/facebook/react/views/modal/RNGHModalUtils.java +0 -21
  365. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.java +0 -296
  366. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.java +0 -72
  367. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java +0 -77
  368. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.java +0 -8
  369. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.java +0 -86
  370. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.java +0 -731
  371. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.java +0 -31
  372. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.java +0 -101
  373. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.java +0 -151
  374. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.java +0 -7
  375. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.java +0 -76
  376. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.java +0 -49
  377. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java +0 -82
  378. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.java +0 -61
  379. package/lib/commonjs/handlers/gestureHandlers.js +0 -236
  380. package/lib/commonjs/handlers/gestureHandlers.js.map +0 -1
  381. package/lib/module/handlers/gestureHandlers.js +0 -216
  382. package/lib/module/handlers/gestureHandlers.js.map +0 -1
  383. package/lib/typescript/handlers/gestureHandlers.d.ts +0 -158
  384. package/src/handlers/gestureHandlers.ts +0 -511
@@ -0,0 +1,744 @@
1
+ package com.swmansion.gesturehandler
2
+
3
+ import android.app.Activity
4
+ import android.content.Context
5
+ import android.content.ContextWrapper
6
+ import android.graphics.Rect
7
+ import android.view.MotionEvent
8
+ import android.view.MotionEvent.PointerCoords
9
+ import android.view.MotionEvent.PointerProperties
10
+ import android.view.View
11
+ import android.view.Window
12
+ import com.facebook.react.bridge.Arguments
13
+ import com.facebook.react.bridge.UiThreadUtil
14
+ import com.facebook.react.bridge.WritableArray
15
+ import com.facebook.react.uimanager.PixelUtil
16
+ import com.swmansion.gesturehandler.react.RNGestureHandlerTouchEvent
17
+ import java.lang.IllegalStateException
18
+ import java.util.*
19
+
20
+ open class GestureHandler<ConcreteGestureHandlerT : GestureHandler<ConcreteGestureHandlerT>> {
21
+ private val trackedPointerIDs = IntArray(MAX_POINTERS_COUNT)
22
+ private var trackedPointersIDsCount = 0
23
+ private val windowOffset = IntArray(2) { 0 }
24
+ var tag = 0
25
+ var view: View? = null
26
+ private set
27
+ var state = STATE_UNDETERMINED
28
+ private set
29
+ var x = 0f
30
+ private set
31
+ var y = 0f
32
+ private set
33
+ var isWithinBounds = false
34
+ private set
35
+ var isEnabled = true
36
+ private set
37
+ var usesDeviceEvents = false
38
+
39
+ var changedTouchesPayload: WritableArray? = null
40
+ private set
41
+ var allTouchesPayload: WritableArray? = null
42
+ private set
43
+ var touchEventType = RNGestureHandlerTouchEvent.EVENT_UNDETERMINED
44
+ private set
45
+ var trackedPointersCount = 0
46
+ private set
47
+ private val trackedPointers: Array<PointerData?> = Array(MAX_POINTERS_COUNT) { null }
48
+ var needsPointerData = false
49
+
50
+
51
+ private var hitSlop: FloatArray? = null
52
+ var eventCoalescingKey: Short = 0
53
+ private set
54
+ var lastAbsolutePositionX = 0f
55
+ private set
56
+ var lastAbsolutePositionY = 0f
57
+ private set
58
+
59
+ private var manualActivation = false
60
+
61
+ private var lastEventOffsetX = 0f
62
+ private var lastEventOffsetY = 0f
63
+ private var shouldCancelWhenOutside = false
64
+ var numberOfPointers = 0
65
+ private set
66
+ private var orchestrator: GestureHandlerOrchestrator? = null
67
+ private var onTouchEventListener: OnTouchEventListener? = null
68
+ private var interactionController: GestureHandlerInteractionController? = null
69
+
70
+ @Suppress("UNCHECKED_CAST")
71
+ protected fun self(): ConcreteGestureHandlerT = this as ConcreteGestureHandlerT
72
+
73
+ protected inline fun applySelf(block: ConcreteGestureHandlerT.() -> Unit): ConcreteGestureHandlerT =
74
+ self().apply { block() }
75
+
76
+ // properties set and accessed only by the orchestrator
77
+ var activationIndex = 0
78
+ var isActive = false
79
+ var isAwaiting = false
80
+ var shouldResetProgress = false
81
+
82
+ open fun dispatchStateChange(newState: Int, prevState: Int) {
83
+ onTouchEventListener?.onStateChange(self(), newState, prevState)
84
+ }
85
+
86
+ open fun dispatchHandlerUpdate(event: MotionEvent) {
87
+ onTouchEventListener?.onHandlerUpdate(self(), event)
88
+ }
89
+
90
+ open fun dispatchTouchEvent() {
91
+ if (changedTouchesPayload != null) {
92
+ onTouchEventListener?.onTouchEvent(self())
93
+ }
94
+ }
95
+
96
+ open fun resetConfig() {
97
+ needsPointerData = false
98
+ manualActivation = false
99
+ shouldCancelWhenOutside = false
100
+ isEnabled = true
101
+ hitSlop = null
102
+ }
103
+
104
+ fun hasCommonPointers(other: GestureHandler<*>): Boolean {
105
+ for (i in trackedPointerIDs.indices) {
106
+ if (trackedPointerIDs[i] != -1 && other.trackedPointerIDs[i] != -1) {
107
+ return true
108
+ }
109
+ }
110
+ return false
111
+ }
112
+
113
+ fun setShouldCancelWhenOutside(shouldCancelWhenOutside: Boolean): ConcreteGestureHandlerT =
114
+ applySelf { this.shouldCancelWhenOutside = shouldCancelWhenOutside }
115
+
116
+ fun setEnabled(enabled: Boolean): ConcreteGestureHandlerT = applySelf {
117
+ // Don't cancel handler when not changing the value of the isEnabled, executing it always caused
118
+ // handlers to be cancelled on re-render because that's the moment when the config is updated.
119
+ // If the enabled prop "changed" from true to true the handler would get cancelled.
120
+ if (view != null && isEnabled != enabled) {
121
+ // If view is set then handler is in "active" state. In that case we want to "cancel" handler
122
+ // when it changes enabled state so that it gets cleared from the orchestrator
123
+ UiThreadUtil.runOnUiThread { cancel() }
124
+ }
125
+ isEnabled = enabled
126
+ }
127
+
128
+ fun setManualActivation(manualActivation: Boolean): ConcreteGestureHandlerT =
129
+ applySelf { this.manualActivation = manualActivation }
130
+
131
+ fun setHitSlop(
132
+ leftPad: Float, topPad: Float, rightPad: Float, bottomPad: Float,
133
+ width: Float, height: Float,
134
+ ): ConcreteGestureHandlerT = applySelf {
135
+ if (hitSlop == null) {
136
+ hitSlop = FloatArray(6)
137
+ }
138
+ hitSlop!![HIT_SLOP_LEFT_IDX] = leftPad
139
+ hitSlop!![HIT_SLOP_TOP_IDX] = topPad
140
+ hitSlop!![HIT_SLOP_RIGHT_IDX] = rightPad
141
+ hitSlop!![HIT_SLOP_BOTTOM_IDX] = bottomPad
142
+ hitSlop!![HIT_SLOP_WIDTH_IDX] = width
143
+ hitSlop!![HIT_SLOP_HEIGHT_IDX] = height
144
+ require(!(hitSlopSet(width) && hitSlopSet(leftPad) && hitSlopSet(rightPad))) { "Cannot have all of left, right and width defined" }
145
+ require(!(hitSlopSet(width) && !hitSlopSet(leftPad) && !hitSlopSet(rightPad))) { "When width is set one of left or right pads need to be defined" }
146
+ require(!(hitSlopSet(height) && hitSlopSet(bottomPad) && hitSlopSet(topPad))) { "Cannot have all of top, bottom and height defined" }
147
+ require(!(hitSlopSet(height) && !hitSlopSet(bottomPad) && !hitSlopSet(topPad))) { "When height is set one of top or bottom pads need to be defined" }
148
+ }
149
+
150
+ fun setHitSlop(padding: Float): ConcreteGestureHandlerT {
151
+ return setHitSlop(padding, padding, padding, padding, HIT_SLOP_NONE, HIT_SLOP_NONE)
152
+ }
153
+
154
+ fun setInteractionController(controller: GestureHandlerInteractionController?): ConcreteGestureHandlerT =
155
+ applySelf { interactionController = controller }
156
+
157
+ fun prepare(view: View?, orchestrator: GestureHandlerOrchestrator?) {
158
+ check(!(this.view != null || this.orchestrator != null)) { "Already prepared or hasn't been reset" }
159
+ Arrays.fill(trackedPointerIDs, -1)
160
+ trackedPointersIDsCount = 0
161
+ state = STATE_UNDETERMINED
162
+ this.view = view
163
+ this.orchestrator = orchestrator
164
+
165
+ val decorView = getWindow(view?.context)?.decorView
166
+ if (decorView != null) {
167
+ val frame = Rect()
168
+ decorView.getWindowVisibleDisplayFrame(frame)
169
+ windowOffset[0] = frame.left
170
+ windowOffset[1] = frame.top
171
+ } else {
172
+ windowOffset[0] = 0
173
+ windowOffset[1] = 0
174
+ }
175
+ }
176
+
177
+ private fun getWindow(context: Context?): Window? {
178
+ if (context == null) return null
179
+ if (context is Activity) return context.window
180
+ if (context is ContextWrapper) return getWindow(context.baseContext)
181
+
182
+ return null
183
+ }
184
+
185
+ private fun findNextLocalPointerId(): Int {
186
+ var localPointerId = 0
187
+ while (localPointerId < trackedPointersIDsCount) {
188
+ var i = 0
189
+ while (i < trackedPointerIDs.size) {
190
+ if (trackedPointerIDs[i] == localPointerId) {
191
+ break
192
+ }
193
+ i++
194
+ }
195
+ if (i == trackedPointerIDs.size) {
196
+ return localPointerId
197
+ }
198
+ localPointerId++
199
+ }
200
+ return localPointerId
201
+ }
202
+
203
+ fun startTrackingPointer(pointerId: Int) {
204
+ if (trackedPointerIDs[pointerId] == -1) {
205
+ trackedPointerIDs[pointerId] = findNextLocalPointerId()
206
+ trackedPointersIDsCount++
207
+ }
208
+ }
209
+
210
+ fun stopTrackingPointer(pointerId: Int) {
211
+ if (trackedPointerIDs[pointerId] != -1) {
212
+ trackedPointerIDs[pointerId] = -1
213
+ trackedPointersIDsCount--
214
+ }
215
+ }
216
+
217
+ private fun needAdapt(event: MotionEvent): Boolean {
218
+ if (event.pointerCount != trackedPointersIDsCount) {
219
+ return true
220
+ }
221
+
222
+ for (i in trackedPointerIDs.indices) {
223
+ val trackedPointer = trackedPointerIDs[i]
224
+ if (trackedPointer != -1 && trackedPointer != i) {
225
+ return true
226
+ }
227
+ }
228
+ return false
229
+ }
230
+
231
+ private fun adaptEvent(event: MotionEvent): MotionEvent {
232
+ if (!needAdapt(event)) {
233
+ return event
234
+ }
235
+ var action = event.actionMasked
236
+ var actionIndex = -1
237
+ if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN) {
238
+ actionIndex = event.actionIndex
239
+ val actionPointer = event.getPointerId(actionIndex)
240
+ action = if (trackedPointerIDs[actionPointer] != -1) {
241
+ if (trackedPointersIDsCount == 1) MotionEvent.ACTION_DOWN else MotionEvent.ACTION_POINTER_DOWN
242
+ } else {
243
+ MotionEvent.ACTION_MOVE
244
+ }
245
+ } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_POINTER_UP) {
246
+ actionIndex = event.actionIndex
247
+ val actionPointer = event.getPointerId(actionIndex)
248
+ action = if (trackedPointerIDs[actionPointer] != -1) {
249
+ if (trackedPointersIDsCount == 1) MotionEvent.ACTION_UP else MotionEvent.ACTION_POINTER_UP
250
+ } else {
251
+ MotionEvent.ACTION_MOVE
252
+ }
253
+ }
254
+ initPointerProps(trackedPointersIDsCount)
255
+ var count = 0
256
+ val oldX = event.x
257
+ val oldY = event.y
258
+ event.setLocation(event.rawX, event.rawY)
259
+ var index = 0
260
+ val size = event.pointerCount
261
+ while (index < size) {
262
+ val origPointerId = event.getPointerId(index)
263
+ if (trackedPointerIDs[origPointerId] != -1) {
264
+ event.getPointerProperties(index, pointerProps[count])
265
+ pointerProps[count]!!.id = trackedPointerIDs[origPointerId]
266
+ event.getPointerCoords(index, pointerCoords[count])
267
+ if (index == actionIndex) {
268
+ action = action or (count shl MotionEvent.ACTION_POINTER_INDEX_SHIFT)
269
+ }
270
+ count++
271
+ }
272
+ index++
273
+ }
274
+
275
+ // introduced in 1.11.0, remove if crashes are not reported
276
+ if(pointerProps.isEmpty()|| pointerCoords.isEmpty()){
277
+ throw IllegalStateException("pointerCoords.size=${pointerCoords.size}, pointerProps.size=${pointerProps.size}")
278
+ }
279
+
280
+ val result: MotionEvent
281
+ try {
282
+ result = MotionEvent.obtain(
283
+ event.downTime,
284
+ event.eventTime,
285
+ action,
286
+ count,
287
+ pointerProps, /* props are copied and hence it is safe to use static array here */
288
+ pointerCoords, /* same applies to coords */
289
+ event.metaState,
290
+ event.buttonState,
291
+ event.xPrecision,
292
+ event.yPrecision,
293
+ event.deviceId,
294
+ event.edgeFlags,
295
+ event.source,
296
+ event.flags
297
+ )
298
+ } catch (e: IllegalArgumentException) {
299
+ throw AdaptEventException(this, event, e)
300
+ }
301
+ event.setLocation(oldX, oldY)
302
+ result.setLocation(oldX, oldY)
303
+ return result
304
+ }
305
+
306
+ // exception to help debug https://github.com/software-mansion/react-native-gesture-handler/issues/1188
307
+ class AdaptEventException(
308
+ handler: GestureHandler<*>,
309
+ event: MotionEvent,
310
+ e: IllegalArgumentException
311
+ ) : Exception("""
312
+ handler: ${handler::class.simpleName}
313
+ state: ${handler.state}
314
+ view: ${handler.view}
315
+ orchestrator: ${handler.orchestrator}
316
+ isEnabled: ${handler.isEnabled}
317
+ isActive: ${handler.isActive}
318
+ isAwaiting: ${handler.isAwaiting}
319
+ trackedPointersCount: ${handler.trackedPointersCount}
320
+ trackedPointers: ${handler.trackedPointerIDs.joinToString(separator = ", ")}
321
+ while handling event: $event
322
+ """.trimIndent(), e) {}
323
+
324
+ fun handle(origEvent: MotionEvent) {
325
+ if (!isEnabled
326
+ || state == STATE_CANCELLED
327
+ || state == STATE_FAILED
328
+ || state == STATE_END
329
+ || trackedPointersIDsCount < 1) {
330
+ return
331
+ }
332
+ val event = adaptEvent(origEvent)
333
+ x = event.x
334
+ y = event.y
335
+ numberOfPointers = event.pointerCount
336
+ isWithinBounds = isWithinBounds(view, x, y)
337
+ if (shouldCancelWhenOutside && !isWithinBounds) {
338
+ if (state == STATE_ACTIVE) {
339
+ cancel()
340
+ } else if (state == STATE_BEGAN) {
341
+ fail()
342
+ }
343
+ return
344
+ }
345
+ lastAbsolutePositionX = GestureUtils.getLastPointerX(event, true)
346
+ lastAbsolutePositionY = GestureUtils.getLastPointerY(event, true)
347
+ lastEventOffsetX = event.rawX - event.x
348
+ lastEventOffsetY = event.rawY - event.y
349
+ onHandle(event)
350
+ if (event != origEvent) {
351
+ event.recycle()
352
+ }
353
+ }
354
+
355
+ private fun dispatchTouchDownEvent(event: MotionEvent) {
356
+ changedTouchesPayload = null
357
+ touchEventType = RNGestureHandlerTouchEvent.EVENT_TOUCH_DOWN
358
+ val pointerId = event.getPointerId(event.actionIndex)
359
+ val offsetX = event.rawX - event.x
360
+ val offsetY = event.rawY - event.y
361
+
362
+ trackedPointers[pointerId] = PointerData(
363
+ pointerId,
364
+ event.getX(event.actionIndex),
365
+ event.getY(event.actionIndex),
366
+ event.getX(event.actionIndex) + offsetX - windowOffset[0],
367
+ event.getY(event.actionIndex) + offsetY - windowOffset[1],
368
+ )
369
+ trackedPointersCount++
370
+ addChangedPointer(trackedPointers[pointerId]!!)
371
+ extractAllPointersData()
372
+
373
+ dispatchTouchEvent()
374
+ }
375
+
376
+ private fun dispatchTouchUpEvent(event: MotionEvent) {
377
+ extractAllPointersData()
378
+ changedTouchesPayload = null
379
+ touchEventType = RNGestureHandlerTouchEvent.EVENT_TOUCH_UP
380
+ val pointerId = event.getPointerId(event.actionIndex)
381
+ val offsetX = event.rawX - event.x
382
+ val offsetY = event.rawY - event.y
383
+
384
+ trackedPointers[pointerId] = PointerData(
385
+ pointerId,
386
+ event.getX(event.actionIndex),
387
+ event.getY(event.actionIndex),
388
+ event.getX(event.actionIndex) + offsetX - windowOffset[0],
389
+ event.getY(event.actionIndex) + offsetY - windowOffset[1],
390
+ )
391
+ addChangedPointer(trackedPointers[pointerId]!!)
392
+ trackedPointers[pointerId] = null
393
+ trackedPointersCount--
394
+
395
+ dispatchTouchEvent()
396
+ }
397
+
398
+ private fun dispatchTouchMoveEvent(event: MotionEvent) {
399
+ changedTouchesPayload = null
400
+ touchEventType = RNGestureHandlerTouchEvent.EVENT_TOUCH_MOVE
401
+ val offsetX = event.rawX - event.x
402
+ val offsetY = event.rawY - event.y
403
+ var pointersAdded = 0
404
+
405
+ for (i in 0 until event.pointerCount) {
406
+ val pointerId = event.getPointerId(i)
407
+ val pointer = trackedPointers[pointerId] ?: continue
408
+
409
+ if (pointer.x != event.getX(i) || pointer.y != event.getY(i)) {
410
+ pointer.x = event.getX(i)
411
+ pointer.y = event.getY(i)
412
+ pointer.absoluteX = event.getX(i) + offsetX - windowOffset[0]
413
+ pointer.absoluteY = event.getY(i) + offsetY - windowOffset[1]
414
+
415
+ addChangedPointer(pointer)
416
+ pointersAdded++
417
+ }
418
+ }
419
+
420
+ // only data about pointers that have changed their position is sent, it makes no sense to send
421
+ // an empty move event (especially when this method is called during down/up event and there is
422
+ // only info about one pointer)
423
+ if (pointersAdded > 0) {
424
+ extractAllPointersData()
425
+ dispatchTouchEvent()
426
+ }
427
+ }
428
+
429
+ fun updatePointerData(event: MotionEvent) {
430
+ if (event.actionMasked == MotionEvent.ACTION_DOWN || event.actionMasked == MotionEvent.ACTION_POINTER_DOWN) {
431
+ dispatchTouchDownEvent(event)
432
+ dispatchTouchMoveEvent(event)
433
+ } else if (event.actionMasked == MotionEvent.ACTION_UP || event.actionMasked == MotionEvent.ACTION_POINTER_UP) {
434
+ dispatchTouchMoveEvent(event)
435
+ dispatchTouchUpEvent(event)
436
+ } else if (event.actionMasked == MotionEvent.ACTION_MOVE) {
437
+ dispatchTouchMoveEvent(event)
438
+ }
439
+ }
440
+
441
+ private fun extractAllPointersData() {
442
+ allTouchesPayload = null
443
+
444
+ for (pointerData in trackedPointers) {
445
+ if (pointerData != null) {
446
+ addPointerToAll(pointerData)
447
+ }
448
+ }
449
+ }
450
+
451
+ private fun cancelPointers() {
452
+ touchEventType = RNGestureHandlerTouchEvent.EVENT_TOUCH_CANCELLED
453
+ changedTouchesPayload = null
454
+ extractAllPointersData()
455
+
456
+ for (pointer in trackedPointers) {
457
+ pointer?.let {
458
+ addChangedPointer(it)
459
+ }
460
+ }
461
+
462
+ trackedPointersCount = 0
463
+ trackedPointers.fill(null)
464
+
465
+ dispatchTouchEvent()
466
+ }
467
+
468
+ private fun addChangedPointer(pointerData: PointerData) {
469
+ if (changedTouchesPayload == null) {
470
+ changedTouchesPayload = Arguments.createArray()
471
+ }
472
+
473
+ changedTouchesPayload!!.pushMap(createPointerData(pointerData))
474
+ }
475
+
476
+ private fun addPointerToAll(pointerData: PointerData) {
477
+ if (allTouchesPayload == null) {
478
+ allTouchesPayload = Arguments.createArray()
479
+ }
480
+
481
+ allTouchesPayload!!.pushMap(createPointerData(pointerData))
482
+ }
483
+
484
+ private fun createPointerData(pointerData: PointerData) = Arguments.createMap().apply {
485
+ putInt("id", pointerData.pointerId)
486
+ putDouble("x", PixelUtil.toDIPFromPixel(pointerData.x).toDouble())
487
+ putDouble("y", PixelUtil.toDIPFromPixel(pointerData.y).toDouble())
488
+ putDouble("absoluteX", PixelUtil.toDIPFromPixel(pointerData.absoluteX).toDouble())
489
+ putDouble("absoluteY", PixelUtil.toDIPFromPixel(pointerData.absoluteY).toDouble())
490
+ }
491
+
492
+ fun consumeChangedTouchesPayload(): WritableArray? {
493
+ val result = changedTouchesPayload
494
+ changedTouchesPayload = null
495
+ return result
496
+ }
497
+
498
+ fun consumeAllTouchesPayload(): WritableArray? {
499
+ val result = allTouchesPayload
500
+ allTouchesPayload = null
501
+ return result
502
+ }
503
+
504
+ private fun moveToState(newState: Int) {
505
+ UiThreadUtil.assertOnUiThread()
506
+ if (state == newState) {
507
+ return
508
+ }
509
+
510
+ // if there are tracked pointers and the gesture is about to end, send event cancelling all pointers
511
+ if (trackedPointersCount > 0 && (newState == STATE_END || newState == STATE_CANCELLED || newState == STATE_FAILED)) {
512
+ cancelPointers()
513
+ }
514
+
515
+ val oldState = state
516
+ state = newState
517
+ if (state == STATE_ACTIVE) {
518
+ // Generate a unique coalescing-key each time the gesture-handler becomes active. All events will have
519
+ // the same coalescing-key allowing EventDispatcher to coalesce RNGestureHandlerEvents when events are
520
+ // generated faster than they can be treated by JS thread
521
+ eventCoalescingKey = nextEventCoalescingKey++
522
+ }
523
+ orchestrator!!.onHandlerStateChange(this, newState, oldState)
524
+ onStateChange(newState, oldState)
525
+ }
526
+
527
+ fun wantEvents(): Boolean {
528
+ return isEnabled
529
+ && state != STATE_FAILED
530
+ && state != STATE_CANCELLED
531
+ && state != STATE_END
532
+ && trackedPointersIDsCount > 0
533
+ }
534
+
535
+ open fun shouldRequireToWaitForFailure(handler: GestureHandler<*>): Boolean {
536
+ if (handler === this) {
537
+ return false
538
+ }
539
+
540
+ return interactionController?.shouldRequireHandlerToWaitForFailure(this, handler) ?: false
541
+ }
542
+
543
+ fun shouldWaitForHandlerFailure(handler: GestureHandler<*>): Boolean {
544
+ if (handler === this) {
545
+ return false
546
+ }
547
+
548
+ return interactionController?.shouldWaitForHandlerFailure(this, handler) ?: false
549
+ }
550
+
551
+ open fun shouldRecognizeSimultaneously(handler: GestureHandler<*>): Boolean {
552
+ if (handler === this) {
553
+ return true
554
+ }
555
+
556
+ return interactionController?.shouldRecognizeSimultaneously(this, handler) ?: false
557
+ }
558
+
559
+ open fun shouldBeCancelledBy(handler: GestureHandler<*>): Boolean {
560
+ if (handler === this) {
561
+ return false
562
+ }
563
+
564
+ return interactionController?.shouldHandlerBeCancelledBy(this, handler) ?: false
565
+ }
566
+
567
+ fun isWithinBounds(view: View?, posX: Float, posY: Float): Boolean {
568
+ var left = 0f
569
+ var top = 0f
570
+ var right = view!!.width.toFloat()
571
+ var bottom = view.height.toFloat()
572
+ if (hitSlop != null) {
573
+ val padLeft = hitSlop!![HIT_SLOP_LEFT_IDX]
574
+ val padTop = hitSlop!![HIT_SLOP_TOP_IDX]
575
+ val padRight = hitSlop!![HIT_SLOP_RIGHT_IDX]
576
+ val padBottom = hitSlop!![HIT_SLOP_BOTTOM_IDX]
577
+ if (hitSlopSet(padLeft)) {
578
+ left -= padLeft
579
+ }
580
+ if (hitSlopSet(padTop)) {
581
+ top -= padTop
582
+ }
583
+ if (hitSlopSet(padRight)) {
584
+ right += padRight
585
+ }
586
+ if (hitSlopSet(padBottom)) {
587
+ bottom += padBottom
588
+ }
589
+ val width = hitSlop!![HIT_SLOP_WIDTH_IDX]
590
+ val height = hitSlop!![HIT_SLOP_HEIGHT_IDX]
591
+ if (hitSlopSet(width)) {
592
+ if (!hitSlopSet(padLeft)) {
593
+ left = right - width
594
+ } else if (!hitSlopSet(padRight)) {
595
+ right = left + width
596
+ }
597
+ }
598
+ if (hitSlopSet(height)) {
599
+ if (!hitSlopSet(padTop)) {
600
+ top = bottom - height
601
+ } else if (!hitSlopSet(padBottom)) {
602
+ bottom = top + height
603
+ }
604
+ }
605
+ }
606
+ return posX in left..right && posY in top..bottom
607
+ }
608
+
609
+ fun cancel() {
610
+ if (state == STATE_ACTIVE || state == STATE_UNDETERMINED || state == STATE_BEGAN) {
611
+ onCancel()
612
+ moveToState(STATE_CANCELLED)
613
+ }
614
+ }
615
+
616
+ fun fail() {
617
+ if (state == STATE_ACTIVE || state == STATE_UNDETERMINED || state == STATE_BEGAN) {
618
+ moveToState(STATE_FAILED)
619
+ }
620
+ }
621
+
622
+ fun activate() = activate(force = false)
623
+
624
+ open fun activate(force: Boolean) {
625
+ if ((!manualActivation || force) && (state == STATE_UNDETERMINED || state == STATE_BEGAN)) {
626
+ moveToState(STATE_ACTIVE)
627
+ }
628
+ }
629
+
630
+ fun begin() {
631
+ if (state == STATE_UNDETERMINED) {
632
+ moveToState(STATE_BEGAN)
633
+ }
634
+ }
635
+
636
+ fun end() {
637
+ if (state == STATE_BEGAN || state == STATE_ACTIVE) {
638
+ moveToState(STATE_END)
639
+ }
640
+ }
641
+
642
+ // responsible for resetting the state of handler upon activation (may be called more than once
643
+ // if the handler is waiting for failure of other one)
644
+ open fun resetProgress() {}
645
+
646
+ protected open fun onHandle(event: MotionEvent) {
647
+ moveToState(STATE_FAILED)
648
+ }
649
+
650
+ protected open fun onStateChange(newState: Int, previousState: Int) {}
651
+ protected open fun onReset() {}
652
+ protected open fun onCancel() {}
653
+ fun reset() {
654
+ view = null
655
+ orchestrator = null
656
+ Arrays.fill(trackedPointerIDs, -1)
657
+ trackedPointersIDsCount = 0
658
+
659
+ trackedPointersCount = 0
660
+ trackedPointers.fill(null)
661
+ touchEventType = RNGestureHandlerTouchEvent.EVENT_UNDETERMINED
662
+ onReset()
663
+ }
664
+
665
+ fun setOnTouchEventListener(listener: OnTouchEventListener?): GestureHandler<*> {
666
+ onTouchEventListener = listener
667
+ return this
668
+ }
669
+
670
+ override fun toString(): String {
671
+ val viewString = if (view == null) null else view!!.javaClass.simpleName
672
+ return this.javaClass.simpleName + "@[" + tag + "]:" + viewString
673
+ }
674
+
675
+ val lastRelativePositionX: Float
676
+ get() = lastAbsolutePositionX - lastEventOffsetX
677
+ val lastRelativePositionY: Float
678
+ get() = lastAbsolutePositionY - lastEventOffsetY
679
+
680
+ val lastPositionInWindowX: Float
681
+ get() = lastAbsolutePositionX - windowOffset[0]
682
+ val lastPositionInWindowY: Float
683
+ get() = lastAbsolutePositionY - windowOffset[1]
684
+
685
+ companion object {
686
+ const val STATE_UNDETERMINED = 0
687
+ const val STATE_FAILED = 1
688
+ const val STATE_BEGAN = 2
689
+ const val STATE_CANCELLED = 3
690
+ const val STATE_ACTIVE = 4
691
+ const val STATE_END = 5
692
+ const val HIT_SLOP_NONE = Float.NaN
693
+ private const val HIT_SLOP_LEFT_IDX = 0
694
+ private const val HIT_SLOP_TOP_IDX = 1
695
+ private const val HIT_SLOP_RIGHT_IDX = 2
696
+ private const val HIT_SLOP_BOTTOM_IDX = 3
697
+ private const val HIT_SLOP_WIDTH_IDX = 4
698
+ private const val HIT_SLOP_HEIGHT_IDX = 5
699
+ const val DIRECTION_RIGHT = 1
700
+ const val DIRECTION_LEFT = 2
701
+ const val DIRECTION_UP = 4
702
+ const val DIRECTION_DOWN = 8
703
+ private const val MAX_POINTERS_COUNT = 12
704
+ private lateinit var pointerProps: Array<PointerProperties?>
705
+ private lateinit var pointerCoords: Array<PointerCoords?>
706
+ private fun initPointerProps(size: Int) {
707
+ var size = size
708
+ if (!::pointerProps.isInitialized) {
709
+ pointerProps = arrayOfNulls(MAX_POINTERS_COUNT)
710
+ pointerCoords = arrayOfNulls(MAX_POINTERS_COUNT)
711
+ }
712
+ while (size > 0 && pointerProps[size - 1] == null) {
713
+ pointerProps[size - 1] = PointerProperties()
714
+ pointerCoords[size - 1] = PointerCoords()
715
+ size--
716
+ }
717
+ }
718
+
719
+ private var nextEventCoalescingKey: Short = 0
720
+ private fun hitSlopSet(value: Float): Boolean {
721
+ return !java.lang.Float.isNaN(value)
722
+ }
723
+
724
+ fun stateToString(state: Int): String? {
725
+ when (state) {
726
+ STATE_UNDETERMINED -> return "UNDETERMINED"
727
+ STATE_ACTIVE -> return "ACTIVE"
728
+ STATE_FAILED -> return "FAILED"
729
+ STATE_BEGAN -> return "BEGIN"
730
+ STATE_CANCELLED -> return "CANCELLED"
731
+ STATE_END -> return "END"
732
+ }
733
+ return null
734
+ }
735
+ }
736
+
737
+ private data class PointerData(
738
+ val pointerId: Int,
739
+ var x: Float,
740
+ var y: Float,
741
+ var absoluteX: Float,
742
+ var absoluteY: Float
743
+ )
744
+ }