react-native-gesture-handler 2.7.0 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (182) hide show
  1. package/android/build.gradle +10 -5
  2. package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +3 -3
  3. package/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +7 -7
  4. package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +2 -2
  5. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +3 -3
  6. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/FlingGestureHandler.kt +12 -9
  7. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandler.kt +39 -31
  8. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerInteractionController.kt +1 -1
  9. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerOrchestrator.kt +28 -19
  10. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerRegistry.kt +1 -1
  11. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureUtils.kt +1 -1
  12. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/LongPressGestureHandler.kt +1 -1
  13. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ManualGestureHandler.kt +1 -1
  14. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/NativeViewGestureHandler.kt +5 -5
  15. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/OnTouchEventListener.kt +1 -1
  16. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PanGestureHandler.kt +7 -5
  17. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PinchGestureHandler.kt +11 -4
  18. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PointerEventsConfig.kt +1 -1
  19. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureDetector.kt +1 -1
  20. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureHandler.kt +7 -2
  21. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ScaleGestureDetector.java +1 -1
  22. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/TapGestureHandler.kt +3 -3
  23. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ViewConfigurationHelper.kt +1 -1
  24. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/react}/Extensions.kt +3 -3
  25. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +7 -6
  26. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +1 -5
  27. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +6 -6
  28. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +1 -1
  29. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +3 -3
  30. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +35 -14
  31. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +2 -2
  32. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +8 -6
  33. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +0 -2
  34. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +4 -2
  35. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +7 -7
  36. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +5 -5
  37. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +2 -2
  38. package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +5 -5
  39. package/ios/Handlers/RNManualHandler.m +24 -8
  40. package/ios/RNGestureHandlerButtonComponentView.mm +7 -8
  41. package/ios/RNGestureHandlerManager.mm +176 -178
  42. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
  43. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  44. package/lib/commonjs/RNGestureHandlerModule.windows.js +156 -0
  45. package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -0
  46. package/lib/commonjs/components/DrawerLayout.js +1 -0
  47. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  48. package/lib/commonjs/components/Swipeable.js.map +1 -1
  49. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  50. package/lib/commonjs/getShadowNodeFromRef.js +2 -2
  51. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
  52. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  53. package/lib/commonjs/handlers/gestureHandlerCommon.js +5 -2
  54. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  55. package/lib/commonjs/handlers/gestureHandlerTypesCompat.js +4 -0
  56. package/lib/commonjs/handlers/gestures/GestureDetector.js +26 -12
  57. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  58. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  59. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  60. package/lib/commonjs/handlers/gestures/gestureComposition.js +15 -4
  61. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -1
  62. package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
  63. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  64. package/lib/commonjs/web/handlers/FlingGestureHandler.js +18 -15
  65. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  66. package/lib/commonjs/web/handlers/GestureHandler.js +36 -7
  67. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  68. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +2 -1
  69. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  70. package/lib/commonjs/web/handlers/ManualGestureHandler.js +15 -0
  71. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
  72. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -5
  73. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  74. package/lib/commonjs/web/handlers/PanGestureHandler.js +0 -5
  75. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  76. package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -1
  77. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  78. package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -1
  79. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  80. package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -1
  81. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  82. package/lib/commonjs/web/interfaces.js.map +1 -1
  83. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  84. package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
  85. package/lib/commonjs/web_hammer/NodeManager.js +4 -1
  86. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
  87. package/lib/commonjs/web_hammer/PanGestureHandler.js +25 -6
  88. package/lib/commonjs/web_hammer/PanGestureHandler.js.map +1 -1
  89. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  90. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  91. package/lib/module/RNGestureHandlerModule.windows.js +117 -0
  92. package/lib/module/RNGestureHandlerModule.windows.js.map +1 -0
  93. package/lib/module/components/DrawerLayout.js +1 -0
  94. package/lib/module/components/DrawerLayout.js.map +1 -1
  95. package/lib/module/components/Swipeable.js.map +1 -1
  96. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  97. package/lib/module/getShadowNodeFromRef.js +2 -2
  98. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  99. package/lib/module/handlers/createHandler.js.map +1 -1
  100. package/lib/module/handlers/gestureHandlerCommon.js +5 -2
  101. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  102. package/lib/module/handlers/gestureHandlerTypesCompat.js +1 -1
  103. package/lib/module/handlers/gestures/GestureDetector.js +26 -12
  104. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  105. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  106. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  107. package/lib/module/handlers/gestures/gestureComposition.js +15 -4
  108. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
  109. package/lib/module/jestUtils/jestUtils.js.map +1 -1
  110. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  111. package/lib/module/web/handlers/FlingGestureHandler.js +18 -15
  112. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  113. package/lib/module/web/handlers/GestureHandler.js +36 -6
  114. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  115. package/lib/module/web/handlers/LongPressGestureHandler.js +2 -1
  116. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  117. package/lib/module/web/handlers/ManualGestureHandler.js +15 -0
  118. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
  119. package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -5
  120. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  121. package/lib/module/web/handlers/PanGestureHandler.js +0 -5
  122. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  123. package/lib/module/web/handlers/PinchGestureHandler.js +0 -1
  124. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  125. package/lib/module/web/handlers/RotationGestureHandler.js +0 -1
  126. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  127. package/lib/module/web/handlers/TapGestureHandler.js +0 -1
  128. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  129. package/lib/module/web/interfaces.js.map +1 -1
  130. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  131. package/lib/module/web_hammer/GestureHandler.js.map +1 -1
  132. package/lib/module/web_hammer/NodeManager.js +4 -1
  133. package/lib/module/web_hammer/NodeManager.js.map +1 -1
  134. package/lib/module/web_hammer/PanGestureHandler.js +25 -6
  135. package/lib/module/web_hammer/PanGestureHandler.js.map +1 -1
  136. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +1 -1
  137. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  138. package/lib/typescript/RNGestureHandlerModule.windows.d.ts +48 -0
  139. package/lib/typescript/components/DrawerLayout.d.ts +7 -0
  140. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
  141. package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -1
  142. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -1
  143. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +3 -1
  144. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +1 -0
  145. package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -0
  146. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +3 -1
  147. package/lib/typescript/web/interfaces.d.ts +3 -1
  148. package/lib/typescript/web/tools/NodeManager.d.ts +2 -2
  149. package/package.json +14 -10
  150. package/src/RNGestureHandlerModule.macos.ts +2 -2
  151. package/src/RNGestureHandlerModule.web.ts +2 -2
  152. package/src/RNGestureHandlerModule.windows.ts +140 -0
  153. package/src/components/DrawerLayout.tsx +14 -8
  154. package/src/components/Swipeable.tsx +2 -4
  155. package/src/components/touchables/TouchableOpacity.tsx +1 -1
  156. package/src/getShadowNodeFromRef.ts +3 -3
  157. package/src/handlers/createHandler.tsx +13 -15
  158. package/src/handlers/gestureHandlerCommon.ts +9 -4
  159. package/src/handlers/gestureHandlerTypesCompat.ts +34 -17
  160. package/src/handlers/gestures/GestureDetector.tsx +46 -19
  161. package/src/handlers/gestures/eventReceiver.ts +2 -1
  162. package/src/handlers/gestures/gesture.ts +8 -12
  163. package/src/handlers/gestures/gestureComposition.ts +19 -6
  164. package/src/jestUtils/jestUtils.ts +3 -4
  165. package/src/web/detectors/RotationGestureDetector.ts +2 -1
  166. package/src/web/handlers/FlingGestureHandler.ts +28 -20
  167. package/src/web/handlers/GestureHandler.ts +42 -17
  168. package/src/web/handlers/LongPressGestureHandler.ts +2 -2
  169. package/src/web/handlers/ManualGestureHandler.ts +10 -1
  170. package/src/web/handlers/NativeViewGestureHandler.ts +0 -5
  171. package/src/web/handlers/PanGestureHandler.ts +0 -6
  172. package/src/web/handlers/PinchGestureHandler.ts +0 -2
  173. package/src/web/handlers/RotationGestureHandler.ts +2 -5
  174. package/src/web/handlers/TapGestureHandler.ts +0 -2
  175. package/src/web/interfaces.ts +3 -0
  176. package/src/web/tools/InteractionManager.ts +2 -3
  177. package/src/web_hammer/GestureHandler.ts +6 -8
  178. package/src/web_hammer/NodeManager.ts +3 -1
  179. package/src/web_hammer/PanGestureHandler.ts +12 -6
  180. package/android/lib/build.gradle +0 -28
  181. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  182. package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
@@ -27,7 +27,7 @@ import com.facebook.react.uimanager.ViewProps
27
27
  import com.facebook.react.uimanager.annotations.ReactProp
28
28
  import com.facebook.react.viewmanagers.RNGestureHandlerButtonManagerDelegate
29
29
  import com.facebook.react.viewmanagers.RNGestureHandlerButtonManagerInterface
30
- import com.swmansion.gesturehandler.NativeViewGestureHandler
30
+ import com.swmansion.gesturehandler.core.NativeViewGestureHandler
31
31
  import com.swmansion.gesturehandler.react.RNGestureHandlerButtonViewManager.ButtonViewGroup
32
32
 
33
33
  @ReactModule(name = RNGestureHandlerButtonViewManager.REACT_CLASS)
@@ -35,7 +35,7 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>(), R
35
35
  private val mDelegate: ViewManagerDelegate<ButtonViewGroup>
36
36
 
37
37
  init {
38
- mDelegate = RNGestureHandlerButtonManagerDelegate<ButtonViewGroup, RNGestureHandlerButtonViewManager>(this)
38
+ mDelegate = RNGestureHandlerButtonManagerDelegate<ButtonViewGroup, RNGestureHandlerButtonViewManager>(this)
39
39
  }
40
40
 
41
41
  override fun getName() = REACT_CLASS
@@ -91,7 +91,8 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>(), R
91
91
  return mDelegate
92
92
  }
93
93
 
94
- class ButtonViewGroup(context: Context?) : ViewGroup(context),
94
+ class ButtonViewGroup(context: Context?) :
95
+ ViewGroup(context),
95
96
  NativeViewGestureHandler.NativeViewGestureHandlerHook {
96
97
  // Using object because of handling null representing no value set.
97
98
  var rippleColor: Int? = null
@@ -254,9 +255,9 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager<ButtonViewGroup>(), R
254
255
  }
255
256
 
256
257
  val drawable = RippleDrawable(
257
- colorStateList,
258
- null,
259
- if (useBorderlessDrawable) null else ShapeDrawable(RectShape())
258
+ colorStateList,
259
+ null,
260
+ if (useBorderlessDrawable) null else ShapeDrawable(RectShape())
260
261
  )
261
262
 
262
263
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && rippleRadius != null) {
@@ -1,12 +1,8 @@
1
1
  package com.swmansion.gesturehandler.react
2
2
 
3
3
  import android.content.Context
4
- import android.os.Bundle
5
4
  import android.util.AttributeSet
6
- import android.view.MotionEvent
7
- import com.facebook.react.ReactInstanceManager
8
5
  import com.facebook.react.ReactRootView
9
- import java.lang.Exception
10
6
 
11
7
  @Deprecated(message = "Use <GestureHandlerRootView /> component instead. Check gesture handler installation instructions in documentation for more information.")
12
8
  class RNGestureHandlerEnabledRootView : ReactRootView {
@@ -14,6 +10,6 @@ class RNGestureHandlerEnabledRootView : ReactRootView {
14
10
  constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {}
15
11
 
16
12
  init {
17
- throw UnsupportedOperationException("Your application is configured to use RNGestureHandlerEnabledRootView which is no longer supported. You can see how to migrate to <GestureHandlerRootView /> here: https://docs.swmansion.com/react-native-gesture-handler/docs/guides/migrating-off-rnghenabledroot")
13
+ throw UnsupportedOperationException("Your application is configured to use RNGestureHandlerEnabledRootView which is no longer supported. You can see how to migrate to <GestureHandlerRootView /> here: https://docs.swmansion.com/react-native-gesture-handler/docs/guides/migrating-off-rnghenabledroot")
18
14
  }
19
15
  }
@@ -11,7 +11,7 @@ import com.facebook.react.bridge.Arguments
11
11
  import com.facebook.react.bridge.WritableMap
12
12
  import com.facebook.react.uimanager.events.Event
13
13
  import com.facebook.react.uimanager.events.RCTEventEmitter
14
- import com.swmansion.gesturehandler.GestureHandler
14
+ import com.swmansion.gesturehandler.core.GestureHandler
15
15
 
16
16
  class RNGestureHandlerEvent private constructor() : Event<RNGestureHandlerEvent>() {
17
17
  private var extraData: WritableMap? = null
@@ -53,13 +53,13 @@ class RNGestureHandlerEvent private constructor() : Event<RNGestureHandlerEvent>
53
53
  init(handler, dataExtractor)
54
54
  }
55
55
 
56
- fun <T: GestureHandler<T>> createEventData(
56
+ fun <T : GestureHandler<T>> createEventData(
57
57
  handler: T,
58
58
  dataExtractor: RNGestureHandlerEventDataExtractor<T>?
59
59
  ): WritableMap = Arguments.createMap().apply {
60
- dataExtractor?.extractEventData(handler, this)
61
- putInt("handlerTag", handler.tag)
62
- putInt("state", handler.state)
63
- }
60
+ dataExtractor?.extractEventData(handler, this)
61
+ putInt("handlerTag", handler.tag)
62
+ putInt("state", handler.state)
63
+ }
64
64
  }
65
65
  }
@@ -1,7 +1,7 @@
1
1
  package com.swmansion.gesturehandler.react
2
2
 
3
3
  import com.facebook.react.bridge.WritableMap
4
- import com.swmansion.gesturehandler.GestureHandler
4
+ import com.swmansion.gesturehandler.core.GestureHandler
5
5
 
6
6
  interface RNGestureHandlerEventDataExtractor<T : GestureHandler<T>> {
7
7
  fun extractEventData(handler: T, eventData: WritableMap)
@@ -2,9 +2,9 @@ package com.swmansion.gesturehandler.react
2
2
 
3
3
  import android.util.SparseArray
4
4
  import com.facebook.react.bridge.ReadableMap
5
- import com.swmansion.gesturehandler.GestureHandler
6
- import com.swmansion.gesturehandler.GestureHandlerInteractionController
7
- import com.swmansion.gesturehandler.NativeViewGestureHandler
5
+ import com.swmansion.gesturehandler.core.GestureHandler
6
+ import com.swmansion.gesturehandler.core.GestureHandlerInteractionController
7
+ import com.swmansion.gesturehandler.core.NativeViewGestureHandler
8
8
 
9
9
  class RNGestureHandlerInteractionManager : GestureHandlerInteractionController {
10
10
  private val waitForRelations = SparseArray<IntArray>()
@@ -3,17 +3,33 @@ package com.swmansion.gesturehandler.react
3
3
  import android.content.Context
4
4
  import android.util.Log
5
5
  import android.view.MotionEvent
6
- import android.view.ViewGroup
7
6
  import com.facebook.react.ReactRootView
8
- import com.facebook.react.bridge.*
7
+ import com.facebook.react.bridge.JSApplicationIllegalArgumentException
8
+ import com.facebook.react.bridge.ReactApplicationContext
9
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
10
+ import com.facebook.react.bridge.ReactMethod
11
+ import com.facebook.react.bridge.ReadableMap
12
+ import com.facebook.react.bridge.ReadableType
13
+ import com.facebook.react.bridge.WritableMap
9
14
  import com.facebook.react.module.annotations.ReactModule
10
15
  import com.facebook.react.uimanager.PixelUtil
11
- import com.facebook.react.uimanager.UIBlock
12
16
  import com.facebook.react.uimanager.events.Event
13
17
  import com.facebook.soloader.SoLoader
14
18
  import com.swmansion.common.GestureHandlerStateManager
15
- import com.swmansion.gesturehandler.*
16
- import java.util.*
19
+ import com.swmansion.gesturehandler.BuildConfig
20
+ import com.swmansion.gesturehandler.ReanimatedEventDispatcher
21
+ import com.swmansion.gesturehandler.core.FlingGestureHandler
22
+ import com.swmansion.gesturehandler.core.GestureHandler
23
+ import com.swmansion.gesturehandler.core.LongPressGestureHandler
24
+ import com.swmansion.gesturehandler.core.ManualGestureHandler
25
+ import com.swmansion.gesturehandler.core.NativeViewGestureHandler
26
+ import com.swmansion.gesturehandler.core.OnTouchEventListener
27
+ import com.swmansion.gesturehandler.core.PanGestureHandler
28
+ import com.swmansion.gesturehandler.core.PinchGestureHandler
29
+ import com.swmansion.gesturehandler.core.RotationGestureHandler
30
+ import com.swmansion.gesturehandler.core.TapGestureHandler
31
+ import com.swmansion.gesturehandler.dispatchEvent
32
+
17
33
  // NativeModule.onCatalystInstanceDestroy() was deprecated in favor of NativeModule.invalidate()
18
34
  // ref: https://github.com/facebook/react-native/commit/18c8417290823e67e211bde241ae9dde27b72f17
19
35
 
@@ -21,8 +37,8 @@ import java.util.*
21
37
  // ref: https://github.com/facebook/react-native/commit/acbf9e18ea666b07c1224a324602a41d0a66985e
22
38
  @Suppress("DEPRECATION")
23
39
  @ReactModule(name = RNGestureHandlerModule.MODULE_NAME)
24
- class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
25
- : ReactContextBaseJavaModule(reactContext), GestureHandlerStateManager {
40
+ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) :
41
+ ReactContextBaseJavaModule(reactContext), GestureHandlerStateManager {
26
42
  private abstract class HandlerFactory<T : GestureHandler<T>> : RNGestureHandlerEventDataExtractor<T> {
27
43
  abstract val type: Class<T>
28
44
  abstract val name: String
@@ -63,7 +79,8 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
63
79
  super.configure(handler, config)
64
80
  if (config.hasKey(KEY_NATIVE_VIEW_SHOULD_ACTIVATE_ON_START)) {
65
81
  handler.setShouldActivateOnStart(
66
- config.getBoolean(KEY_NATIVE_VIEW_SHOULD_ACTIVATE_ON_START))
82
+ config.getBoolean(KEY_NATIVE_VIEW_SHOULD_ACTIVATE_ON_START)
83
+ )
67
84
  }
68
85
  if (config.hasKey(KEY_NATIVE_VIEW_DISALLOW_INTERRUPTION)) {
69
86
  handler.setDisallowInterruption(config.getBoolean(KEY_NATIVE_VIEW_DISALLOW_INTERRUPTION))
@@ -352,7 +369,9 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
352
369
  @ReactMethod
353
370
  @Suppress("UNCHECKED_CAST")
354
371
  fun <T : GestureHandler<T>> createGestureHandler(
355
- handlerName: String, handlerTag: Int, config: ReadableMap,
372
+ handlerName: String,
373
+ handlerTag: Int,
374
+ config: ReadableMap,
356
375
  ) {
357
376
  for (handlerFactory in handlerFactories as Array<HandlerFactory<T>>) {
358
377
  if (handlerFactory.name == handlerName) {
@@ -551,8 +570,9 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
551
570
  // Reanimated worklet
552
571
  val event = RNGestureHandlerStateChangeEvent.obtain(handler, newState, oldState, handlerFactory)
553
572
  sendEventForReanimated(event)
554
- } else if (handler.actionType == GestureHandler.ACTION_TYPE_NATIVE_ANIMATED_EVENT
555
- || handler.actionType == GestureHandler.ACTION_TYPE_JS_FUNCTION_OLD_API) {
573
+ } else if (handler.actionType == GestureHandler.ACTION_TYPE_NATIVE_ANIMATED_EVENT ||
574
+ handler.actionType == GestureHandler.ACTION_TYPE_JS_FUNCTION_OLD_API
575
+ ) {
556
576
  // JS function or Animated.event with useNativeDriver: false with old API
557
577
  if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
558
578
  val data = RNGestureHandlerStateChangeEvent.createEventData(handler, handlerFactory, newState, oldState)
@@ -570,13 +590,14 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?)
570
590
 
571
591
  private fun <T : GestureHandler<T>> onTouchEvent(handler: T) {
572
592
  // triggers onTouchesDown, onTouchesMove, onTouchesUp, onTouchesCancelled callbacks on the JS side
573
-
593
+
574
594
  if (handler.tag < 0) {
575
595
  // root containers use negative tags, we don't need to dispatch events for them to the JS
576
596
  return
577
597
  }
578
- if (handler.state == GestureHandler.STATE_BEGAN || handler.state == GestureHandler.STATE_ACTIVE
579
- || handler.state == GestureHandler.STATE_UNDETERMINED || handler.view != null) {
598
+ if (handler.state == GestureHandler.STATE_BEGAN || handler.state == GestureHandler.STATE_ACTIVE ||
599
+ handler.state == GestureHandler.STATE_UNDETERMINED || handler.view != null
600
+ ) {
580
601
  if (handler.actionType == GestureHandler.ACTION_TYPE_REANIMATED_WORKLET) {
581
602
  // Reanimated worklet
582
603
  val event = RNGestureHandlerTouchEvent.obtain(handler)
@@ -3,8 +3,8 @@ package com.swmansion.gesturehandler.react
3
3
  import android.util.SparseArray
4
4
  import android.view.View
5
5
  import com.facebook.react.bridge.UiThreadUtil
6
- import com.swmansion.gesturehandler.GestureHandler
7
- import com.swmansion.gesturehandler.GestureHandlerRegistry
6
+ import com.swmansion.gesturehandler.core.GestureHandler
7
+ import com.swmansion.gesturehandler.core.GestureHandlerRegistry
8
8
  import java.util.*
9
9
 
10
10
  class RNGestureHandlerRegistry : GestureHandlerRegistry {
@@ -9,9 +9,8 @@ import com.facebook.react.bridge.ReactContext
9
9
  import com.facebook.react.bridge.UiThreadUtil
10
10
  import com.facebook.react.common.ReactConstants
11
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
12
+ import com.swmansion.gesturehandler.core.GestureHandler
13
+ import com.swmansion.gesturehandler.core.GestureHandlerOrchestrator
15
14
 
16
15
  class RNGestureHandlerRootHelper(private val context: ReactContext, wrappedView: ViewGroup) {
17
16
  private val orchestrator: GestureHandlerOrchestrator?
@@ -29,9 +28,11 @@ class RNGestureHandlerRootHelper(private val context: ReactContext, wrappedView:
29
28
  rootView = findRootViewTag(wrappedView)
30
29
  Log.i(
31
30
  ReactConstants.TAG,
32
- "[GESTURE HANDLER] Initialize gesture handler for root view $rootView")
31
+ "[GESTURE HANDLER] Initialize gesture handler for root view $rootView"
32
+ )
33
33
  orchestrator = GestureHandlerOrchestrator(
34
- wrappedView, registry, RNViewConfigurationHelper()).apply {
34
+ wrappedView, registry, RNViewConfigurationHelper()
35
+ ).apply {
35
36
  minimumAlphaForTraversal = MIN_ALPHA_FOR_TOUCH
36
37
  }
37
38
  jsGestureHandler = RootViewGestureHandler().apply { tag = -wrappedViewTag }
@@ -45,7 +46,8 @@ class RNGestureHandlerRootHelper(private val context: ReactContext, wrappedView:
45
46
  fun tearDown() {
46
47
  Log.i(
47
48
  ReactConstants.TAG,
48
- "[GESTURE HANDLER] Tearing down gesture handler registered for root view $rootView")
49
+ "[GESTURE HANDLER] Tearing down gesture handler registered for root view $rootView"
50
+ )
49
51
  val module = context.getNativeModule(RNGestureHandlerModule::class.java)!!
50
52
  with(module) {
51
53
  registry.dropHandler(jsGestureHandler!!.tag)
@@ -4,12 +4,10 @@ import android.content.Context
4
4
  import android.util.Log
5
5
  import android.view.MotionEvent
6
6
  import android.view.ViewGroup
7
- import android.view.ViewParent
8
7
  import com.facebook.react.bridge.ReactContext
9
8
  import com.facebook.react.bridge.UiThreadUtil
10
9
  import com.facebook.react.common.ReactConstants
11
10
  import com.facebook.react.uimanager.RootView
12
- import com.facebook.react.views.modal.ReactModalHostView
13
11
  import com.facebook.react.views.view.ReactViewGroup
14
12
 
15
13
  class RNGestureHandlerRootView(context: Context?) : ReactViewGroup(context) {
@@ -13,7 +13,8 @@ import com.facebook.react.viewmanagers.RNGestureHandlerRootViewManagerInterface
13
13
  * to be provided.
14
14
  */
15
15
  @ReactModule(name = RNGestureHandlerRootViewManager.REACT_CLASS)
16
- class RNGestureHandlerRootViewManager : ViewGroupManager<RNGestureHandlerRootView>(),
16
+ class RNGestureHandlerRootViewManager :
17
+ ViewGroupManager<RNGestureHandlerRootView>(),
17
18
  RNGestureHandlerRootViewManagerInterface<RNGestureHandlerRootView> {
18
19
  private val mDelegate: ViewManagerDelegate<RNGestureHandlerRootView>
19
20
 
@@ -41,7 +42,8 @@ class RNGestureHandlerRootViewManager : ViewGroupManager<RNGestureHandlerRootVie
41
42
  RNGestureHandlerEvent.EVENT_NAME to
42
43
  mutableMapOf("registrationName" to RNGestureHandlerEvent.EVENT_NAME),
43
44
  RNGestureHandlerStateChangeEvent.EVENT_NAME to
44
- mutableMapOf("registrationName" to RNGestureHandlerStateChangeEvent.EVENT_NAME))
45
+ mutableMapOf("registrationName" to RNGestureHandlerStateChangeEvent.EVENT_NAME)
46
+ )
45
47
 
46
48
  companion object {
47
49
  const val REACT_CLASS = "RNGestureHandlerRootView"
@@ -11,7 +11,7 @@ import com.facebook.react.bridge.Arguments
11
11
  import com.facebook.react.bridge.WritableMap
12
12
  import com.facebook.react.uimanager.events.Event
13
13
  import com.facebook.react.uimanager.events.RCTEventEmitter
14
- import com.swmansion.gesturehandler.GestureHandler
14
+ import com.swmansion.gesturehandler.core.GestureHandler
15
15
 
16
16
  class RNGestureHandlerStateChangeEvent private constructor() : Event<RNGestureHandlerStateChangeEvent>() {
17
17
  private var extraData: WritableMap? = null
@@ -57,16 +57,16 @@ class RNGestureHandlerStateChangeEvent private constructor() : Event<RNGestureHa
57
57
  init(handler, newState, oldState, dataExtractor)
58
58
  }
59
59
 
60
- fun <T: GestureHandler<T>> createEventData(
60
+ fun <T : GestureHandler<T>> createEventData(
61
61
  handler: T,
62
62
  dataExtractor: RNGestureHandlerEventDataExtractor<T>?,
63
63
  newState: Int,
64
64
  oldState: Int,
65
65
  ): WritableMap = Arguments.createMap().apply {
66
- dataExtractor?.extractEventData(handler, this)
67
- putInt("handlerTag", handler.tag)
68
- putInt("state", newState)
69
- putInt("oldState", oldState)
70
- }
66
+ dataExtractor?.extractEventData(handler, this)
67
+ putInt("handlerTag", handler.tag)
68
+ putInt("state", newState)
69
+ putInt("oldState", oldState)
70
+ }
71
71
  }
72
72
  }
@@ -5,7 +5,7 @@ import com.facebook.react.bridge.Arguments
5
5
  import com.facebook.react.bridge.WritableMap
6
6
  import com.facebook.react.uimanager.events.Event
7
7
  import com.facebook.react.uimanager.events.RCTEventEmitter
8
- import com.swmansion.gesturehandler.GestureHandler
8
+ import com.swmansion.gesturehandler.core.GestureHandler
9
9
 
10
10
  class RNGestureHandlerTouchEvent private constructor() : Event<RNGestureHandlerTouchEvent>() {
11
11
  private var extraData: WritableMap? = null
@@ -43,11 +43,11 @@ class RNGestureHandlerTouchEvent private constructor() : Event<RNGestureHandlerT
43
43
  private val EVENTS_POOL = Pools.SynchronizedPool<RNGestureHandlerTouchEvent>(TOUCH_EVENTS_POOL_SIZE)
44
44
 
45
45
  fun <T : GestureHandler<T>> obtain(handler: T): RNGestureHandlerTouchEvent =
46
- (EVENTS_POOL.acquire() ?: RNGestureHandlerTouchEvent()).apply {
47
- init(handler)
48
- }
46
+ (EVENTS_POOL.acquire() ?: RNGestureHandlerTouchEvent()).apply {
47
+ init(handler)
48
+ }
49
49
 
50
- fun <T: GestureHandler<T>> createEventData(handler: T,): WritableMap = Arguments.createMap().apply {
50
+ fun <T : GestureHandler<T>> createEventData(handler: T,): WritableMap = Arguments.createMap().apply {
51
51
  putInt("handlerTag", handler.tag)
52
52
  putInt("state", handler.state)
53
53
  putInt("numberOfTouches", handler.trackedPointersCount)
@@ -5,8 +5,8 @@ import android.view.ViewGroup
5
5
  import com.facebook.react.uimanager.PointerEvents
6
6
  import com.facebook.react.uimanager.ReactPointerEventsView
7
7
  import com.facebook.react.views.view.ReactViewGroup
8
- import com.swmansion.gesturehandler.PointerEventsConfig
9
- import com.swmansion.gesturehandler.ViewConfigurationHelper
8
+ import com.swmansion.gesturehandler.core.PointerEventsConfig
9
+ import com.swmansion.gesturehandler.core.ViewConfigurationHelper
10
10
 
11
11
  class RNViewConfigurationHelper : ViewConfigurationHelper {
12
12
  override fun getPointerEventsConfigForView(view: View): PointerEventsConfig {
@@ -5,9 +5,9 @@ import com.facebook.react.uimanager.UIManagerModule
5
5
  import com.facebook.react.uimanager.events.Event
6
6
 
7
7
  fun ReactContext.dispatchEvent(event: Event<*>) {
8
- try {
9
- this.getNativeModule(UIManagerModule::class.java)!!.eventDispatcher.dispatchEvent(event)
10
- } catch (e: NullPointerException) {
11
- throw Exception("Couldn't get an instance of UIManagerModule. Gesture Handler is unable to send an event.", e)
12
- }
8
+ try {
9
+ this.getNativeModule(UIManagerModule::class.java)!!.eventDispatcher.dispatchEvent(event)
10
+ } catch (e: NullPointerException) {
11
+ throw Exception("Couldn't get an instance of UIManagerModule. Gesture Handler is unable to send an event.", e)
12
+ }
13
13
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  @interface RNManualRecognizer : UIGestureRecognizer
4
4
 
5
- - (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler;
5
+ - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler;
6
6
 
7
7
  @end
8
8
 
@@ -24,7 +24,7 @@
24
24
  {
25
25
  [super touchesBegan:touches withEvent:event];
26
26
  [_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
27
-
27
+
28
28
  if (_shouldSendBeginEvent) {
29
29
  [_gestureHandler handleGesture:self];
30
30
  _shouldSendBeginEvent = NO;
@@ -35,6 +35,14 @@
35
35
  {
36
36
  [super touchesMoved:touches withEvent:event];
37
37
  [_gestureHandler.pointerTracker touchesMoved:touches withEvent:event];
38
+
39
+ if ([self shouldFail]) {
40
+ self.state = (self.state == UIGestureRecognizerStatePossible)
41
+ ? UIGestureRecognizerStateFailed
42
+ : UIGestureRecognizerStateCancelled;
43
+
44
+ [self reset];
45
+ }
38
46
  }
39
47
 
40
48
  - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
@@ -53,21 +61,29 @@
53
61
  {
54
62
  [_gestureHandler.pointerTracker reset];
55
63
  [super reset];
56
-
64
+
57
65
  _shouldSendBeginEvent = YES;
58
66
  }
59
67
 
68
+ - (BOOL)shouldFail
69
+ {
70
+ if (_gestureHandler.shouldCancelWhenOutside && ![_gestureHandler containsPointInView]) {
71
+ return YES;
72
+ } else {
73
+ return NO;
74
+ }
75
+ }
76
+
60
77
  @end
61
78
 
62
79
  @implementation RNManualGestureHandler
63
80
 
64
81
  - (instancetype)initWithTag:(NSNumber *)tag
65
82
  {
66
- if ((self = [super initWithTag:tag])) {
67
- _recognizer = [[RNManualRecognizer alloc] initWithGestureHandler:self];
68
-
69
- }
70
- return self;
83
+ if ((self = [super initWithTag:tag])) {
84
+ _recognizer = [[RNManualRecognizer alloc] initWithGestureHandler:self];
85
+ }
86
+ return self;
71
87
  }
72
88
 
73
89
  @end
@@ -17,9 +17,8 @@ using namespace facebook::react;
17
17
  @interface RNGestureHandlerButtonComponentView () <RCTRNGestureHandlerButtonViewProtocol>
18
18
  @end
19
19
 
20
- @implementation RNGestureHandlerButtonComponentView
21
- {
22
- RNGestureHandlerButton *_buttonView;
20
+ @implementation RNGestureHandlerButtonComponentView {
21
+ RNGestureHandlerButton *_buttonView;
23
22
  }
24
23
 
25
24
  - (instancetype)initWithFrame:(CGRect)frame
@@ -28,7 +27,7 @@ using namespace facebook::react;
28
27
  static const auto defaultProps = std::make_shared<const RNGestureHandlerButtonProps>();
29
28
  _props = defaultProps;
30
29
  _buttonView = [[RNGestureHandlerButton alloc] initWithFrame:self.bounds];
31
-
30
+
32
31
  self.contentView = _buttonView;
33
32
  }
34
33
 
@@ -44,12 +43,12 @@ using namespace facebook::react;
44
43
 
45
44
  - (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared &)oldProps
46
45
  {
47
- const auto &newProps = *std::static_pointer_cast<const RNGestureHandlerButtonProps>(props);
46
+ const auto &newProps = *std::static_pointer_cast<const RNGestureHandlerButtonProps>(props);
48
47
 
49
- _buttonView.userEnabled = newProps.enabled;
50
- _buttonView.exclusiveTouch = newProps.exclusive;
48
+ _buttonView.userEnabled = newProps.enabled;
49
+ _buttonView.exclusiveTouch = newProps.exclusive;
51
50
 
52
- [super updateProps:props oldProps:oldProps];
51
+ [super updateProps:props oldProps:oldProps];
53
52
  }
54
53
  @end
55
54