react-native-gesture-handler 2.7.1 → 2.8.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.
Files changed (173) 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 +17 -10
  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/jestUtils/jestUtils.js.map +1 -1
  61. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  62. package/lib/commonjs/web/handlers/FlingGestureHandler.js +0 -1
  63. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  64. package/lib/commonjs/web/handlers/GestureHandler.js +28 -3
  65. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  66. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +0 -1
  67. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  68. package/lib/commonjs/web/handlers/ManualGestureHandler.js +15 -0
  69. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
  70. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -2
  71. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  72. package/lib/commonjs/web/handlers/PanGestureHandler.js +0 -5
  73. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  74. package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -1
  75. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  76. package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -1
  77. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  78. package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -1
  79. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  80. package/lib/commonjs/web/interfaces.js.map +1 -1
  81. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  82. package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
  83. package/lib/commonjs/web_hammer/NodeManager.js +4 -1
  84. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
  85. package/lib/commonjs/web_hammer/PanGestureHandler.js +25 -6
  86. package/lib/commonjs/web_hammer/PanGestureHandler.js.map +1 -1
  87. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  88. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  89. package/lib/module/RNGestureHandlerModule.windows.js +117 -0
  90. package/lib/module/RNGestureHandlerModule.windows.js.map +1 -0
  91. package/lib/module/components/DrawerLayout.js +1 -0
  92. package/lib/module/components/DrawerLayout.js.map +1 -1
  93. package/lib/module/components/Swipeable.js.map +1 -1
  94. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  95. package/lib/module/getShadowNodeFromRef.js +2 -2
  96. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  97. package/lib/module/handlers/createHandler.js.map +1 -1
  98. package/lib/module/handlers/gestureHandlerCommon.js +5 -2
  99. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  100. package/lib/module/handlers/gestureHandlerTypesCompat.js +1 -1
  101. package/lib/module/handlers/gestures/GestureDetector.js +17 -10
  102. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  103. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  104. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  105. package/lib/module/jestUtils/jestUtils.js.map +1 -1
  106. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  107. package/lib/module/web/handlers/FlingGestureHandler.js +0 -1
  108. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  109. package/lib/module/web/handlers/GestureHandler.js +28 -3
  110. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  111. package/lib/module/web/handlers/LongPressGestureHandler.js +0 -1
  112. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  113. package/lib/module/web/handlers/ManualGestureHandler.js +15 -0
  114. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
  115. package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -2
  116. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  117. package/lib/module/web/handlers/PanGestureHandler.js +0 -5
  118. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  119. package/lib/module/web/handlers/PinchGestureHandler.js +0 -1
  120. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  121. package/lib/module/web/handlers/RotationGestureHandler.js +0 -1
  122. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  123. package/lib/module/web/handlers/TapGestureHandler.js +0 -1
  124. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  125. package/lib/module/web/interfaces.js.map +1 -1
  126. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  127. package/lib/module/web_hammer/GestureHandler.js.map +1 -1
  128. package/lib/module/web_hammer/NodeManager.js +4 -1
  129. package/lib/module/web_hammer/NodeManager.js.map +1 -1
  130. package/lib/module/web_hammer/PanGestureHandler.js +25 -6
  131. package/lib/module/web_hammer/PanGestureHandler.js.map +1 -1
  132. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +1 -1
  133. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  134. package/lib/typescript/RNGestureHandlerModule.windows.d.ts +48 -0
  135. package/lib/typescript/components/DrawerLayout.d.ts +7 -0
  136. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
  137. package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -1
  138. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -1
  139. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +3 -1
  140. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +3 -1
  141. package/lib/typescript/web/interfaces.d.ts +3 -1
  142. package/lib/typescript/web/tools/NodeManager.d.ts +2 -2
  143. package/package.json +14 -10
  144. package/src/RNGestureHandlerModule.macos.ts +2 -2
  145. package/src/RNGestureHandlerModule.web.ts +2 -2
  146. package/src/RNGestureHandlerModule.windows.ts +140 -0
  147. package/src/components/DrawerLayout.tsx +14 -8
  148. package/src/components/Swipeable.tsx +2 -4
  149. package/src/components/touchables/TouchableOpacity.tsx +1 -1
  150. package/src/getShadowNodeFromRef.ts +3 -3
  151. package/src/handlers/createHandler.tsx +13 -15
  152. package/src/handlers/gestureHandlerCommon.ts +9 -4
  153. package/src/handlers/gestureHandlerTypesCompat.ts +34 -17
  154. package/src/handlers/gestures/GestureDetector.tsx +36 -16
  155. package/src/handlers/gestures/eventReceiver.ts +2 -1
  156. package/src/handlers/gestures/gesture.ts +8 -12
  157. package/src/jestUtils/jestUtils.ts +3 -4
  158. package/src/web/detectors/RotationGestureDetector.ts +2 -1
  159. package/src/web/handlers/FlingGestureHandler.ts +2 -3
  160. package/src/web/handlers/GestureHandler.ts +30 -11
  161. package/src/web/handlers/LongPressGestureHandler.ts +0 -2
  162. package/src/web/handlers/ManualGestureHandler.ts +10 -1
  163. package/src/web/handlers/NativeViewGestureHandler.ts +0 -2
  164. package/src/web/handlers/PanGestureHandler.ts +0 -6
  165. package/src/web/handlers/PinchGestureHandler.ts +0 -2
  166. package/src/web/handlers/RotationGestureHandler.ts +2 -5
  167. package/src/web/handlers/TapGestureHandler.ts +0 -2
  168. package/src/web/interfaces.ts +3 -0
  169. package/src/web/tools/InteractionManager.ts +2 -3
  170. package/src/web_hammer/GestureHandler.ts +6 -8
  171. package/src/web_hammer/NodeManager.ts +3 -1
  172. package/src/web_hammer/PanGestureHandler.ts +12 -6
  173. package/android/lib/build.gradle +0 -28
@@ -5,11 +5,17 @@ buildscript {
5
5
  def kotlin_version = rootProject.ext.has('kotlinVersion') ? rootProject.ext.get('kotlinVersion') : project.properties['RNGH_kotlinVersion']
6
6
 
7
7
  repositories {
8
+ maven {
9
+ url "https://plugins.gradle.org/m2/"
10
+ }
8
11
  mavenCentral()
12
+ google()
9
13
  }
10
14
 
11
15
  dependencies {
12
16
  classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")
17
+ classpath("com.android.tools.build:gradle:7.2.1")
18
+ classpath("com.diffplug.spotless:spotless-plugin-gradle:6.7.2")
13
19
  }
14
20
  }
15
21
 
@@ -48,6 +54,10 @@ if (isNewArchitectureEnabled()) {
48
54
  apply plugin: 'com.android.library'
49
55
  apply plugin: 'kotlin-android'
50
56
 
57
+ if (project == rootProject) {
58
+ apply from: "spotless.gradle"
59
+ }
60
+
51
61
  def safeExtGet(prop, fallback) {
52
62
  rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
53
63
  }
@@ -162,13 +172,8 @@ android {
162
172
  exclude "**/libreact_render*.so"
163
173
  }
164
174
 
165
- // Include "lib/" as sources, unfortunately react-native link can't handle
166
- // setting up alternative gradle modules. We still have "lib" defined as a
167
- // standalone gradle module just to be used in AndroidNativeExample
168
175
  sourceSets.main {
169
176
  java {
170
- srcDirs += 'lib/src/main/java'
171
-
172
177
  // Include "common/" only when it's not provided by Reanimated to mitigate
173
178
  // multiple definitions of the same class preventing build
174
179
  if (shouldUseCommonInterfaceFromReanimated()) {
@@ -4,7 +4,7 @@ import com.facebook.react.bridge.ReactContext
4
4
  import com.facebook.react.uimanager.events.Event
5
5
 
6
6
  class ReanimatedEventDispatcher {
7
- fun <T : Event<T>>sendEvent(event: T, reactApplicationContext: ReactContext) {
8
- // no-op
9
- }
7
+ fun <T : Event<T>>sendEvent(event: T, reactApplicationContext: ReactContext) {
8
+ // no-op
9
+ }
10
10
  }
@@ -5,13 +5,13 @@ import com.facebook.react.uimanager.events.Event
5
5
  import com.swmansion.reanimated.ReanimatedModule
6
6
 
7
7
  class ReanimatedEventDispatcher {
8
- private var reanimatedModule: ReanimatedModule? = null
8
+ private var reanimatedModule: ReanimatedModule? = null
9
9
 
10
- fun <T : Event<T>>sendEvent(event: T, reactApplicationContext: ReactContext) {
11
- if (reanimatedModule == null) {
12
- reanimatedModule = reactApplicationContext.getNativeModule(ReanimatedModule::class.java)
13
- }
14
-
15
- reanimatedModule?.nodesManager?.onEventDispatch(event)
10
+ fun <T : Event<T>>sendEvent(event: T, reactApplicationContext: ReactContext) {
11
+ if (reanimatedModule == null) {
12
+ reanimatedModule = reactApplicationContext.getNativeModule(ReanimatedModule::class.java)
16
13
  }
14
+
15
+ reanimatedModule?.nodesManager?.onEventDispatch(event)
16
+ }
17
17
  }
@@ -7,6 +7,6 @@ import com.facebook.react.uimanager.common.UIManagerType
7
7
  import com.facebook.react.uimanager.events.Event
8
8
 
9
9
  fun ReactContext.dispatchEvent(event: Event<*>) {
10
- val fabricUIManager = UIManagerHelper.getUIManager(this, UIManagerType.FABRIC) as FabricUIManager
11
- fabricUIManager.eventDispatcher.dispatchEvent(event)
10
+ val fabricUIManager = UIManagerHelper.getUIManager(this, UIManagerType.FABRIC) as FabricUIManager
11
+ fabricUIManager.eventDispatcher.dispatchEvent(event)
12
12
  }
@@ -4,10 +4,9 @@ import com.facebook.react.ReactPackage
4
4
  import com.facebook.react.bridge.NativeModule
5
5
  import com.facebook.react.bridge.ReactApplicationContext
6
6
  import com.facebook.react.uimanager.ViewManager
7
- import com.swmansion.gesturehandler.BuildConfig
7
+ import com.swmansion.gesturehandler.react.RNGestureHandlerButtonViewManager
8
8
  import com.swmansion.gesturehandler.react.RNGestureHandlerModule
9
9
  import com.swmansion.gesturehandler.react.RNGestureHandlerRootViewManager
10
- import com.swmansion.gesturehandler.react.RNGestureHandlerButtonViewManager
11
10
 
12
11
  class RNGestureHandlerPackage : ReactPackage {
13
12
  override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
@@ -17,5 +16,6 @@ class RNGestureHandlerPackage : ReactPackage {
17
16
  override fun createViewManagers(reactContext: ReactApplicationContext) =
18
17
  listOf<ViewManager<*, *>>(
19
18
  RNGestureHandlerRootViewManager(),
20
- RNGestureHandlerButtonViewManager())
19
+ RNGestureHandlerButtonViewManager()
20
+ )
21
21
  }
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.os.Handler
4
4
  import android.os.Looper
@@ -37,14 +37,17 @@ class FlingGestureHandler : GestureHandler<FlingGestureHandler>() {
37
37
 
38
38
  private fun tryEndFling(event: MotionEvent) = if (
39
39
  maxNumberOfPointersSimultaneously == numberOfPointersRequired &&
40
- (direction and DIRECTION_RIGHT != 0 &&
41
- event.rawX - startX > minAcceptableDelta ||
42
- direction and DIRECTION_LEFT != 0 &&
43
- startX - event.rawX > minAcceptableDelta ||
44
- direction and DIRECTION_UP != 0 &&
45
- startY - event.rawY > minAcceptableDelta ||
46
- direction and DIRECTION_DOWN != 0 &&
47
- event.rawY - startY > minAcceptableDelta)) {
40
+ (
41
+ direction and DIRECTION_RIGHT != 0 &&
42
+ event.rawX - startX > minAcceptableDelta ||
43
+ direction and DIRECTION_LEFT != 0 &&
44
+ startX - event.rawX > minAcceptableDelta ||
45
+ direction and DIRECTION_UP != 0 &&
46
+ startY - event.rawY > minAcceptableDelta ||
47
+ direction and DIRECTION_DOWN != 0 &&
48
+ event.rawY - startY > minAcceptableDelta
49
+ )
50
+ ) {
48
51
  handler!!.removeCallbacksAndMessages(null)
49
52
  activate()
50
53
  true
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.app.Activity
4
4
  import android.content.Context
@@ -14,6 +14,7 @@ import com.facebook.react.bridge.Arguments
14
14
  import com.facebook.react.bridge.UiThreadUtil
15
15
  import com.facebook.react.bridge.WritableArray
16
16
  import com.facebook.react.uimanager.PixelUtil
17
+ import com.swmansion.gesturehandler.BuildConfig
17
18
  import com.swmansion.gesturehandler.react.RNGestureHandlerTouchEvent
18
19
  import java.lang.IllegalStateException
19
20
  import java.util.*
@@ -48,7 +49,6 @@ open class GestureHandler<ConcreteGestureHandlerT : GestureHandler<ConcreteGestu
48
49
  private val trackedPointers: Array<PointerData?> = Array(MAX_POINTERS_COUNT) { null }
49
50
  var needsPointerData = false
50
51
 
51
-
52
52
  private var hitSlop: FloatArray? = null
53
53
  var eventCoalescingKey: Short = 0
54
54
  private set
@@ -127,11 +127,15 @@ open class GestureHandler<ConcreteGestureHandlerT : GestureHandler<ConcreteGestu
127
127
  }
128
128
 
129
129
  fun setManualActivation(manualActivation: Boolean): ConcreteGestureHandlerT =
130
- applySelf { this.manualActivation = manualActivation }
130
+ applySelf { this.manualActivation = manualActivation }
131
131
 
132
132
  fun setHitSlop(
133
- leftPad: Float, topPad: Float, rightPad: Float, bottomPad: Float,
134
- width: Float, height: Float,
133
+ leftPad: Float,
134
+ topPad: Float,
135
+ rightPad: Float,
136
+ bottomPad: Float,
137
+ width: Float,
138
+ height: Float,
135
139
  ): ConcreteGestureHandlerT = applySelf {
136
140
  if (hitSlop == null) {
137
141
  hitSlop = FloatArray(6)
@@ -278,7 +282,7 @@ open class GestureHandler<ConcreteGestureHandlerT : GestureHandler<ConcreteGestu
278
282
  }
279
283
 
280
284
  // introduced in 1.11.0, remove if crashes are not reported
281
- if(pointerProps.isEmpty()|| pointerCoords.isEmpty()){
285
+ if (pointerProps.isEmpty() || pointerCoords.isEmpty()) {
282
286
  throw IllegalStateException("pointerCoords.size=${pointerCoords.size}, pointerProps.size=${pointerProps.size}")
283
287
  }
284
288
 
@@ -289,8 +293,8 @@ open class GestureHandler<ConcreteGestureHandlerT : GestureHandler<ConcreteGestu
289
293
  event.eventTime,
290
294
  action,
291
295
  count,
292
- pointerProps, /* props are copied and hence it is safe to use static array here */
293
- pointerCoords, /* same applies to coords */
296
+ pointerProps, /* props are copied and hence it is safe to use static array here */
297
+ pointerCoords, /* same applies to coords */
294
298
  event.metaState,
295
299
  event.buttonState,
296
300
  event.xPrecision,
@@ -313,7 +317,8 @@ open class GestureHandler<ConcreteGestureHandlerT : GestureHandler<ConcreteGestu
313
317
  handler: GestureHandler<*>,
314
318
  event: MotionEvent,
315
319
  e: IllegalArgumentException
316
- ) : Exception("""
320
+ ) : Exception(
321
+ """
317
322
  handler: ${handler::class.simpleName}
318
323
  state: ${handler.state}
319
324
  view: ${handler.view}
@@ -324,14 +329,17 @@ open class GestureHandler<ConcreteGestureHandlerT : GestureHandler<ConcreteGestu
324
329
  trackedPointersCount: ${handler.trackedPointersIDsCount}
325
330
  trackedPointers: ${handler.trackedPointerIDs.joinToString(separator = ", ")}
326
331
  while handling event: $event
327
- """.trimIndent(), e) {}
332
+ """.trimIndent(),
333
+ e
334
+ )
328
335
 
329
336
  fun handle(transformedEvent: MotionEvent, sourceEvent: MotionEvent) {
330
- if (!isEnabled
331
- || state == STATE_CANCELLED
332
- || state == STATE_FAILED
333
- || state == STATE_END
334
- || trackedPointersIDsCount < 1) {
337
+ if (!isEnabled ||
338
+ state == STATE_CANCELLED ||
339
+ state == STATE_FAILED ||
340
+ state == STATE_END ||
341
+ trackedPointersIDsCount < 1
342
+ ) {
335
343
  return
336
344
  }
337
345
 
@@ -380,11 +388,11 @@ open class GestureHandler<ConcreteGestureHandlerT : GestureHandler<ConcreteGestu
380
388
  val offsetY = event.rawY - event.y
381
389
 
382
390
  trackedPointers[pointerId] = PointerData(
383
- pointerId,
384
- event.getX(event.actionIndex),
385
- event.getY(event.actionIndex),
386
- event.getX(event.actionIndex) + offsetX - windowOffset[0],
387
- event.getY(event.actionIndex) + offsetY - windowOffset[1],
391
+ pointerId,
392
+ event.getX(event.actionIndex),
393
+ event.getY(event.actionIndex),
394
+ event.getX(event.actionIndex) + offsetX - windowOffset[0],
395
+ event.getY(event.actionIndex) + offsetY - windowOffset[1],
388
396
  )
389
397
  trackedPointersCount++
390
398
  addChangedPointer(trackedPointers[pointerId]!!)
@@ -402,11 +410,11 @@ open class GestureHandler<ConcreteGestureHandlerT : GestureHandler<ConcreteGestu
402
410
  val offsetY = event.rawY - event.y
403
411
 
404
412
  trackedPointers[pointerId] = PointerData(
405
- pointerId,
406
- event.getX(event.actionIndex),
407
- event.getY(event.actionIndex),
408
- event.getX(event.actionIndex) + offsetX - windowOffset[0],
409
- event.getY(event.actionIndex) + offsetY - windowOffset[1],
413
+ pointerId,
414
+ event.getX(event.actionIndex),
415
+ event.getY(event.actionIndex),
416
+ event.getX(event.actionIndex) + offsetX - windowOffset[0],
417
+ event.getY(event.actionIndex) + offsetY - windowOffset[1],
410
418
  )
411
419
  addChangedPointer(trackedPointers[pointerId]!!)
412
420
  trackedPointers[pointerId] = null
@@ -545,11 +553,11 @@ open class GestureHandler<ConcreteGestureHandlerT : GestureHandler<ConcreteGestu
545
553
  }
546
554
 
547
555
  fun wantEvents(): Boolean {
548
- return isEnabled
549
- && state != STATE_FAILED
550
- && state != STATE_CANCELLED
551
- && state != STATE_END
552
- && trackedPointersIDsCount > 0
556
+ return isEnabled &&
557
+ state != STATE_FAILED &&
558
+ state != STATE_CANCELLED &&
559
+ state != STATE_END &&
560
+ trackedPointersIDsCount > 0
553
561
  }
554
562
 
555
563
  open fun shouldRequireToWaitForFailure(handler: GestureHandler<*>): Boolean {
@@ -745,7 +753,7 @@ open class GestureHandler<ConcreteGestureHandlerT : GestureHandler<ConcreteGestu
745
753
  private lateinit var pointerCoords: Array<PointerCoords?>
746
754
  private fun initPointerProps(size: Int) {
747
755
  var size = size
748
- if (!::pointerProps.isInitialized) {
756
+ if (!Companion::pointerProps.isInitialized) {
749
757
  pointerProps = arrayOfNulls(MAX_POINTERS_COUNT)
750
758
  pointerCoords = arrayOfNulls(MAX_POINTERS_COUNT)
751
759
  }
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  interface GestureHandlerInteractionController {
4
4
  fun shouldWaitForHandlerFailure(handler: GestureHandler<*>, otherHandler: GestureHandler<*>): Boolean
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.graphics.Matrix
4
4
  import android.graphics.PointF
@@ -134,7 +134,10 @@ class GestureHandlerOrchestrator(
134
134
  // their state is set to END and when the gesture they are waiting for activates they
135
135
  // should be cancelled, however `cancel` was never sent as gestures were already in the END state.
136
136
  // Send synthetic BEGAN -> CANCELLED to properly handle JS logic
137
- otherHandler.dispatchStateChange(GestureHandler.STATE_CANCELLED, GestureHandler.STATE_BEGAN)
137
+ otherHandler.dispatchStateChange(
138
+ GestureHandler.STATE_CANCELLED,
139
+ GestureHandler.STATE_BEGAN
140
+ )
138
141
  }
139
142
  otherHandler.isAwaiting = false
140
143
  } else {
@@ -253,10 +256,10 @@ class GestureHandlerOrchestrator(
253
256
 
254
257
  val action = sourceEvent.actionMasked
255
258
  val event = transformEventToViewCoords(handler.view, MotionEvent.obtain(sourceEvent))
256
-
259
+
257
260
  // Touch events are sent before the handler itself has a chance to process them,
258
261
  // mainly because `onTouchesUp` shoul be send befor gesture finishes. This means that
259
- // the first `onTouchesDown` event is sent before a gesture begins, activation in
262
+ // the first `onTouchesDown` event is sent before a gesture begins, activation in
260
263
  // callback for this event causes problems because the handler doesn't have a chance
261
264
  // to initialize itself with starting values of pointer (in pan this causes translation
262
265
  // to be equal to the coordinates of the pointer). The simplest solution is to send
@@ -475,9 +478,10 @@ class GestureHandlerOrchestrator(
475
478
 
476
479
  // if the pointer is inside the view but it overflows its parent, handlers attached to the parent
477
480
  // might not have been extracted (pointer might be in a child, but may be outside parent)
478
- if (coords[0] in 0f..view.width.toFloat() && coords[1] in 0f..view.height.toFloat()
479
- && isViewOverflowingParent(view) && extractAncestorHandlers(view, coords, pointerId)) {
480
- found = true
481
+ if (coords[0] in 0f..view.width.toFloat() && coords[1] in 0f..view.height.toFloat() &&
482
+ isViewOverflowingParent(view) && extractAncestorHandlers(view, coords, pointerId)
483
+ ) {
484
+ found = true
481
485
  }
482
486
 
483
487
  return found
@@ -527,8 +531,10 @@ class GestureHandlerOrchestrator(
527
531
  }
528
532
  PointerEventsConfig.BOX_ONLY -> {
529
533
  // This view is the target, its children don't matter
530
- (recordViewHandlersForPointer(view, coords, pointerId)
531
- || shouldHandlerlessViewBecomeTouchTarget(view, coords))
534
+ (
535
+ recordViewHandlersForPointer(view, coords, pointerId) ||
536
+ shouldHandlerlessViewBecomeTouchTarget(view, coords)
537
+ )
532
538
  }
533
539
  PointerEventsConfig.BOX_NONE -> {
534
540
  // This view can't be the target, but its children might
@@ -557,8 +563,10 @@ class GestureHandlerOrchestrator(
557
563
  extractGestureHandlers(view, coords, pointerId)
558
564
  } else false
559
565
 
560
- (recordViewHandlersForPointer(view, coords, pointerId)
561
- || found || shouldHandlerlessViewBecomeTouchTarget(view, coords))
566
+ (
567
+ recordViewHandlersForPointer(view, coords, pointerId) ||
568
+ found || shouldHandlerlessViewBecomeTouchTarget(view, coords)
569
+ )
562
570
  }
563
571
  }
564
572
 
@@ -570,7 +578,6 @@ class GestureHandlerOrchestrator(
570
578
  private fun isClipping(view: View) =
571
579
  view !is ViewGroup || viewConfigHelper.isViewClippingChildren(view)
572
580
 
573
-
574
581
  companion object {
575
582
  // The limit doesn't necessarily need to exists, it was just simpler to implement it that way
576
583
  // it is also more allocation-wise efficient to have a fixed limit
@@ -637,14 +644,15 @@ class GestureHandlerOrchestrator(
637
644
  x in 0f..child.width.toFloat() && y in 0f..child.height.toFloat()
638
645
 
639
646
  private fun shouldHandlerWaitForOther(handler: GestureHandler<*>, other: GestureHandler<*>): Boolean {
640
- return handler !== other && (handler.shouldWaitForHandlerFailure(other)
641
- || other.shouldRequireToWaitForFailure(handler))
647
+ return handler !== other && (
648
+ handler.shouldWaitForHandlerFailure(other) ||
649
+ other.shouldRequireToWaitForFailure(handler)
650
+ )
642
651
  }
643
652
 
644
653
  private fun canRunSimultaneously(a: GestureHandler<*>, b: GestureHandler<*>) =
645
654
  a === b || a.shouldRecognizeSimultaneously(b) || b.shouldRecognizeSimultaneously(a)
646
655
 
647
-
648
656
  private fun shouldHandlerBeCancelledBy(handler: GestureHandler<*>, other: GestureHandler<*>): Boolean {
649
657
  if (!handler.hasCommonPointers(other)) {
650
658
  // if two handlers share no common pointer one can never trigger cancel for the other
@@ -656,7 +664,8 @@ class GestureHandlerOrchestrator(
656
664
  return false
657
665
  }
658
666
  return if (handler !== other &&
659
- (handler.isAwaiting || handler.state == GestureHandler.STATE_ACTIVE)) {
667
+ (handler.isAwaiting || handler.state == GestureHandler.STATE_ACTIVE)
668
+ ) {
660
669
  // in every other case as long as the handler is about to be activated or already in active
661
670
  // state, we delegate the decision to the implementation of GestureHandler#shouldBeCancelledBy
662
671
  handler.shouldBeCancelledBy(other)
@@ -664,8 +673,8 @@ class GestureHandlerOrchestrator(
664
673
  }
665
674
 
666
675
  private fun isFinished(state: Int) =
667
- state == GestureHandler.STATE_CANCELLED
668
- || state == GestureHandler.STATE_FAILED
669
- || state == GestureHandler.STATE_END
676
+ state == GestureHandler.STATE_CANCELLED ||
677
+ state == GestureHandler.STATE_FAILED ||
678
+ state == GestureHandler.STATE_END
670
679
  }
671
680
  }
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.view.View
4
4
  import java.util.*
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.view.MotionEvent
4
4
 
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.content.Context
4
4
  import android.os.Handler
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.view.MotionEvent
4
4
 
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.os.SystemClock
4
4
  import android.view.MotionEvent
@@ -114,7 +114,7 @@ class NativeViewGestureHandler : GestureHandler<NativeViewGestureHandler>() {
114
114
  override fun onCancel() {
115
115
  val time = SystemClock.uptimeMillis()
116
116
  val event = MotionEvent.obtain(time, time, MotionEvent.ACTION_CANCEL, 0f, 0f, 0).apply {
117
- action = MotionEvent.ACTION_CANCEL
117
+ action = MotionEvent.ACTION_CANCEL
118
118
  }
119
119
  view!!.onTouchEvent(event)
120
120
  }
@@ -172,8 +172,8 @@ class NativeViewGestureHandler : GestureHandler<NativeViewGestureHandler>() {
172
172
  }
173
173
 
174
174
  private class EditTextHook(
175
- private val handler: NativeViewGestureHandler,
176
- private val editText: ReactEditText
175
+ private val handler: NativeViewGestureHandler,
176
+ private val editText: ReactEditText
177
177
  ) : NativeViewGestureHandlerHook {
178
178
  private var startX = 0f
179
179
  private var startY = 0f
@@ -194,7 +194,7 @@ class NativeViewGestureHandler : GestureHandler<NativeViewGestureHandler>() {
194
194
  // of RNGestureHandlerRootHelper so no explicit type checks, but its tag is always negative
195
195
  // also if other handler is NativeViewGestureHandler then don't override the default implementation
196
196
  override fun shouldRecognizeSimultaneously(handler: GestureHandler<*>) =
197
- handler.tag > 0 && handler !is NativeViewGestureHandler
197
+ handler.tag > 0 && handler !is NativeViewGestureHandler
198
198
 
199
199
  override fun wantsToHandleEventBeforeActivation() = true
200
200
 
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.view.MotionEvent
4
4
 
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.content.Context
4
4
  import android.os.Handler
@@ -6,8 +6,8 @@ import android.os.Looper
6
6
  import android.view.MotionEvent
7
7
  import android.view.VelocityTracker
8
8
  import android.view.ViewConfiguration
9
- import com.swmansion.gesturehandler.GestureUtils.getLastPointerX
10
- import com.swmansion.gesturehandler.GestureUtils.getLastPointerY
9
+ import com.swmansion.gesturehandler.core.GestureUtils.getLastPointerX
10
+ import com.swmansion.gesturehandler.core.GestureUtils.getLastPointerY
11
11
 
12
12
  class PanGestureHandler(context: Context?) : GestureHandler<PanGestureHandler>() {
13
13
  var velocityX = 0f
@@ -173,12 +173,14 @@ class PanGestureHandler(context: Context?) : GestureHandler<PanGestureHandler>()
173
173
  }
174
174
  val vx = velocityX
175
175
  if (minVelocityX != MIN_VALUE_IGNORE &&
176
- (minVelocityX < 0 && vx <= minVelocityX || minVelocityX in 0.0f..vx)) {
176
+ (minVelocityX < 0 && vx <= minVelocityX || minVelocityX in 0.0f..vx)
177
+ ) {
177
178
  return true
178
179
  }
179
180
  val vy = velocityY
180
181
  if (minVelocityY != MIN_VALUE_IGNORE &&
181
- (minVelocityY < 0 && vx <= minVelocityY || minVelocityY in 0.0f..vx)) {
182
+ (minVelocityY < 0 && vx <= minVelocityY || minVelocityY in 0.0f..vx)
183
+ ) {
182
184
  return true
183
185
  }
184
186
  val velocitySq = vx * vx + vy * vy
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.graphics.PointF
4
4
  import android.view.MotionEvent
@@ -18,7 +18,8 @@ class PinchGestureHandler : GestureHandler<PinchGestureHandler>() {
18
18
  private var scaleGestureDetector: ScaleGestureDetector? = null
19
19
  private var startingSpan = 0f
20
20
  private var spanSlop = 0f
21
- private val gestureListener: ScaleGestureDetector.OnScaleGestureListener = object : ScaleGestureDetector.OnScaleGestureListener {
21
+ private val gestureListener: ScaleGestureDetector.OnScaleGestureListener = object :
22
+ ScaleGestureDetector.OnScaleGestureListener {
22
23
  override fun onScale(detector: ScaleGestureDetector): Boolean {
23
24
  val prevScaleFactor: Double = scale
24
25
  scale *= detector.scaleFactor.toDouble()
@@ -26,8 +27,9 @@ class PinchGestureHandler : GestureHandler<PinchGestureHandler>() {
26
27
  if (delta > 0) {
27
28
  velocity = (scale - prevScaleFactor) / delta
28
29
  }
29
- if (abs(startingSpan - detector.currentSpan) >= spanSlop
30
- && state == STATE_BEGAN) {
30
+ if (abs(startingSpan - detector.currentSpan) >= spanSlop &&
31
+ state == STATE_BEGAN
32
+ ) {
31
33
  activate()
32
34
  }
33
35
  return true
@@ -55,6 +57,11 @@ class PinchGestureHandler : GestureHandler<PinchGestureHandler>() {
55
57
  scaleGestureDetector = ScaleGestureDetector(context, gestureListener)
56
58
  val configuration = ViewConfiguration.get(context)
57
59
  spanSlop = configuration.scaledTouchSlop.toFloat()
60
+
61
+ // set the focal point to the position of the first pointer as NaN causes the event not to arrive
62
+ this.focalPointX = event.x
63
+ this.focalPointY = event.y
64
+
58
65
  begin()
59
66
  }
60
67
  scaleGestureDetector?.onTouchEvent(sourceEvent)
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  enum class PointerEventsConfig {
4
4
  /**
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.view.MotionEvent
4
4
  import kotlin.math.atan2
@@ -1,8 +1,8 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.graphics.PointF
4
4
  import android.view.MotionEvent
5
- import com.swmansion.gesturehandler.RotationGestureDetector.OnRotationGestureListener
5
+ import com.swmansion.gesturehandler.core.RotationGestureDetector.OnRotationGestureListener
6
6
  import kotlin.math.abs
7
7
 
8
8
  class RotationGestureHandler : GestureHandler<RotationGestureHandler>() {
@@ -45,6 +45,11 @@ class RotationGestureHandler : GestureHandler<RotationGestureHandler>() {
45
45
  if (state == STATE_UNDETERMINED) {
46
46
  resetProgress()
47
47
  rotationGestureDetector = RotationGestureDetector(gestureListener)
48
+
49
+ // set the anchor to the position of the first pointer as NaN causes the event not to arrive
50
+ this.anchorX = event.x
51
+ this.anchorY = event.y
52
+
48
53
  begin()
49
54
  }
50
55
  rotationGestureDetector?.onTouchEvent(sourceEvent)
@@ -5,7 +5,7 @@
5
5
  * Modified line 189 to set initial min span to 0 instead of copying it from the system configuration
6
6
  */
7
7
 
8
- package com.swmansion.gesturehandler;
8
+ package com.swmansion.gesturehandler.core;
9
9
 
10
10
  import android.content.Context;
11
11
  import android.os.Build;
@@ -1,10 +1,10 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.os.Handler
4
4
  import android.os.Looper
5
5
  import android.view.MotionEvent
6
- import com.swmansion.gesturehandler.GestureUtils.getLastPointerX
7
- import com.swmansion.gesturehandler.GestureUtils.getLastPointerY
6
+ import com.swmansion.gesturehandler.core.GestureUtils.getLastPointerX
7
+ import com.swmansion.gesturehandler.core.GestureUtils.getLastPointerY
8
8
  import kotlin.math.abs
9
9
 
10
10
  class TapGestureHandler : GestureHandler<TapGestureHandler>() {
@@ -1,4 +1,4 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.core
2
2
 
3
3
  import android.view.View
4
4
  import android.view.ViewGroup
@@ -1,11 +1,11 @@
1
- package com.swmansion.gesturehandler
1
+ package com.swmansion.gesturehandler.react
2
2
 
3
3
  import com.facebook.react.bridge.ReactContext
4
4
  import com.facebook.react.modules.core.DeviceEventManagerModule
5
5
  import com.facebook.react.uimanager.UIManagerModule
6
6
 
7
7
  val ReactContext.deviceEventEmitter: DeviceEventManagerModule.RCTDeviceEventEmitter
8
- get() = this.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
8
+ get() = this.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
9
9
 
10
10
  val ReactContext.UIManager: UIManagerModule
11
- get() = this.getNativeModule(UIManagerModule::class.java)!!
11
+ get() = this.getNativeModule(UIManagerModule::class.java)!!