react-native-gesture-handler 2.4.1 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (382) hide show
  1. package/README.md +4 -2
  2. package/RNGestureHandler.podspec +17 -5
  3. package/android/build.gradle +71 -15
  4. package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt +2 -1
  5. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +9 -5
  6. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +32 -6
  7. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +5 -2
  8. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +105 -23
  9. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +30 -2
  10. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +3 -2
  11. package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +1 -1
  12. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +0 -8
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +74 -84
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +7 -1
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +5 -1
  16. package/android/src/main/jni/CMakeLists.txt +59 -0
  17. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +12 -9
  18. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +1 -0
  19. package/ios/Handlers/RNFlingHandler.m +43 -1
  20. package/ios/Handlers/{RNNativeViewHandler.m → RNNativeViewHandler.mm} +13 -1
  21. package/ios/Handlers/RNPanHandler.m +27 -0
  22. package/ios/RNGestureHandler.h +1 -0
  23. package/ios/RNGestureHandler.m +22 -4
  24. package/ios/RNGestureHandlerButtonComponentView.mm +1 -1
  25. package/ios/RNGestureHandlerManager.mm +10 -7
  26. package/ios/RNGestureHandlerModule.mm +4 -1
  27. package/ios/RNGestureHandlerRootViewComponentView.mm +1 -1
  28. package/ios/RNManualActivationRecognizer.m +10 -3
  29. package/ios/RNRootViewGestureRecognizer.m +12 -1
  30. package/lib/commonjs/EnableExperimentalWebImplementation.js +24 -0
  31. package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -0
  32. package/lib/commonjs/RNGestureHandlerModule.macos.js +138 -0
  33. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -0
  34. package/lib/commonjs/RNGestureHandlerModule.web.js +87 -25
  35. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  36. package/lib/commonjs/RNRenderer.js +16 -0
  37. package/lib/commonjs/RNRenderer.js.map +1 -0
  38. package/lib/commonjs/RNRenderer.web.js +11 -0
  39. package/lib/commonjs/RNRenderer.web.js.map +1 -0
  40. package/lib/commonjs/components/DrawerLayout.js +41 -12
  41. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  42. package/lib/commonjs/components/GestureButtons.js +42 -9
  43. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  44. package/lib/commonjs/components/GestureComponents.js +41 -4
  45. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  46. package/lib/commonjs/components/GestureComponents.web.js +7 -2
  47. package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
  48. package/lib/commonjs/components/Swipeable.js +3 -1
  49. package/lib/commonjs/components/Swipeable.js.map +1 -1
  50. package/lib/commonjs/components/touchables/GenericTouchable.js +5 -1
  51. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  52. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  53. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +2 -1
  54. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
  55. package/lib/commonjs/handlers/PanGestureHandler.js +1 -1
  56. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
  57. package/lib/commonjs/handlers/PressabilityDebugView.js +14 -0
  58. package/lib/commonjs/handlers/PressabilityDebugView.js.map +1 -0
  59. package/lib/commonjs/handlers/PressabilityDebugView.web.js +12 -0
  60. package/lib/commonjs/handlers/PressabilityDebugView.web.js.map +1 -0
  61. package/lib/commonjs/handlers/createHandler.js +33 -12
  62. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  63. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  64. package/lib/commonjs/handlers/gestures/GestureDetector.js +150 -75
  65. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  66. package/lib/commonjs/handlers/gestures/gesture.js +13 -2
  67. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  68. package/lib/commonjs/handlers/gestures/gestureStateManager.js +13 -9
  69. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
  70. package/lib/commonjs/handlers/gestures/panGesture.js +5 -0
  71. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  72. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +7 -0
  73. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
  74. package/lib/commonjs/index.js +14 -0
  75. package/lib/commonjs/index.js.map +1 -1
  76. package/lib/commonjs/utils.js +6 -3
  77. package/lib/commonjs/utils.js.map +1 -1
  78. package/lib/commonjs/web/constants.js +3 -51
  79. package/lib/commonjs/web/constants.js.map +1 -1
  80. package/lib/commonjs/web/detectors/RotationGestureDetector.js +169 -0
  81. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -0
  82. package/lib/commonjs/web/detectors/ScaleGestureDetector.js +167 -0
  83. package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -0
  84. package/lib/commonjs/web/handlers/FlingGestureHandler.js +154 -0
  85. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -0
  86. package/lib/commonjs/web/handlers/GestureHandler.js +538 -0
  87. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -0
  88. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +147 -0
  89. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -0
  90. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +116 -0
  91. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -0
  92. package/lib/commonjs/web/handlers/PanGestureHandler.js +451 -0
  93. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -0
  94. package/lib/commonjs/web/handlers/PinchGestureHandler.js +171 -0
  95. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -0
  96. package/lib/commonjs/web/handlers/RotationGestureHandler.js +187 -0
  97. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -0
  98. package/lib/commonjs/web/handlers/TapGestureHandler.js +296 -0
  99. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -0
  100. package/lib/commonjs/web/interfaces.js +34 -0
  101. package/lib/commonjs/web/interfaces.js.map +1 -0
  102. package/lib/commonjs/web/tools/EventManager.js +169 -0
  103. package/lib/commonjs/web/tools/EventManager.js.map +1 -0
  104. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +283 -0
  105. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -0
  106. package/lib/commonjs/web/tools/InteractionManager.js +102 -0
  107. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -0
  108. package/lib/commonjs/web/tools/NodeManager.js +48 -0
  109. package/lib/commonjs/web/tools/NodeManager.js.map +1 -0
  110. package/lib/commonjs/web/tools/PointerTracker.js +132 -0
  111. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -0
  112. package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
  113. package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
  114. package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js +0 -0
  115. package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
  116. package/lib/commonjs/{web → web_hammer}/Errors.js +0 -0
  117. package/lib/commonjs/{web → web_hammer}/Errors.js.map +0 -0
  118. package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js +0 -0
  119. package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
  120. package/lib/commonjs/{web → web_hammer}/GestureHandler.js +83 -42
  121. package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -0
  122. package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
  123. package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
  124. package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js +0 -0
  125. package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
  126. package/lib/commonjs/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
  127. package/lib/commonjs/web_hammer/NativeViewGestureHandler.js.map +1 -0
  128. package/lib/commonjs/{web → web_hammer}/NodeManager.js +0 -0
  129. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -0
  130. package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js +0 -0
  131. package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js.map +0 -0
  132. package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js +0 -0
  133. package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
  134. package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js +0 -0
  135. package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js.map +0 -0
  136. package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js +0 -0
  137. package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
  138. package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js +0 -0
  139. package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js.map +0 -0
  140. package/lib/commonjs/web_hammer/constants.js +64 -0
  141. package/lib/commonjs/web_hammer/constants.js.map +1 -0
  142. package/lib/commonjs/{web → web_hammer}/utils.js +0 -0
  143. package/lib/commonjs/{web → web_hammer}/utils.js.map +1 -1
  144. package/lib/module/EnableExperimentalWebImplementation.js +15 -0
  145. package/lib/module/EnableExperimentalWebImplementation.js.map +1 -0
  146. package/lib/module/RNGestureHandlerModule.macos.js +102 -0
  147. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -0
  148. package/lib/module/RNGestureHandlerModule.web.js +73 -24
  149. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  150. package/lib/module/RNRenderer.js +4 -0
  151. package/lib/module/RNRenderer.js.map +1 -0
  152. package/lib/module/RNRenderer.web.js +4 -0
  153. package/lib/module/RNRenderer.web.js.map +1 -0
  154. package/lib/module/components/DrawerLayout.js +41 -12
  155. package/lib/module/components/DrawerLayout.js.map +1 -1
  156. package/lib/module/components/GestureButtons.js +43 -9
  157. package/lib/module/components/GestureButtons.js.map +1 -1
  158. package/lib/module/components/GestureComponents.js +39 -4
  159. package/lib/module/components/GestureComponents.js.map +1 -1
  160. package/lib/module/components/GestureComponents.web.js +6 -2
  161. package/lib/module/components/GestureComponents.web.js.map +1 -1
  162. package/lib/module/components/Swipeable.js +3 -1
  163. package/lib/module/components/Swipeable.js.map +1 -1
  164. package/lib/module/components/touchables/GenericTouchable.js +5 -1
  165. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  166. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  167. package/lib/module/handlers/ForceTouchGestureHandler.js +1 -1
  168. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
  169. package/lib/module/handlers/PanGestureHandler.js +1 -1
  170. package/lib/module/handlers/PanGestureHandler.js.map +1 -1
  171. package/lib/module/handlers/PressabilityDebugView.js +3 -0
  172. package/lib/module/handlers/PressabilityDebugView.js.map +1 -0
  173. package/lib/module/handlers/PressabilityDebugView.web.js +5 -0
  174. package/lib/module/handlers/PressabilityDebugView.web.js.map +1 -0
  175. package/lib/module/handlers/createHandler.js +35 -14
  176. package/lib/module/handlers/createHandler.js.map +1 -1
  177. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  178. package/lib/module/handlers/gestures/GestureDetector.js +147 -74
  179. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  180. package/lib/module/handlers/gestures/gesture.js +13 -2
  181. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  182. package/lib/module/handlers/gestures/gestureStateManager.js +13 -9
  183. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  184. package/lib/module/handlers/gestures/panGesture.js +5 -0
  185. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  186. package/lib/module/handlers/gestures/reanimatedWrapper.js +7 -0
  187. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
  188. package/lib/module/index.js +2 -1
  189. package/lib/module/index.js.map +1 -1
  190. package/lib/module/utils.js +2 -1
  191. package/lib/module/utils.js.map +1 -1
  192. package/lib/module/web/constants.js +1 -36
  193. package/lib/module/web/constants.js.map +1 -1
  194. package/lib/module/web/detectors/RotationGestureDetector.js +159 -0
  195. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -0
  196. package/lib/module/web/detectors/ScaleGestureDetector.js +156 -0
  197. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -0
  198. package/lib/module/web/handlers/FlingGestureHandler.js +139 -0
  199. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -0
  200. package/lib/module/web/handlers/GestureHandler.js +521 -0
  201. package/lib/module/web/handlers/GestureHandler.js.map +1 -0
  202. package/lib/module/web/handlers/LongPressGestureHandler.js +133 -0
  203. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -0
  204. package/lib/module/web/handlers/NativeViewGestureHandler.js +103 -0
  205. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -0
  206. package/lib/module/web/handlers/PanGestureHandler.js +434 -0
  207. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -0
  208. package/lib/module/web/handlers/PinchGestureHandler.js +155 -0
  209. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -0
  210. package/lib/module/web/handlers/RotationGestureHandler.js +171 -0
  211. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -0
  212. package/lib/module/web/handlers/TapGestureHandler.js +281 -0
  213. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -0
  214. package/lib/module/web/interfaces.js +26 -0
  215. package/lib/module/web/interfaces.js.map +1 -0
  216. package/lib/module/web/tools/EventManager.js +160 -0
  217. package/lib/module/web/tools/EventManager.js.map +1 -0
  218. package/lib/module/web/tools/GestureHandlerOrchestrator.js +270 -0
  219. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -0
  220. package/lib/module/web/tools/InteractionManager.js +93 -0
  221. package/lib/module/web/tools/InteractionManager.js.map +1 -0
  222. package/lib/module/web/tools/NodeManager.js +39 -0
  223. package/lib/module/web/tools/NodeManager.js.map +1 -0
  224. package/lib/module/web/tools/PointerTracker.js +122 -0
  225. package/lib/module/web/tools/PointerTracker.js.map +1 -0
  226. package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
  227. package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
  228. package/lib/module/{web → web_hammer}/DraggingGestureHandler.js +0 -0
  229. package/lib/module/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
  230. package/lib/module/{web → web_hammer}/Errors.js +0 -0
  231. package/lib/module/{web → web_hammer}/Errors.js.map +0 -0
  232. package/lib/module/{web → web_hammer}/FlingGestureHandler.js +0 -0
  233. package/lib/module/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
  234. package/lib/module/{web → web_hammer}/GestureHandler.js +83 -42
  235. package/lib/module/web_hammer/GestureHandler.js.map +1 -0
  236. package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
  237. package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
  238. package/lib/module/{web → web_hammer}/LongPressGestureHandler.js +0 -0
  239. package/lib/module/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
  240. package/lib/module/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
  241. package/lib/module/web_hammer/NativeViewGestureHandler.js.map +1 -0
  242. package/lib/module/{web → web_hammer}/NodeManager.js +0 -0
  243. package/lib/module/web_hammer/NodeManager.js.map +1 -0
  244. package/lib/module/{web → web_hammer}/PanGestureHandler.js +0 -0
  245. package/lib/module/{web → web_hammer}/PanGestureHandler.js.map +0 -0
  246. package/lib/module/{web → web_hammer}/PinchGestureHandler.js +0 -0
  247. package/lib/module/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
  248. package/lib/module/{web → web_hammer}/PressGestureHandler.js +0 -0
  249. package/lib/module/{web → web_hammer}/PressGestureHandler.js.map +0 -0
  250. package/lib/module/{web → web_hammer}/RotationGestureHandler.js +0 -0
  251. package/lib/module/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
  252. package/lib/module/{web → web_hammer}/TapGestureHandler.js +0 -0
  253. package/lib/module/{web → web_hammer}/TapGestureHandler.js.map +0 -0
  254. package/lib/module/web_hammer/constants.js +43 -0
  255. package/lib/module/web_hammer/constants.js.map +1 -0
  256. package/lib/module/{web → web_hammer}/utils.js +0 -0
  257. package/lib/module/{web → web_hammer}/utils.js.map +1 -1
  258. package/lib/typescript/EnableExperimentalWebImplementation.d.ts +2 -0
  259. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +44 -0
  260. package/lib/typescript/RNGestureHandlerModule.web.d.ts +29 -18
  261. package/lib/typescript/RNRenderer.d.ts +1 -0
  262. package/lib/typescript/RNRenderer.web.d.ts +3 -0
  263. package/lib/typescript/components/DrawerLayout.d.ts +4 -1
  264. package/lib/typescript/components/GestureButtons.d.ts +22 -0
  265. package/lib/typescript/components/GestureComponents.d.ts +7 -3
  266. package/lib/typescript/components/GestureComponents.web.d.ts +1 -0
  267. package/lib/typescript/components/Swipeable.d.ts +1 -1
  268. package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +1 -0
  269. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -2
  270. package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -1
  271. package/lib/typescript/handlers/PressabilityDebugView.d.ts +1 -0
  272. package/lib/typescript/handlers/PressabilityDebugView.web.d.ts +1 -0
  273. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +1 -0
  274. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -1
  275. package/lib/typescript/handlers/gestures/gesture.d.ts +3 -0
  276. package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -0
  277. package/lib/typescript/index.d.ts +2 -1
  278. package/lib/typescript/web/constants.d.ts +1 -33
  279. package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +30 -0
  280. package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +30 -0
  281. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +31 -0
  282. package/lib/typescript/web/handlers/GestureHandler.d.ts +84 -0
  283. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +33 -0
  284. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +16 -0
  285. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +68 -0
  286. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +30 -0
  287. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +30 -0
  288. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +49 -0
  289. package/lib/typescript/web/interfaces.d.ts +97 -0
  290. package/lib/typescript/web/tools/EventManager.d.ts +28 -0
  291. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +28 -0
  292. package/lib/typescript/web/tools/InteractionManager.d.ts +13 -0
  293. package/lib/typescript/web/tools/NodeManager.d.ts +11 -0
  294. package/lib/typescript/web/tools/PointerTracker.d.ts +28 -0
  295. package/lib/typescript/{web → web_hammer}/DiscreteGestureHandler.d.ts +0 -0
  296. package/lib/typescript/{web → web_hammer}/DraggingGestureHandler.d.ts +0 -0
  297. package/lib/typescript/{web → web_hammer}/Errors.d.ts +0 -0
  298. package/lib/typescript/{web → web_hammer}/FlingGestureHandler.d.ts +1 -0
  299. package/lib/typescript/{web → web_hammer}/GestureHandler.d.ts +6 -0
  300. package/lib/typescript/{web → web_hammer}/IndiscreteGestureHandler.d.ts +1 -0
  301. package/lib/typescript/{web → web_hammer}/LongPressGestureHandler.d.ts +1 -0
  302. package/lib/typescript/{web → web_hammer}/NativeViewGestureHandler.d.ts +1 -0
  303. package/lib/typescript/web_hammer/NodeManager.d.ts +8 -0
  304. package/lib/typescript/{web → web_hammer}/PanGestureHandler.d.ts +1 -0
  305. package/lib/typescript/{web → web_hammer}/PinchGestureHandler.d.ts +0 -0
  306. package/lib/typescript/{web → web_hammer}/PressGestureHandler.d.ts +2 -0
  307. package/lib/typescript/{web → web_hammer}/RotationGestureHandler.d.ts +0 -0
  308. package/lib/typescript/{web → web_hammer}/TapGestureHandler.d.ts +1 -0
  309. package/lib/typescript/web_hammer/constants.d.ts +39 -0
  310. package/lib/typescript/{web → web_hammer}/utils.d.ts +0 -0
  311. package/package.json +1 -1
  312. package/src/EnableExperimentalWebImplementation.ts +18 -0
  313. package/src/RNGestureHandlerModule.macos.ts +114 -0
  314. package/src/RNGestureHandlerModule.web.ts +89 -26
  315. package/src/RNRenderer.ts +3 -0
  316. package/src/RNRenderer.web.ts +3 -0
  317. package/src/components/DrawerLayout.tsx +37 -14
  318. package/src/components/GestureButtons.tsx +64 -0
  319. package/src/components/GestureComponents.tsx +66 -6
  320. package/src/components/GestureComponents.web.tsx +5 -0
  321. package/src/components/Swipeable.tsx +3 -1
  322. package/src/components/touchables/GenericTouchable.tsx +2 -0
  323. package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +1 -0
  324. package/src/handlers/ForceTouchGestureHandler.ts +3 -2
  325. package/src/handlers/PanGestureHandler.ts +2 -0
  326. package/src/handlers/PressabilityDebugView.tsx +2 -0
  327. package/src/handlers/PressabilityDebugView.web.tsx +4 -0
  328. package/src/handlers/{createHandler.ts → createHandler.tsx} +45 -19
  329. package/src/handlers/gestureHandlerCommon.ts +2 -0
  330. package/src/handlers/gestures/GestureDetector.tsx +185 -93
  331. package/src/handlers/gestures/gesture.ts +16 -0
  332. package/src/handlers/gestures/gestureStateManager.ts +13 -8
  333. package/src/handlers/gestures/panGesture.ts +5 -0
  334. package/src/handlers/gestures/reanimatedWrapper.ts +7 -0
  335. package/src/index.ts +3 -0
  336. package/src/utils.ts +3 -1
  337. package/src/web/constants.ts +1 -41
  338. package/src/web/detectors/RotationGestureDetector.ts +199 -0
  339. package/src/web/detectors/ScaleGestureDetector.ts +208 -0
  340. package/src/web/handlers/FlingGestureHandler.ts +146 -0
  341. package/src/web/handlers/GestureHandler.ts +572 -0
  342. package/src/web/handlers/LongPressGestureHandler.ts +122 -0
  343. package/src/web/handlers/NativeViewGestureHandler.ts +109 -0
  344. package/src/web/handlers/PanGestureHandler.ts +488 -0
  345. package/src/web/handlers/PinchGestureHandler.ts +162 -0
  346. package/src/web/handlers/RotationGestureHandler.ts +181 -0
  347. package/src/web/handlers/TapGestureHandler.ts +275 -0
  348. package/src/web/interfaces.ts +114 -0
  349. package/src/web/tools/EventManager.ts +186 -0
  350. package/src/web/tools/GestureHandlerOrchestrator.ts +329 -0
  351. package/src/web/tools/InteractionManager.ts +108 -0
  352. package/src/web/tools/NodeManager.ts +43 -0
  353. package/src/web/tools/PointerTracker.ts +130 -0
  354. package/src/{web → web_hammer}/DiscreteGestureHandler.ts +0 -0
  355. package/src/{web → web_hammer}/DraggingGestureHandler.ts +0 -0
  356. package/src/{web → web_hammer}/Errors.ts +0 -0
  357. package/src/{web → web_hammer}/FlingGestureHandler.ts +0 -0
  358. package/src/{web → web_hammer}/GestureHandler.ts +102 -55
  359. package/src/{web → web_hammer}/IndiscreteGestureHandler.ts +0 -0
  360. package/src/{web → web_hammer}/LongPressGestureHandler.ts +0 -0
  361. package/src/{web → web_hammer}/NativeViewGestureHandler.ts +4 -0
  362. package/src/{web → web_hammer}/NodeManager.ts +6 -3
  363. package/src/{web → web_hammer}/PanGestureHandler.ts +0 -0
  364. package/src/{web → web_hammer}/PinchGestureHandler.ts +0 -0
  365. package/src/{web → web_hammer}/PressGestureHandler.ts +0 -0
  366. package/src/{web → web_hammer}/RotationGestureHandler.ts +0 -0
  367. package/src/{web → web_hammer}/TapGestureHandler.ts +0 -0
  368. package/src/web_hammer/constants.ts +48 -0
  369. package/src/{web → web_hammer}/utils.ts +1 -1
  370. package/android/src/main/jni/Android.mk +0 -53
  371. package/android/src/main/jni/OnLoad.cpp +0 -9
  372. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +0 -71
  373. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +0 -34
  374. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  375. package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
  376. package/lib/commonjs/web/GestureHandler.js.map +0 -1
  377. package/lib/commonjs/web/NativeViewGestureHandler.js.map +0 -1
  378. package/lib/commonjs/web/NodeManager.js.map +0 -1
  379. package/lib/module/web/GestureHandler.js.map +0 -1
  380. package/lib/module/web/NativeViewGestureHandler.js.map +0 -1
  381. package/lib/module/web/NodeManager.js.map +0 -1
  382. package/lib/typescript/web/NodeManager.d.ts +0 -8
@@ -4,7 +4,6 @@ import com.facebook.react.ReactPackage
4
4
  import com.facebook.react.bridge.NativeModule
5
5
  import com.facebook.react.bridge.ReactApplicationContext
6
6
  import com.facebook.react.uimanager.ViewManager
7
- import com.facebook.soloader.SoLoader
8
7
  import com.swmansion.gesturehandler.BuildConfig
9
8
  import com.swmansion.gesturehandler.react.RNGestureHandlerModule
10
9
  import com.swmansion.gesturehandler.react.RNGestureHandlerRootViewManager
@@ -12,13 +11,6 @@ import com.swmansion.gesturehandler.react.RNGestureHandlerButtonViewManager
12
11
 
13
12
  class RNGestureHandlerPackage : ReactPackage {
14
13
  override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
15
- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
16
- // For Fabric, we load c++ native library here, this triggers gesture handler's
17
- // Fabric component registration which is necessary in order to avoid asking users
18
- // to manually add init calls in their application code.
19
- // This should no longer be needed if RN's autolink mechanism has Fabric support
20
- SoLoader.loadLibrary("rngesturehandler_modules")
21
- }
22
14
  return listOf<NativeModule>(RNGestureHandlerModule(reactContext))
23
15
  }
24
16
 
@@ -9,6 +9,8 @@ import android.graphics.drawable.Drawable
9
9
  import android.graphics.drawable.LayerDrawable
10
10
  import android.graphics.drawable.PaintDrawable
11
11
  import android.graphics.drawable.RippleDrawable
12
+ import android.graphics.drawable.ShapeDrawable
13
+ import android.graphics.drawable.shapes.RectShape
12
14
  import android.os.Build
13
15
  import android.util.TypedValue
14
16
  import android.view.MotionEvent
@@ -16,7 +18,6 @@ import android.view.View
16
18
  import android.view.View.OnClickListener
17
19
  import android.view.ViewGroup
18
20
  import androidx.core.view.children
19
- import com.facebook.react.bridge.SoftAssertions
20
21
  import com.facebook.react.module.annotations.ReactModule
21
22
  import com.facebook.react.uimanager.PixelUtil
22
23
  import com.facebook.react.uimanager.ThemedReactContext
@@ -77,6 +78,11 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>(), R
77
78
  view.exclusive = exclusive
78
79
  }
79
80
 
81
+ @ReactProp(name = "touchSoundDisabled")
82
+ override fun setTouchSoundDisabled(view: ButtonViewGroup, touchSoundDisabled: Boolean) {
83
+ view.isSoundEffectsEnabled = !touchSoundDisabled
84
+ }
85
+
80
86
  override fun onAfterUpdateTransaction(view: ButtonViewGroup) {
81
87
  view.updateBackground()
82
88
  }
@@ -86,7 +92,7 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>(), R
86
92
  }
87
93
 
88
94
  class ButtonViewGroup(context: Context?) : ViewGroup(context),
89
- NativeViewGestureHandler.StateChangeHook {
95
+ NativeViewGestureHandler.NativeViewGestureHandlerHook {
90
96
  // Using object because of handling null representing no value set.
91
97
  var rippleColor: Int? = null
92
98
  set(color) = withBackgroundUpdate {
@@ -132,30 +138,6 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>(), R
132
138
  _backgroundColor = color
133
139
  }
134
140
 
135
- private fun applyRippleEffectWhenNeeded(selectable: Drawable): Drawable {
136
- val rippleColor = rippleColor
137
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && selectable is RippleDrawable) {
138
- val states = arrayOf(intArrayOf(android.R.attr.state_enabled))
139
- val colorStateList = if (rippleColor != null) {
140
- val colors = intArrayOf(rippleColor)
141
- ColorStateList(states, colors)
142
- } else {
143
- // if rippleColor is null, reapply the default color
144
- context.theme.resolveAttribute(android.R.attr.colorControlHighlight, resolveOutValue, true)
145
- val colors = intArrayOf(resolveOutValue.data)
146
- ColorStateList(states, colors)
147
- }
148
-
149
- selectable.setColor(colorStateList)
150
- }
151
-
152
- val rippleRadius = rippleRadius
153
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && rippleRadius != null && selectable is RippleDrawable) {
154
- selectable.radius = PixelUtil.toPixelFromDIP(rippleRadius.toFloat()).toInt()
155
- }
156
- return selectable
157
- }
158
-
159
141
  override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
160
142
  if (super.onInterceptTouchEvent(ev)) {
161
143
  return true
@@ -210,49 +192,74 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>(), R
210
192
  // reset foreground
211
193
  foreground = null
212
194
  }
195
+
196
+ val selectable = createSelectableDrawable()
197
+
198
+ if (borderRadius != 0f) {
199
+ // Radius-connected lines below ought to be considered
200
+ // as a temporary solution. It do not allow to set
201
+ // different radius on each corner. However, I suppose it's fairly
202
+ // fine for button-related use cases.
203
+ // Therefore it might be used as long as:
204
+ // 1. ReactViewManager is not a generic class with a possibility to handle another ViewGroup
205
+ // 2. There's no way to force native behavior of ReactViewGroup's superclass's onTouchEvent
206
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && selectable is RippleDrawable) {
207
+ val mask = PaintDrawable(Color.WHITE)
208
+ mask.setCornerRadius(borderRadius)
209
+ selectable.setDrawableByLayerId(android.R.id.mask, mask)
210
+ }
211
+ }
212
+
213
213
  if (useDrawableOnForeground && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
214
- foreground = applyRippleEffectWhenNeeded(createSelectableDrawable())
214
+ foreground = selectable
215
215
  if (_backgroundColor != Color.TRANSPARENT) {
216
216
  setBackgroundColor(_backgroundColor)
217
217
  }
218
218
  } else if (_backgroundColor == Color.TRANSPARENT && rippleColor == null) {
219
- background = createSelectableDrawable()
219
+ background = selectable
220
220
  } else {
221
221
  val colorDrawable = PaintDrawable(_backgroundColor)
222
- val selectable = createSelectableDrawable()
222
+
223
223
  if (borderRadius != 0f) {
224
- // Radius-connected lines below ought to be considered
225
- // as a temporary solution. It do not allow to set
226
- // different radius on each corner. However, I suppose it's fairly
227
- // fine for button-related use cases.
228
- // Therefore it might be used as long as:
229
- // 1. ReactViewManager is not a generic class with a possibility to handle another ViewGroup
230
- // 2. There's no way to force native behavior of ReactViewGroup's superclass's onTouchEvent
231
224
  colorDrawable.setCornerRadius(borderRadius)
232
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
233
- && selectable is RippleDrawable) {
234
- val mask = PaintDrawable(Color.WHITE)
235
- mask.setCornerRadius(borderRadius)
236
- selectable.setDrawableByLayerId(android.R.id.mask, mask)
237
- }
238
225
  }
239
- applyRippleEffectWhenNeeded(selectable)
226
+
240
227
  val layerDrawable = LayerDrawable(arrayOf(colorDrawable, selectable))
241
228
  background = layerDrawable
242
229
  }
243
230
  }
244
231
 
245
232
  private fun createSelectableDrawable(): Drawable {
246
- val version = Build.VERSION.SDK_INT
247
- val identifier = if (useBorderlessDrawable && version >= 21) SELECTABLE_ITEM_BACKGROUND_BORDERLESS else SELECTABLE_ITEM_BACKGROUND
248
- val attrID = getAttrId(context, identifier)
249
- context.theme.resolveAttribute(attrID, resolveOutValue, true)
250
- return if (version >= 21) {
251
- resources.getDrawable(resolveOutValue.resourceId, context.theme)
252
- } else {
233
+ // TODO: remove once support for RN 0.63 is dropped, since 0.64 minSdkVersion is 21
234
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
235
+ context.theme.resolveAttribute(android.R.attr.selectableItemBackground, resolveOutValue, true)
253
236
  @Suppress("Deprecation")
254
- resources.getDrawable(resolveOutValue.resourceId)
237
+ return resources.getDrawable(resolveOutValue.resourceId)
238
+ }
239
+
240
+ val states = arrayOf(intArrayOf(android.R.attr.state_enabled))
241
+ val rippleRadius = rippleRadius
242
+ val colorStateList = if (rippleColor != null) {
243
+ val colors = intArrayOf(rippleColor!!)
244
+ ColorStateList(states, colors)
245
+ } else {
246
+ // if rippleColor is null, reapply the default color
247
+ context.theme.resolveAttribute(android.R.attr.colorControlHighlight, resolveOutValue, true)
248
+ val colors = intArrayOf(resolveOutValue.data)
249
+ ColorStateList(states, colors)
250
+ }
251
+
252
+ val drawable = RippleDrawable(
253
+ colorStateList,
254
+ null,
255
+ if (useBorderlessDrawable) null else ShapeDrawable(RectShape())
256
+ )
257
+
258
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && rippleRadius != null) {
259
+ drawable.radius = PixelUtil.toPixelFromDIP(rippleRadius.toFloat()).toInt()
255
260
  }
261
+
262
+ return drawable
256
263
  }
257
264
 
258
265
  override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
@@ -265,7 +272,7 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>(), R
265
272
  }
266
273
  }
267
274
 
268
- override fun canStart(): Boolean {
275
+ override fun canBegin(): Boolean {
269
276
  val isResponder = tryGrabbingResponder()
270
277
  if (isResponder) {
271
278
  isTouched = true
@@ -273,11 +280,6 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>(), R
273
280
  return isResponder
274
281
  }
275
282
 
276
- override fun afterGestureEnd() {
277
- tryFreeingResponder()
278
- isTouched = false
279
- }
280
-
281
283
  private fun tryGrabbingResponder(): Boolean {
282
284
  if (isChildTouched()) {
283
285
  return false
@@ -294,24 +296,30 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>(), R
294
296
  }
295
297
  }
296
298
 
297
- private fun tryFreeingResponder() {
298
- if (responder === this) {
299
- responder = null
300
- }
301
- }
302
-
303
299
  private fun isChildTouched(children: Sequence<View> = this.children): Boolean {
304
300
  for (child in children) {
305
301
  if (child is ButtonViewGroup && (child.isTouched || child.isPressed)) {
306
302
  return true
307
303
  } else if (child is ViewGroup) {
308
- return isChildTouched(child.children)
304
+ if (isChildTouched(child.children)) {
305
+ return true
306
+ }
309
307
  }
310
308
  }
311
309
 
312
310
  return false
313
311
  }
314
312
 
313
+ override fun performClick(): Boolean {
314
+ // don't preform click when a child button is pressed (mainly to prevent sound effect of
315
+ // a parent button from playing)
316
+ return if (!isChildTouched()) {
317
+ super.performClick()
318
+ } else {
319
+ false
320
+ }
321
+ }
322
+
315
323
  override fun setPressed(pressed: Boolean) {
316
324
  // there is a possibility of this method being called before NativeViewGestureHandler has
317
325
  // opportunity to call canStart, in that case we need to grab responder in case the gesture
@@ -329,12 +337,13 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>(), R
329
337
  if (!pressed || responder === this || canBePressedAlongsideOther) {
330
338
  // we set pressed state only for current responder or any non-exclusive button when responder
331
339
  // is null or non-exclusive, assuming it doesn't have pressed children
332
- super.setPressed(pressed)
333
340
  isTouched = pressed
341
+ super.setPressed(pressed)
334
342
  }
335
343
  if (!pressed && responder === this) {
336
344
  // if the responder is no longer pressed we release button responder
337
345
  responder = null
346
+ isTouched = false
338
347
  }
339
348
  }
340
349
 
@@ -344,28 +353,9 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>(), R
344
353
  }
345
354
 
346
355
  companion object {
347
- const val SELECTABLE_ITEM_BACKGROUND = "selectableItemBackground"
348
- const val SELECTABLE_ITEM_BACKGROUND_BORDERLESS = "selectableItemBackgroundBorderless"
349
-
350
356
  var resolveOutValue = TypedValue()
351
357
  var responder: ButtonViewGroup? = null
352
358
  var dummyClickListener = OnClickListener { }
353
-
354
- @TargetApi(Build.VERSION_CODES.LOLLIPOP)
355
- private fun getAttrId(context: Context, attr: String): Int {
356
- SoftAssertions.assertNotNull(attr)
357
- return when (attr) {
358
- SELECTABLE_ITEM_BACKGROUND -> {
359
- android.R.attr.selectableItemBackground
360
- }
361
- SELECTABLE_ITEM_BACKGROUND_BORDERLESS -> {
362
- android.R.attr.selectableItemBackgroundBorderless
363
- }
364
- else -> {
365
- context.resources.getIdentifier(attr, "attr", "android")
366
- }
367
- }
368
- }
369
359
  }
370
360
  }
371
361
 
@@ -4,6 +4,7 @@ import android.util.SparseArray
4
4
  import com.facebook.react.bridge.ReadableMap
5
5
  import com.swmansion.gesturehandler.GestureHandler
6
6
  import com.swmansion.gesturehandler.GestureHandlerInteractionController
7
+ import com.swmansion.gesturehandler.NativeViewGestureHandler
7
8
 
8
9
  class RNGestureHandlerInteractionManager : GestureHandlerInteractionController {
9
10
  private val waitForRelations = SparseArray<IntArray>()
@@ -42,8 +43,13 @@ class RNGestureHandlerInteractionManager : GestureHandlerInteractionController {
42
43
  otherHandler: GestureHandler<*>,
43
44
  ) = false
44
45
 
45
- override fun shouldHandlerBeCancelledBy(handler: GestureHandler<*>, otherHandler: GestureHandler<*>) = false
46
+ override fun shouldHandlerBeCancelledBy(handler: GestureHandler<*>, otherHandler: GestureHandler<*>): Boolean {
47
+ if (otherHandler is NativeViewGestureHandler) {
48
+ return otherHandler.disallowInterruption
49
+ }
46
50
 
51
+ return false
52
+ }
47
53
  override fun shouldRecognizeSimultaneously(
48
54
  handler: GestureHandler<*>,
49
55
  otherHandler: GestureHandler<*>,
@@ -224,6 +224,9 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
224
224
  if (config.hasKey(KEY_PAN_AVG_TOUCHES)) {
225
225
  handler.setAverageTouches(config.getBoolean(KEY_PAN_AVG_TOUCHES))
226
226
  }
227
+ if (config.hasKey(KEY_PAN_ACTIVATE_AFTER_LONG_PRESS)) {
228
+ handler.setActivateAfterLongPress(config.getInt(KEY_PAN_ACTIVATE_AFTER_LONG_PRESS).toLong())
229
+ }
227
230
  }
228
231
 
229
232
  override fun extractEventData(handler: PanGestureHandler, eventData: WritableMap) {
@@ -422,7 +425,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
422
425
  @ReactMethod(isBlockingSynchronousMethod = true)
423
426
  fun install(): Boolean {
424
427
  return try {
425
- SoLoader.loadLibrary("rngesturehandler_modules")
428
+ SoLoader.loadLibrary("gesturehandler")
426
429
  val jsContext = reactApplicationContext.javaScriptContextHolder
427
430
  decorateRuntime(jsContext.get())
428
431
  true
@@ -656,6 +659,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
656
659
  private const val KEY_PAN_MIN_POINTERS = "minPointers"
657
660
  private const val KEY_PAN_MAX_POINTERS = "maxPointers"
658
661
  private const val KEY_PAN_AVG_TOUCHES = "avgTouches"
662
+ private const val KEY_PAN_ACTIVATE_AFTER_LONG_PRESS = "activateAfterLongPress"
659
663
  private const val KEY_NUMBER_OF_POINTERS = "numberOfPointers"
660
664
  private const val KEY_DIRECTION = "direction"
661
665
 
@@ -0,0 +1,59 @@
1
+ project(GestureHandler)
2
+ cmake_minimum_required(VERSION 3.9.0)
3
+
4
+ set(CMAKE_VERBOSE_MAKEFILE ON)
5
+ set(CMAKE_CXX_STANDARD 17)
6
+ set(CMAKE_CXX_FLAGS "-DFOLLY_NO_CONFIG=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_MOBILE=1 -DFOLLY_HAVE_RECVMMSG=1 -DFOLLY_HAVE_PTHREAD=1")
7
+
8
+ add_library(gesturehandler
9
+ SHARED
10
+ cpp-adapter.cpp
11
+ )
12
+
13
+ set(REACT_ANDROID_DIR "${REACT_NATIVE_DIR}/ReactAndroid")
14
+ set(REACT_COMMON_DIR "${REACT_NATIVE_DIR}/ReactCommon")
15
+ set(REACT_NDK_EXPORT_DIR "${APP_BUILD_DIR}/react-ndk/exported")
16
+
17
+ # copied from react-native/ReactAndroid/cmake-utils/Android-prebuilt.cmake
18
+
19
+ ## jsi
20
+ add_library(jsi SHARED IMPORTED GLOBAL)
21
+ set_target_properties(jsi
22
+ PROPERTIES
23
+ IMPORTED_LOCATION
24
+ ${REACT_NDK_EXPORT_DIR}/${ANDROID_ABI}/libjsi.so)
25
+ target_include_directories(jsi INTERFACE ${REACT_COMMON_DIR}/jsi)
26
+
27
+ ## react_render_core
28
+ add_library(react_render_core SHARED IMPORTED GLOBAL)
29
+ set_target_properties(react_render_core
30
+ PROPERTIES
31
+ IMPORTED_LOCATION
32
+ ${REACT_NDK_EXPORT_DIR}/${ANDROID_ABI}/libreact_render_core.so)
33
+ target_include_directories(react_render_core
34
+ INTERFACE
35
+ ${REACT_COMMON_DIR}
36
+ ${REACT_COMMON_DIR}/react/renderer/core)
37
+
38
+ ## react_render_uimanager
39
+ add_library(react_render_uimanager SHARED IMPORTED GLOBAL)
40
+ set_target_properties(react_render_uimanager
41
+ PROPERTIES
42
+ IMPORTED_LOCATION
43
+ ${REACT_NDK_EXPORT_DIR}/${ANDROID_ABI}/libreact_render_uimanager.so)
44
+ target_include_directories(react_render_uimanager INTERFACE ${REACT_COMMON_DIR}/react/renderer/uimanager)
45
+
46
+ target_include_directories(
47
+ gesturehandler
48
+ PRIVATE
49
+ "${REACT_ANDROID_DIR}/build/third-party-ndk/boost/boost_1_76_0"
50
+ "${REACT_ANDROID_DIR}/build/third-party-ndk/double-conversion"
51
+ "${REACT_ANDROID_DIR}/build/third-party-ndk/folly"
52
+ )
53
+
54
+ target_link_libraries(
55
+ gesturehandler
56
+ jsi
57
+ react_render_uimanager
58
+ react_render_core
59
+ )
@@ -1,11 +1,11 @@
1
1
  /**
2
- * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
- *
4
- * Do not edit this file as changes may cause incorrect behavior and will be lost
5
- * once the code is regenerated.
6
- *
7
- * @generated by codegen project: GeneratePropsJavaDelegate.js
8
- */
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GeneratePropsJavaDelegate.js
8
+ */
9
9
 
10
10
  package com.facebook.react.viewmanagers;
11
11
 
@@ -23,7 +23,7 @@ public class RNGestureHandlerButtonManagerDelegate<T extends View, U extends Bas
23
23
  public void setProperty(T view, String propName, @Nullable Object value) {
24
24
  switch (propName) {
25
25
  case "exclusive":
26
- mViewManager.setExclusive(view, value == null ? false : (boolean) value);
26
+ mViewManager.setExclusive(view, value == null ? true : (boolean) value);
27
27
  break;
28
28
  case "foreground":
29
29
  mViewManager.setForeground(view, value == null ? false : (boolean) value);
@@ -32,7 +32,7 @@ public class RNGestureHandlerButtonManagerDelegate<T extends View, U extends Bas
32
32
  mViewManager.setBorderless(view, value == null ? false : (boolean) value);
33
33
  break;
34
34
  case "enabled":
35
- mViewManager.setEnabled(view, value == null ? false : (boolean) value);
35
+ mViewManager.setEnabled(view, value == null ? true : (boolean) value);
36
36
  break;
37
37
  case "rippleColor":
38
38
  mViewManager.setRippleColor(view, ColorPropConverter.getColor(value, view.getContext()));
@@ -40,6 +40,9 @@ public class RNGestureHandlerButtonManagerDelegate<T extends View, U extends Bas
40
40
  case "rippleRadius":
41
41
  mViewManager.setRippleRadius(view, value == null ? 0 : ((Double) value).intValue());
42
42
  break;
43
+ case "touchSoundDisabled":
44
+ mViewManager.setTouchSoundDisabled(view, value == null ? false : (boolean) value);
45
+ break;
43
46
  default:
44
47
  super.setProperty(view, propName, value);
45
48
  }
@@ -19,4 +19,5 @@ public interface RNGestureHandlerButtonManagerInterface<T extends View> {
19
19
  void setEnabled(T view, boolean value);
20
20
  void setRippleColor(T view, @Nullable Integer value);
21
21
  void setRippleRadius(T view, int value);
22
+ void setTouchSoundDisabled(T view, boolean value);
22
23
  }
@@ -8,38 +8,54 @@
8
8
 
9
9
  @implementation RNBetterSwipeGestureRecognizer {
10
10
  __weak RNGestureHandler* _gestureHandler;
11
+ CGPoint _lastPoint; // location of the most recently updated touch, relative to the view
12
+ bool _hasBegan; // whether the `BEGAN` event has been sent
11
13
  }
12
14
 
13
15
  - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
14
16
  {
15
17
  if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:)])) {
16
18
  _gestureHandler = gestureHandler;
19
+ _lastPoint = CGPointZero;
20
+ _hasBegan = NO;
17
21
  }
18
22
  return self;
19
23
  }
20
24
 
21
25
  - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
22
26
  {
27
+ _lastPoint = [[[touches allObjects] objectAtIndex:0] locationInView:_gestureHandler.recognizer.view];
23
28
  [_gestureHandler reset];
24
- [self triggerAction];
25
29
  [super touchesBegan:touches withEvent:event];
30
+
31
+ // self.numberOfTouches doesn't work for this because in case than one finger is required,
32
+ // when holding one finger on the screen and tapping with the second one, numberOfTouches is equal
33
+ // to 2 only for the first tap but 1 for all the following ones
34
+ if (!_hasBegan) {
35
+ [self triggerAction];
36
+ _hasBegan = YES;
37
+ }
38
+
26
39
  [_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
27
40
  }
28
41
 
29
42
  - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
30
43
  {
44
+ _lastPoint = [[[touches allObjects] objectAtIndex:0] locationInView:_gestureHandler.recognizer.view];
31
45
  [super touchesMoved:touches withEvent:event];
32
46
  [_gestureHandler.pointerTracker touchesMoved:touches withEvent:event];
33
47
  }
34
48
 
35
49
  - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
36
50
  {
51
+ _lastPoint = [[[touches allObjects] objectAtIndex:0] locationInView:_gestureHandler.recognizer.view];
37
52
  [super touchesEnded:touches withEvent:event];
38
53
  [_gestureHandler.pointerTracker touchesEnded:touches withEvent:event];
39
54
  }
40
55
 
41
56
  - (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
42
57
  {
58
+ _lastPoint = [[[touches allObjects] objectAtIndex:0] locationInView:_gestureHandler.recognizer.view];
43
59
  [super touchesCancelled:touches withEvent:event];
44
60
  [_gestureHandler.pointerTracker touchesCancelled:touches withEvent:event];
45
61
  }
@@ -53,9 +69,17 @@
53
69
  {
54
70
  [self triggerAction];
55
71
  [_gestureHandler.pointerTracker reset];
72
+ _hasBegan = NO;
56
73
  [super reset];
57
74
  }
58
75
 
76
+ - (CGPoint)getLastLocation {
77
+ // I think keeping the location of only one touch is enough since it would be used to determine the direction
78
+ // of the movement, and if it's wrong the recognizer fails anyway.
79
+ // In case the location of all touches is required, touch events are the way to go
80
+ return _lastPoint;
81
+ }
82
+
59
83
  @end
60
84
 
61
85
  @implementation RNFlingGestureHandler
@@ -104,5 +128,23 @@
104
128
  return shouldBegin;
105
129
  }
106
130
 
131
+ - (RNGestureHandlerEventExtraData *)eventExtraData:(id)_recognizer
132
+ {
133
+ // For some weird reason [recognizer locationInView:recognizer.view.window] returns (0, 0).
134
+ // To calculate the correct absolute position, first calculate the absolute position of the
135
+ // view inside the root view controller (https://stackoverflow.com/a/7448573) and then
136
+ // add the relative touch position to it.
137
+
138
+ RNBetterSwipeGestureRecognizer *recognizer = (RNBetterSwipeGestureRecognizer *)_recognizer;
139
+
140
+ CGPoint viewAbsolutePosition = [recognizer.view convertPoint:recognizer.view.bounds.origin toView:[UIApplication sharedApplication].keyWindow.rootViewController.view];
141
+ CGPoint locationInView = [recognizer getLastLocation];
142
+
143
+ return [RNGestureHandlerEventExtraData
144
+ forPosition:locationInView
145
+ withAbsolutePosition:CGPointMake(viewAbsolutePosition.x + locationInView.x, viewAbsolutePosition.y + locationInView.y)
146
+ withNumberOfTouches:recognizer.numberOfTouches];
147
+ }
148
+
107
149
  @end
108
150
 
@@ -11,9 +11,14 @@
11
11
  #import <UIKit/UIGestureRecognizerSubclass.h>
12
12
 
13
13
  #import <React/RCTConvert.h>
14
- #import <React/RCTScrollView.h>
15
14
  #import <React/UIView+React.h>
16
15
 
16
+ #ifdef RN_FABRIC_ENABLED
17
+ #import <React/RCTScrollViewComponentView.h>
18
+ #else
19
+ #import <React/RCTScrollView.h>
20
+ #endif // RN_FABRIC_ENABLED
21
+
17
22
  #pragma mark RNDummyGestureRecognizer
18
23
 
19
24
  @implementation RNDummyGestureRecognizer {
@@ -101,6 +106,12 @@
101
106
  // We can restore default scrollview behaviour to delay touches to scrollview's children
102
107
  // because gesture handler system can handle cancellation of scroll recognizer when JS responder
103
108
  // is set
109
+ #ifdef RN_FABRIC_ENABLED
110
+ if ([view isKindOfClass:[RCTScrollViewComponentView class]]) {
111
+ UIScrollView *scrollView = ((RCTScrollViewComponentView *)view).scrollView;
112
+ scrollView.delaysContentTouches = YES;
113
+ }
114
+ #else
104
115
  if ([view isKindOfClass:[RCTScrollView class]]) {
105
116
  // This part of the code is coupled with RN implementation of ScrollView native wrapper and
106
117
  // we expect for RCTScrollView component to contain a subclass of UIScrollview as the only
@@ -108,6 +119,7 @@
108
119
  UIScrollView *scrollView = [view.subviews objectAtIndex:0];
109
120
  scrollView.delaysContentTouches = YES;
110
121
  }
122
+ #endif // RN_FABRIC_ENABLED
111
123
  }
112
124
 
113
125
  - (void)handleTouchDown:(UIView *)sender forEvent:(UIEvent *)event
@@ -24,6 +24,7 @@
24
24
  @property (nonatomic) CGFloat activeOffsetYEnd;
25
25
  @property (nonatomic) CGFloat failOffsetYStart;
26
26
  @property (nonatomic) CGFloat failOffsetYEnd;
27
+ @property (nonatomic) CGFloat activateAfterLongPress;
27
28
 
28
29
 
29
30
  - (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler;
@@ -53,6 +54,7 @@
53
54
  _activeOffsetYEnd = NAN;
54
55
  _failOffsetYStart = NAN;
55
56
  _failOffsetYEnd = NAN;
57
+ _activateAfterLongPress = NAN;
56
58
  _hasCustomActivationCriteria = NO;
57
59
  #if !TARGET_OS_TV
58
60
  _realMinimumNumberOfTouches = self.minimumNumberOfTouches;
@@ -71,6 +73,13 @@
71
73
  _realMinimumNumberOfTouches = minimumNumberOfTouches;
72
74
  }
73
75
 
76
+ - (void)activateAfterLongPress
77
+ {
78
+ self.state = UIGestureRecognizerStateBegan;
79
+ // Send event in ACTIVE state because UIGestureRecognizerStateBegan is mapped to RNGestureHandlerStateBegan
80
+ [_gestureHandler handleGesture:self inState:RNGestureHandlerStateActive];
81
+ }
82
+
74
83
  - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
75
84
  {
76
85
  if ([self numberOfTouches] == 0) {
@@ -89,6 +98,10 @@
89
98
  [super touchesBegan:touches withEvent:event];
90
99
  [self triggerAction];
91
100
  [_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
101
+
102
+ if (!isnan(_activateAfterLongPress)) {
103
+ [self performSelector:@selector(activateAfterLongPress) withObject:nil afterDelay:_activateAfterLongPress];
104
+ }
92
105
  }
93
106
 
94
107
  - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
@@ -140,6 +153,7 @@
140
153
  {
141
154
  [self triggerAction];
142
155
  [_gestureHandler.pointerTracker reset];
156
+ [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(activateAfterLongPress) object:nil];
143
157
  self.enabled = YES;
144
158
  [super reset];
145
159
  }
@@ -155,6 +169,12 @@
155
169
  - (BOOL)shouldFailUnderCustomCriteria
156
170
  {
157
171
  CGPoint trans = [self translationInView:self.view.window];
172
+ // Apple docs say that 10 units is the default allowable movement for UILongPressGestureRecognizer
173
+ if (!isnan(_activateAfterLongPress) && trans.x * trans.x + trans.y * trans.y > 100) {
174
+ [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(activateAfterLongPress) object:nil];
175
+ return YES;
176
+ }
177
+
158
178
  if (!isnan(_failOffsetXStart) && trans.x < _failOffsetXStart) {
159
179
  return YES;
160
180
  }
@@ -242,6 +262,7 @@
242
262
  #endif
243
263
  recognizer.minDistSq = NAN;
244
264
  recognizer.minVelocitySq = NAN;
265
+ recognizer.activateAfterLongPress = NAN;
245
266
  }
246
267
 
247
268
  - (void)configure:(NSDictionary *)config
@@ -283,6 +304,12 @@
283
304
  CGFloat velocity = [RCTConvert CGFloat:prop];
284
305
  recognizer.minVelocitySq = velocity * velocity;
285
306
  }
307
+
308
+ prop = config[@"activateAfterLongPress"];
309
+ if (prop != nil) {
310
+ recognizer.activateAfterLongPress = [RCTConvert CGFloat:prop] / 1000.0;
311
+ recognizer.minDistSq = MAX(100, recognizer.minDistSq);
312
+ }
286
313
  [recognizer updateHasCustomActivationCriteria];
287
314
  }
288
315
 
@@ -65,6 +65,7 @@ if (value != nil) { recognizer.prop = [RCTConvert type:value]; }\
65
65
  - (void)resetConfig NS_REQUIRES_SUPER;
66
66
  - (void)configure:(nullable NSDictionary *)config NS_REQUIRES_SUPER;
67
67
  - (void)handleGesture:(nonnull id)recognizer;
68
+ - (void)handleGesture:(nonnull id)recognizer inState:(RNGestureHandlerState)state;
68
69
  - (BOOL)containsPointInView;
69
70
  - (RNGestureHandlerState)state;
70
71
  - (nullable RNGestureHandlerEventExtraData *)eventExtraData:(nonnull id)recognizer;