react-native-gesture-handler 2.1.2 → 2.3.0
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/LICENSE +1 -1
- package/README.md +8 -3
- package/RNGestureHandler.podspec +27 -3
- package/android/build.gradle +82 -9
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +47 -12
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +50 -14
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +7 -4
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +8 -8
- package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt +6 -4
- package/android/lib/src/main/java/com/swmansion/gesturehandler/ScaleGestureDetector.java +558 -0
- package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +29 -0
- package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +12 -0
- package/android/src/main/AndroidManifest.xml +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +29 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +29 -10
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +119 -55
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +9 -4
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +17 -2
- package/android/src/main/jni/Android.mk +53 -0
- package/android/src/main/jni/OnLoad.cpp +9 -0
- package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +71 -0
- package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +34 -0
- package/android/src/main/jni/cpp-adapter.cpp +41 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +47 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +22 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +25 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +16 -0
- package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +13 -0
- package/ios/Handlers/RNFlingHandler.m +2 -0
- package/ios/Handlers/RNPanHandler.m +2 -0
- package/ios/Handlers/RNPinchHandler.m +2 -0
- package/ios/Handlers/RNRotationHandler.m +2 -0
- package/ios/RNGestureHandler.h +3 -8
- package/ios/RNGestureHandler.m +2 -10
- package/ios/RNGestureHandlerActionType.h +8 -0
- package/ios/RNGestureHandlerButtonComponentView.h +17 -0
- package/ios/RNGestureHandlerButtonComponentView.mm +48 -0
- package/ios/RNGestureHandlerButtonManager.h +5 -0
- package/ios/RNGestureHandlerButtonManager.m +30 -0
- package/ios/RNGestureHandlerManager.h +2 -4
- package/ios/{RNGestureHandlerManager.m → RNGestureHandlerManager.mm} +92 -20
- package/ios/{RNGestureHandlerModule.m → RNGestureHandlerModule.mm} +91 -36
- package/ios/RNGestureHandlerRegistry.h +1 -2
- package/ios/RNGestureHandlerRegistry.m +2 -11
- package/ios/RNGestureHandlerRootViewComponentView.mm +21 -0
- package/lib/commonjs/ActionType.js +15 -0
- package/lib/commonjs/ActionType.js.map +1 -0
- package/lib/commonjs/GestureHandlerRootView.android.js +6 -6
- package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
- package/lib/commonjs/GestureHandlerRootView.js +2 -3
- package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.js +4 -2
- package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/components/DrawerLayout.js +2 -2
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerButton.js +5 -2
- package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js +22 -20
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +21 -0
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +21 -0
- package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
- package/lib/commonjs/getShadowNodeFromRef.js +24 -0
- package/lib/commonjs/getShadowNodeFromRef.js.map +1 -0
- package/lib/commonjs/getShadowNodeFromRef.web.js +15 -0
- package/lib/commonjs/getShadowNodeFromRef.web.js.map +1 -0
- package/lib/commonjs/handlers/FlingGestureHandler.js +4 -2
- package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js +8 -4
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/LongPressGestureHandler.js +4 -2
- package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/NativeViewGestureHandler.js +4 -2
- package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js +4 -2
- package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PinchGestureHandler.js +4 -2
- package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/RotationGestureHandler.js +4 -2
- package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/TapGestureHandler.js +4 -2
- package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +72 -8
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/createNativeWrapper.js +6 -2
- package/lib/commonjs/handlers/createNativeWrapper.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +84 -32
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/eventReceiver.js +25 -8
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js +16 -1
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +7 -4
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +4 -1
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/commonjs/handlers/handlersRegistry.js +42 -6
- package/lib/commonjs/handlers/handlersRegistry.js.map +1 -1
- package/lib/commonjs/index.js +14 -106
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/init.js +10 -0
- package/lib/commonjs/init.js.map +1 -1
- package/lib/commonjs/jestUtils.js +375 -0
- package/lib/commonjs/jestUtils.js.map +1 -0
- package/lib/commonjs/utils.js +38 -0
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/module/ActionType.js +7 -0
- package/lib/module/ActionType.js.map +1 -0
- package/lib/module/GestureHandlerRootView.android.js +5 -6
- package/lib/module/GestureHandlerRootView.android.js.map +1 -1
- package/lib/module/GestureHandlerRootView.js +2 -3
- package/lib/module/GestureHandlerRootView.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.js +3 -2
- package/lib/module/RNGestureHandlerModule.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +1 -1
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/components/DrawerLayout.js +2 -2
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/GestureHandlerButton.js +4 -2
- package/lib/module/components/GestureHandlerButton.js.map +1 -1
- package/lib/module/components/Swipeable.js +22 -20
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +9 -0
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
- package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +9 -0
- package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
- package/lib/module/getShadowNodeFromRef.js +17 -0
- package/lib/module/getShadowNodeFromRef.js.map +1 -0
- package/lib/module/getShadowNodeFromRef.web.js +8 -0
- package/lib/module/getShadowNodeFromRef.web.js.map +1 -0
- package/lib/module/handlers/FlingGestureHandler.js +2 -1
- package/lib/module/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/handlers/ForceTouchGestureHandler.js +5 -3
- package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/module/handlers/LongPressGestureHandler.js +2 -1
- package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/handlers/NativeViewGestureHandler.js +2 -1
- package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/handlers/PanGestureHandler.js +2 -1
- package/lib/module/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/handlers/PinchGestureHandler.js +2 -1
- package/lib/module/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/handlers/RotationGestureHandler.js +2 -1
- package/lib/module/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/handlers/TapGestureHandler.js +2 -1
- package/lib/module/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/handlers/createHandler.js +72 -9
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/createNativeWrapper.js +6 -2
- package/lib/module/handlers/createNativeWrapper.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +79 -32
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/eventReceiver.js +25 -7
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js +16 -1
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.js +6 -4
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/module/handlers/gestures/panGesture.js.map +1 -1
- package/lib/module/handlers/gestures/pinchGesture.js.map +1 -1
- package/lib/module/handlers/gestures/reanimatedWrapper.js +2 -1
- package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/module/handlers/handlersRegistry.js +34 -6
- package/lib/module/handlers/handlersRegistry.js.map +1 -1
- package/lib/module/index.js +1 -11
- package/lib/module/index.js.map +1 -1
- package/lib/module/init.js +6 -0
- package/lib/module/init.js.map +1 -1
- package/lib/module/jestUtils.js +350 -0
- package/lib/module/jestUtils.js.map +1 -0
- package/lib/module/utils.js +28 -0
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/ActionType.d.ts +7 -0
- package/lib/typescript/GestureHandlerRootView.android.d.ts +5 -2
- package/lib/typescript/GestureHandlerRootView.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.d.ts +3 -1
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +2 -1
- package/lib/typescript/components/GestureHandlerButton.d.ts +2 -2
- package/lib/typescript/components/Swipeable.d.ts +12 -4
- package/lib/typescript/getShadowNodeFromRef.d.ts +1 -0
- package/lib/typescript/getShadowNodeFromRef.web.d.ts +1 -0
- package/lib/typescript/handlers/FlingGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -1
- package/lib/typescript/handlers/LongPressGestureHandler.d.ts +3 -2
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/PanGestureHandler.d.ts +3 -2
- package/lib/typescript/handlers/PinchGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/RotationGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/TapGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +2 -4
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +4 -1
- package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +1 -2
- package/lib/typescript/handlers/gestures/gesture.d.ts +5 -0
- package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -2
- package/lib/typescript/handlers/gestures/pinchGesture.d.ts +1 -2
- package/lib/typescript/handlers/handlersRegistry.d.ts +11 -3
- package/lib/typescript/index.d.ts +15 -11
- package/lib/typescript/jestUtils.d.ts +28 -0
- package/lib/typescript/utils.d.ts +6 -0
- package/lib/typescript/web/constants.d.ts +0 -1
- package/package.json +39 -16
- package/src/ActionType.ts +9 -0
- package/src/GestureHandlerRootView.android.tsx +14 -14
- package/src/GestureHandlerRootView.tsx +4 -4
- package/src/RNGestureHandlerModule.ts +11 -6
- package/src/RNGestureHandlerModule.web.ts +2 -1
- package/src/components/DrawerLayout.tsx +8 -2
- package/src/components/GestureHandlerButton.tsx +7 -4
- package/src/components/Swipeable.tsx +28 -22
- package/src/fabric/RNGestureHandlerButtonNativeComponent.js +27 -0
- package/src/fabric/RNGestureHandlerRootViewNativeComponent.js +19 -0
- package/src/getShadowNodeFromRef.ts +19 -0
- package/src/getShadowNodeFromRef.web.ts +7 -0
- package/src/handlers/FlingGestureHandler.ts +3 -1
- package/src/handlers/ForceTouchGestureHandler.ts +8 -2
- package/src/handlers/LongPressGestureHandler.ts +5 -3
- package/src/handlers/NativeViewGestureHandler.ts +3 -1
- package/src/handlers/PanGestureHandler.ts +5 -3
- package/src/handlers/PinchGestureHandler.ts +3 -1
- package/src/handlers/RotationGestureHandler.ts +3 -1
- package/src/handlers/TapGestureHandler.ts +3 -1
- package/src/handlers/createHandler.ts +80 -5
- package/src/handlers/createNativeWrapper.tsx +7 -1
- package/src/handlers/gestureHandlerCommon.ts +2 -5
- package/src/handlers/gestures/GestureDetector.tsx +110 -37
- package/src/handlers/gestures/eventReceiver.ts +23 -19
- package/src/handlers/gestures/forceTouchGesture.ts +1 -1
- package/src/handlers/gestures/gesture.ts +21 -1
- package/src/handlers/gestures/gestureStateManager.ts +9 -12
- package/src/handlers/gestures/panGesture.ts +1 -1
- package/src/handlers/gestures/pinchGesture.ts +1 -1
- package/src/handlers/gestures/reanimatedWrapper.ts +4 -1
- package/src/handlers/handlersRegistry.ts +44 -6
- package/src/index.ts +15 -11
- package/src/init.ts +6 -0
- package/src/jestUtils.ts +506 -0
- package/src/utils.ts +38 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +0 -18
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +0 -21
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.kt +0 -17
|
@@ -17,32 +17,43 @@ import android.view.View.OnClickListener
|
|
|
17
17
|
import android.view.ViewGroup
|
|
18
18
|
import androidx.core.view.children
|
|
19
19
|
import com.facebook.react.bridge.SoftAssertions
|
|
20
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
20
21
|
import com.facebook.react.uimanager.PixelUtil
|
|
21
22
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
22
23
|
import com.facebook.react.uimanager.ViewGroupManager
|
|
24
|
+
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
23
25
|
import com.facebook.react.uimanager.ViewProps
|
|
24
26
|
import com.facebook.react.uimanager.annotations.ReactProp
|
|
27
|
+
import com.facebook.react.viewmanagers.RNGestureHandlerButtonManagerDelegate
|
|
28
|
+
import com.facebook.react.viewmanagers.RNGestureHandlerButtonManagerInterface
|
|
25
29
|
import com.swmansion.gesturehandler.NativeViewGestureHandler
|
|
26
30
|
import com.swmansion.gesturehandler.react.RNGestureHandlerButtonViewManager.ButtonViewGroup
|
|
27
31
|
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
@ReactModule(name = RNGestureHandlerButtonViewManager.REACT_CLASS)
|
|
33
|
+
class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>(), RNGestureHandlerButtonManagerInterface<ButtonViewGroup> {
|
|
34
|
+
private val mDelegate: ViewManagerDelegate<ButtonViewGroup>
|
|
35
|
+
|
|
36
|
+
init {
|
|
37
|
+
mDelegate = RNGestureHandlerButtonManagerDelegate<ButtonViewGroup, RNGestureHandlerButtonViewManager>(this)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
override fun getName() = REACT_CLASS
|
|
30
41
|
|
|
31
42
|
public override fun createViewInstance(context: ThemedReactContext) = ButtonViewGroup(context)
|
|
32
43
|
|
|
33
44
|
@TargetApi(Build.VERSION_CODES.M)
|
|
34
45
|
@ReactProp(name = "foreground")
|
|
35
|
-
fun setForeground(view: ButtonViewGroup, useDrawableOnForeground: Boolean) {
|
|
46
|
+
override fun setForeground(view: ButtonViewGroup, useDrawableOnForeground: Boolean) {
|
|
36
47
|
view.useDrawableOnForeground = useDrawableOnForeground
|
|
37
48
|
}
|
|
38
49
|
|
|
39
50
|
@ReactProp(name = "borderless")
|
|
40
|
-
fun setBorderless(view: ButtonViewGroup, useBorderlessDrawable: Boolean) {
|
|
51
|
+
override fun setBorderless(view: ButtonViewGroup, useBorderlessDrawable: Boolean) {
|
|
41
52
|
view.useBorderlessDrawable = useBorderlessDrawable
|
|
42
53
|
}
|
|
43
54
|
|
|
44
55
|
@ReactProp(name = "enabled")
|
|
45
|
-
fun setEnabled(view: ButtonViewGroup, enabled: Boolean) {
|
|
56
|
+
override fun setEnabled(view: ButtonViewGroup, enabled: Boolean) {
|
|
46
57
|
view.isEnabled = enabled
|
|
47
58
|
}
|
|
48
59
|
|
|
@@ -52,17 +63,17 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>() {
|
|
|
52
63
|
}
|
|
53
64
|
|
|
54
65
|
@ReactProp(name = "rippleColor")
|
|
55
|
-
fun setRippleColor(view: ButtonViewGroup, rippleColor: Int?) {
|
|
66
|
+
override fun setRippleColor(view: ButtonViewGroup, rippleColor: Int?) {
|
|
56
67
|
view.rippleColor = rippleColor
|
|
57
68
|
}
|
|
58
69
|
|
|
59
70
|
@ReactProp(name = "rippleRadius")
|
|
60
|
-
fun setRippleRadius(view: ButtonViewGroup, rippleRadius: Int
|
|
71
|
+
override fun setRippleRadius(view: ButtonViewGroup, rippleRadius: Int) {
|
|
61
72
|
view.rippleRadius = rippleRadius
|
|
62
73
|
}
|
|
63
74
|
|
|
64
75
|
@ReactProp(name = "exclusive")
|
|
65
|
-
fun setExclusive(view: ButtonViewGroup, exclusive: Boolean
|
|
76
|
+
override fun setExclusive(view: ButtonViewGroup, exclusive: Boolean) {
|
|
66
77
|
view.exclusive = exclusive
|
|
67
78
|
}
|
|
68
79
|
|
|
@@ -70,6 +81,10 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>() {
|
|
|
70
81
|
view.updateBackground()
|
|
71
82
|
}
|
|
72
83
|
|
|
84
|
+
override fun getDelegate(): ViewManagerDelegate<ButtonViewGroup>? {
|
|
85
|
+
return mDelegate
|
|
86
|
+
}
|
|
87
|
+
|
|
73
88
|
class ButtonViewGroup(context: Context?) : ViewGroup(context),
|
|
74
89
|
NativeViewGestureHandler.StateChangeHook {
|
|
75
90
|
// Using object because of handling null representing no value set.
|
|
@@ -333,10 +348,10 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>() {
|
|
|
333
348
|
SoftAssertions.assertNotNull(attr)
|
|
334
349
|
return when (attr) {
|
|
335
350
|
SELECTABLE_ITEM_BACKGROUND -> {
|
|
336
|
-
R.attr.selectableItemBackground
|
|
351
|
+
android.R.attr.selectableItemBackground
|
|
337
352
|
}
|
|
338
353
|
SELECTABLE_ITEM_BACKGROUND_BORDERLESS -> {
|
|
339
|
-
R.attr.selectableItemBackgroundBorderless
|
|
354
|
+
android.R.attr.selectableItemBackgroundBorderless
|
|
340
355
|
}
|
|
341
356
|
else -> {
|
|
342
357
|
context.resources.getIdentifier(attr, "attr", "android")
|
|
@@ -345,4 +360,8 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>() {
|
|
|
345
360
|
}
|
|
346
361
|
}
|
|
347
362
|
}
|
|
363
|
+
|
|
364
|
+
companion object {
|
|
365
|
+
const val REACT_CLASS = "RNGestureHandlerButton"
|
|
366
|
+
}
|
|
348
367
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
package com.swmansion.gesturehandler.react
|
|
2
2
|
|
|
3
3
|
import android.content.Context
|
|
4
|
+
import android.util.Log
|
|
4
5
|
import android.view.MotionEvent
|
|
5
6
|
import android.view.ViewGroup
|
|
6
7
|
import com.facebook.react.ReactRootView
|
|
@@ -8,6 +9,8 @@ import com.facebook.react.bridge.*
|
|
|
8
9
|
import com.facebook.react.module.annotations.ReactModule
|
|
9
10
|
import com.facebook.react.uimanager.PixelUtil
|
|
10
11
|
import com.facebook.react.uimanager.UIBlock
|
|
12
|
+
import com.facebook.react.uimanager.events.Event
|
|
13
|
+
import com.facebook.soloader.SoLoader
|
|
11
14
|
import com.swmansion.common.GestureHandlerStateManager
|
|
12
15
|
import com.swmansion.gesturehandler.*
|
|
13
16
|
import java.util.*
|
|
@@ -106,8 +109,8 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
|
|
|
106
109
|
with(eventData) {
|
|
107
110
|
putDouble("x", PixelUtil.toDIPFromPixel(handler.lastRelativePositionX).toDouble())
|
|
108
111
|
putDouble("y", PixelUtil.toDIPFromPixel(handler.lastRelativePositionY).toDouble())
|
|
109
|
-
putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.
|
|
110
|
-
putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.
|
|
112
|
+
putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowX).toDouble())
|
|
113
|
+
putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowY).toDouble())
|
|
111
114
|
}
|
|
112
115
|
}
|
|
113
116
|
}
|
|
@@ -135,8 +138,8 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
|
|
|
135
138
|
with(eventData) {
|
|
136
139
|
putDouble("x", PixelUtil.toDIPFromPixel(handler.lastRelativePositionX).toDouble())
|
|
137
140
|
putDouble("y", PixelUtil.toDIPFromPixel(handler.lastRelativePositionY).toDouble())
|
|
138
|
-
putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.
|
|
139
|
-
putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.
|
|
141
|
+
putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowX).toDouble())
|
|
142
|
+
putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowY).toDouble())
|
|
140
143
|
putInt("duration", handler.duration)
|
|
141
144
|
}
|
|
142
145
|
}
|
|
@@ -223,8 +226,8 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
|
|
|
223
226
|
with(eventData) {
|
|
224
227
|
putDouble("x", PixelUtil.toDIPFromPixel(handler.lastRelativePositionX).toDouble())
|
|
225
228
|
putDouble("y", PixelUtil.toDIPFromPixel(handler.lastRelativePositionY).toDouble())
|
|
226
|
-
putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.
|
|
227
|
-
putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.
|
|
229
|
+
putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowX).toDouble())
|
|
230
|
+
putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowY).toDouble())
|
|
228
231
|
putDouble("translationX", PixelUtil.toDIPFromPixel(handler.translationX).toDouble())
|
|
229
232
|
putDouble("translationY", PixelUtil.toDIPFromPixel(handler.translationY).toDouble())
|
|
230
233
|
putDouble("velocityX", PixelUtil.toDIPFromPixel(handler.velocityX).toDouble())
|
|
@@ -275,8 +278,8 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
|
|
|
275
278
|
with(eventData) {
|
|
276
279
|
putDouble("x", PixelUtil.toDIPFromPixel(handler.lastRelativePositionX).toDouble())
|
|
277
280
|
putDouble("y", PixelUtil.toDIPFromPixel(handler.lastRelativePositionY).toDouble())
|
|
278
|
-
putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.
|
|
279
|
-
putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.
|
|
281
|
+
putDouble("absoluteX", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowX).toDouble())
|
|
282
|
+
putDouble("absoluteY", PixelUtil.toDIPFromPixel(handler.lastPositionInWindowY).toDouble())
|
|
280
283
|
}
|
|
281
284
|
}
|
|
282
285
|
}
|
|
@@ -359,10 +362,16 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
|
|
|
359
362
|
}
|
|
360
363
|
|
|
361
364
|
@ReactMethod
|
|
362
|
-
fun attachGestureHandler(handlerTag: Int, viewTag: Int,
|
|
363
|
-
|
|
365
|
+
fun attachGestureHandler(handlerTag: Int, viewTag: Int, actionType: Int) {
|
|
366
|
+
if (!BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
|
|
367
|
+
tryInitializeHandlerForReactRootView(viewTag)
|
|
368
|
+
}
|
|
364
369
|
|
|
365
|
-
|
|
370
|
+
// We don't have to handle view flattening in any special way since handlers are stored as
|
|
371
|
+
// a map: viewTag -> [handler]. If the view with attached handlers was to be flattened
|
|
372
|
+
// then that viewTag simply wouldn't be visited when traversing the view hierarchy in the
|
|
373
|
+
// Orchestrator effectively ignoring all handlers attached to flattened views.
|
|
374
|
+
if (!registry.attachHandlerToView(handlerTag, viewTag, actionType)) {
|
|
366
375
|
throw JSApplicationIllegalArgumentException("Handler with tag $handlerTag does not exists")
|
|
367
376
|
}
|
|
368
377
|
}
|
|
@@ -409,6 +418,21 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
|
|
|
409
418
|
}
|
|
410
419
|
}
|
|
411
420
|
|
|
421
|
+
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
422
|
+
fun install(): Boolean {
|
|
423
|
+
return try {
|
|
424
|
+
SoLoader.loadLibrary("rngesturehandler_modules")
|
|
425
|
+
val jsContext = reactApplicationContext.javaScriptContextHolder
|
|
426
|
+
decorateRuntime(jsContext.get())
|
|
427
|
+
true
|
|
428
|
+
} catch (exception: Exception) {
|
|
429
|
+
Log.w("[RNGestureHandler]", "Could not install JSI bindings.")
|
|
430
|
+
false
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
private external fun decorateRuntime(jsiPtr: Long)
|
|
435
|
+
|
|
412
436
|
override fun getConstants(): Map<String, Any> {
|
|
413
437
|
return mapOf(
|
|
414
438
|
"State" to mapOf(
|
|
@@ -501,6 +525,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
|
|
|
501
525
|
}
|
|
502
526
|
|
|
503
527
|
private fun findRootHelperForViewAncestor(viewTag: Int): RNGestureHandlerRootHelper? {
|
|
528
|
+
// TODO: remove resolveRootTagFromReactTag as it's deprecated and unavailable on FabricUIManager
|
|
504
529
|
val uiManager = reactApplicationContext.UIManager
|
|
505
530
|
val rootViewTag = uiManager.resolveRootTagFromReactTag(viewTag)
|
|
506
531
|
if (rootViewTag < 1) {
|
|
@@ -518,6 +543,8 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
|
|
|
518
543
|
handlerFactories.firstOrNull { it.type == handler.javaClass } as HandlerFactory<T>?
|
|
519
544
|
|
|
520
545
|
private fun <T : GestureHandler<T>> onHandlerUpdate(handler: T, motionEvent: MotionEvent) {
|
|
546
|
+
// triggers onUpdate and onChange callbacks on the JS side
|
|
547
|
+
|
|
521
548
|
if (handler.tag < 0) {
|
|
522
549
|
// root containers use negative tags, we don't need to dispatch events for them to the JS
|
|
523
550
|
return
|
|
@@ -525,76 +552,113 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
|
|
|
525
552
|
if (handler.state == GestureHandler.STATE_ACTIVE) {
|
|
526
553
|
val handlerFactory = findFactoryForHandler(handler)
|
|
527
554
|
|
|
528
|
-
if (handler.
|
|
555
|
+
if (handler.actionType == GestureHandler.ACTION_TYPE_REANIMATED_WORKLET) {
|
|
556
|
+
// Reanimated worklet
|
|
557
|
+
val event = RNGestureHandlerEvent.obtain(handler, handlerFactory)
|
|
558
|
+
sendEventForReanimated(event)
|
|
559
|
+
} else if (handler.actionType == GestureHandler.ACTION_TYPE_NATIVE_ANIMATED_EVENT) {
|
|
560
|
+
// Animated with useNativeDriver: true
|
|
561
|
+
val event = RNGestureHandlerEvent.obtain(handler, handlerFactory)
|
|
562
|
+
sendEventForNativeAnimatedEvent(event)
|
|
563
|
+
} else if (handler.actionType == GestureHandler.ACTION_TYPE_JS_FUNCTION_OLD_API) {
|
|
564
|
+
// JS function, Animated.event with useNativeDriver: false using old API
|
|
565
|
+
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
|
|
566
|
+
val data = RNGestureHandlerEvent.createEventData(handler, handlerFactory)
|
|
567
|
+
sendEventForDeviceEvent(RNGestureHandlerEvent.EVENT_NAME, data)
|
|
568
|
+
} else {
|
|
569
|
+
val event = RNGestureHandlerEvent.obtain(handler, handlerFactory)
|
|
570
|
+
sendEventForDirectEvent(event)
|
|
571
|
+
}
|
|
572
|
+
} else if (handler.actionType == GestureHandler.ACTION_TYPE_JS_FUNCTION_NEW_API) {
|
|
573
|
+
// JS function, Animated.event with useNativeDriver: false using new API
|
|
529
574
|
val data = RNGestureHandlerEvent.createEventData(handler, handlerFactory)
|
|
530
|
-
|
|
531
|
-
reactApplicationContext
|
|
532
|
-
.deviceEventEmitter
|
|
533
|
-
.emit(RNGestureHandlerEvent.EVENT_NAME, data)
|
|
534
|
-
} else {
|
|
535
|
-
reactApplicationContext
|
|
536
|
-
.UIManager
|
|
537
|
-
.eventDispatcher.let {
|
|
538
|
-
val event = RNGestureHandlerEvent.obtain(handler, handlerFactory)
|
|
539
|
-
it.dispatchEvent(event)
|
|
540
|
-
}
|
|
575
|
+
sendEventForDeviceEvent(RNGestureHandlerEvent.EVENT_NAME, data)
|
|
541
576
|
}
|
|
542
577
|
}
|
|
543
578
|
}
|
|
544
579
|
|
|
545
580
|
private fun <T : GestureHandler<T>> onStateChange(handler: T, newState: Int, oldState: Int) {
|
|
581
|
+
// triggers onBegin, onStart, onEnd, onFinalize callbacks on the JS side
|
|
582
|
+
|
|
546
583
|
if (handler.tag < 0) {
|
|
547
584
|
// root containers use negative tags, we don't need to dispatch events for them to the JS
|
|
548
585
|
return
|
|
549
586
|
}
|
|
550
587
|
val handlerFactory = findFactoryForHandler(handler)
|
|
551
588
|
|
|
552
|
-
if (handler.
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
.
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
}
|
|
589
|
+
if (handler.actionType == GestureHandler.ACTION_TYPE_REANIMATED_WORKLET) {
|
|
590
|
+
// Reanimated worklet
|
|
591
|
+
val event = RNGestureHandlerStateChangeEvent.obtain(handler, newState, oldState, handlerFactory)
|
|
592
|
+
sendEventForReanimated(event)
|
|
593
|
+
} else if (handler.actionType == GestureHandler.ACTION_TYPE_NATIVE_ANIMATED_EVENT
|
|
594
|
+
|| handler.actionType == GestureHandler.ACTION_TYPE_JS_FUNCTION_OLD_API) {
|
|
595
|
+
// JS function or Animated.event with useNativeDriver: false with old API
|
|
596
|
+
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
|
|
597
|
+
val data = RNGestureHandlerStateChangeEvent.createEventData(handler, handlerFactory, newState, oldState)
|
|
598
|
+
sendEventForDeviceEvent(RNGestureHandlerStateChangeEvent.EVENT_NAME, data)
|
|
599
|
+
} else {
|
|
600
|
+
val event = RNGestureHandlerStateChangeEvent.obtain(handler, newState, oldState, handlerFactory)
|
|
601
|
+
sendEventForDirectEvent(event)
|
|
602
|
+
}
|
|
603
|
+
} else if (handler.actionType == GestureHandler.ACTION_TYPE_JS_FUNCTION_NEW_API) {
|
|
604
|
+
// JS function or Animated.event with useNativeDriver: false with new API
|
|
605
|
+
val data = RNGestureHandlerStateChangeEvent.createEventData(handler, handlerFactory, newState, oldState)
|
|
606
|
+
sendEventForDeviceEvent(RNGestureHandlerStateChangeEvent.EVENT_NAME, data)
|
|
571
607
|
}
|
|
572
608
|
}
|
|
573
609
|
|
|
574
610
|
private fun <T : GestureHandler<T>> onTouchEvent(handler: T) {
|
|
611
|
+
// triggers onTouchesDown, onTouchesMove, onTouchesUp, onTouchesCancelled callbacks on the JS side
|
|
612
|
+
|
|
575
613
|
if (handler.tag < 0) {
|
|
576
614
|
// root containers use negative tags, we don't need to dispatch events for them to the JS
|
|
577
615
|
return
|
|
578
616
|
}
|
|
579
617
|
if (handler.state == GestureHandler.STATE_BEGAN || handler.state == GestureHandler.STATE_ACTIVE
|
|
580
|
-
|
|
581
|
-
if (handler.
|
|
618
|
+
|| handler.state == GestureHandler.STATE_UNDETERMINED || handler.view != null) {
|
|
619
|
+
if (handler.actionType == GestureHandler.ACTION_TYPE_REANIMATED_WORKLET) {
|
|
620
|
+
// Reanimated worklet
|
|
621
|
+
val event = RNGestureHandlerTouchEvent.obtain(handler)
|
|
622
|
+
sendEventForReanimated(event)
|
|
623
|
+
} else if (handler.actionType == GestureHandler.ACTION_TYPE_JS_FUNCTION_NEW_API) {
|
|
624
|
+
// JS function, Animated.event with useNativeDriver: false with new API
|
|
582
625
|
val data = RNGestureHandlerTouchEvent.createEventData(handler)
|
|
583
|
-
|
|
584
|
-
reactApplicationContext
|
|
585
|
-
.deviceEventEmitter
|
|
586
|
-
.emit(RNGestureHandlerTouchEvent.EVENT_NAME, data)
|
|
587
|
-
} else {
|
|
588
|
-
reactApplicationContext
|
|
589
|
-
.UIManager
|
|
590
|
-
.eventDispatcher.let {
|
|
591
|
-
val event = RNGestureHandlerTouchEvent.obtain(handler)
|
|
592
|
-
it.dispatchEvent(event)
|
|
593
|
-
}
|
|
626
|
+
sendEventForDeviceEvent(RNGestureHandlerEvent.EVENT_NAME, data)
|
|
594
627
|
}
|
|
595
628
|
}
|
|
596
629
|
}
|
|
597
630
|
|
|
631
|
+
private fun <T : Event<T>>sendEventForReanimated(event: T) {
|
|
632
|
+
// Delivers the event to Reanimated.
|
|
633
|
+
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
|
|
634
|
+
// TODO: send event directly to Reanimated
|
|
635
|
+
// This is already supported in Reanimated with Fabric but let's wait until the official release.
|
|
636
|
+
// val reanimatedModule = reactApplicationContext.getNativeModule(ReanimatedModule::class.java)
|
|
637
|
+
// reanimatedModule?.nodesManager?.onEventDispatch(event)
|
|
638
|
+
} else {
|
|
639
|
+
// In the old architecture, Reanimated subscribes for specific direct events.
|
|
640
|
+
sendEventForDirectEvent(event)
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
private fun sendEventForNativeAnimatedEvent(event: RNGestureHandlerEvent) {
|
|
645
|
+
// Delivers the event to NativeAnimatedModule.
|
|
646
|
+
// TODO: send event directly to NativeAnimated[Turbo]Module
|
|
647
|
+
// ReactContext.dispatchEvent is an extension function, depending on the architecture it will
|
|
648
|
+
// dispatch event using UIManagerModule or FabricUIManager.
|
|
649
|
+
reactApplicationContext.dispatchEvent(event)
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
private fun <T : Event<T>>sendEventForDirectEvent(event: T) {
|
|
653
|
+
// Delivers the event to JS as a direct event. This method is called only on Paper.
|
|
654
|
+
reactApplicationContext.dispatchEvent(event)
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
private fun sendEventForDeviceEvent(eventName: String, data: WritableMap) {
|
|
658
|
+
// Delivers the event to JS as a device event.
|
|
659
|
+
reactApplicationContext.deviceEventEmitter.emit(eventName, data)
|
|
660
|
+
}
|
|
661
|
+
|
|
598
662
|
companion object {
|
|
599
663
|
const val MODULE_NAME = "RNGestureHandlerModule"
|
|
600
664
|
private const val KEY_SHOULD_CANCEL_WHEN_OUTSIDE = "shouldCancelWhenOutside"
|
package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt
CHANGED
|
@@ -23,11 +23,11 @@ class RNGestureHandlerRegistry : GestureHandlerRegistry {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
@Synchronized
|
|
26
|
-
fun attachHandlerToView(handlerTag: Int, viewTag: Int,
|
|
26
|
+
fun attachHandlerToView(handlerTag: Int, viewTag: Int, actionType: Int): Boolean {
|
|
27
27
|
val handler = handlers[handlerTag]
|
|
28
28
|
return handler?.let {
|
|
29
29
|
detachHandler(handler)
|
|
30
|
-
handler.
|
|
30
|
+
handler.actionType = actionType
|
|
31
31
|
registerHandlerForViewWithTag(viewTag, handler)
|
|
32
32
|
true
|
|
33
33
|
} ?: false
|
|
@@ -43,7 +43,9 @@ class RNGestureHandlerRegistry : GestureHandlerRegistry {
|
|
|
43
43
|
listToAdd.add(handler)
|
|
44
44
|
handlersForView.put(viewTag, listToAdd)
|
|
45
45
|
} else {
|
|
46
|
-
listToAdd
|
|
46
|
+
synchronized(listToAdd) {
|
|
47
|
+
listToAdd.add(handler)
|
|
48
|
+
}
|
|
47
49
|
}
|
|
48
50
|
}
|
|
49
51
|
|
|
@@ -54,7 +56,10 @@ class RNGestureHandlerRegistry : GestureHandlerRegistry {
|
|
|
54
56
|
attachedTo.remove(handler.tag)
|
|
55
57
|
val attachedHandlers = handlersForView[attachedToView]
|
|
56
58
|
if (attachedHandlers != null) {
|
|
57
|
-
attachedHandlers
|
|
59
|
+
synchronized(attachedHandlers) {
|
|
60
|
+
attachedHandlers.remove(handler)
|
|
61
|
+
}
|
|
62
|
+
|
|
58
63
|
if (attachedHandlers.size == 0) {
|
|
59
64
|
handlersForView.remove(attachedToView)
|
|
60
65
|
}
|
package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt
CHANGED
|
@@ -37,7 +37,7 @@ class RNGestureHandlerRootHelper(private val context: ReactContext, wrappedView:
|
|
|
37
37
|
jsGestureHandler = RootViewGestureHandler().apply { tag = -wrappedViewTag }
|
|
38
38
|
with(registry) {
|
|
39
39
|
registerHandler(jsGestureHandler)
|
|
40
|
-
attachHandlerToView(jsGestureHandler.tag, wrappedViewTag)
|
|
40
|
+
attachHandlerToView(jsGestureHandler.tag, wrappedViewTag, GestureHandler.ACTION_TYPE_JS_FUNCTION_OLD_API)
|
|
41
41
|
}
|
|
42
42
|
module.registerRootHelper(this)
|
|
43
43
|
}
|
package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt
CHANGED
|
@@ -3,6 +3,9 @@ package com.swmansion.gesturehandler.react
|
|
|
3
3
|
import com.facebook.react.module.annotations.ReactModule
|
|
4
4
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
5
5
|
import com.facebook.react.uimanager.ViewGroupManager
|
|
6
|
+
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
7
|
+
import com.facebook.react.viewmanagers.RNGestureHandlerRootViewManagerDelegate
|
|
8
|
+
import com.facebook.react.viewmanagers.RNGestureHandlerRootViewManagerInterface
|
|
6
9
|
|
|
7
10
|
/**
|
|
8
11
|
* React native's view manager used for creating instances of []RNGestureHandlerRootView}. It
|
|
@@ -10,8 +13,20 @@ import com.facebook.react.uimanager.ViewGroupManager
|
|
|
10
13
|
* to be provided.
|
|
11
14
|
*/
|
|
12
15
|
@ReactModule(name = RNGestureHandlerRootViewManager.REACT_CLASS)
|
|
13
|
-
class RNGestureHandlerRootViewManager : ViewGroupManager<RNGestureHandlerRootView>()
|
|
16
|
+
class RNGestureHandlerRootViewManager : ViewGroupManager<RNGestureHandlerRootView>(),
|
|
17
|
+
RNGestureHandlerRootViewManagerInterface<RNGestureHandlerRootView> {
|
|
18
|
+
private val mDelegate: ViewManagerDelegate<RNGestureHandlerRootView>
|
|
19
|
+
|
|
20
|
+
init {
|
|
21
|
+
mDelegate = RNGestureHandlerRootViewManagerDelegate<RNGestureHandlerRootView, RNGestureHandlerRootViewManager>(this)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
override fun getDelegate(): ViewManagerDelegate<RNGestureHandlerRootView> {
|
|
25
|
+
return mDelegate
|
|
26
|
+
}
|
|
27
|
+
|
|
14
28
|
override fun getName() = REACT_CLASS
|
|
29
|
+
|
|
15
30
|
override fun createViewInstance(reactContext: ThemedReactContext) = RNGestureHandlerRootView(reactContext)
|
|
16
31
|
|
|
17
32
|
override fun onDropViewInstance(view: RNGestureHandlerRootView) {
|
|
@@ -29,6 +44,6 @@ class RNGestureHandlerRootViewManager : ViewGroupManager<RNGestureHandlerRootVie
|
|
|
29
44
|
mutableMapOf("registrationName" to RNGestureHandlerStateChangeEvent.EVENT_NAME))
|
|
30
45
|
|
|
31
46
|
companion object {
|
|
32
|
-
const val REACT_CLASS = "
|
|
47
|
+
const val REACT_CLASS = "RNGestureHandlerRootView"
|
|
33
48
|
}
|
|
34
49
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
GESTURE_HANDLER_MAIN_THIS_DIR := $(call my-dir)
|
|
2
|
+
|
|
3
|
+
include $(REACT_ANDROID_DIR)/Android-prebuilt.mk
|
|
4
|
+
|
|
5
|
+
# libreact_render_uimanager
|
|
6
|
+
include $(CLEAR_VARS)
|
|
7
|
+
LOCAL_MODULE := libreact_render_uimanager
|
|
8
|
+
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libreact_render_uimanager.so
|
|
9
|
+
LOCAL_EXPORT_C_INCLUDES := \
|
|
10
|
+
$(REACT_COMMON_DIR)/react/renderer/uimanager
|
|
11
|
+
include $(PREBUILT_SHARED_LIBRARY)
|
|
12
|
+
# end libreact_render_uimanager
|
|
13
|
+
|
|
14
|
+
include $(GESTURE_HANDLER_MAIN_THIS_DIR)/../../../build/generated/source/codegen/jni/Android.mk
|
|
15
|
+
|
|
16
|
+
include $(CLEAR_VARS)
|
|
17
|
+
|
|
18
|
+
LOCAL_PATH := $(GESTURE_HANDLER_MAIN_THIS_DIR)
|
|
19
|
+
LOCAL_MODULE := rngesturehandler_modules
|
|
20
|
+
|
|
21
|
+
LOCAL_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni
|
|
22
|
+
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) $(wildcard $(GENERATED_SRC_DIR)/codegen/jni/*.cpp)
|
|
23
|
+
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni
|
|
24
|
+
|
|
25
|
+
# Please note as one of the library listed is libreact_codegen_samplelibrary
|
|
26
|
+
# This name will be generated as libreact_codegen_<library-name>
|
|
27
|
+
# where <library-name> is the one you specified in the Gradle configuration
|
|
28
|
+
LOCAL_SHARED_LIBRARIES := libjsi \
|
|
29
|
+
libfbjni \
|
|
30
|
+
libglog \
|
|
31
|
+
libfolly_json \
|
|
32
|
+
libyoga \
|
|
33
|
+
libreact_nativemodule_core \
|
|
34
|
+
libturbomodulejsijni \
|
|
35
|
+
librrc_view \
|
|
36
|
+
libreact_render_core \
|
|
37
|
+
libreact_render_graphics \
|
|
38
|
+
libfabricjni \
|
|
39
|
+
libfolly_futures \
|
|
40
|
+
libreact_debug \
|
|
41
|
+
libreact_render_componentregistry \
|
|
42
|
+
libreact_render_debug \
|
|
43
|
+
libruntimeexecutor \
|
|
44
|
+
libreact_render_mapbuffer \
|
|
45
|
+
libreact_render_uimanager \
|
|
46
|
+
libreact_codegen_rncore \
|
|
47
|
+
libreact_codegen_rngesturehandler
|
|
48
|
+
|
|
49
|
+
LOCAL_CFLAGS := \
|
|
50
|
+
-DLOG_TAG=\"ReactNative\"
|
|
51
|
+
LOCAL_CFLAGS += -fexceptions -frtti -std=c++17 -Wall
|
|
52
|
+
|
|
53
|
+
include $(BUILD_SHARED_LIBRARY)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#include <fbjni/fbjni.h>
|
|
2
|
+
|
|
3
|
+
#include "RNGestureHandlerComponentsRegistry.h"
|
|
4
|
+
|
|
5
|
+
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
|
|
6
|
+
return facebook::jni::initialize(vm, [] {
|
|
7
|
+
facebook::react::RNGestureHandlerComponentsRegistry::registerNatives();
|
|
8
|
+
});
|
|
9
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#include "RNGestureHandlerComponentsRegistry.h"
|
|
2
|
+
|
|
3
|
+
#include <CoreComponentsRegistry.h>
|
|
4
|
+
#include <fbjni/fbjni.h>
|
|
5
|
+
#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
|
|
6
|
+
#include <react/renderer/components/rncore/ComponentDescriptors.h>
|
|
7
|
+
#include <react/renderer/components/rngesturehandler/ComponentDescriptors.h>
|
|
8
|
+
|
|
9
|
+
namespace facebook {
|
|
10
|
+
namespace react {
|
|
11
|
+
|
|
12
|
+
RNGestureHandlerComponentsRegistry::RNGestureHandlerComponentsRegistry(
|
|
13
|
+
ComponentFactory *delegate)
|
|
14
|
+
: delegate_(delegate) {}
|
|
15
|
+
|
|
16
|
+
std::shared_ptr<ComponentDescriptorProviderRegistry const>
|
|
17
|
+
RNGestureHandlerComponentsRegistry::sharedProviderRegistry() {
|
|
18
|
+
auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry();
|
|
19
|
+
|
|
20
|
+
// Gesture Handler
|
|
21
|
+
providerRegistry->add(concreteComponentDescriptorProvider<RNGestureHandlerRootViewComponentDescriptor>());
|
|
22
|
+
providerRegistry->add(concreteComponentDescriptorProvider<RNGestureHandlerButtonComponentDescriptor>());
|
|
23
|
+
|
|
24
|
+
return providerRegistry;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
jni::local_ref<RNGestureHandlerComponentsRegistry::jhybriddata>
|
|
28
|
+
RNGestureHandlerComponentsRegistry::initHybrid(
|
|
29
|
+
jni::alias_ref<jclass>,
|
|
30
|
+
ComponentFactory *delegate) {
|
|
31
|
+
auto instance = makeCxxInstance(delegate);
|
|
32
|
+
|
|
33
|
+
auto buildRegistryFunction =
|
|
34
|
+
[](EventDispatcher::Weak const &eventDispatcher,
|
|
35
|
+
ContextContainer::Shared const &contextContainer)
|
|
36
|
+
-> ComponentDescriptorRegistry::Shared {
|
|
37
|
+
auto registry = RNGestureHandlerComponentsRegistry::sharedProviderRegistry()
|
|
38
|
+
->createComponentDescriptorRegistry(
|
|
39
|
+
{eventDispatcher, contextContainer});
|
|
40
|
+
|
|
41
|
+
auto mutableRegistry =
|
|
42
|
+
std::const_pointer_cast<ComponentDescriptorRegistry>(registry);
|
|
43
|
+
|
|
44
|
+
mutableRegistry->setFallbackComponentDescriptor(
|
|
45
|
+
std::make_shared<UnimplementedNativeViewComponentDescriptor>(
|
|
46
|
+
ComponentDescriptorParameters{
|
|
47
|
+
eventDispatcher, contextContainer, nullptr}));
|
|
48
|
+
|
|
49
|
+
return registry;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
delegate->buildRegistryFunction = buildRegistryFunction;
|
|
53
|
+
return instance;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
void RNGestureHandlerComponentsRegistry::registerNatives() {
|
|
57
|
+
registerHybrid({
|
|
58
|
+
makeNativeMethod("initHybrid", RNGestureHandlerComponentsRegistry::initHybrid),
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// This is a temporary solution that allows components exported by gesture-handler
|
|
62
|
+
// library to be added to the main component registry. This code is triggered
|
|
63
|
+
// when c++ gesture-handler library is initialized and is needed because RN's autolinking
|
|
64
|
+
// does not currently support Fabric components. As a consequence, users would need
|
|
65
|
+
// to manually put library initialization calls in their ReactNativeHost implementation
|
|
66
|
+
// which is undesirable.
|
|
67
|
+
sharedProviderRegistry();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
} // namespace react
|
|
71
|
+
} // namespace facebook
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <ComponentFactory.h>
|
|
4
|
+
#include <fbjni/fbjni.h>
|
|
5
|
+
#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
|
|
6
|
+
#include <react/renderer/componentregistry/ComponentDescriptorRegistry.h>
|
|
7
|
+
|
|
8
|
+
namespace facebook {
|
|
9
|
+
namespace react {
|
|
10
|
+
|
|
11
|
+
class RNGestureHandlerComponentsRegistry
|
|
12
|
+
: public facebook::jni::HybridClass<RNGestureHandlerComponentsRegistry> {
|
|
13
|
+
public:
|
|
14
|
+
constexpr static auto kJavaDescriptor =
|
|
15
|
+
"Lcom/swmansion/gesturehandler/react/RNGestureHandlerComponentsRegistry;";
|
|
16
|
+
|
|
17
|
+
static void registerNatives();
|
|
18
|
+
|
|
19
|
+
RNGestureHandlerComponentsRegistry(ComponentFactory *delegate);
|
|
20
|
+
|
|
21
|
+
private:
|
|
22
|
+
friend HybridBase;
|
|
23
|
+
|
|
24
|
+
static std::shared_ptr<ComponentDescriptorProviderRegistry const> sharedProviderRegistry();
|
|
25
|
+
|
|
26
|
+
const ComponentFactory *delegate_;
|
|
27
|
+
|
|
28
|
+
static jni::local_ref<jhybriddata> initHybrid(
|
|
29
|
+
jni::alias_ref<jclass>,
|
|
30
|
+
ComponentFactory *delegate);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
} // namespace react
|
|
34
|
+
} // namespace facebook
|