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
@@ -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
- }