react-native-gesture-handler 1.10.3 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/README.md +7 -6
  2. package/android/build.gradle +49 -1
  3. package/android/common/src/main/java/com/swmansion/common/GestureHandlerStateManager.kt +5 -0
  4. package/android/gradle.properties +19 -0
  5. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +18 -0
  6. package/android/lib/src/main/java/com/swmansion/gesturehandler/Extensions.kt +11 -0
  7. package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt +96 -0
  8. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +713 -0
  9. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.kt +8 -0
  10. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +562 -0
  11. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.kt +8 -0
  12. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +21 -0
  13. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.kt +49 -0
  14. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +97 -0
  15. package/android/lib/src/main/java/com/swmansion/gesturehandler/ManualGestureHandler.kt +11 -0
  16. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +129 -0
  17. package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.kt +9 -0
  18. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +289 -0
  19. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +88 -0
  20. package/android/lib/src/main/java/com/swmansion/gesturehandler/{PointerEventsConfig.java → PointerEventsConfig.kt} +3 -5
  21. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.kt +125 -0
  22. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt +79 -0
  23. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +167 -0
  24. package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.kt +10 -0
  25. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +348 -0
  26. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +57 -0
  27. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +59 -0
  28. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +8 -0
  29. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +61 -0
  30. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +686 -0
  31. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.kt +17 -0
  32. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +95 -0
  33. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +132 -0
  34. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.kt +5 -0
  35. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +68 -0
  36. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +34 -0
  37. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +66 -0
  38. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +69 -0
  39. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +51 -0
  40. package/ios/Handlers/RNFlingHandler.m +78 -5
  41. package/ios/Handlers/RNForceTouchHandler.m +29 -4
  42. package/ios/Handlers/RNLongPressHandler.m +105 -3
  43. package/ios/Handlers/RNManualHandler.h +4 -0
  44. package/ios/Handlers/RNManualHandler.m +73 -0
  45. package/ios/Handlers/RNNativeViewHandler.m +30 -2
  46. package/ios/Handlers/RNPanHandler.m +64 -4
  47. package/ios/Handlers/RNPinchHandler.m +61 -2
  48. package/ios/Handlers/RNRotationHandler.m +60 -1
  49. package/ios/Handlers/RNTapHandler.m +55 -8
  50. package/ios/RNGestureHandler.h +18 -4
  51. package/ios/RNGestureHandler.m +123 -13
  52. package/ios/RNGestureHandlerEvents.h +9 -0
  53. package/ios/RNGestureHandlerEvents.m +34 -0
  54. package/ios/RNGestureHandlerManager.h +7 -0
  55. package/ios/RNGestureHandlerManager.m +62 -34
  56. package/ios/RNGestureHandlerModule.m +39 -3
  57. package/ios/RNGestureHandlerPointerTracker.h +25 -0
  58. package/ios/RNGestureHandlerPointerTracker.m +237 -0
  59. package/ios/RNGestureHandlerRegistry.h +1 -0
  60. package/ios/RNGestureHandlerRegistry.m +10 -0
  61. package/ios/RNGestureHandlerStateManager.h +5 -0
  62. package/ios/RNManualActivationRecognizer.h +10 -0
  63. package/ios/RNManualActivationRecognizer.m +80 -0
  64. package/ios/RNRootViewGestureRecognizer.m +1 -1
  65. package/ios/RNTouchEventType.h +9 -0
  66. package/lib/commonjs/EventType.js +16 -0
  67. package/lib/commonjs/EventType.js.map +1 -0
  68. package/lib/commonjs/GestureHandlerRootView.android.js +1 -13
  69. package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
  70. package/lib/commonjs/GestureHandlerRootView.js +11 -3
  71. package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
  72. package/lib/commonjs/RNGestureHandlerModule.js +3 -1
  73. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  74. package/lib/commonjs/RNGestureHandlerModule.web.js +2 -2
  75. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  76. package/lib/commonjs/components/DrawerLayout.js +41 -37
  77. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  78. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  79. package/lib/commonjs/components/GestureComponents.js +31 -12
  80. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  81. package/lib/commonjs/components/Swipeable.js +10 -6
  82. package/lib/commonjs/components/Swipeable.js.map +1 -1
  83. package/lib/commonjs/components/touchables/GenericTouchable.js +2 -1
  84. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  85. package/lib/commonjs/components/touchables/TouchableOpacity.js +1 -1
  86. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  87. package/lib/commonjs/gestureHandlerRootHOC.js +1 -1
  88. package/lib/commonjs/gestureHandlerRootHOC.js.map +1 -1
  89. package/lib/commonjs/handlers/FlingGestureHandler.js +23 -0
  90. package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -0
  91. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +44 -0
  92. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -0
  93. package/lib/commonjs/handlers/LongPressGestureHandler.js +23 -0
  94. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -0
  95. package/lib/commonjs/handlers/NativeViewGestureHandler.js +6 -4
  96. package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
  97. package/lib/commonjs/handlers/PanGestureHandler.js +121 -0
  98. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -0
  99. package/lib/commonjs/handlers/PinchGestureHandler.js +21 -0
  100. package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -0
  101. package/lib/commonjs/handlers/RotationGestureHandler.js +21 -0
  102. package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -0
  103. package/lib/commonjs/handlers/TapGestureHandler.js +23 -0
  104. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -0
  105. package/lib/commonjs/handlers/createHandler.js +52 -83
  106. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  107. package/lib/commonjs/handlers/gestureHandlerCommon.js +80 -0
  108. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -0
  109. package/lib/commonjs/handlers/gestures/GestureDetector.js +440 -0
  110. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -0
  111. package/lib/commonjs/handlers/gestures/eventReceiver.js +135 -0
  112. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -0
  113. package/lib/commonjs/handlers/gestures/flingGesture.js +34 -0
  114. package/lib/commonjs/handlers/gestures/flingGesture.js.map +1 -0
  115. package/lib/commonjs/handlers/gestures/forceTouchGesture.js +65 -0
  116. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -0
  117. package/lib/commonjs/handlers/gestures/gesture.js +193 -0
  118. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -0
  119. package/lib/commonjs/handlers/gestures/gestureComposition.js +94 -0
  120. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -0
  121. package/lib/commonjs/handlers/gestures/gestureObjects.js +85 -0
  122. package/lib/commonjs/handlers/gestures/gestureObjects.js.map +1 -0
  123. package/lib/commonjs/handlers/gestures/gestureStateManager.js +58 -0
  124. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -0
  125. package/lib/commonjs/handlers/gestures/longPressGesture.js +34 -0
  126. package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -0
  127. package/lib/commonjs/handlers/gestures/manualGesture.js +31 -0
  128. package/lib/commonjs/handlers/gestures/manualGesture.js.map +1 -0
  129. package/lib/commonjs/handlers/gestures/nativeGesture.js +34 -0
  130. package/lib/commonjs/handlers/gestures/nativeGesture.js.map +1 -0
  131. package/lib/commonjs/handlers/gestures/panGesture.js +144 -0
  132. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -0
  133. package/lib/commonjs/handlers/gestures/pinchGesture.js +45 -0
  134. package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -0
  135. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +24 -0
  136. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -0
  137. package/lib/commonjs/handlers/gestures/rotationGesture.js +45 -0
  138. package/lib/commonjs/handlers/gestures/rotationGesture.js.map +1 -0
  139. package/lib/commonjs/handlers/gestures/tapGesture.js +59 -0
  140. package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -0
  141. package/lib/commonjs/handlers/handlersRegistry.js +31 -0
  142. package/lib/commonjs/handlers/handlersRegistry.js.map +1 -0
  143. package/lib/commonjs/index.js +146 -8
  144. package/lib/commonjs/index.js.map +1 -1
  145. package/lib/commonjs/init.js +13 -0
  146. package/lib/commonjs/init.js.map +1 -0
  147. package/lib/commonjs/mocks.js +31 -2
  148. package/lib/commonjs/mocks.js.map +1 -1
  149. package/lib/commonjs/utils.js +15 -0
  150. package/lib/commonjs/utils.js.map +1 -0
  151. package/lib/commonjs/web/Errors.js +1 -1
  152. package/lib/commonjs/web/Errors.js.map +1 -1
  153. package/lib/commonjs/web/GestureHandler.js +4 -6
  154. package/lib/commonjs/web/GestureHandler.js.map +1 -1
  155. package/lib/commonjs/web/NodeManager.js +8 -2
  156. package/lib/commonjs/web/NodeManager.js.map +1 -1
  157. package/lib/module/EventType.js +8 -0
  158. package/lib/module/EventType.js.map +1 -0
  159. package/lib/module/GestureHandlerRootView.android.js +2 -14
  160. package/lib/module/GestureHandlerRootView.android.js.map +1 -1
  161. package/lib/module/GestureHandlerRootView.js +5 -1
  162. package/lib/module/GestureHandlerRootView.js.map +1 -1
  163. package/lib/module/RNGestureHandlerModule.js +3 -1
  164. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  165. package/lib/module/RNGestureHandlerModule.web.js +2 -2
  166. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  167. package/lib/module/components/DrawerLayout.js +43 -40
  168. package/lib/module/components/DrawerLayout.js.map +1 -1
  169. package/lib/module/components/GestureButtons.js.map +1 -1
  170. package/lib/module/components/GestureComponents.js +29 -11
  171. package/lib/module/components/GestureComponents.js.map +1 -1
  172. package/lib/module/components/Swipeable.js +9 -6
  173. package/lib/module/components/Swipeable.js.map +1 -1
  174. package/lib/module/components/touchables/GenericTouchable.js +2 -1
  175. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  176. package/lib/module/components/touchables/TouchableOpacity.js +1 -1
  177. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  178. package/lib/module/gestureHandlerRootHOC.js +1 -1
  179. package/lib/module/gestureHandlerRootHOC.js.map +1 -1
  180. package/lib/module/handlers/FlingGestureHandler.js +10 -0
  181. package/lib/module/handlers/FlingGestureHandler.js.map +1 -0
  182. package/lib/module/handlers/ForceTouchGestureHandler.js +29 -0
  183. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -0
  184. package/lib/module/handlers/LongPressGestureHandler.js +10 -0
  185. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -0
  186. package/lib/module/handlers/NativeViewGestureHandler.js +4 -3
  187. package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
  188. package/lib/module/handlers/PanGestureHandler.js +106 -0
  189. package/lib/module/handlers/PanGestureHandler.js.map +1 -0
  190. package/lib/module/handlers/PinchGestureHandler.js +9 -0
  191. package/lib/module/handlers/PinchGestureHandler.js.map +1 -0
  192. package/lib/module/handlers/RotationGestureHandler.js +9 -0
  193. package/lib/module/handlers/RotationGestureHandler.js.map +1 -0
  194. package/lib/module/handlers/TapGestureHandler.js +10 -0
  195. package/lib/module/handlers/TapGestureHandler.js.map +1 -0
  196. package/lib/module/handlers/createHandler.js +41 -76
  197. package/lib/module/handlers/createHandler.js.map +1 -1
  198. package/lib/module/handlers/gestureHandlerCommon.js +66 -0
  199. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -0
  200. package/lib/module/handlers/gestures/GestureDetector.js +402 -0
  201. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -0
  202. package/lib/module/handlers/gestures/eventReceiver.js +120 -0
  203. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -0
  204. package/lib/module/handlers/gestures/flingGesture.js +24 -0
  205. package/lib/module/handlers/gestures/flingGesture.js.map +1 -0
  206. package/lib/module/handlers/gestures/forceTouchGesture.js +56 -0
  207. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -0
  208. package/lib/module/handlers/gestures/gesture.js +175 -0
  209. package/lib/module/handlers/gestures/gesture.js.map +1 -0
  210. package/lib/module/handlers/gestures/gestureComposition.js +79 -0
  211. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -0
  212. package/lib/module/handlers/gestures/gestureObjects.js +67 -0
  213. package/lib/module/handlers/gestures/gestureObjects.js.map +1 -0
  214. package/lib/module/handlers/gestures/gestureStateManager.js +48 -0
  215. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -0
  216. package/lib/module/handlers/gestures/longPressGesture.js +24 -0
  217. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -0
  218. package/lib/module/handlers/gestures/manualGesture.js +22 -0
  219. package/lib/module/handlers/gestures/manualGesture.js.map +1 -0
  220. package/lib/module/handlers/gestures/nativeGesture.js +24 -0
  221. package/lib/module/handlers/gestures/nativeGesture.js.map +1 -0
  222. package/lib/module/handlers/gestures/panGesture.js +135 -0
  223. package/lib/module/handlers/gestures/panGesture.js.map +1 -0
  224. package/lib/module/handlers/gestures/pinchGesture.js +36 -0
  225. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -0
  226. package/lib/module/handlers/gestures/reanimatedWrapper.js +19 -0
  227. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -0
  228. package/lib/module/handlers/gestures/rotationGesture.js +36 -0
  229. package/lib/module/handlers/gestures/rotationGesture.js.map +1 -0
  230. package/lib/module/handlers/gestures/tapGesture.js +49 -0
  231. package/lib/module/handlers/gestures/tapGesture.js.map +1 -0
  232. package/lib/module/handlers/handlersRegistry.js +16 -0
  233. package/lib/module/handlers/handlersRegistry.js.map +1 -0
  234. package/lib/module/index.js +22 -1
  235. package/lib/module/index.js.map +1 -1
  236. package/lib/module/init.js +5 -0
  237. package/lib/module/init.js.map +1 -0
  238. package/lib/module/mocks.js +31 -2
  239. package/lib/module/mocks.js.map +1 -1
  240. package/lib/module/utils.js +8 -0
  241. package/lib/module/utils.js.map +1 -0
  242. package/lib/module/web/Errors.js +1 -1
  243. package/lib/module/web/Errors.js.map +1 -1
  244. package/lib/module/web/GestureHandler.js +4 -6
  245. package/lib/module/web/GestureHandler.js.map +1 -1
  246. package/lib/module/web/NodeManager.js +8 -2
  247. package/lib/module/web/NodeManager.js.map +1 -1
  248. package/lib/typescript/EventType.d.ts +8 -0
  249. package/lib/typescript/GestureHandlerRootView.android.d.ts +2 -4
  250. package/lib/typescript/GestureHandlerRootView.d.ts +5 -2
  251. package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
  252. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  253. package/lib/typescript/components/DrawerLayout.d.ts +50 -1
  254. package/lib/typescript/components/GestureButtons.d.ts +36 -0
  255. package/lib/typescript/components/GestureComponents.d.ts +8 -35
  256. package/lib/typescript/components/Swipeable.d.ts +73 -6
  257. package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -2
  258. package/lib/typescript/components/touchables/TouchableHighlight.d.ts +1 -0
  259. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +1 -0
  260. package/lib/typescript/handlers/FlingGestureHandler.d.ts +33 -0
  261. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +43 -0
  262. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +55 -0
  263. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +19 -4
  264. package/lib/typescript/handlers/PanGestureHandler.d.ts +137 -0
  265. package/lib/typescript/handlers/PinchGestureHandler.d.ts +28 -0
  266. package/lib/typescript/handlers/RotationGestureHandler.d.ts +28 -0
  267. package/lib/typescript/handlers/TapGestureHandler.d.ts +56 -0
  268. package/lib/typescript/handlers/createHandler.d.ts +1 -1
  269. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +62 -0
  270. package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +8 -1
  271. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +16 -0
  272. package/lib/typescript/handlers/gestures/eventReceiver.d.ts +2 -0
  273. package/lib/typescript/handlers/gestures/flingGesture.d.ts +9 -0
  274. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +16 -0
  275. package/lib/typescript/handlers/gestures/gesture.d.ts +97 -0
  276. package/lib/typescript/handlers/gestures/gestureComposition.d.ts +21 -0
  277. package/lib/typescript/handlers/gestures/gestureObjects.d.ts +39 -0
  278. package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +9 -0
  279. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +9 -0
  280. package/lib/typescript/handlers/gestures/manualGesture.d.ts +7 -0
  281. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +9 -0
  282. package/lib/typescript/handlers/gestures/panGesture.d.ts +26 -0
  283. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +12 -0
  284. package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts +14 -0
  285. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +12 -0
  286. package/lib/typescript/handlers/gestures/tapGesture.d.ts +14 -0
  287. package/lib/typescript/handlers/handlersRegistry.d.ts +6 -0
  288. package/lib/typescript/index.d.ts +29 -2
  289. package/lib/typescript/init.d.ts +1 -0
  290. package/lib/typescript/mocks.d.ts +21 -2
  291. package/lib/typescript/utils.d.ts +1 -0
  292. package/lib/typescript/web/FlingGestureHandler.d.ts +0 -1
  293. package/lib/typescript/web/GestureHandler.d.ts +0 -1
  294. package/lib/typescript/web/PanGestureHandler.d.ts +0 -1
  295. package/lib/typescript/web/PinchGestureHandler.d.ts +0 -1
  296. package/lib/typescript/web/PressGestureHandler.d.ts +0 -1
  297. package/lib/typescript/web/RotationGestureHandler.d.ts +0 -1
  298. package/lib/typescript/web/TapGestureHandler.d.ts +0 -1
  299. package/package.json +8 -5
  300. package/src/EventType.ts +10 -0
  301. package/src/GestureHandlerRootView.android.tsx +9 -25
  302. package/src/GestureHandlerRootView.tsx +11 -2
  303. package/src/RNGestureHandlerModule.ts +5 -1
  304. package/src/RNGestureHandlerModule.web.ts +1 -0
  305. package/src/components/DrawerLayout.tsx +114 -41
  306. package/src/components/GestureButtons.tsx +45 -5
  307. package/src/components/GestureComponents.tsx +47 -41
  308. package/src/components/Swipeable.tsx +108 -21
  309. package/src/components/touchables/GenericTouchable.tsx +2 -1
  310. package/src/components/touchables/TouchableOpacity.tsx +1 -1
  311. package/src/handlers/FlingGestureHandler.ts +57 -0
  312. package/src/handlers/ForceTouchGestureHandler.ts +83 -0
  313. package/src/handlers/LongPressGestureHandler.ts +84 -0
  314. package/src/handlers/NativeViewGestureHandler.ts +31 -7
  315. package/src/handlers/PanGestureHandler.ts +321 -0
  316. package/src/handlers/PinchGestureHandler.ts +46 -0
  317. package/src/handlers/RotationGestureHandler.ts +46 -0
  318. package/src/handlers/TapGestureHandler.ts +90 -0
  319. package/src/handlers/createHandler.ts +54 -79
  320. package/src/handlers/gestureHandlerCommon.ts +185 -0
  321. package/src/handlers/gestureHandlerTypesCompat.ts +19 -5
  322. package/src/handlers/gestures/GestureDetector.tsx +519 -0
  323. package/src/handlers/gestures/eventReceiver.ts +151 -0
  324. package/src/handlers/gestures/flingGesture.ts +27 -0
  325. package/src/handlers/gestures/forceTouchGesture.ts +74 -0
  326. package/src/handlers/gestures/gesture.ts +292 -0
  327. package/src/handlers/gestures/gestureComposition.ts +109 -0
  328. package/src/handlers/gestures/gestureObjects.ts +79 -0
  329. package/src/handlers/gestures/gestureStateManager.ts +60 -0
  330. package/src/handlers/gestures/longPressGesture.ts +27 -0
  331. package/src/handlers/gestures/manualGesture.ts +31 -0
  332. package/src/handlers/gestures/nativeGesture.ts +27 -0
  333. package/src/handlers/gestures/panGesture.ts +147 -0
  334. package/src/handlers/gestures/pinchGesture.ts +51 -0
  335. package/src/handlers/gestures/reanimatedWrapper.ts +45 -0
  336. package/src/handlers/gestures/rotationGesture.ts +51 -0
  337. package/src/handlers/gestures/tapGesture.ts +52 -0
  338. package/src/handlers/handlersRegistry.ts +22 -0
  339. package/src/index.ts +57 -17
  340. package/src/init.ts +5 -0
  341. package/src/mocks.ts +42 -2
  342. package/src/utils.ts +7 -0
  343. package/src/web/GestureHandler.ts +1 -2
  344. package/src/web/NodeManager.ts +5 -0
  345. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.java +0 -23
  346. package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.java +0 -110
  347. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.java +0 -531
  348. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.java +0 -8
  349. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.java +0 -543
  350. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.java +0 -10
  351. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.java +0 -29
  352. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.java +0 -53
  353. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.java +0 -81
  354. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.java +0 -110
  355. package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.java +0 -8
  356. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.java +0 -312
  357. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.java +0 -109
  358. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.java +0 -169
  359. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.java +0 -96
  360. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.java +0 -172
  361. package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.java +0 -10
  362. package/android/src/main/java/com/facebook/react/views/modal/RNGHModalUtils.java +0 -21
  363. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.java +0 -296
  364. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.java +0 -72
  365. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java +0 -77
  366. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.java +0 -8
  367. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.java +0 -86
  368. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.java +0 -731
  369. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.java +0 -31
  370. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.java +0 -101
  371. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.java +0 -151
  372. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.java +0 -7
  373. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.java +0 -76
  374. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.java +0 -49
  375. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java +0 -82
  376. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.java +0 -61
  377. package/lib/commonjs/handlers/gestureHandlers.js +0 -236
  378. package/lib/commonjs/handlers/gestureHandlers.js.map +0 -1
  379. package/lib/module/handlers/gestureHandlers.js +0 -216
  380. package/lib/module/handlers/gestureHandlers.js.map +0 -1
  381. package/lib/typescript/handlers/gestureHandlers.d.ts +0 -158
  382. package/src/handlers/gestureHandlers.ts +0 -511
@@ -1,543 +0,0 @@
1
- package com.swmansion.gesturehandler;
2
-
3
- import android.graphics.Matrix;
4
- import android.graphics.PointF;
5
- import android.view.MotionEvent;
6
- import android.view.View;
7
- import android.view.ViewGroup;
8
- import android.view.ViewParent;
9
-
10
- import java.util.ArrayList;
11
- import java.util.Arrays;
12
- import java.util.Comparator;
13
-
14
- import androidx.annotation.Nullable;
15
-
16
- public class GestureHandlerOrchestrator {
17
-
18
- // The limit doesn't necessarily need to exists, it was just simpler to implement it that way
19
- // it is also more allocation-wise efficient to have a fixed limit
20
- private static final int SIMULTANEOUS_GESTURE_HANDLER_LIMIT = 20;
21
- // Be default fully transparent views can receive touch
22
- private static final float DEFAULT_MIN_ALPHA_FOR_TRAVERSAL = 0f;
23
-
24
- private static final PointF sTempPoint = new PointF();
25
- private static final float[] sMatrixTransformCoords = new float[2];
26
- private static final Matrix sInverseMatrix = new Matrix();
27
- private static final float[] sTempCoords = new float[2];
28
-
29
- private static final Comparator<GestureHandler> sHandlersComparator =
30
- new Comparator<GestureHandler>() {
31
- @Override
32
- public int compare(GestureHandler a, GestureHandler b) {
33
- if (a.mIsActive && b.mIsActive || a.mIsAwaiting && b.mIsAwaiting) {
34
- // both A and B are either active or awaiting activation, in which case we prefer one that
35
- // has activated (or turned into "awaiting" state) earlier
36
- return Integer.signum(b.mActivationIndex - a.mActivationIndex);
37
- } else if (a.mIsActive) {
38
- return -1; // only A is active
39
- } else if (b.mIsActive) {
40
- return 1; // only B is active
41
- } else if (a.mIsAwaiting) {
42
- return -1; // only A is awaiting, B is inactive
43
- } else if (b.mIsAwaiting) {
44
- return 1; // only B is awaiting, A is inactive
45
- }
46
- return 0; // both A and B are inactive, stable order matters
47
- }
48
- };
49
-
50
- private final ViewGroup mWrapperView;
51
- private final GestureHandlerRegistry mHandlerRegistry;
52
- private final ViewConfigurationHelper mViewConfigHelper;
53
-
54
- private final GestureHandler[] mGestureHandlers
55
- = new GestureHandler[SIMULTANEOUS_GESTURE_HANDLER_LIMIT];
56
- private final GestureHandler[] mAwaitingHandlers
57
- = new GestureHandler[SIMULTANEOUS_GESTURE_HANDLER_LIMIT];
58
- private final GestureHandler[] mPreparedHandlers
59
- = new GestureHandler[SIMULTANEOUS_GESTURE_HANDLER_LIMIT];
60
- private final GestureHandler[] mHandlersToCancel
61
- = new GestureHandler[SIMULTANEOUS_GESTURE_HANDLER_LIMIT];
62
- private int mGestureHandlersCount = 0;
63
- private int mAwaitingHandlersCount = 0;
64
-
65
- private boolean mIsHandlingTouch = false;
66
- private int mHandlingChangeSemaphore = 0;
67
- private boolean mFinishedHandlersCleanupScheduled = false;
68
- private int mActivationIndex = 0;
69
-
70
- private float mMinAlphaForTraversal = DEFAULT_MIN_ALPHA_FOR_TRAVERSAL;
71
-
72
- public GestureHandlerOrchestrator(
73
- ViewGroup wrapperView,
74
- GestureHandlerRegistry registry,
75
- ViewConfigurationHelper viewConfigurationHelper) {
76
- mWrapperView = wrapperView;
77
- mHandlerRegistry = registry;
78
- mViewConfigHelper = viewConfigurationHelper;
79
- }
80
-
81
- /**
82
- * Minimum alpha (value from 0 to 1) that should be set to a view so that it can be treated as a
83
- * gesture target. E.g. if set to 0.1 then views that less than 10% opaque will be ignored when
84
- * traversing view hierarchy and looking for gesture handlers.
85
- */
86
- public void setMinimumAlphaForTraversal(float alpha) {
87
- mMinAlphaForTraversal = alpha;
88
- }
89
-
90
- /**
91
- * Should be called from the view wrapper
92
- */
93
- public boolean onTouchEvent(MotionEvent event) {
94
- mIsHandlingTouch = true;
95
- int action = event.getActionMasked();
96
- if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN) {
97
- extractGestureHandlers(event);
98
- } else if (action == MotionEvent.ACTION_CANCEL) {
99
- cancelAll();
100
- }
101
- deliverEventToGestureHandlers(event);
102
- mIsHandlingTouch = false;
103
- if (mFinishedHandlersCleanupScheduled && mHandlingChangeSemaphore == 0) {
104
- cleanupFinishedHandlers();
105
- }
106
- return true;
107
- }
108
-
109
- private void scheduleFinishedHandlersCleanup() {
110
- if (mIsHandlingTouch || mHandlingChangeSemaphore != 0) {
111
- mFinishedHandlersCleanupScheduled = true;
112
- } else {
113
- cleanupFinishedHandlers();
114
- }
115
- }
116
-
117
- private void cleanupFinishedHandlers() {
118
- boolean shouldCleanEmptyCells = false;
119
- for (int i = mGestureHandlersCount - 1; i >= 0; i--) {
120
- GestureHandler handler = mGestureHandlers[i];
121
- if (isFinished(handler.getState()) && !handler.mIsAwaiting) {
122
- mGestureHandlers[i] = null;
123
- shouldCleanEmptyCells = true;
124
- handler.reset();
125
- handler.mIsActive = false;
126
- handler.mIsAwaiting = false;
127
- handler.mActivationIndex = Integer.MAX_VALUE;
128
- }
129
- }
130
- if (shouldCleanEmptyCells) {
131
- int out = 0;
132
- for (int i = 0; i < mGestureHandlersCount; i++) {
133
- if (mGestureHandlers[i] != null) {
134
- mGestureHandlers[out++] = mGestureHandlers[i];
135
- }
136
- }
137
- mGestureHandlersCount = out;
138
- }
139
- mFinishedHandlersCleanupScheduled = false;
140
- }
141
-
142
- private boolean hasOtherHandlerToWaitFor(GestureHandler handler) {
143
- for (int i = 0; i < mGestureHandlersCount; i++) {
144
- GestureHandler otherHandler = mGestureHandlers[i];
145
- if (!isFinished(otherHandler.getState())
146
- && shouldHandlerWaitForOther(handler, otherHandler)) {
147
- return true;
148
- }
149
- }
150
- return false;
151
- }
152
-
153
- private void tryActivate(GestureHandler handler) {
154
- // see if there is anyone else who we need to wait for
155
- if (hasOtherHandlerToWaitFor(handler)) {
156
- addAwaitingHandler(handler);
157
- } else {
158
- // we can activate handler right away
159
- makeActive(handler);
160
- handler.mIsAwaiting = false;
161
- }
162
- }
163
-
164
- private void cleanupAwaitingHandlers() {
165
- int out = 0;
166
- for (int i = 0; i < mAwaitingHandlersCount; i++) {
167
- if (mAwaitingHandlers[i].mIsAwaiting) {
168
- mAwaitingHandlers[out++] = mAwaitingHandlers[i];
169
- }
170
- }
171
- mAwaitingHandlersCount = out;
172
- }
173
-
174
- /*package*/ void onHandlerStateChange(GestureHandler handler, int newState, int prevState) {
175
- mHandlingChangeSemaphore += 1;
176
- if (isFinished(newState)) {
177
- // if there were handlers awaiting completion of this handler, we can trigger active state
178
- for (int i = 0; i < mAwaitingHandlersCount; i++) {
179
- GestureHandler otherHandler = mAwaitingHandlers[i];
180
- if (shouldHandlerWaitForOther(otherHandler, handler)) {
181
- if (newState == GestureHandler.STATE_END) {
182
- // gesture has ended, we need to kill the awaiting handler
183
- otherHandler.cancel();
184
- otherHandler.mIsAwaiting = false;
185
- } else {
186
- // gesture has failed recognition, we may try activating
187
- tryActivate(otherHandler);
188
- }
189
- }
190
- }
191
- cleanupAwaitingHandlers();
192
- }
193
- if (newState == GestureHandler.STATE_ACTIVE) {
194
- tryActivate(handler);
195
- } else if (prevState == GestureHandler.STATE_ACTIVE || prevState == GestureHandler.STATE_END) {
196
- if (handler.mIsActive) {
197
- handler.dispatchStateChange(newState, prevState);
198
- }
199
- } else {
200
- handler.dispatchStateChange(newState, prevState);
201
- }
202
- mHandlingChangeSemaphore -= 1;
203
- scheduleFinishedHandlersCleanup();
204
- }
205
-
206
- private void makeActive(GestureHandler handler) {
207
- int currentState = handler.getState();
208
-
209
- handler.mIsAwaiting = false;
210
- handler.mIsActive = true;
211
- handler.mActivationIndex = mActivationIndex++;
212
-
213
- int toCancelCount = 0;
214
- // Cancel all handlers that are required to be cancel upon current handler's activation
215
- for (int i = 0; i < mGestureHandlersCount; i++) {
216
- GestureHandler otherHandler = mGestureHandlers[i];
217
- if (shouldHandlerBeCancelledBy(otherHandler, handler)) {
218
- mHandlersToCancel[toCancelCount++] = otherHandler;
219
- }
220
- }
221
-
222
- for (int i = toCancelCount - 1; i >= 0; i--) {
223
- mHandlersToCancel[i].cancel();
224
- }
225
-
226
- // Clear all awaiting handlers waiting for the current handler to fail
227
- for (int i = mAwaitingHandlersCount - 1; i >= 0; i--) {
228
- GestureHandler otherHandler = mAwaitingHandlers[i];
229
- if (shouldHandlerBeCancelledBy(otherHandler, handler)) {
230
- otherHandler.cancel();
231
- otherHandler.mIsAwaiting = false;
232
- }
233
- }
234
- cleanupAwaitingHandlers();
235
-
236
- // Dispatch state change event if handler is no longer in the active state we should also
237
- // trigger END state change and UNDETERMINED state change if necessary
238
- handler.dispatchStateChange(GestureHandler.STATE_ACTIVE, GestureHandler.STATE_BEGAN);
239
- if (currentState != GestureHandler.STATE_ACTIVE) {
240
- handler.dispatchStateChange(GestureHandler.STATE_END, GestureHandler.STATE_ACTIVE);
241
- if (currentState != GestureHandler.STATE_END) {
242
- handler.dispatchStateChange(GestureHandler.STATE_UNDETERMINED, GestureHandler.STATE_END);
243
- }
244
- }
245
- }
246
-
247
- public void deliverEventToGestureHandlers(MotionEvent event) {
248
- // Copy handlers to "prepared handlers" array, because the list of active handlers can change
249
- // as a result of state updates
250
- int handlersCount = mGestureHandlersCount;
251
- System.arraycopy(mGestureHandlers, 0, mPreparedHandlers, 0, handlersCount);
252
- // We want to deliver events to active handlers first in order of their activation (handlers
253
- // that activated first will first get event delivered). Otherwise we deliver events in the
254
- // order in which handlers has been added ("most direct" children goes first). Therefore we rely
255
- // on Arrays.sort providing a stable sort (as children are registered in order in which they
256
- // should be tested)
257
- Arrays.sort(mPreparedHandlers, 0, handlersCount, sHandlersComparator);
258
- for (int i = 0; i < handlersCount; i++) {
259
- deliverEventToGestureHandler(mPreparedHandlers[i], event);
260
- }
261
- }
262
-
263
- private void cancelAll() {
264
- for (int i = mAwaitingHandlersCount - 1; i >= 0; i--) {
265
- mAwaitingHandlers[i].cancel();
266
- }
267
- // Copy handlers to "prepared handlers" array, because the list of active handlers can change
268
- // as a result of state updates
269
- int handlersCount = mGestureHandlersCount;
270
- for (int i = 0; i < handlersCount; i++) {
271
- mPreparedHandlers[i] = mGestureHandlers[i];
272
- }
273
- for (int i = handlersCount - 1; i >= 0; i--) {
274
- mPreparedHandlers[i].cancel();
275
- }
276
- }
277
-
278
- private void deliverEventToGestureHandler(GestureHandler handler, MotionEvent event) {
279
- if (!isViewAttachedUnderWrapper(handler.getView())) {
280
- handler.cancel();
281
- return;
282
- }
283
- if (!handler.wantEvents()) {
284
- return;
285
- }
286
- int action = event.getActionMasked();
287
- if (handler.mIsAwaiting && action == MotionEvent.ACTION_MOVE) {
288
- return;
289
- }
290
- float[] coords = sTempCoords;
291
- extractCoordsForView(handler.getView(), event, coords);
292
- float oldX = event.getX();
293
- float oldY = event.getY();
294
- // TODO: we may conside scaling events if necessary using MotionEvent.transform
295
- // for now the events are only offset to the top left corner of the view but if
296
- // view or any ot the parents is scaled the other pointers position will not reflect
297
- // their actual place in the view. On the other hand not scaling seems like a better
298
- // approach when we want to use pointer coordinates to calculate velocity or distance
299
- // for pinch so I don't know yet if we should transform or not...
300
- event.setLocation(coords[0], coords[1]);
301
- handler.handle(event);
302
- if (handler.mIsActive) {
303
- handler.dispatchTouchEvent(event);
304
- }
305
- event.setLocation(oldX, oldY);
306
- // if event was of type UP or POINTER_UP we request handler to stop tracking now that
307
- // the event has been dispatched
308
- if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_POINTER_UP) {
309
- int pointerId = event.getPointerId(event.getActionIndex());
310
- handler.stopTrackingPointer(pointerId);
311
- }
312
- }
313
-
314
- /**
315
- * isViewAttachedUnderWrapper checks whether all of parents for view related to handler
316
- * view are attached. Since there might be an issue rarely observed when view
317
- * has been detached and handler's state hasn't been change to canceled, failed or
318
- * ended yet. Probably it's a result of some race condition and stopping delivering
319
- * for this handler and changing its state to failed of end appear to be good enough solution.
320
- */
321
- private boolean isViewAttachedUnderWrapper(@Nullable View view) {
322
- if (view == null) {
323
- return false;
324
- }
325
- if (view == mWrapperView) {
326
- return true;
327
- }
328
- @Nullable ViewParent parent = view.getParent();
329
- while (parent != null && parent != mWrapperView) {
330
- parent = parent.getParent();
331
- }
332
- return parent == mWrapperView;
333
- }
334
-
335
- private void extractCoordsForView(View view, MotionEvent event, float[] outputCoords) {
336
- if (view == mWrapperView) {
337
- outputCoords[0] = event.getX();
338
- outputCoords[1] = event.getY();
339
- return;
340
- }
341
- if (view == null || !(view.getParent() instanceof ViewGroup)) {
342
- throw new IllegalArgumentException("Parent is null? View is no longer in the tree");
343
- }
344
- ViewGroup parent = (ViewGroup) view.getParent();
345
- extractCoordsForView(parent, event, outputCoords);
346
- PointF childPoint = sTempPoint;
347
- transformTouchPointToViewCoords(outputCoords[0], outputCoords[1], parent, view, childPoint);
348
- outputCoords[0] = childPoint.x;
349
- outputCoords[1] = childPoint.y;
350
- }
351
-
352
- private void addAwaitingHandler(GestureHandler handler) {
353
- for (int i = 0; i < mAwaitingHandlersCount; i++) {
354
- if (mAwaitingHandlers[i] == handler) {
355
- return;
356
- }
357
- }
358
- if (mAwaitingHandlersCount >= mAwaitingHandlers.length) {
359
- throw new IllegalStateException("Too many recognizers");
360
- }
361
- mAwaitingHandlers[mAwaitingHandlersCount++] = handler;
362
- handler.mIsAwaiting = true;
363
- handler.mActivationIndex = mActivationIndex++;
364
- }
365
-
366
- private void recordHandlerIfNotPresent(GestureHandler handler, View view) {
367
- for (int i = 0; i < mGestureHandlersCount; i++) {
368
- if (mGestureHandlers[i] == handler) {
369
- return;
370
- }
371
- }
372
- if (mGestureHandlersCount >= mGestureHandlers.length) {
373
- throw new IllegalStateException("Too many recognizers");
374
- }
375
- mGestureHandlers[mGestureHandlersCount++] = handler;
376
- handler.mIsActive = false;
377
- handler.mIsAwaiting = false;
378
- handler.mActivationIndex = Integer.MAX_VALUE;
379
- handler.prepare(view, this);
380
- }
381
-
382
- private boolean recordViewHandlersForPointer(View view, float[] coords, int pointerId) {
383
- ArrayList<GestureHandler> handlers = mHandlerRegistry.getHandlersForView(view);
384
- boolean found = false;
385
- if (handlers != null) {
386
- for (int i = 0, size = handlers.size(); i < size; i++) {
387
- GestureHandler handler = handlers.get(i);
388
- if (handler.isEnabled() && handler.isWithinBounds(view, coords[0], coords[1])) {
389
- recordHandlerIfNotPresent(handler, view);
390
- handler.startTrackingPointer(pointerId);
391
- found = true;
392
- }
393
- }
394
- }
395
- return found;
396
- }
397
-
398
- private void extractGestureHandlers(MotionEvent event) {
399
- int actionIndex = event.getActionIndex();
400
- int pointerId = event.getPointerId(actionIndex);
401
- sTempCoords[0] = event.getX(actionIndex);
402
- sTempCoords[1] = event.getY(actionIndex);
403
- traverseWithPointerEvents(mWrapperView, sTempCoords, pointerId);
404
- extractGestureHandlers(mWrapperView, sTempCoords, pointerId);
405
- }
406
-
407
- private boolean extractGestureHandlers(ViewGroup viewGroup, float[] coords, int pointerId) {
408
- int childrenCount = viewGroup.getChildCount();
409
- for (int i = childrenCount - 1; i >= 0; i--) {
410
- View child = mViewConfigHelper.getChildInDrawingOrderAtIndex(viewGroup, i);
411
- if (canReceiveEvents(child)) {
412
- PointF childPoint = sTempPoint;
413
- transformTouchPointToViewCoords(coords[0], coords[1], viewGroup, child, childPoint);
414
- float restoreX = coords[0];
415
- float restoreY = coords[1];
416
- coords[0] = childPoint.x;
417
- coords[1] = childPoint.y;
418
- boolean found = false;
419
- if (!isClipping(child) || isTransformedTouchPointInView(coords[0], coords[1], child)) {
420
- // we only consider the view if touch is inside the view bounds or if the view's children
421
- // can render outside of the view bounds (overflow visible)
422
- found = traverseWithPointerEvents(child, coords, pointerId);
423
- }
424
- coords[0] = restoreX;
425
- coords[1] = restoreY;
426
- if (found) {
427
- return true;
428
- }
429
- }
430
- }
431
- return false;
432
- }
433
-
434
- private static boolean shouldHandlerlessViewBecomeTouchTarget(View view, float coords[]) {
435
- // The following code is to match the iOS behavior where transparent parts of the views can
436
- // pass touch events through them allowing sibling nodes to handle them.
437
-
438
- // TODO: this is not an ideal solution as we only consider ViewGroups that has no background set
439
- // TODO: ideally we should determine the pixel color under the given coordinates and return
440
- // false if the color is transparent
441
- boolean isLeafOrTransparent = !(view instanceof ViewGroup) || view.getBackground() != null;
442
- return isLeafOrTransparent && isTransformedTouchPointInView(coords[0], coords[1], view);
443
- }
444
-
445
- private boolean traverseWithPointerEvents(View view, float coords[], int pointerId) {
446
- PointerEventsConfig pointerEvents = mViewConfigHelper.getPointerEventsConfigForView(view);
447
- if (pointerEvents == PointerEventsConfig.NONE) {
448
- // This view and its children can't be the target
449
- return false;
450
- } else if (pointerEvents == PointerEventsConfig.BOX_ONLY) {
451
- // This view is the target, its children don't matter
452
- return recordViewHandlersForPointer(view, coords, pointerId)
453
- || shouldHandlerlessViewBecomeTouchTarget(view, coords);
454
- } else if (pointerEvents == PointerEventsConfig.BOX_NONE) {
455
- // This view can't be the target, but its children might
456
- if (view instanceof ViewGroup) {
457
- return extractGestureHandlers((ViewGroup) view, coords, pointerId);
458
- }
459
- return false;
460
- } else if (pointerEvents == PointerEventsConfig.AUTO) {
461
- // Either this view or one of its children is the target
462
- boolean found = false;
463
- if (view instanceof ViewGroup) {
464
- found = extractGestureHandlers((ViewGroup) view, coords, pointerId);
465
- }
466
- return recordViewHandlersForPointer(view, coords, pointerId)
467
- || found || shouldHandlerlessViewBecomeTouchTarget(view, coords);
468
- } else {
469
- throw new IllegalArgumentException(
470
- "Unknown pointer event type: " + pointerEvents.toString());
471
- }
472
- }
473
-
474
- private boolean canReceiveEvents(View view) {
475
- return view.getVisibility() == View.VISIBLE && view.getAlpha() >= mMinAlphaForTraversal;
476
- }
477
-
478
- private static void transformTouchPointToViewCoords(
479
- float x,
480
- float y,
481
- ViewGroup parent,
482
- View child,
483
- PointF outLocalPoint) {
484
- float localX = x + parent.getScrollX() - child.getLeft();
485
- float localY = y + parent.getScrollY() - child.getTop();
486
- Matrix matrix = child.getMatrix();
487
- if (!matrix.isIdentity()) {
488
- float[] localXY = sMatrixTransformCoords;
489
- localXY[0] = localX;
490
- localXY[1] = localY;
491
- Matrix inverseMatrix = sInverseMatrix;
492
- matrix.invert(inverseMatrix);
493
- inverseMatrix.mapPoints(localXY);
494
- localX = localXY[0];
495
- localY = localXY[1];
496
- }
497
- outLocalPoint.set(localX, localY);
498
- }
499
-
500
- private boolean isClipping(View view) {
501
- // if view is not a view group it is clipping, otherwise we check for `getClipChildren` flag to
502
- // be turned on and also confirm with the ViewConfigHelper implementation
503
- return !(view instanceof ViewGroup) || mViewConfigHelper.isViewClippingChildren((ViewGroup) view);
504
- }
505
-
506
- private static boolean isTransformedTouchPointInView(float x, float y, View child) {
507
- return x >= 0 && x <= child.getWidth() && y >= 0 && y < child.getHeight();
508
- }
509
-
510
- private static boolean shouldHandlerWaitForOther(GestureHandler handler, GestureHandler other) {
511
- return handler != other && (handler.shouldWaitForHandlerFailure(other)
512
- || other.shouldRequireToWaitForFailure(handler));
513
- }
514
-
515
- private static boolean canRunSimultaneously(GestureHandler a, GestureHandler b) {
516
- return a == b || a.shouldRecognizeSimultaneously(b) || b.shouldRecognizeSimultaneously(a);
517
- }
518
-
519
- private static boolean shouldHandlerBeCancelledBy(GestureHandler handler, GestureHandler other) {
520
-
521
- if (!handler.hasCommonPointers(other)) {
522
- // if two handlers share no common pointer one can never trigger cancel for the other
523
- return false;
524
- }
525
- if (canRunSimultaneously(handler, other)) {
526
- // if handlers are allowed to run simultaneously, when first activates second can still remain
527
- // in began state
528
- return false;
529
- }
530
- if (handler != other &&
531
- (handler.mIsAwaiting || handler.getState() == GestureHandler.STATE_ACTIVE)) {
532
- // in every other case as long as the handler is about to be activated or already in active
533
- // state, we delegate the decision to the implementation of GestureHandler#shouldBeCancelledBy
534
- return handler.shouldBeCancelledBy(other);
535
- }
536
- return true;
537
- }
538
-
539
- private static boolean isFinished(int state) {
540
- return state == GestureHandler.STATE_CANCELLED || state == GestureHandler.STATE_FAILED
541
- || state == GestureHandler.STATE_END;
542
- }
543
- }
@@ -1,10 +0,0 @@
1
- package com.swmansion.gesturehandler;
2
-
3
- import android.view.View;
4
- import android.view.ViewGroup;
5
-
6
- import java.util.ArrayList;
7
-
8
- public interface GestureHandlerRegistry {
9
- ArrayList<GestureHandler> getHandlersForView(View view);
10
- }
@@ -1,29 +0,0 @@
1
- package com.swmansion.gesturehandler;
2
-
3
- import android.view.View;
4
-
5
- import java.util.ArrayList;
6
- import java.util.WeakHashMap;
7
-
8
- public class GestureHandlerRegistryImpl implements GestureHandlerRegistry {
9
-
10
- private WeakHashMap<View, ArrayList<GestureHandler>> mHandlers = new WeakHashMap<>();
11
-
12
- public <T extends GestureHandler> T registerHandlerForView(View view, T handler) {
13
- ArrayList<GestureHandler> listToAdd = mHandlers.get(view);
14
- if (listToAdd == null) {
15
- listToAdd = new ArrayList<>(1);
16
- listToAdd.add(handler);
17
- mHandlers.put(view, listToAdd);
18
- } else {
19
- listToAdd.add(handler);
20
- }
21
- return handler;
22
- }
23
-
24
- @Override
25
- public ArrayList<GestureHandler> getHandlersForView(View view) {
26
- return mHandlers.get(view);
27
- }
28
- }
29
-
@@ -1,53 +0,0 @@
1
- package com.swmansion.gesturehandler;
2
-
3
- import android.view.MotionEvent;
4
-
5
- public class GestureUtils {
6
- public static float getLastPointerX(MotionEvent event, boolean averageTouches) {
7
- float offset = event.getRawX() - event.getX();
8
- int excludeIndex = event.getActionMasked() == MotionEvent.ACTION_POINTER_UP ?
9
- event.getActionIndex() : -1;
10
-
11
- if (averageTouches) {
12
- float sum = 0f;
13
- int count = 0;
14
- for (int i = 0, size = event.getPointerCount(); i < size; i++) {
15
- if (i != excludeIndex) {
16
- sum += event.getX(i) + offset;
17
- count++;
18
- }
19
- }
20
- return sum / count;
21
- } else {
22
- int lastPointerIdx = event.getPointerCount() - 1;
23
- if (lastPointerIdx == excludeIndex) {
24
- lastPointerIdx--;
25
- }
26
- return event.getX(lastPointerIdx) + offset;
27
- }
28
- }
29
-
30
- public static float getLastPointerY(MotionEvent event, boolean averageTouches) {
31
- float offset = event.getRawY() - event.getY();
32
- int excludeIndex = event.getActionMasked() == MotionEvent.ACTION_POINTER_UP ?
33
- event.getActionIndex() : -1;
34
-
35
- if (averageTouches) {
36
- float sum = 0f;
37
- int count = 0;
38
- for (int i = 0, size = event.getPointerCount(); i < size; i++) {
39
- if (i != excludeIndex) {
40
- sum += event.getY(i) + offset;
41
- count++;
42
- }
43
- }
44
- return sum / count;
45
- } else {
46
- int lastPointerIdx = event.getPointerCount() - 1;
47
- if (lastPointerIdx == excludeIndex) {
48
- lastPointerIdx -= 1;
49
- }
50
- return event.getY(lastPointerIdx) + offset;
51
- }
52
- }
53
- }