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
@@ -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)!!