react-native-gesture-handler 1.10.3 → 2.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|