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.
- package/README.md +7 -6
- package/android/build.gradle +49 -1
- package/android/common/src/main/java/com/swmansion/common/GestureHandlerStateManager.kt +5 -0
- package/android/gradle.properties +19 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +18 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/Extensions.kt +11 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt +96 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +713 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.kt +8 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +562 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.kt +8 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +21 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.kt +49 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +97 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/ManualGestureHandler.kt +11 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +129 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.kt +9 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +289 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +88 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/{PointerEventsConfig.java → PointerEventsConfig.kt} +3 -5
- package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.kt +125 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt +79 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +167 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.kt +10 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +348 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +57 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +59 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +8 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +61 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +686 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.kt +17 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +95 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +132 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.kt +5 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +68 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +34 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +66 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +69 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +51 -0
- package/ios/Handlers/RNFlingHandler.m +78 -5
- package/ios/Handlers/RNForceTouchHandler.m +29 -4
- package/ios/Handlers/RNLongPressHandler.m +105 -3
- package/ios/Handlers/RNManualHandler.h +4 -0
- package/ios/Handlers/RNManualHandler.m +73 -0
- package/ios/Handlers/RNNativeViewHandler.m +30 -2
- package/ios/Handlers/RNPanHandler.m +64 -4
- package/ios/Handlers/RNPinchHandler.m +61 -2
- package/ios/Handlers/RNRotationHandler.m +60 -1
- package/ios/Handlers/RNTapHandler.m +55 -8
- package/ios/RNGestureHandler.h +18 -4
- package/ios/RNGestureHandler.m +123 -13
- package/ios/RNGestureHandlerEvents.h +9 -0
- package/ios/RNGestureHandlerEvents.m +34 -0
- package/ios/RNGestureHandlerManager.h +7 -0
- package/ios/RNGestureHandlerManager.m +62 -34
- package/ios/RNGestureHandlerModule.m +39 -3
- package/ios/RNGestureHandlerPointerTracker.h +25 -0
- package/ios/RNGestureHandlerPointerTracker.m +237 -0
- package/ios/RNGestureHandlerRegistry.h +1 -0
- package/ios/RNGestureHandlerRegistry.m +10 -0
- package/ios/RNGestureHandlerStateManager.h +5 -0
- package/ios/RNManualActivationRecognizer.h +10 -0
- package/ios/RNManualActivationRecognizer.m +80 -0
- package/ios/RNRootViewGestureRecognizer.m +1 -1
- package/ios/RNTouchEventType.h +9 -0
- package/lib/commonjs/EventType.js +16 -0
- package/lib/commonjs/EventType.js.map +1 -0
- package/lib/commonjs/GestureHandlerRootView.android.js +1 -13
- package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
- package/lib/commonjs/GestureHandlerRootView.js +11 -3
- package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.js +3 -1
- package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +2 -2
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/components/DrawerLayout.js +41 -37
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/GestureButtons.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.js +31 -12
- package/lib/commonjs/components/GestureComponents.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js +10 -6
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js +2 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableOpacity.js +1 -1
- package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/commonjs/gestureHandlerRootHOC.js +1 -1
- package/lib/commonjs/gestureHandlerRootHOC.js.map +1 -1
- package/lib/commonjs/handlers/FlingGestureHandler.js +23 -0
- package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -0
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js +44 -0
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -0
- package/lib/commonjs/handlers/LongPressGestureHandler.js +23 -0
- package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -0
- package/lib/commonjs/handlers/NativeViewGestureHandler.js +6 -4
- package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js +121 -0
- package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -0
- package/lib/commonjs/handlers/PinchGestureHandler.js +21 -0
- package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -0
- package/lib/commonjs/handlers/RotationGestureHandler.js +21 -0
- package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -0
- package/lib/commonjs/handlers/TapGestureHandler.js +23 -0
- package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -0
- package/lib/commonjs/handlers/createHandler.js +52 -83
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js +80 -0
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -0
- package/lib/commonjs/handlers/gestures/GestureDetector.js +440 -0
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -0
- package/lib/commonjs/handlers/gestures/eventReceiver.js +135 -0
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -0
- package/lib/commonjs/handlers/gestures/flingGesture.js +34 -0
- package/lib/commonjs/handlers/gestures/flingGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/forceTouchGesture.js +65 -0
- package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/gesture.js +193 -0
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/gestureComposition.js +94 -0
- package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -0
- package/lib/commonjs/handlers/gestures/gestureObjects.js +85 -0
- package/lib/commonjs/handlers/gestures/gestureObjects.js.map +1 -0
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +58 -0
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -0
- package/lib/commonjs/handlers/gestures/longPressGesture.js +34 -0
- package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/manualGesture.js +31 -0
- package/lib/commonjs/handlers/gestures/manualGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/nativeGesture.js +34 -0
- package/lib/commonjs/handlers/gestures/nativeGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/panGesture.js +144 -0
- package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/pinchGesture.js +45 -0
- package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +24 -0
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -0
- package/lib/commonjs/handlers/gestures/rotationGesture.js +45 -0
- package/lib/commonjs/handlers/gestures/rotationGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/tapGesture.js +59 -0
- package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -0
- package/lib/commonjs/handlers/handlersRegistry.js +31 -0
- package/lib/commonjs/handlers/handlersRegistry.js.map +1 -0
- package/lib/commonjs/index.js +146 -8
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/init.js +13 -0
- package/lib/commonjs/init.js.map +1 -0
- package/lib/commonjs/mocks.js +31 -2
- package/lib/commonjs/mocks.js.map +1 -1
- package/lib/commonjs/utils.js +15 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/commonjs/web/Errors.js +1 -1
- package/lib/commonjs/web/Errors.js.map +1 -1
- package/lib/commonjs/web/GestureHandler.js +4 -6
- package/lib/commonjs/web/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/NodeManager.js +8 -2
- package/lib/commonjs/web/NodeManager.js.map +1 -1
- package/lib/module/EventType.js +8 -0
- package/lib/module/EventType.js.map +1 -0
- package/lib/module/GestureHandlerRootView.android.js +2 -14
- package/lib/module/GestureHandlerRootView.android.js.map +1 -1
- package/lib/module/GestureHandlerRootView.js +5 -1
- package/lib/module/GestureHandlerRootView.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.js +3 -1
- package/lib/module/RNGestureHandlerModule.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +2 -2
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/components/DrawerLayout.js +43 -40
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/GestureButtons.js.map +1 -1
- package/lib/module/components/GestureComponents.js +29 -11
- package/lib/module/components/GestureComponents.js.map +1 -1
- package/lib/module/components/Swipeable.js +9 -6
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/components/touchables/GenericTouchable.js +2 -1
- package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/module/components/touchables/TouchableOpacity.js +1 -1
- package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/module/gestureHandlerRootHOC.js +1 -1
- package/lib/module/gestureHandlerRootHOC.js.map +1 -1
- package/lib/module/handlers/FlingGestureHandler.js +10 -0
- package/lib/module/handlers/FlingGestureHandler.js.map +1 -0
- package/lib/module/handlers/ForceTouchGestureHandler.js +29 -0
- package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -0
- package/lib/module/handlers/LongPressGestureHandler.js +10 -0
- package/lib/module/handlers/LongPressGestureHandler.js.map +1 -0
- package/lib/module/handlers/NativeViewGestureHandler.js +4 -3
- package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/handlers/PanGestureHandler.js +106 -0
- package/lib/module/handlers/PanGestureHandler.js.map +1 -0
- package/lib/module/handlers/PinchGestureHandler.js +9 -0
- package/lib/module/handlers/PinchGestureHandler.js.map +1 -0
- package/lib/module/handlers/RotationGestureHandler.js +9 -0
- package/lib/module/handlers/RotationGestureHandler.js.map +1 -0
- package/lib/module/handlers/TapGestureHandler.js +10 -0
- package/lib/module/handlers/TapGestureHandler.js.map +1 -0
- package/lib/module/handlers/createHandler.js +41 -76
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js +66 -0
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -0
- package/lib/module/handlers/gestures/GestureDetector.js +402 -0
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -0
- package/lib/module/handlers/gestures/eventReceiver.js +120 -0
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -0
- package/lib/module/handlers/gestures/flingGesture.js +24 -0
- package/lib/module/handlers/gestures/flingGesture.js.map +1 -0
- package/lib/module/handlers/gestures/forceTouchGesture.js +56 -0
- package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -0
- package/lib/module/handlers/gestures/gesture.js +175 -0
- package/lib/module/handlers/gestures/gesture.js.map +1 -0
- package/lib/module/handlers/gestures/gestureComposition.js +79 -0
- package/lib/module/handlers/gestures/gestureComposition.js.map +1 -0
- package/lib/module/handlers/gestures/gestureObjects.js +67 -0
- package/lib/module/handlers/gestures/gestureObjects.js.map +1 -0
- package/lib/module/handlers/gestures/gestureStateManager.js +48 -0
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -0
- package/lib/module/handlers/gestures/longPressGesture.js +24 -0
- package/lib/module/handlers/gestures/longPressGesture.js.map +1 -0
- package/lib/module/handlers/gestures/manualGesture.js +22 -0
- package/lib/module/handlers/gestures/manualGesture.js.map +1 -0
- package/lib/module/handlers/gestures/nativeGesture.js +24 -0
- package/lib/module/handlers/gestures/nativeGesture.js.map +1 -0
- package/lib/module/handlers/gestures/panGesture.js +135 -0
- package/lib/module/handlers/gestures/panGesture.js.map +1 -0
- package/lib/module/handlers/gestures/pinchGesture.js +36 -0
- package/lib/module/handlers/gestures/pinchGesture.js.map +1 -0
- package/lib/module/handlers/gestures/reanimatedWrapper.js +19 -0
- package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -0
- package/lib/module/handlers/gestures/rotationGesture.js +36 -0
- package/lib/module/handlers/gestures/rotationGesture.js.map +1 -0
- package/lib/module/handlers/gestures/tapGesture.js +49 -0
- package/lib/module/handlers/gestures/tapGesture.js.map +1 -0
- package/lib/module/handlers/handlersRegistry.js +16 -0
- package/lib/module/handlers/handlersRegistry.js.map +1 -0
- package/lib/module/index.js +22 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/init.js +5 -0
- package/lib/module/init.js.map +1 -0
- package/lib/module/mocks.js +31 -2
- package/lib/module/mocks.js.map +1 -1
- package/lib/module/utils.js +8 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/module/web/Errors.js +1 -1
- package/lib/module/web/Errors.js.map +1 -1
- package/lib/module/web/GestureHandler.js +4 -6
- package/lib/module/web/GestureHandler.js.map +1 -1
- package/lib/module/web/NodeManager.js +8 -2
- package/lib/module/web/NodeManager.js.map +1 -1
- package/lib/typescript/EventType.d.ts +8 -0
- package/lib/typescript/GestureHandlerRootView.android.d.ts +2 -4
- package/lib/typescript/GestureHandlerRootView.d.ts +5 -2
- package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
- package/lib/typescript/components/DrawerLayout.d.ts +50 -1
- package/lib/typescript/components/GestureButtons.d.ts +36 -0
- package/lib/typescript/components/GestureComponents.d.ts +8 -35
- package/lib/typescript/components/Swipeable.d.ts +73 -6
- package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -2
- package/lib/typescript/components/touchables/TouchableHighlight.d.ts +1 -0
- package/lib/typescript/components/touchables/TouchableOpacity.d.ts +1 -0
- package/lib/typescript/handlers/FlingGestureHandler.d.ts +33 -0
- package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +43 -0
- package/lib/typescript/handlers/LongPressGestureHandler.d.ts +55 -0
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +19 -4
- package/lib/typescript/handlers/PanGestureHandler.d.ts +137 -0
- package/lib/typescript/handlers/PinchGestureHandler.d.ts +28 -0
- package/lib/typescript/handlers/RotationGestureHandler.d.ts +28 -0
- package/lib/typescript/handlers/TapGestureHandler.d.ts +56 -0
- package/lib/typescript/handlers/createHandler.d.ts +1 -1
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +62 -0
- package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +8 -1
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +16 -0
- package/lib/typescript/handlers/gestures/eventReceiver.d.ts +2 -0
- package/lib/typescript/handlers/gestures/flingGesture.d.ts +9 -0
- package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +16 -0
- package/lib/typescript/handlers/gestures/gesture.d.ts +97 -0
- package/lib/typescript/handlers/gestures/gestureComposition.d.ts +21 -0
- package/lib/typescript/handlers/gestures/gestureObjects.d.ts +39 -0
- package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +9 -0
- package/lib/typescript/handlers/gestures/longPressGesture.d.ts +9 -0
- package/lib/typescript/handlers/gestures/manualGesture.d.ts +7 -0
- package/lib/typescript/handlers/gestures/nativeGesture.d.ts +9 -0
- package/lib/typescript/handlers/gestures/panGesture.d.ts +26 -0
- package/lib/typescript/handlers/gestures/pinchGesture.d.ts +12 -0
- package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts +14 -0
- package/lib/typescript/handlers/gestures/rotationGesture.d.ts +12 -0
- package/lib/typescript/handlers/gestures/tapGesture.d.ts +14 -0
- package/lib/typescript/handlers/handlersRegistry.d.ts +6 -0
- package/lib/typescript/index.d.ts +29 -2
- package/lib/typescript/init.d.ts +1 -0
- package/lib/typescript/mocks.d.ts +21 -2
- package/lib/typescript/utils.d.ts +1 -0
- package/lib/typescript/web/FlingGestureHandler.d.ts +0 -1
- package/lib/typescript/web/GestureHandler.d.ts +0 -1
- package/lib/typescript/web/PanGestureHandler.d.ts +0 -1
- package/lib/typescript/web/PinchGestureHandler.d.ts +0 -1
- package/lib/typescript/web/PressGestureHandler.d.ts +0 -1
- package/lib/typescript/web/RotationGestureHandler.d.ts +0 -1
- package/lib/typescript/web/TapGestureHandler.d.ts +0 -1
- package/package.json +8 -5
- package/src/EventType.ts +10 -0
- package/src/GestureHandlerRootView.android.tsx +9 -25
- package/src/GestureHandlerRootView.tsx +11 -2
- package/src/RNGestureHandlerModule.ts +5 -1
- package/src/RNGestureHandlerModule.web.ts +1 -0
- package/src/components/DrawerLayout.tsx +114 -41
- package/src/components/GestureButtons.tsx +45 -5
- package/src/components/GestureComponents.tsx +47 -41
- package/src/components/Swipeable.tsx +108 -21
- package/src/components/touchables/GenericTouchable.tsx +2 -1
- package/src/components/touchables/TouchableOpacity.tsx +1 -1
- package/src/handlers/FlingGestureHandler.ts +57 -0
- package/src/handlers/ForceTouchGestureHandler.ts +83 -0
- package/src/handlers/LongPressGestureHandler.ts +84 -0
- package/src/handlers/NativeViewGestureHandler.ts +31 -7
- package/src/handlers/PanGestureHandler.ts +321 -0
- package/src/handlers/PinchGestureHandler.ts +46 -0
- package/src/handlers/RotationGestureHandler.ts +46 -0
- package/src/handlers/TapGestureHandler.ts +90 -0
- package/src/handlers/createHandler.ts +54 -79
- package/src/handlers/gestureHandlerCommon.ts +185 -0
- package/src/handlers/gestureHandlerTypesCompat.ts +19 -5
- package/src/handlers/gestures/GestureDetector.tsx +519 -0
- package/src/handlers/gestures/eventReceiver.ts +151 -0
- package/src/handlers/gestures/flingGesture.ts +27 -0
- package/src/handlers/gestures/forceTouchGesture.ts +74 -0
- package/src/handlers/gestures/gesture.ts +292 -0
- package/src/handlers/gestures/gestureComposition.ts +109 -0
- package/src/handlers/gestures/gestureObjects.ts +79 -0
- package/src/handlers/gestures/gestureStateManager.ts +60 -0
- package/src/handlers/gestures/longPressGesture.ts +27 -0
- package/src/handlers/gestures/manualGesture.ts +31 -0
- package/src/handlers/gestures/nativeGesture.ts +27 -0
- package/src/handlers/gestures/panGesture.ts +147 -0
- package/src/handlers/gestures/pinchGesture.ts +51 -0
- package/src/handlers/gestures/reanimatedWrapper.ts +45 -0
- package/src/handlers/gestures/rotationGesture.ts +51 -0
- package/src/handlers/gestures/tapGesture.ts +52 -0
- package/src/handlers/handlersRegistry.ts +22 -0
- package/src/index.ts +57 -17
- package/src/init.ts +5 -0
- package/src/mocks.ts +42 -2
- package/src/utils.ts +7 -0
- package/src/web/GestureHandler.ts +1 -2
- package/src/web/NodeManager.ts +5 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.java +0 -23
- package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.java +0 -110
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.java +0 -531
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.java +0 -8
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.java +0 -543
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.java +0 -10
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.java +0 -29
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.java +0 -53
- package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.java +0 -81
- package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.java +0 -110
- package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.java +0 -8
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.java +0 -312
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.java +0 -109
- package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.java +0 -169
- package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.java +0 -96
- package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.java +0 -172
- package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.java +0 -10
- package/android/src/main/java/com/facebook/react/views/modal/RNGHModalUtils.java +0 -21
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.java +0 -296
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.java +0 -72
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java +0 -77
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.java +0 -8
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.java +0 -86
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.java +0 -731
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.java +0 -31
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.java +0 -101
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.java +0 -151
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.java +0 -7
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.java +0 -76
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.java +0 -49
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java +0 -82
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.java +0 -61
- package/lib/commonjs/handlers/gestureHandlers.js +0 -236
- package/lib/commonjs/handlers/gestureHandlers.js.map +0 -1
- package/lib/module/handlers/gestureHandlers.js +0 -216
- package/lib/module/handlers/gestureHandlers.js.map +0 -1
- package/lib/typescript/handlers/gestureHandlers.d.ts +0 -158
- package/src/handlers/gestureHandlers.ts +0 -511
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
package com.swmansion.gesturehandler.react
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.ReactPackage
|
|
4
|
+
import com.facebook.react.bridge.NativeModule
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.uimanager.ViewManager
|
|
7
|
+
import java.util.*
|
|
8
|
+
|
|
9
|
+
class RNGestureHandlerPackage : ReactPackage {
|
|
10
|
+
override fun createNativeModules(reactContext: ReactApplicationContext) =
|
|
11
|
+
listOf<NativeModule>(RNGestureHandlerModule(reactContext))
|
|
12
|
+
|
|
13
|
+
override fun createViewManagers(reactContext: ReactApplicationContext) =
|
|
14
|
+
listOf<ViewManager<*, *>>(
|
|
15
|
+
RNGestureHandlerRootViewManager(),
|
|
16
|
+
RNGestureHandlerButtonViewManager())
|
|
17
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
package com.swmansion.gesturehandler.react
|
|
2
|
+
|
|
3
|
+
import android.util.SparseArray
|
|
4
|
+
import android.view.View
|
|
5
|
+
import com.facebook.react.bridge.UiThreadUtil
|
|
6
|
+
import com.swmansion.gesturehandler.GestureHandler
|
|
7
|
+
import com.swmansion.gesturehandler.GestureHandlerRegistry
|
|
8
|
+
import java.util.*
|
|
9
|
+
|
|
10
|
+
class RNGestureHandlerRegistry : GestureHandlerRegistry {
|
|
11
|
+
private val handlers = SparseArray<GestureHandler<*>>()
|
|
12
|
+
private val attachedTo = SparseArray<Int?>()
|
|
13
|
+
private val handlersForView = SparseArray<ArrayList<GestureHandler<*>>>()
|
|
14
|
+
|
|
15
|
+
@Synchronized
|
|
16
|
+
fun registerHandler(handler: GestureHandler<*>) {
|
|
17
|
+
handlers.put(handler.tag, handler)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@Synchronized
|
|
21
|
+
fun getHandler(handlerTag: Int): GestureHandler<*>? {
|
|
22
|
+
return handlers[handlerTag]
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@Synchronized
|
|
26
|
+
fun attachHandlerToView(handlerTag: Int, viewTag: Int, useDeviceEvents: Boolean = false): Boolean {
|
|
27
|
+
val handler = handlers[handlerTag]
|
|
28
|
+
return handler?.let {
|
|
29
|
+
detachHandler(handler)
|
|
30
|
+
handler.usesDeviceEvents = useDeviceEvents
|
|
31
|
+
registerHandlerForViewWithTag(viewTag, handler)
|
|
32
|
+
true
|
|
33
|
+
} ?: false
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@Synchronized
|
|
37
|
+
private fun registerHandlerForViewWithTag(viewTag: Int, handler: GestureHandler<*>) {
|
|
38
|
+
check(attachedTo[handler.tag] == null) { "Handler $handler already attached" }
|
|
39
|
+
attachedTo.put(handler.tag, viewTag)
|
|
40
|
+
var listToAdd = handlersForView[viewTag]
|
|
41
|
+
if (listToAdd == null) {
|
|
42
|
+
listToAdd = ArrayList(1)
|
|
43
|
+
listToAdd.add(handler)
|
|
44
|
+
handlersForView.put(viewTag, listToAdd)
|
|
45
|
+
} else {
|
|
46
|
+
listToAdd.add(handler)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@Synchronized
|
|
51
|
+
private fun detachHandler(handler: GestureHandler<*>) {
|
|
52
|
+
val attachedToView = attachedTo[handler.tag]
|
|
53
|
+
if (attachedToView != null) {
|
|
54
|
+
attachedTo.remove(handler.tag)
|
|
55
|
+
val attachedHandlers = handlersForView[attachedToView]
|
|
56
|
+
if (attachedHandlers != null) {
|
|
57
|
+
attachedHandlers.remove(handler)
|
|
58
|
+
if (attachedHandlers.size == 0) {
|
|
59
|
+
handlersForView.remove(attachedToView)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (handler.view != null) {
|
|
64
|
+
// Handler is in "prepared" state which means it is registered in the orchestrator and can
|
|
65
|
+
// receive touch events. This means that before we remove it from the registry we need to
|
|
66
|
+
// "cancel" it so that orchestrator does no longer keep a reference to it.
|
|
67
|
+
UiThreadUtil.runOnUiThread { handler.cancel() }
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@Synchronized
|
|
72
|
+
fun dropHandler(handlerTag: Int) {
|
|
73
|
+
handlers[handlerTag]?.let {
|
|
74
|
+
detachHandler(it)
|
|
75
|
+
handlers.remove(handlerTag)
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@Synchronized
|
|
80
|
+
fun dropAllHandlers() {
|
|
81
|
+
handlers.clear()
|
|
82
|
+
attachedTo.clear()
|
|
83
|
+
handlersForView.clear()
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@Synchronized
|
|
87
|
+
fun getHandlersForViewWithTag(viewTag: Int): ArrayList<GestureHandler<*>>? {
|
|
88
|
+
return handlersForView[viewTag]
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
@Synchronized
|
|
92
|
+
override fun getHandlersForView(view: View): ArrayList<GestureHandler<*>>? {
|
|
93
|
+
return getHandlersForViewWithTag(view.id)
|
|
94
|
+
}
|
|
95
|
+
}
|
package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
package com.swmansion.gesturehandler.react
|
|
2
|
+
|
|
3
|
+
import android.os.SystemClock
|
|
4
|
+
import android.util.Log
|
|
5
|
+
import android.view.MotionEvent
|
|
6
|
+
import android.view.ViewGroup
|
|
7
|
+
import android.view.ViewParent
|
|
8
|
+
import com.facebook.react.bridge.ReactContext
|
|
9
|
+
import com.facebook.react.bridge.UiThreadUtil
|
|
10
|
+
import com.facebook.react.common.ReactConstants
|
|
11
|
+
import com.facebook.react.uimanager.RootView
|
|
12
|
+
import com.facebook.react.views.modal.ReactModalHostView
|
|
13
|
+
import com.swmansion.gesturehandler.GestureHandler
|
|
14
|
+
import com.swmansion.gesturehandler.GestureHandlerOrchestrator
|
|
15
|
+
|
|
16
|
+
class RNGestureHandlerRootHelper(private val context: ReactContext, wrappedView: ViewGroup) {
|
|
17
|
+
private val orchestrator: GestureHandlerOrchestrator?
|
|
18
|
+
private val jsGestureHandler: GestureHandler<*>?
|
|
19
|
+
val rootView: ViewGroup
|
|
20
|
+
private var shouldIntercept = false
|
|
21
|
+
private var passingTouch = false
|
|
22
|
+
|
|
23
|
+
init {
|
|
24
|
+
UiThreadUtil.assertOnUiThread()
|
|
25
|
+
val wrappedViewTag = wrappedView.id
|
|
26
|
+
check(wrappedViewTag >= 1) { "Expect view tag to be set for $wrappedView" }
|
|
27
|
+
val module = context.getNativeModule(RNGestureHandlerModule::class.java)!!
|
|
28
|
+
val registry = module.registry
|
|
29
|
+
rootView = findRootViewTag(wrappedView)
|
|
30
|
+
Log.i(
|
|
31
|
+
ReactConstants.TAG,
|
|
32
|
+
"[GESTURE HANDLER] Initialize gesture handler for root view $rootView")
|
|
33
|
+
orchestrator = GestureHandlerOrchestrator(
|
|
34
|
+
wrappedView, registry, RNViewConfigurationHelper()).apply {
|
|
35
|
+
minimumAlphaForTraversal = MIN_ALPHA_FOR_TOUCH
|
|
36
|
+
}
|
|
37
|
+
jsGestureHandler = RootViewGestureHandler().apply { tag = -wrappedViewTag }
|
|
38
|
+
with(registry) {
|
|
39
|
+
registerHandler(jsGestureHandler)
|
|
40
|
+
attachHandlerToView(jsGestureHandler.tag, wrappedViewTag)
|
|
41
|
+
}
|
|
42
|
+
module.registerRootHelper(this)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
fun tearDown() {
|
|
46
|
+
Log.i(
|
|
47
|
+
ReactConstants.TAG,
|
|
48
|
+
"[GESTURE HANDLER] Tearing down gesture handler registered for root view $rootView")
|
|
49
|
+
val module = context.getNativeModule(RNGestureHandlerModule::class.java)!!
|
|
50
|
+
with(module) {
|
|
51
|
+
registry.dropHandler(jsGestureHandler!!.tag)
|
|
52
|
+
unregisterRootHelper(this@RNGestureHandlerRootHelper)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
private inner class RootViewGestureHandler : GestureHandler<RootViewGestureHandler>() {
|
|
57
|
+
override fun onHandle(event: MotionEvent) {
|
|
58
|
+
val currentState = state
|
|
59
|
+
if (currentState == STATE_UNDETERMINED) {
|
|
60
|
+
begin()
|
|
61
|
+
shouldIntercept = false
|
|
62
|
+
}
|
|
63
|
+
if (event.actionMasked == MotionEvent.ACTION_UP) {
|
|
64
|
+
end()
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
override fun onCancel() {
|
|
69
|
+
shouldIntercept = true
|
|
70
|
+
val time = SystemClock.uptimeMillis()
|
|
71
|
+
val event = MotionEvent.obtain(time, time, MotionEvent.ACTION_CANCEL, 0f, 0f, 0).apply {
|
|
72
|
+
action = MotionEvent.ACTION_CANCEL
|
|
73
|
+
}
|
|
74
|
+
if (rootView is RootView) {
|
|
75
|
+
rootView.onChildStartedNativeGesture(event)
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
fun requestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {
|
|
81
|
+
// If this method gets called it means that some native view is attempting to grab lock for
|
|
82
|
+
// touch event delivery. In that case we cancel all gesture recognizers
|
|
83
|
+
if (orchestrator != null && !passingTouch) {
|
|
84
|
+
// if we are in the process of delivering touch events via GH orchestrator, we don't want to
|
|
85
|
+
// treat it as a native gesture capturing the lock
|
|
86
|
+
tryCancelAllHandlers()
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
fun dispatchTouchEvent(ev: MotionEvent): Boolean {
|
|
91
|
+
// We mark `mPassingTouch` before we get into `mOrchestrator.onTouchEvent` so that we can tell
|
|
92
|
+
// if `requestDisallow` has been called as a result of a normal gesture handling process or
|
|
93
|
+
// as a result of one of the gesture handlers activating
|
|
94
|
+
passingTouch = true
|
|
95
|
+
orchestrator!!.onTouchEvent(ev)
|
|
96
|
+
passingTouch = false
|
|
97
|
+
return shouldIntercept
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
private fun tryCancelAllHandlers() {
|
|
101
|
+
// In order to cancel handlers we activate handler that is hooked to the root view
|
|
102
|
+
jsGestureHandler?.apply {
|
|
103
|
+
if (state == GestureHandler.STATE_BEGAN) {
|
|
104
|
+
// Try activate main JS handler
|
|
105
|
+
activate()
|
|
106
|
+
end()
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/*package*/
|
|
112
|
+
fun handleSetJSResponder(viewTag: Int, blockNativeResponder: Boolean) {
|
|
113
|
+
if (blockNativeResponder) {
|
|
114
|
+
UiThreadUtil.runOnUiThread { tryCancelAllHandlers() }
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
companion object {
|
|
119
|
+
private const val MIN_ALPHA_FOR_TOUCH = 0.1f
|
|
120
|
+
private fun findRootViewTag(viewGroup: ViewGroup): ViewGroup {
|
|
121
|
+
UiThreadUtil.assertOnUiThread()
|
|
122
|
+
var parent: ViewParent? = viewGroup
|
|
123
|
+
while (parent != null && parent !is RootView) {
|
|
124
|
+
parent = parent.parent
|
|
125
|
+
}
|
|
126
|
+
checkNotNull(parent) {
|
|
127
|
+
"View $viewGroup has not been mounted under ReactRootView"
|
|
128
|
+
}
|
|
129
|
+
return parent as ViewGroup
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
package com.swmansion.gesturehandler.react
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.util.Log
|
|
5
|
+
import android.view.MotionEvent
|
|
6
|
+
import android.view.ViewGroup
|
|
7
|
+
import android.view.ViewParent
|
|
8
|
+
import com.facebook.react.bridge.ReactContext
|
|
9
|
+
import com.facebook.react.bridge.UiThreadUtil
|
|
10
|
+
import com.facebook.react.common.ReactConstants
|
|
11
|
+
import com.facebook.react.uimanager.RootView
|
|
12
|
+
import com.facebook.react.views.modal.ReactModalHostView
|
|
13
|
+
import com.facebook.react.views.view.ReactViewGroup
|
|
14
|
+
|
|
15
|
+
class RNGestureHandlerRootView(context: Context?) : ReactViewGroup(context) {
|
|
16
|
+
private var _enabled = false
|
|
17
|
+
private var rootHelper: RNGestureHandlerRootHelper? = null // TODO: resettable lateinit
|
|
18
|
+
override fun onAttachedToWindow() {
|
|
19
|
+
super.onAttachedToWindow()
|
|
20
|
+
_enabled = !hasGestureHandlerEnabledRootView(this)
|
|
21
|
+
if (!_enabled) {
|
|
22
|
+
Log.i(
|
|
23
|
+
ReactConstants.TAG,
|
|
24
|
+
"[GESTURE HANDLER] Gesture handler is already enabled for a parent view"
|
|
25
|
+
)
|
|
26
|
+
}
|
|
27
|
+
if (_enabled && rootHelper == null) {
|
|
28
|
+
rootHelper = RNGestureHandlerRootHelper(context as ReactContext, this)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
fun tearDown() {
|
|
33
|
+
rootHelper?.tearDown()
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
override fun dispatchTouchEvent(ev: MotionEvent) =
|
|
37
|
+
if (_enabled && rootHelper!!.dispatchTouchEvent(ev)) {
|
|
38
|
+
true
|
|
39
|
+
} else super.dispatchTouchEvent(ev)
|
|
40
|
+
|
|
41
|
+
override fun requestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {
|
|
42
|
+
if (_enabled) {
|
|
43
|
+
rootHelper!!.requestDisallowInterceptTouchEvent(disallowIntercept)
|
|
44
|
+
}
|
|
45
|
+
super.requestDisallowInterceptTouchEvent(disallowIntercept)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
companion object {
|
|
49
|
+
private fun hasGestureHandlerEnabledRootView(viewGroup: ViewGroup): Boolean {
|
|
50
|
+
UiThreadUtil.assertOnUiThread()
|
|
51
|
+
|
|
52
|
+
var parent = viewGroup.parent
|
|
53
|
+
while (parent != null) {
|
|
54
|
+
if (parent is RNGestureHandlerEnabledRootView || parent is RNGestureHandlerRootView) {
|
|
55
|
+
return true
|
|
56
|
+
}
|
|
57
|
+
// Checks other roots views but it's mainly for ReactModalHostView.DialogRootViewGroup
|
|
58
|
+
// since modals are outside RN hierachy and we have to initialize GH's root view for it
|
|
59
|
+
// Note that RNGestureHandlerEnabledRootView implements RootView - that's why this check has to be below
|
|
60
|
+
if (parent is RootView) {
|
|
61
|
+
return false
|
|
62
|
+
}
|
|
63
|
+
parent = parent.parent
|
|
64
|
+
}
|
|
65
|
+
return false
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
package com.swmansion.gesturehandler.react
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
4
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
5
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* React native's view manager used for creating instances of []RNGestureHandlerRootView}. It
|
|
9
|
+
* is being used by projects using react-native-navigation where for each screen new root view need
|
|
10
|
+
* to be provided.
|
|
11
|
+
*/
|
|
12
|
+
@ReactModule(name = RNGestureHandlerRootViewManager.REACT_CLASS)
|
|
13
|
+
class RNGestureHandlerRootViewManager : ViewGroupManager<RNGestureHandlerRootView>() {
|
|
14
|
+
override fun getName() = REACT_CLASS
|
|
15
|
+
override fun createViewInstance(reactContext: ThemedReactContext) = RNGestureHandlerRootView(reactContext)
|
|
16
|
+
|
|
17
|
+
override fun onDropViewInstance(view: RNGestureHandlerRootView) {
|
|
18
|
+
view.tearDown()
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The following event configuration is necessary even if you are not using
|
|
23
|
+
* GestureHandlerRootView component directly.
|
|
24
|
+
*/
|
|
25
|
+
override fun getExportedCustomDirectEventTypeConstants(): Map<String, Map<String, String>> = mutableMapOf(
|
|
26
|
+
RNGestureHandlerEvent.EVENT_NAME to
|
|
27
|
+
mutableMapOf("registrationName" to RNGestureHandlerEvent.EVENT_NAME),
|
|
28
|
+
RNGestureHandlerStateChangeEvent.EVENT_NAME to
|
|
29
|
+
mutableMapOf("registrationName" to RNGestureHandlerStateChangeEvent.EVENT_NAME))
|
|
30
|
+
|
|
31
|
+
companion object {
|
|
32
|
+
const val REACT_CLASS = "GestureHandlerRootView"
|
|
33
|
+
}
|
|
34
|
+
}
|
package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
package com.swmansion.gesturehandler.react
|
|
2
|
+
|
|
3
|
+
import androidx.core.util.Pools
|
|
4
|
+
import com.facebook.react.bridge.Arguments
|
|
5
|
+
import com.facebook.react.bridge.WritableMap
|
|
6
|
+
import com.facebook.react.uimanager.events.Event
|
|
7
|
+
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
8
|
+
import com.swmansion.gesturehandler.GestureHandler
|
|
9
|
+
|
|
10
|
+
class RNGestureHandlerStateChangeEvent private constructor() : Event<RNGestureHandlerStateChangeEvent>() {
|
|
11
|
+
private var extraData: WritableMap? = null
|
|
12
|
+
private fun <T : GestureHandler<T>> init(
|
|
13
|
+
handler: T,
|
|
14
|
+
newState: Int,
|
|
15
|
+
oldState: Int,
|
|
16
|
+
dataExtractor: RNGestureHandlerEventDataExtractor<T>?,
|
|
17
|
+
) {
|
|
18
|
+
super.init(handler.view!!.id)
|
|
19
|
+
extraData = createEventData(handler, dataExtractor, newState, oldState)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
override fun onDispose() {
|
|
23
|
+
extraData = null
|
|
24
|
+
EVENTS_POOL.release(this)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
override fun getEventName() = EVENT_NAME
|
|
28
|
+
|
|
29
|
+
// TODO: coalescing
|
|
30
|
+
override fun canCoalesce() = false
|
|
31
|
+
|
|
32
|
+
// TODO: coalescing
|
|
33
|
+
override fun getCoalescingKey(): Short = 0
|
|
34
|
+
|
|
35
|
+
override fun dispatch(rctEventEmitter: RCTEventEmitter) {
|
|
36
|
+
rctEventEmitter.receiveEvent(viewTag, EVENT_NAME, extraData)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
companion object {
|
|
40
|
+
const val EVENT_NAME = "onGestureHandlerStateChange"
|
|
41
|
+
private const val TOUCH_EVENTS_POOL_SIZE = 7 // magic
|
|
42
|
+
private val EVENTS_POOL = Pools.SynchronizedPool<RNGestureHandlerStateChangeEvent>(TOUCH_EVENTS_POOL_SIZE)
|
|
43
|
+
|
|
44
|
+
fun <T : GestureHandler<T>> obtain(
|
|
45
|
+
handler: T,
|
|
46
|
+
newState: Int,
|
|
47
|
+
oldState: Int,
|
|
48
|
+
dataExtractor: RNGestureHandlerEventDataExtractor<T>?,
|
|
49
|
+
): RNGestureHandlerStateChangeEvent =
|
|
50
|
+
(EVENTS_POOL.acquire() ?: RNGestureHandlerStateChangeEvent()).apply {
|
|
51
|
+
init(handler, newState, oldState, dataExtractor)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
fun <T: GestureHandler<T>> createEventData(
|
|
55
|
+
handler: T,
|
|
56
|
+
dataExtractor: RNGestureHandlerEventDataExtractor<T>?,
|
|
57
|
+
newState: Int,
|
|
58
|
+
oldState: Int,
|
|
59
|
+
): WritableMap = Arguments.createMap().apply {
|
|
60
|
+
dataExtractor?.extractEventData(handler, this)
|
|
61
|
+
putInt("handlerTag", handler.tag)
|
|
62
|
+
putInt("state", newState)
|
|
63
|
+
putInt("oldState", oldState)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
package com.swmansion.gesturehandler.react
|
|
2
|
+
|
|
3
|
+
import androidx.core.util.Pools
|
|
4
|
+
import com.facebook.react.bridge.Arguments
|
|
5
|
+
import com.facebook.react.bridge.WritableMap
|
|
6
|
+
import com.facebook.react.uimanager.events.Event
|
|
7
|
+
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
8
|
+
import com.swmansion.gesturehandler.GestureHandler
|
|
9
|
+
|
|
10
|
+
class RNGestureHandlerTouchEvent private constructor() : Event<RNGestureHandlerTouchEvent>() {
|
|
11
|
+
private var extraData: WritableMap? = null
|
|
12
|
+
private var coalescingKey: Short = 0
|
|
13
|
+
private fun <T : GestureHandler<T>> init(handler: T) {
|
|
14
|
+
super.init(handler.view!!.id)
|
|
15
|
+
extraData = createEventData(handler)
|
|
16
|
+
coalescingKey = handler.eventCoalescingKey
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
override fun onDispose() {
|
|
20
|
+
extraData = null
|
|
21
|
+
EVENTS_POOL.release(this)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
override fun getEventName() = EVENT_NAME
|
|
25
|
+
|
|
26
|
+
override fun canCoalesce() = true
|
|
27
|
+
|
|
28
|
+
override fun getCoalescingKey() = coalescingKey
|
|
29
|
+
|
|
30
|
+
override fun dispatch(rctEventEmitter: RCTEventEmitter) {
|
|
31
|
+
rctEventEmitter.receiveEvent(viewTag, EVENT_NAME, extraData)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
companion object {
|
|
35
|
+
const val EVENT_UNDETERMINED = 0
|
|
36
|
+
const val EVENT_TOUCH_DOWN = 1
|
|
37
|
+
const val EVENT_TOUCH_MOVE = 2
|
|
38
|
+
const val EVENT_TOUCH_UP = 3
|
|
39
|
+
const val EVENT_TOUCH_CANCELLED = 4
|
|
40
|
+
|
|
41
|
+
const val EVENT_NAME = "onGestureHandlerEvent"
|
|
42
|
+
private const val TOUCH_EVENTS_POOL_SIZE = 7 // magic
|
|
43
|
+
private val EVENTS_POOL = Pools.SynchronizedPool<RNGestureHandlerTouchEvent>(TOUCH_EVENTS_POOL_SIZE)
|
|
44
|
+
|
|
45
|
+
fun <T : GestureHandler<T>> obtain(handler: T): RNGestureHandlerTouchEvent =
|
|
46
|
+
(EVENTS_POOL.acquire() ?: RNGestureHandlerTouchEvent()).apply {
|
|
47
|
+
init(handler)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
fun <T: GestureHandler<T>> createEventData(handler: T,): WritableMap = Arguments.createMap().apply {
|
|
51
|
+
putInt("handlerTag", handler.tag)
|
|
52
|
+
putInt("state", handler.state)
|
|
53
|
+
putInt("numberOfTouches", handler.trackedPointersCount)
|
|
54
|
+
putInt("eventType", handler.touchEventType)
|
|
55
|
+
|
|
56
|
+
handler.consumeChangedTouchesPayload()?.let {
|
|
57
|
+
putArray("changedTouches", it)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
handler.consumeAllTouchesPayload()?.let {
|
|
61
|
+
putArray("allTouches", it)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (handler.isAwaiting && handler.state == GestureHandler.STATE_ACTIVE) {
|
|
65
|
+
putInt("state", GestureHandler.STATE_BEGAN)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
package com.swmansion.gesturehandler.react
|
|
2
|
+
|
|
3
|
+
import android.view.View
|
|
4
|
+
import android.view.ViewGroup
|
|
5
|
+
import com.facebook.react.uimanager.PointerEvents
|
|
6
|
+
import com.facebook.react.uimanager.ReactPointerEventsView
|
|
7
|
+
import com.facebook.react.views.view.ReactViewGroup
|
|
8
|
+
import com.swmansion.gesturehandler.PointerEventsConfig
|
|
9
|
+
import com.swmansion.gesturehandler.ViewConfigurationHelper
|
|
10
|
+
|
|
11
|
+
class RNViewConfigurationHelper : ViewConfigurationHelper {
|
|
12
|
+
override fun getPointerEventsConfigForView(view: View): PointerEventsConfig {
|
|
13
|
+
val pointerEvents: PointerEvents =
|
|
14
|
+
if (view is ReactPointerEventsView) {
|
|
15
|
+
(view as ReactPointerEventsView).pointerEvents
|
|
16
|
+
} else PointerEvents.AUTO
|
|
17
|
+
|
|
18
|
+
// Views that are disabled should never be the target of pointer events. However, their children
|
|
19
|
+
// can be because some views (SwipeRefreshLayout) use enabled but still have children that can
|
|
20
|
+
// be valid targets.
|
|
21
|
+
if (!view.isEnabled) {
|
|
22
|
+
if (pointerEvents == PointerEvents.AUTO) {
|
|
23
|
+
return PointerEventsConfig.BOX_NONE
|
|
24
|
+
} else if (pointerEvents == PointerEvents.BOX_ONLY) {
|
|
25
|
+
return PointerEventsConfig.NONE
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return when (pointerEvents) {
|
|
30
|
+
PointerEvents.BOX_ONLY -> PointerEventsConfig.BOX_ONLY
|
|
31
|
+
PointerEvents.BOX_NONE -> PointerEventsConfig.BOX_NONE
|
|
32
|
+
PointerEvents.NONE -> PointerEventsConfig.NONE
|
|
33
|
+
PointerEvents.AUTO -> PointerEventsConfig.AUTO
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
override fun getChildInDrawingOrderAtIndex(parent: ViewGroup, index: Int): View {
|
|
38
|
+
return if (parent is ReactViewGroup) {
|
|
39
|
+
parent.getChildAt(parent.getZIndexMappedChildIndex(index))
|
|
40
|
+
} else parent.getChildAt(index)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
override fun isViewClippingChildren(view: ViewGroup): Boolean {
|
|
44
|
+
if (view.clipChildren) {
|
|
45
|
+
return true
|
|
46
|
+
}
|
|
47
|
+
return if (view is ReactViewGroup) {
|
|
48
|
+
"hidden" == view.overflow
|
|
49
|
+
} else false
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -1,14 +1,78 @@
|
|
|
1
1
|
#import "RNFlingHandler.h"
|
|
2
2
|
|
|
3
|
+
@interface RNBetterSwipeGestureRecognizer : UISwipeGestureRecognizer
|
|
4
|
+
|
|
5
|
+
- (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler;
|
|
6
|
+
|
|
7
|
+
@end
|
|
8
|
+
|
|
9
|
+
@implementation RNBetterSwipeGestureRecognizer {
|
|
10
|
+
__weak RNGestureHandler* _gestureHandler;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
|
|
14
|
+
{
|
|
15
|
+
if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:)])) {
|
|
16
|
+
_gestureHandler = gestureHandler;
|
|
17
|
+
}
|
|
18
|
+
return self;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
|
|
22
|
+
{
|
|
23
|
+
[_gestureHandler reset];
|
|
24
|
+
[self triggerAction];
|
|
25
|
+
[super touchesBegan:touches withEvent:event];
|
|
26
|
+
[_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
|
|
30
|
+
{
|
|
31
|
+
[super touchesMoved:touches withEvent:event];
|
|
32
|
+
[_gestureHandler.pointerTracker touchesMoved:touches withEvent:event];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
|
|
36
|
+
{
|
|
37
|
+
[super touchesEnded:touches withEvent:event];
|
|
38
|
+
[_gestureHandler.pointerTracker touchesEnded:touches withEvent:event];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
|
|
42
|
+
{
|
|
43
|
+
[super touchesCancelled:touches withEvent:event];
|
|
44
|
+
[_gestureHandler.pointerTracker touchesCancelled:touches withEvent:event];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
- (void)triggerAction
|
|
48
|
+
{
|
|
49
|
+
[_gestureHandler handleGesture:self];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
- (void)reset
|
|
53
|
+
{
|
|
54
|
+
[self triggerAction];
|
|
55
|
+
[_gestureHandler.pointerTracker reset];
|
|
56
|
+
[super reset];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@end
|
|
60
|
+
|
|
3
61
|
@implementation RNFlingGestureHandler
|
|
4
62
|
|
|
5
63
|
- (instancetype)initWithTag:(NSNumber *)tag
|
|
6
64
|
{
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
65
|
+
if ((self = [super initWithTag:tag])) {
|
|
66
|
+
_recognizer = [[RNBetterSwipeGestureRecognizer alloc] initWithGestureHandler:self];
|
|
67
|
+
}
|
|
68
|
+
return self;
|
|
69
|
+
}
|
|
70
|
+
- (void)resetConfig
|
|
71
|
+
{
|
|
72
|
+
[super resetConfig];
|
|
73
|
+
UISwipeGestureRecognizer *recognizer = (UISwipeGestureRecognizer *)_recognizer;
|
|
74
|
+
recognizer.direction = UISwipeGestureRecognizerDirectionRight;
|
|
75
|
+
recognizer.numberOfTouchesRequired = 1;
|
|
12
76
|
}
|
|
13
77
|
|
|
14
78
|
- (void)configure:(NSDictionary *)config
|
|
@@ -29,5 +93,14 @@
|
|
|
29
93
|
#endif
|
|
30
94
|
}
|
|
31
95
|
|
|
96
|
+
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
|
|
97
|
+
{
|
|
98
|
+
RNGestureHandlerState savedState = _lastState;
|
|
99
|
+
BOOL shouldBegin = [super gestureRecognizerShouldBegin:gestureRecognizer];
|
|
100
|
+
_lastState = savedState;
|
|
101
|
+
|
|
102
|
+
return shouldBegin;
|
|
103
|
+
}
|
|
104
|
+
|
|
32
105
|
@end
|
|
33
106
|
|