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,81 +0,0 @@
1
- package com.swmansion.gesturehandler;
2
-
3
- import android.content.Context;
4
- import android.os.Handler;
5
- import android.view.MotionEvent;
6
-
7
- public class LongPressGestureHandler extends GestureHandler<LongPressGestureHandler> {
8
-
9
- private static final long DEFAULT_MIN_DURATION_MS = 500; // 1 sec
10
- private static float DEFAULT_MAX_DIST_DP = 10; // 20dp
11
-
12
- private long mMinDurationMs = DEFAULT_MIN_DURATION_MS;
13
- private float mMaxDistSq;
14
- private float mStartX, mStartY;
15
- private Handler mHandler;
16
-
17
- public LongPressGestureHandler(Context context) {
18
- setShouldCancelWhenOutside(true);
19
- mMaxDistSq = DEFAULT_MAX_DIST_DP * context.getResources().getDisplayMetrics().density;
20
- }
21
-
22
- public void setMinDurationMs(long minDurationMs) {
23
- mMinDurationMs = minDurationMs;
24
- }
25
-
26
- public LongPressGestureHandler setMaxDist(float maxDist) {
27
- mMaxDistSq = maxDist * maxDist;
28
- return this;
29
- }
30
-
31
- @Override
32
- protected void onHandle(MotionEvent event) {
33
- if (getState() == STATE_UNDETERMINED) {
34
- begin();
35
- mStartX = event.getRawX();
36
- mStartY = event.getRawY();
37
- mHandler = new Handler();
38
- if (mMinDurationMs > 0) {
39
- mHandler.postDelayed(new Runnable() {
40
- @Override
41
- public void run() {
42
- activate();
43
- }
44
- }, mMinDurationMs);
45
- } else if (mMinDurationMs == 0) {
46
- activate();
47
- }
48
- }
49
- if (event.getActionMasked() == MotionEvent.ACTION_UP) {
50
- if (mHandler != null) {
51
- mHandler.removeCallbacksAndMessages(null);
52
- mHandler = null;
53
- }
54
- if (getState() == STATE_ACTIVE) {
55
- end();
56
- } else {
57
- fail();
58
- }
59
- } else {
60
- // calculate distance from start
61
- float deltaX = event.getRawX() - mStartX;
62
- float deltaY = event.getRawY() - mStartY;
63
- float distSq = deltaX * deltaX + deltaY * deltaY;
64
- if (distSq > mMaxDistSq) {
65
- if (getState() == STATE_ACTIVE) {
66
- cancel();
67
- } else {
68
- fail();
69
- }
70
- }
71
- }
72
- }
73
-
74
- @Override
75
- protected void onStateChange(int newState, int previousState) {
76
- if (mHandler != null) {
77
- mHandler.removeCallbacksAndMessages(null);
78
- mHandler = null;
79
- }
80
- }
81
- }
@@ -1,110 +0,0 @@
1
- package com.swmansion.gesturehandler;
2
-
3
- import android.os.SystemClock;
4
- import android.view.MotionEvent;
5
- import android.view.View;
6
- import android.view.ViewGroup;
7
-
8
- public class NativeViewGestureHandler extends GestureHandler<NativeViewGestureHandler> {
9
-
10
- private boolean mShouldActivateOnStart;
11
- private boolean mDisallowInterruption;
12
-
13
- public NativeViewGestureHandler() {
14
- setShouldCancelWhenOutside(true);
15
- }
16
-
17
- public NativeViewGestureHandler setShouldActivateOnStart(boolean shouldActivateOnStart) {
18
- mShouldActivateOnStart = shouldActivateOnStart;
19
- return this;
20
- }
21
-
22
- /**
23
- * Set this to {@code true} when wrapping native components that are supposed to be an exclusive
24
- * target for a touch stream. Like for example switch or slider component which when activated
25
- * aren't supposed to be cancelled by scrollview or other container that may also handle touches.
26
- */
27
- public NativeViewGestureHandler setDisallowInterruption(boolean disallowInterruption) {
28
- mDisallowInterruption = disallowInterruption;
29
- return this;
30
- }
31
-
32
- @Override
33
- public boolean shouldRequireToWaitForFailure(GestureHandler handler) {
34
- return super.shouldRequireToWaitForFailure(handler);
35
- }
36
-
37
- @Override
38
- public boolean shouldRecognizeSimultaneously(GestureHandler handler) {
39
- if (handler instanceof NativeViewGestureHandler) {
40
- // Special case when the peer handler is also an instance of NativeViewGestureHandler:
41
- // For the `disallowInterruption` to work correctly we need to check the property when
42
- // accessed as a peer, because simultaneous recognizers can be set on either side of the
43
- // connection.
44
- NativeViewGestureHandler nativeWrapper = (NativeViewGestureHandler) handler;
45
- if (nativeWrapper.getState() == STATE_ACTIVE && nativeWrapper.mDisallowInterruption) {
46
- // other handler is active and it disallows interruption, we don't want to get into its way
47
- return false;
48
- }
49
- }
50
-
51
- boolean canBeInterrupted = !mDisallowInterruption;
52
- int state = getState();
53
- int otherState = handler.getState();
54
-
55
- if (state == STATE_ACTIVE && otherState == STATE_ACTIVE && canBeInterrupted) {
56
- // if both handlers are active and the current handler can be interruped it we return `false`
57
- // as it means the other handler has turned active and returning `true` would prevent it from
58
- // interrupting the current handler
59
- return false;
60
- }
61
- // otherwise we can only return `true` if already in an active state
62
- return state == STATE_ACTIVE && canBeInterrupted;
63
- }
64
-
65
- @Override
66
- public boolean shouldBeCancelledBy(GestureHandler handler) {
67
- return !mDisallowInterruption;
68
- }
69
-
70
- @Override
71
- protected void onHandle(MotionEvent event) {
72
- View view = getView();
73
- int state = getState();
74
- if (event.getActionMasked() == MotionEvent.ACTION_UP) {
75
- view.onTouchEvent(event);
76
- if ((state == STATE_UNDETERMINED || state == STATE_BEGAN) && view.isPressed()) {
77
- activate();
78
- }
79
- end();
80
- } else if (state == STATE_UNDETERMINED || state == STATE_BEGAN) {
81
- if (mShouldActivateOnStart) {
82
- tryIntercept(view, event);
83
- view.onTouchEvent(event);
84
- activate();
85
- } else if (tryIntercept(view, event)) {
86
- view.onTouchEvent(event);
87
- activate();
88
- } else if (state != STATE_BEGAN) {
89
- begin();
90
- }
91
- } else if (state == STATE_ACTIVE) {
92
- view.onTouchEvent(event);
93
- }
94
- }
95
-
96
- private static boolean tryIntercept(View view, MotionEvent event) {
97
- if (view instanceof ViewGroup && ((ViewGroup) view).onInterceptTouchEvent(event)) {
98
- return true;
99
- }
100
- return false;
101
- }
102
-
103
- @Override
104
- protected void onCancel() {
105
- long time = SystemClock.uptimeMillis();
106
- MotionEvent event = MotionEvent.obtain(time, time, MotionEvent.ACTION_CANCEL, 0, 0, 0);
107
- event.setAction(MotionEvent.ACTION_CANCEL);
108
- getView().onTouchEvent(event);
109
- }
110
- }
@@ -1,8 +0,0 @@
1
- package com.swmansion.gesturehandler;
2
-
3
- import android.view.MotionEvent;
4
-
5
- public interface OnTouchEventListener<T extends GestureHandler> {
6
- void onTouchEvent(T handler, MotionEvent event);
7
- void onStateChange(T handler, int newState, int oldState);
8
- }
@@ -1,312 +0,0 @@
1
- package com.swmansion.gesturehandler;
2
-
3
- import android.content.Context;
4
- import android.view.MotionEvent;
5
- import android.view.VelocityTracker;
6
- import android.view.ViewConfiguration;
7
-
8
- public class PanGestureHandler extends GestureHandler<PanGestureHandler> {
9
-
10
- private static float MIN_VALUE_IGNORE = Float.MAX_VALUE;
11
- private static float MAX_VALUE_IGNORE = Float.MIN_VALUE;
12
-
13
- private static int DEFAULT_MIN_POINTERS = 1;
14
- private static int DEFAULT_MAX_POINTERS = 10;
15
-
16
- private float mMinDistSq = MAX_VALUE_IGNORE;
17
-
18
- private float mActiveOffsetXStart = MIN_VALUE_IGNORE;
19
- private float mActiveOffsetXEnd = MAX_VALUE_IGNORE;
20
-
21
- private float mFailOffsetXStart = MAX_VALUE_IGNORE;
22
- private float mFailOffsetXEnd = MIN_VALUE_IGNORE;
23
-
24
- private float mActiveOffsetYStart = MIN_VALUE_IGNORE;
25
- private float mActiveOffsetYEnd = MAX_VALUE_IGNORE;
26
-
27
- private float mFailOffsetYStart = MAX_VALUE_IGNORE;
28
- private float mFailOffsetYEnd = MIN_VALUE_IGNORE;
29
-
30
- private float mMinVelocityX = MIN_VALUE_IGNORE;
31
- private float mMinVelocityY = MIN_VALUE_IGNORE;
32
- private float mMinVelocitySq = MIN_VALUE_IGNORE;
33
- private int mMinPointers = DEFAULT_MIN_POINTERS;
34
- private int mMaxPointers = DEFAULT_MAX_POINTERS;
35
-
36
- private float mStartX, mStartY;
37
- private float mOffsetX, mOffsetY;
38
- private float mLastX, mLastY;
39
- private float mLastVelocityX, mLastVelocityY;
40
- private VelocityTracker mVelocityTracker;
41
-
42
- private boolean mAverageTouches;
43
-
44
- /**
45
- * On Android when there are multiple pointers on the screen pan gestures most often just consider
46
- * the last placed pointer. The behaviour on iOS is quite different where the x and y component
47
- * of the pan pointer is calculated as an average out of all the pointers placed on the screen.
48
- *
49
- * This behaviour can be customized on android by setting averageTouches property of the handler
50
- * object. This could be useful in particular for the usecases when we attach other handlers that
51
- * recognizes multi-finger gestures such as rotation. In that case when we only rely on the last
52
- * placed finger it is easier for the gesture handler to trigger when we do a rotation gesture
53
- * because each finger when treated separately will travel some distance, whereas the average
54
- * position of all the fingers will remain still while doing a rotation gesture.
55
- */
56
- public PanGestureHandler(Context context) {
57
- ViewConfiguration vc = ViewConfiguration.get(context);
58
- int touchSlop = vc.getScaledTouchSlop();
59
- mMinDistSq = touchSlop * touchSlop;
60
- }
61
-
62
- public PanGestureHandler setActiveOffsetXStart(float activeOffsetXStart) {
63
- mActiveOffsetXStart = activeOffsetXStart;
64
- return this;
65
- }
66
-
67
- public PanGestureHandler setActiveOffsetXEnd(float activeOffsetXEnd) {
68
- mActiveOffsetXEnd = activeOffsetXEnd;
69
- return this;
70
- }
71
-
72
- public PanGestureHandler setFailOffsetXStart(float failOffsetXStart) {
73
- mFailOffsetXStart = failOffsetXStart;
74
- return this;
75
- }
76
-
77
- public PanGestureHandler setFailOffsetXEnd(float failOffsetXEnd) {
78
- mFailOffsetXEnd = failOffsetXEnd;
79
- return this;
80
- }
81
-
82
- public PanGestureHandler setActiveOffsetYStart(float activeOffsetYStart) {
83
- mActiveOffsetYStart = activeOffsetYStart;
84
- return this;
85
- }
86
-
87
- public PanGestureHandler setActiveOffsetYEnd(float activeOffsetYEnd) {
88
- mActiveOffsetYEnd = activeOffsetYEnd;
89
- return this;
90
- }
91
-
92
- public PanGestureHandler setFailOffsetYStart(float failOffsetYStart) {
93
- mFailOffsetYStart = failOffsetYStart;
94
- return this;
95
- }
96
-
97
- public PanGestureHandler setFailOffsetYEnd(float failOffsetYEnd) {
98
- mFailOffsetYEnd = failOffsetYEnd;
99
- return this;
100
- }
101
-
102
- public PanGestureHandler setMinDist(float minDist) {
103
- mMinDistSq = minDist * minDist;
104
- return this;
105
- }
106
-
107
- public PanGestureHandler setMinPointers(int minPointers) {
108
- mMinPointers = minPointers;
109
- return this;
110
- }
111
-
112
- public PanGestureHandler setMaxPointers(int maxPointers) {
113
- mMaxPointers = maxPointers;
114
- return this;
115
- }
116
-
117
- public PanGestureHandler setAverageTouches(boolean averageTouches) {
118
- mAverageTouches = averageTouches;
119
- return this;
120
- }
121
-
122
- /**
123
- * @param minVelocity in pixels per second
124
- */
125
- public PanGestureHandler setMinVelocity(float minVelocity) {
126
- mMinVelocitySq = minVelocity * minVelocity;
127
- return this;
128
- }
129
-
130
- public PanGestureHandler setMinVelocityX(float minVelocityX) {
131
- mMinVelocityX = minVelocityX;
132
- return this;
133
- }
134
-
135
- public PanGestureHandler setMinVelocityY(float minVelocityY) {
136
- mMinVelocityY = minVelocityY;
137
- return this;
138
- }
139
-
140
- private boolean shouldActivate() {
141
- float dx = mLastX - mStartX + mOffsetX;
142
- if (mActiveOffsetXStart != MIN_VALUE_IGNORE && dx < mActiveOffsetXStart) {
143
- return true;
144
- }
145
-
146
- if (mActiveOffsetXEnd != MAX_VALUE_IGNORE && dx > mActiveOffsetXEnd) {
147
- return true;
148
- }
149
-
150
- float dy = mLastY - mStartY + mOffsetY;
151
- if (mActiveOffsetYStart != MIN_VALUE_IGNORE && dy < mActiveOffsetYStart) {
152
- return true;
153
- }
154
-
155
- if (mActiveOffsetYEnd != MAX_VALUE_IGNORE && dy > mActiveOffsetYEnd) {
156
- return true;
157
- }
158
-
159
- float distSq = dx * dx + dy * dy;
160
- if (mMinDistSq != MIN_VALUE_IGNORE && distSq >= mMinDistSq) {
161
- return true;
162
- }
163
-
164
- float vx = mLastVelocityX;
165
- if (mMinVelocityX != MIN_VALUE_IGNORE &&
166
- ((mMinVelocityX < 0 && vx <= mMinVelocityX) || (mMinVelocityX >= 0 && vx >= mMinVelocityX))) {
167
- return true;
168
- }
169
-
170
- float vy = mLastVelocityY;
171
- if (mMinVelocityY != MIN_VALUE_IGNORE &&
172
- ((mMinVelocityY < 0 && vx <= mMinVelocityY) || (mMinVelocityY >= 0 && vx >= mMinVelocityY))) {
173
- return true;
174
- }
175
-
176
- float velocitySq = vx * vx + vy * vy;
177
- if (mMinVelocitySq != MIN_VALUE_IGNORE && velocitySq >= mMinVelocitySq) {
178
- return true;
179
- }
180
-
181
- return false;
182
- }
183
-
184
- private boolean shouldFail() {
185
- float dx = mLastX - mStartX + mOffsetX;
186
-
187
- if (mFailOffsetXStart != MAX_VALUE_IGNORE && dx < mFailOffsetXStart) {
188
- return true;
189
- }
190
-
191
- if (mFailOffsetXEnd != MIN_VALUE_IGNORE && dx > mFailOffsetXEnd) {
192
- return true;
193
- }
194
-
195
-
196
- float dy = mLastY - mStartY + mOffsetY;
197
- if (mFailOffsetYStart != MAX_VALUE_IGNORE && dy < mFailOffsetYStart) {
198
- return true;
199
- }
200
-
201
- if (mFailOffsetYEnd != MIN_VALUE_IGNORE && dy > mFailOffsetYEnd) {
202
- return true;
203
- }
204
-
205
- return false;
206
- }
207
-
208
- @Override
209
- protected void onHandle(MotionEvent event) {
210
- int state = getState();
211
- int action = event.getActionMasked();
212
-
213
- if (action == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_POINTER_DOWN) {
214
- // update offset if new pointer gets added or removed
215
- mOffsetX += mLastX - mStartX;
216
- mOffsetY += mLastY - mStartY;
217
-
218
- // reset starting point
219
- mLastX = GestureUtils.getLastPointerX(event, mAverageTouches);
220
- mLastY = GestureUtils.getLastPointerY(event, mAverageTouches);
221
- mStartX = mLastX;
222
- mStartY = mLastY;
223
- } else {
224
- mLastX = GestureUtils.getLastPointerX(event, mAverageTouches);
225
- mLastY = GestureUtils.getLastPointerY(event, mAverageTouches);
226
- }
227
-
228
- if (state == STATE_UNDETERMINED && event.getPointerCount() >= mMinPointers) {
229
- mStartX = mLastX;
230
- mStartY = mLastY;
231
- mOffsetX = 0;
232
- mOffsetY = 0;
233
- mVelocityTracker = VelocityTracker.obtain();
234
- addVelocityMovement(mVelocityTracker, event);
235
- begin();
236
- } else if (mVelocityTracker != null) {
237
- addVelocityMovement(mVelocityTracker, event);
238
- mVelocityTracker.computeCurrentVelocity(1000);
239
- mLastVelocityX = mVelocityTracker.getXVelocity();
240
- mLastVelocityY = mVelocityTracker.getYVelocity();
241
- }
242
-
243
- if (action == MotionEvent.ACTION_UP) {
244
- if (state == STATE_ACTIVE || state == STATE_BEGAN) {
245
- end();
246
- } else {
247
- fail();
248
- }
249
- } else if (action == MotionEvent.ACTION_POINTER_DOWN && event.getPointerCount() > mMaxPointers) {
250
- // When new finger is placed down (POINTER_DOWN) we check if MAX_POINTERS is not exceeded
251
- if (state == STATE_ACTIVE) {
252
- cancel();
253
- } else {
254
- fail();
255
- }
256
- } else if (action == MotionEvent.ACTION_POINTER_UP && state == STATE_ACTIVE
257
- && event.getPointerCount() < mMinPointers) {
258
- // When finger is lifted up (POINTER_UP) and the number of pointers falls below MIN_POINTERS
259
- // threshold, we only want to take an action when the handler has already activated. Otherwise
260
- // we can still expect more fingers to be placed on screen and fulfill MIN_POINTERS criteria.
261
- fail();
262
- } else if (state == STATE_BEGAN) {
263
- if (shouldFail()) {
264
- fail();
265
- } else if (shouldActivate()) {
266
- // reset starting point
267
- mStartX = mLastX;
268
- mStartY = mLastY;
269
- activate();
270
- }
271
- }
272
- }
273
-
274
- @Override
275
- protected void onReset() {
276
- if (mVelocityTracker != null) {
277
- mVelocityTracker.recycle();
278
- mVelocityTracker = null;
279
- }
280
- }
281
-
282
- public float getTranslationX() {
283
- return mLastX - mStartX + mOffsetX;
284
- }
285
-
286
- public float getTranslationY() {
287
- return mLastY - mStartY + mOffsetY;
288
- }
289
-
290
- public float getVelocityX() {
291
- return mLastVelocityX;
292
- }
293
-
294
- public float getVelocityY() {
295
- return mLastVelocityY;
296
- }
297
-
298
-
299
- /**
300
- * This method adds movement to {@class VelocityTracker} first resetting offset of the event so
301
- * that the velocity is calculated based on the absolute position of touch pointers. This is
302
- * because if the underlying view moves along with the finger using relative x/y coords yields
303
- * incorrect results.
304
- */
305
- private static void addVelocityMovement(VelocityTracker tracker, MotionEvent event) {
306
- float offsetX = event.getRawX() - event.getX();
307
- float offsetY = event.getRawY() - event.getY();
308
- event.offsetLocation(offsetX, offsetY);
309
- tracker.addMovement(event);
310
- event.offsetLocation(-offsetX, -offsetY);
311
- }
312
- }
@@ -1,109 +0,0 @@
1
- package com.swmansion.gesturehandler;
2
-
3
- import android.content.Context;
4
- import android.view.MotionEvent;
5
- import android.view.ScaleGestureDetector;
6
- import android.view.ViewConfiguration;
7
-
8
- public class PinchGestureHandler extends GestureHandler<PinchGestureHandler> {
9
-
10
- private ScaleGestureDetector mScaleGestureDetector;
11
- private double mLastScaleFactor;
12
- private double mLastVelocity;
13
-
14
- private float mStartingSpan;
15
- private float mSpanSlop;
16
-
17
- private ScaleGestureDetector.OnScaleGestureListener mGestureListener =
18
- new ScaleGestureDetector.OnScaleGestureListener() {
19
-
20
- @Override
21
- public boolean onScale(ScaleGestureDetector detector) {
22
- double prevScaleFactor = mLastScaleFactor;
23
- mLastScaleFactor *= detector.getScaleFactor();
24
- long delta = detector.getTimeDelta();
25
- if (delta > 0) {
26
- mLastVelocity = (mLastScaleFactor - prevScaleFactor) / delta;
27
- }
28
- if (Math.abs(mStartingSpan - detector.getCurrentSpan()) >= mSpanSlop
29
- && getState() == STATE_BEGAN) {
30
- activate();
31
- }
32
- return true;
33
- }
34
-
35
- @Override
36
- public boolean onScaleBegin(ScaleGestureDetector detector) {
37
- mStartingSpan = detector.getCurrentSpan();
38
- return true;
39
- }
40
-
41
- @Override
42
- public void onScaleEnd(ScaleGestureDetector detector) {
43
- // ScaleGestureDetector thinks that when fingers are 27mm away that's a sufficiently good
44
- // reason to trigger this method giving us no other choice but to ignore it completely.
45
- }
46
- };
47
-
48
- public PinchGestureHandler() {
49
- setShouldCancelWhenOutside(false);
50
- }
51
-
52
- @Override
53
- protected void onHandle(MotionEvent event) {
54
- if (getState() == STATE_UNDETERMINED) {
55
- Context context = getView().getContext();
56
- mLastVelocity = 0f;
57
- mLastScaleFactor = 1f;
58
- mScaleGestureDetector = new ScaleGestureDetector(context, mGestureListener);
59
- ViewConfiguration configuration = ViewConfiguration.get(context);
60
- mSpanSlop = configuration.getScaledTouchSlop();
61
-
62
- begin();
63
- }
64
-
65
- if (mScaleGestureDetector != null) {
66
- mScaleGestureDetector.onTouchEvent(event);
67
- }
68
-
69
- int activePointers = event.getPointerCount();
70
- if (event.getActionMasked() == MotionEvent.ACTION_POINTER_UP) {
71
- activePointers -= 1;
72
- }
73
-
74
- if (getState() == STATE_ACTIVE && activePointers < 2) {
75
- end();
76
- } else if (event.getActionMasked() == MotionEvent.ACTION_UP) {
77
- fail();
78
- }
79
- }
80
-
81
- @Override
82
- protected void onReset() {
83
- mScaleGestureDetector = null;
84
- mLastVelocity = 0f;
85
- mLastScaleFactor = 1f;
86
- }
87
-
88
- public double getScale() {
89
- return mLastScaleFactor;
90
- }
91
-
92
- public double getVelocity() {
93
- return mLastVelocity;
94
- }
95
-
96
- public float getFocalPointX() {
97
- if (mScaleGestureDetector == null) {
98
- return Float.NaN;
99
- }
100
- return mScaleGestureDetector.getFocusX();
101
- }
102
-
103
- public float getFocalPointY() {
104
- if (mScaleGestureDetector == null) {
105
- return Float.NaN;
106
- }
107
- return mScaleGestureDetector.getFocusY();
108
- }
109
- }