react-native-gesture-handler 2.22.0-rc.1 → 2.22.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,85 @@
1
+ package com.swmansion.gesturehandler
2
+
3
+ import com.facebook.react.BaseReactPackage
4
+ import com.facebook.react.ViewManagerOnDemandReactPackage
5
+ import com.facebook.react.bridge.ModuleSpec
6
+ import com.facebook.react.bridge.NativeModule
7
+ import com.facebook.react.bridge.ReactApplicationContext
8
+ import com.facebook.react.module.annotations.ReactModule
9
+ import com.facebook.react.module.annotations.ReactModuleList
10
+ import com.facebook.react.module.model.ReactModuleInfo
11
+ import com.facebook.react.module.model.ReactModuleInfoProvider
12
+ import com.facebook.react.uimanager.ViewManager
13
+ import com.swmansion.gesturehandler.react.RNGestureHandlerButtonViewManager
14
+ import com.swmansion.gesturehandler.react.RNGestureHandlerModule
15
+ import com.swmansion.gesturehandler.react.RNGestureHandlerRootViewManager
16
+
17
+ @ReactModuleList(
18
+ nativeModules = [
19
+ RNGestureHandlerModule::class
20
+ ]
21
+ )
22
+ class RNGestureHandlerPackage : BaseReactPackage(), ViewManagerOnDemandReactPackage {
23
+ private val viewManagers: Map<String, ModuleSpec> by lazy {
24
+ mapOf(
25
+ RNGestureHandlerRootViewManager.REACT_CLASS to ModuleSpec.viewManagerSpec {
26
+ RNGestureHandlerRootViewManager()
27
+ },
28
+ RNGestureHandlerButtonViewManager.REACT_CLASS to ModuleSpec.viewManagerSpec {
29
+ RNGestureHandlerButtonViewManager()
30
+ }
31
+ )
32
+ }
33
+
34
+ override fun createViewManagers(reactContext: ReactApplicationContext) =
35
+ listOf<ViewManager<*, *>>(
36
+ RNGestureHandlerRootViewManager(),
37
+ RNGestureHandlerButtonViewManager()
38
+ )
39
+
40
+ override fun getViewManagerNames(reactContext: ReactApplicationContext) =
41
+ viewManagers.keys.toList()
42
+
43
+ override fun getViewManagers(reactContext: ReactApplicationContext): MutableList<ModuleSpec> =
44
+ viewManagers.values.toMutableList()
45
+
46
+ override fun createViewManager(
47
+ reactContext: ReactApplicationContext,
48
+ viewManagerName: String
49
+ ) = viewManagers[viewManagerName]?.provider?.get() as? ViewManager<*, *>
50
+
51
+ override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
52
+ return if (name == RNGestureHandlerModule.NAME) {
53
+ RNGestureHandlerModule(reactContext)
54
+ } else {
55
+ null
56
+ }
57
+ }
58
+
59
+ override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
60
+ try {
61
+ val reactModuleInfoProviderClass =
62
+ Class.forName("com.swmansion.gesturehandler.RNGestureHandlerPackage$\$ReactModuleInfoProvider")
63
+ return reactModuleInfoProviderClass.getDeclaredConstructor().newInstance() as ReactModuleInfoProvider
64
+ } catch (e: ClassNotFoundException) {
65
+ return ReactModuleInfoProvider {
66
+ val reactModule: ReactModule = RNGestureHandlerModule::class.java.getAnnotation(ReactModule::class.java)!!
67
+
68
+ mutableMapOf(
69
+ RNGestureHandlerModule.NAME to ReactModuleInfo(
70
+ reactModule.name,
71
+ RNGestureHandlerModule::class.java.name,
72
+ reactModule.canOverrideExistingModule,
73
+ reactModule.needsEagerInit,
74
+ reactModule.isCxxModule,
75
+ true
76
+ )
77
+ )
78
+ }
79
+ } catch (e: InstantiationException) {
80
+ throw RuntimeException("No ReactModuleInfoProvider for RNGestureHandlerPackage$\$ReactModuleInfoProvider", e)
81
+ } catch (e: IllegalAccessException) {
82
+ throw RuntimeException("No ReactModuleInfoProvider for RNGestureHandlerPackage$\$ReactModuleInfoProvider", e)
83
+ }
84
+ }
85
+ }
@@ -0,0 +1,85 @@
1
+ package com.swmansion.gesturehandler
2
+
3
+ import com.facebook.react.BaseReactPackage
4
+ import com.facebook.react.ViewManagerOnDemandReactPackage
5
+ import com.facebook.react.bridge.ModuleSpec
6
+ import com.facebook.react.bridge.NativeModule
7
+ import com.facebook.react.bridge.ReactApplicationContext
8
+ import com.facebook.react.module.annotations.ReactModule
9
+ import com.facebook.react.module.annotations.ReactModuleList
10
+ import com.facebook.react.module.model.ReactModuleInfo
11
+ import com.facebook.react.module.model.ReactModuleInfoProvider
12
+ import com.facebook.react.uimanager.ViewManager
13
+ import com.swmansion.gesturehandler.react.RNGestureHandlerButtonViewManager
14
+ import com.swmansion.gesturehandler.react.RNGestureHandlerModule
15
+ import com.swmansion.gesturehandler.react.RNGestureHandlerRootViewManager
16
+
17
+ @ReactModuleList(
18
+ nativeModules = [
19
+ RNGestureHandlerModule::class
20
+ ]
21
+ )
22
+ class RNGestureHandlerPackage : BaseReactPackage(), ViewManagerOnDemandReactPackage {
23
+ private val viewManagers: Map<String, ModuleSpec> by lazy {
24
+ mapOf(
25
+ RNGestureHandlerRootViewManager.REACT_CLASS to ModuleSpec.viewManagerSpec {
26
+ RNGestureHandlerRootViewManager()
27
+ },
28
+ RNGestureHandlerButtonViewManager.REACT_CLASS to ModuleSpec.viewManagerSpec {
29
+ RNGestureHandlerButtonViewManager()
30
+ }
31
+ )
32
+ }
33
+
34
+ override fun createViewManagers(reactContext: ReactApplicationContext) =
35
+ listOf<ViewManager<*, *>>(
36
+ RNGestureHandlerRootViewManager(),
37
+ RNGestureHandlerButtonViewManager()
38
+ )
39
+
40
+ override fun getViewManagerNames(reactContext: ReactApplicationContext?) =
41
+ viewManagers.keys.toList()
42
+
43
+ override fun getViewManagers(reactContext: ReactApplicationContext?): MutableList<ModuleSpec> =
44
+ viewManagers.values.toMutableList()
45
+
46
+ override fun createViewManager(
47
+ reactContext: ReactApplicationContext?,
48
+ viewManagerName: String?
49
+ ) = viewManagers[viewManagerName]?.provider?.get() as? ViewManager<*, *>
50
+
51
+ override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
52
+ return if (name == RNGestureHandlerModule.NAME) {
53
+ RNGestureHandlerModule(reactContext)
54
+ } else {
55
+ null
56
+ }
57
+ }
58
+
59
+ override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
60
+ try {
61
+ val reactModuleInfoProviderClass =
62
+ Class.forName("com.swmansion.gesturehandler.RNGestureHandlerPackage$\$ReactModuleInfoProvider")
63
+ return reactModuleInfoProviderClass.getDeclaredConstructor().newInstance() as ReactModuleInfoProvider
64
+ } catch (e: ClassNotFoundException) {
65
+ return ReactModuleInfoProvider {
66
+ val reactModule: ReactModule = RNGestureHandlerModule::class.java.getAnnotation(ReactModule::class.java)!!
67
+
68
+ mutableMapOf(
69
+ RNGestureHandlerModule.NAME to ReactModuleInfo(
70
+ reactModule.name,
71
+ RNGestureHandlerModule::class.java.name,
72
+ reactModule.canOverrideExistingModule,
73
+ reactModule.needsEagerInit,
74
+ reactModule.isCxxModule,
75
+ true
76
+ )
77
+ )
78
+ }
79
+ } catch (e: InstantiationException) {
80
+ throw RuntimeException("No ReactModuleInfoProvider for RNGestureHandlerPackage$\$ReactModuleInfoProvider", e)
81
+ } catch (e: IllegalAccessException) {
82
+ throw RuntimeException("No ReactModuleInfoProvider for RNGestureHandlerPackage$\$ReactModuleInfoProvider", e)
83
+ }
84
+ }
85
+ }
@@ -121,6 +121,12 @@ class LongPressGestureHandler extends _GestureHandler.default {
121
121
  this.checkDistanceFail();
122
122
  }
123
123
 
124
+ onPointerOutOfBounds(event) {
125
+ super.onPointerOutOfBounds(event);
126
+ this.tracker.track(event);
127
+ this.checkDistanceFail();
128
+ }
129
+
124
130
  onPointerUp(event) {
125
131
  super.onPointerUp(event);
126
132
  this.tracker.removeFromTracker(event.pointerId);
@@ -1 +1 @@
1
- {"version":3,"sources":["LongPressGestureHandler.ts"],"names":["DEFAULT_MIN_DURATION_MS","DEFAULT_MAX_DIST_DP","SCALING_FACTOR","LongPressGestureHandler","GestureHandler","defaultMaxDistSq","init","ref","propsRef","config","enableContextMenu","undefined","transformNativeEvent","duration","Date","now","startTime","updateGestureConfig","enabled","props","minDurationMs","maxDist","maxDistSq","numberOfPointers","resetConfig","onStateChange","_newState","_oldState","clearTimeout","activationTimeout","onPointerDown","event","isButtonInConfig","button","tracker","addToTracker","startX","x","startY","y","tryBegin","tryActivate","tryToSendTouchEvent","onPointerAdd","getTrackedPointersCount","fail","absoluteCoordsAverage","getAbsoluteCoordsAverage","onPointerMove","track","checkDistanceFail","onPointerUp","removeFromTracker","pointerId","currentState","State","ACTIVE","end","onPointerRemove","getState","UNDETERMINED","previousTime","begin","setTimeout","activate","dx","dy","distSq","cancel"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MIN_DURATION_MS = 500;\nconst DEFAULT_MAX_DIST_DP = 10;\nconst SCALING_FACTOR = 10;\n\nexport default class LongPressGestureHandler extends GestureHandler {\n private minDurationMs = DEFAULT_MIN_DURATION_MS;\n private defaultMaxDistSq = DEFAULT_MAX_DIST_DP * SCALING_FACTOR;\n\n private maxDistSq = this.defaultMaxDistSq;\n private numberOfPointers = 1;\n private startX = 0;\n private startY = 0;\n\n private startTime = 0;\n private previousTime = 0;\n\n private activationTimeout: number | undefined;\n\n public init(ref: number, propsRef: React.RefObject<unknown>) {\n if (this.config.enableContextMenu === undefined) {\n this.config.enableContextMenu = false;\n }\n\n super.init(ref, propsRef);\n }\n\n protected transformNativeEvent() {\n return {\n ...super.transformNativeEvent(),\n duration: Date.now() - this.startTime,\n };\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.minDurationMs !== undefined) {\n this.minDurationMs = this.config.minDurationMs;\n }\n\n if (this.config.maxDist !== undefined) {\n this.maxDistSq = this.config.maxDist * this.config.maxDist;\n }\n\n if (this.config.numberOfPointers !== undefined) {\n this.numberOfPointers = this.config.numberOfPointers;\n }\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n this.minDurationMs = DEFAULT_MIN_DURATION_MS;\n this.maxDistSq = this.defaultMaxDistSq;\n }\n\n protected onStateChange(_newState: State, _oldState: State): void {\n clearTimeout(this.activationTimeout);\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n if (!this.isButtonInConfig(event.button)) {\n return;\n }\n\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n\n this.startX = event.x;\n this.startY = event.y;\n\n this.tryBegin();\n this.tryActivate();\n\n this.tryToSendTouchEvent(event);\n }\n protected onPointerAdd(event: AdaptedEvent): void {\n super.onPointerAdd(event);\n this.tracker.addToTracker(event);\n\n if (this.tracker.getTrackedPointersCount() > this.numberOfPointers) {\n this.fail();\n return;\n }\n\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n this.startX = absoluteCoordsAverage.x;\n this.startY = absoluteCoordsAverage.y;\n\n this.tryActivate();\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n super.onPointerMove(event);\n this.tracker.track(event);\n this.checkDistanceFail();\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (this.currentState === State.ACTIVE) {\n this.end();\n } else {\n this.fail();\n }\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (\n this.tracker.getTrackedPointersCount() < this.numberOfPointers &&\n this.getState() !== State.ACTIVE\n ) {\n this.fail();\n }\n }\n\n private tryBegin(): void {\n if (this.currentState !== State.UNDETERMINED) {\n return;\n }\n\n this.previousTime = Date.now();\n this.startTime = this.previousTime;\n\n this.begin();\n }\n\n private tryActivate(): void {\n if (this.tracker.getTrackedPointersCount() !== this.numberOfPointers) {\n return;\n }\n\n if (this.minDurationMs > 0) {\n this.activationTimeout = setTimeout(() => {\n this.activate();\n }, this.minDurationMs);\n } else if (this.minDurationMs === 0) {\n this.activate();\n }\n }\n\n private checkDistanceFail(): void {\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n const dx = absoluteCoordsAverage.x - this.startX;\n const dy = absoluteCoordsAverage.y - this.startY;\n const distSq = dx * dx + dy * dy;\n\n if (distSq <= this.maxDistSq) {\n return;\n }\n\n if (this.currentState === State.ACTIVE) {\n this.cancel();\n } else {\n this.fail();\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["LongPressGestureHandler.ts"],"names":["DEFAULT_MIN_DURATION_MS","DEFAULT_MAX_DIST_DP","SCALING_FACTOR","LongPressGestureHandler","GestureHandler","defaultMaxDistSq","init","ref","propsRef","config","enableContextMenu","undefined","transformNativeEvent","duration","Date","now","startTime","updateGestureConfig","enabled","props","minDurationMs","maxDist","maxDistSq","numberOfPointers","resetConfig","onStateChange","_newState","_oldState","clearTimeout","activationTimeout","onPointerDown","event","isButtonInConfig","button","tracker","addToTracker","startX","x","startY","y","tryBegin","tryActivate","tryToSendTouchEvent","onPointerAdd","getTrackedPointersCount","fail","absoluteCoordsAverage","getAbsoluteCoordsAverage","onPointerMove","track","checkDistanceFail","onPointerOutOfBounds","onPointerUp","removeFromTracker","pointerId","currentState","State","ACTIVE","end","onPointerRemove","getState","UNDETERMINED","previousTime","begin","setTimeout","activate","dx","dy","distSq","cancel"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MIN_DURATION_MS = 500;\nconst DEFAULT_MAX_DIST_DP = 10;\nconst SCALING_FACTOR = 10;\n\nexport default class LongPressGestureHandler extends GestureHandler {\n private minDurationMs = DEFAULT_MIN_DURATION_MS;\n private defaultMaxDistSq = DEFAULT_MAX_DIST_DP * SCALING_FACTOR;\n\n private maxDistSq = this.defaultMaxDistSq;\n private numberOfPointers = 1;\n private startX = 0;\n private startY = 0;\n\n private startTime = 0;\n private previousTime = 0;\n\n private activationTimeout: number | undefined;\n\n public init(ref: number, propsRef: React.RefObject<unknown>) {\n if (this.config.enableContextMenu === undefined) {\n this.config.enableContextMenu = false;\n }\n\n super.init(ref, propsRef);\n }\n\n protected transformNativeEvent() {\n return {\n ...super.transformNativeEvent(),\n duration: Date.now() - this.startTime,\n };\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.minDurationMs !== undefined) {\n this.minDurationMs = this.config.minDurationMs;\n }\n\n if (this.config.maxDist !== undefined) {\n this.maxDistSq = this.config.maxDist * this.config.maxDist;\n }\n\n if (this.config.numberOfPointers !== undefined) {\n this.numberOfPointers = this.config.numberOfPointers;\n }\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n this.minDurationMs = DEFAULT_MIN_DURATION_MS;\n this.maxDistSq = this.defaultMaxDistSq;\n }\n\n protected onStateChange(_newState: State, _oldState: State): void {\n clearTimeout(this.activationTimeout);\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n if (!this.isButtonInConfig(event.button)) {\n return;\n }\n\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n\n this.startX = event.x;\n this.startY = event.y;\n\n this.tryBegin();\n this.tryActivate();\n\n this.tryToSendTouchEvent(event);\n }\n protected onPointerAdd(event: AdaptedEvent): void {\n super.onPointerAdd(event);\n this.tracker.addToTracker(event);\n\n if (this.tracker.getTrackedPointersCount() > this.numberOfPointers) {\n this.fail();\n return;\n }\n\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n this.startX = absoluteCoordsAverage.x;\n this.startY = absoluteCoordsAverage.y;\n\n this.tryActivate();\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n super.onPointerMove(event);\n this.tracker.track(event);\n this.checkDistanceFail();\n }\n\n protected onPointerOutOfBounds(event: AdaptedEvent): void {\n super.onPointerOutOfBounds(event);\n this.tracker.track(event);\n this.checkDistanceFail();\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (this.currentState === State.ACTIVE) {\n this.end();\n } else {\n this.fail();\n }\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (\n this.tracker.getTrackedPointersCount() < this.numberOfPointers &&\n this.getState() !== State.ACTIVE\n ) {\n this.fail();\n }\n }\n\n private tryBegin(): void {\n if (this.currentState !== State.UNDETERMINED) {\n return;\n }\n\n this.previousTime = Date.now();\n this.startTime = this.previousTime;\n\n this.begin();\n }\n\n private tryActivate(): void {\n if (this.tracker.getTrackedPointersCount() !== this.numberOfPointers) {\n return;\n }\n\n if (this.minDurationMs > 0) {\n this.activationTimeout = setTimeout(() => {\n this.activate();\n }, this.minDurationMs);\n } else if (this.minDurationMs === 0) {\n this.activate();\n }\n }\n\n private checkDistanceFail(): void {\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n const dx = absoluteCoordsAverage.x - this.startX;\n const dy = absoluteCoordsAverage.y - this.startY;\n const distSq = dx * dx + dy * dy;\n\n if (distSq <= this.maxDistSq) {\n return;\n }\n\n if (this.currentState === State.ACTIVE) {\n this.cancel();\n } else {\n this.fail();\n }\n }\n}\n"]}
@@ -109,6 +109,12 @@ export default class LongPressGestureHandler extends GestureHandler {
109
109
  this.checkDistanceFail();
110
110
  }
111
111
 
112
+ onPointerOutOfBounds(event) {
113
+ super.onPointerOutOfBounds(event);
114
+ this.tracker.track(event);
115
+ this.checkDistanceFail();
116
+ }
117
+
112
118
  onPointerUp(event) {
113
119
  super.onPointerUp(event);
114
120
  this.tracker.removeFromTracker(event.pointerId);
@@ -1 +1 @@
1
- {"version":3,"sources":["LongPressGestureHandler.ts"],"names":["State","GestureHandler","DEFAULT_MIN_DURATION_MS","DEFAULT_MAX_DIST_DP","SCALING_FACTOR","LongPressGestureHandler","defaultMaxDistSq","init","ref","propsRef","config","enableContextMenu","undefined","transformNativeEvent","duration","Date","now","startTime","updateGestureConfig","enabled","props","minDurationMs","maxDist","maxDistSq","numberOfPointers","resetConfig","onStateChange","_newState","_oldState","clearTimeout","activationTimeout","onPointerDown","event","isButtonInConfig","button","tracker","addToTracker","startX","x","startY","y","tryBegin","tryActivate","tryToSendTouchEvent","onPointerAdd","getTrackedPointersCount","fail","absoluteCoordsAverage","getAbsoluteCoordsAverage","onPointerMove","track","checkDistanceFail","onPointerUp","removeFromTracker","pointerId","currentState","ACTIVE","end","onPointerRemove","getState","UNDETERMINED","previousTime","begin","setTimeout","activate","dx","dy","distSq","cancel"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MIN_DURATION_MS = 500;\nconst DEFAULT_MAX_DIST_DP = 10;\nconst SCALING_FACTOR = 10;\n\nexport default class LongPressGestureHandler extends GestureHandler {\n private minDurationMs = DEFAULT_MIN_DURATION_MS;\n private defaultMaxDistSq = DEFAULT_MAX_DIST_DP * SCALING_FACTOR;\n\n private maxDistSq = this.defaultMaxDistSq;\n private numberOfPointers = 1;\n private startX = 0;\n private startY = 0;\n\n private startTime = 0;\n private previousTime = 0;\n\n private activationTimeout: number | undefined;\n\n public init(ref: number, propsRef: React.RefObject<unknown>) {\n if (this.config.enableContextMenu === undefined) {\n this.config.enableContextMenu = false;\n }\n\n super.init(ref, propsRef);\n }\n\n protected transformNativeEvent() {\n return {\n ...super.transformNativeEvent(),\n duration: Date.now() - this.startTime,\n };\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.minDurationMs !== undefined) {\n this.minDurationMs = this.config.minDurationMs;\n }\n\n if (this.config.maxDist !== undefined) {\n this.maxDistSq = this.config.maxDist * this.config.maxDist;\n }\n\n if (this.config.numberOfPointers !== undefined) {\n this.numberOfPointers = this.config.numberOfPointers;\n }\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n this.minDurationMs = DEFAULT_MIN_DURATION_MS;\n this.maxDistSq = this.defaultMaxDistSq;\n }\n\n protected onStateChange(_newState: State, _oldState: State): void {\n clearTimeout(this.activationTimeout);\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n if (!this.isButtonInConfig(event.button)) {\n return;\n }\n\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n\n this.startX = event.x;\n this.startY = event.y;\n\n this.tryBegin();\n this.tryActivate();\n\n this.tryToSendTouchEvent(event);\n }\n protected onPointerAdd(event: AdaptedEvent): void {\n super.onPointerAdd(event);\n this.tracker.addToTracker(event);\n\n if (this.tracker.getTrackedPointersCount() > this.numberOfPointers) {\n this.fail();\n return;\n }\n\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n this.startX = absoluteCoordsAverage.x;\n this.startY = absoluteCoordsAverage.y;\n\n this.tryActivate();\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n super.onPointerMove(event);\n this.tracker.track(event);\n this.checkDistanceFail();\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (this.currentState === State.ACTIVE) {\n this.end();\n } else {\n this.fail();\n }\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (\n this.tracker.getTrackedPointersCount() < this.numberOfPointers &&\n this.getState() !== State.ACTIVE\n ) {\n this.fail();\n }\n }\n\n private tryBegin(): void {\n if (this.currentState !== State.UNDETERMINED) {\n return;\n }\n\n this.previousTime = Date.now();\n this.startTime = this.previousTime;\n\n this.begin();\n }\n\n private tryActivate(): void {\n if (this.tracker.getTrackedPointersCount() !== this.numberOfPointers) {\n return;\n }\n\n if (this.minDurationMs > 0) {\n this.activationTimeout = setTimeout(() => {\n this.activate();\n }, this.minDurationMs);\n } else if (this.minDurationMs === 0) {\n this.activate();\n }\n }\n\n private checkDistanceFail(): void {\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n const dx = absoluteCoordsAverage.x - this.startX;\n const dy = absoluteCoordsAverage.y - this.startY;\n const distSq = dx * dx + dy * dy;\n\n if (distSq <= this.maxDistSq) {\n return;\n }\n\n if (this.currentState === State.ACTIVE) {\n this.cancel();\n } else {\n this.fail();\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["LongPressGestureHandler.ts"],"names":["State","GestureHandler","DEFAULT_MIN_DURATION_MS","DEFAULT_MAX_DIST_DP","SCALING_FACTOR","LongPressGestureHandler","defaultMaxDistSq","init","ref","propsRef","config","enableContextMenu","undefined","transformNativeEvent","duration","Date","now","startTime","updateGestureConfig","enabled","props","minDurationMs","maxDist","maxDistSq","numberOfPointers","resetConfig","onStateChange","_newState","_oldState","clearTimeout","activationTimeout","onPointerDown","event","isButtonInConfig","button","tracker","addToTracker","startX","x","startY","y","tryBegin","tryActivate","tryToSendTouchEvent","onPointerAdd","getTrackedPointersCount","fail","absoluteCoordsAverage","getAbsoluteCoordsAverage","onPointerMove","track","checkDistanceFail","onPointerOutOfBounds","onPointerUp","removeFromTracker","pointerId","currentState","ACTIVE","end","onPointerRemove","getState","UNDETERMINED","previousTime","begin","setTimeout","activate","dx","dy","distSq","cancel"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MIN_DURATION_MS = 500;\nconst DEFAULT_MAX_DIST_DP = 10;\nconst SCALING_FACTOR = 10;\n\nexport default class LongPressGestureHandler extends GestureHandler {\n private minDurationMs = DEFAULT_MIN_DURATION_MS;\n private defaultMaxDistSq = DEFAULT_MAX_DIST_DP * SCALING_FACTOR;\n\n private maxDistSq = this.defaultMaxDistSq;\n private numberOfPointers = 1;\n private startX = 0;\n private startY = 0;\n\n private startTime = 0;\n private previousTime = 0;\n\n private activationTimeout: number | undefined;\n\n public init(ref: number, propsRef: React.RefObject<unknown>) {\n if (this.config.enableContextMenu === undefined) {\n this.config.enableContextMenu = false;\n }\n\n super.init(ref, propsRef);\n }\n\n protected transformNativeEvent() {\n return {\n ...super.transformNativeEvent(),\n duration: Date.now() - this.startTime,\n };\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.minDurationMs !== undefined) {\n this.minDurationMs = this.config.minDurationMs;\n }\n\n if (this.config.maxDist !== undefined) {\n this.maxDistSq = this.config.maxDist * this.config.maxDist;\n }\n\n if (this.config.numberOfPointers !== undefined) {\n this.numberOfPointers = this.config.numberOfPointers;\n }\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n this.minDurationMs = DEFAULT_MIN_DURATION_MS;\n this.maxDistSq = this.defaultMaxDistSq;\n }\n\n protected onStateChange(_newState: State, _oldState: State): void {\n clearTimeout(this.activationTimeout);\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n if (!this.isButtonInConfig(event.button)) {\n return;\n }\n\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n\n this.startX = event.x;\n this.startY = event.y;\n\n this.tryBegin();\n this.tryActivate();\n\n this.tryToSendTouchEvent(event);\n }\n protected onPointerAdd(event: AdaptedEvent): void {\n super.onPointerAdd(event);\n this.tracker.addToTracker(event);\n\n if (this.tracker.getTrackedPointersCount() > this.numberOfPointers) {\n this.fail();\n return;\n }\n\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n this.startX = absoluteCoordsAverage.x;\n this.startY = absoluteCoordsAverage.y;\n\n this.tryActivate();\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n super.onPointerMove(event);\n this.tracker.track(event);\n this.checkDistanceFail();\n }\n\n protected onPointerOutOfBounds(event: AdaptedEvent): void {\n super.onPointerOutOfBounds(event);\n this.tracker.track(event);\n this.checkDistanceFail();\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (this.currentState === State.ACTIVE) {\n this.end();\n } else {\n this.fail();\n }\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (\n this.tracker.getTrackedPointersCount() < this.numberOfPointers &&\n this.getState() !== State.ACTIVE\n ) {\n this.fail();\n }\n }\n\n private tryBegin(): void {\n if (this.currentState !== State.UNDETERMINED) {\n return;\n }\n\n this.previousTime = Date.now();\n this.startTime = this.previousTime;\n\n this.begin();\n }\n\n private tryActivate(): void {\n if (this.tracker.getTrackedPointersCount() !== this.numberOfPointers) {\n return;\n }\n\n if (this.minDurationMs > 0) {\n this.activationTimeout = setTimeout(() => {\n this.activate();\n }, this.minDurationMs);\n } else if (this.minDurationMs === 0) {\n this.activate();\n }\n }\n\n private checkDistanceFail(): void {\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n const dx = absoluteCoordsAverage.x - this.startX;\n const dy = absoluteCoordsAverage.y - this.startY;\n const distSq = dx * dx + dy * dy;\n\n if (distSq <= this.maxDistSq) {\n return;\n }\n\n if (this.currentState === State.ACTIVE) {\n this.cancel();\n } else {\n this.fail();\n }\n }\n}\n"]}
@@ -22,6 +22,7 @@ export default class LongPressGestureHandler extends GestureHandler {
22
22
  protected onPointerDown(event: AdaptedEvent): void;
23
23
  protected onPointerAdd(event: AdaptedEvent): void;
24
24
  protected onPointerMove(event: AdaptedEvent): void;
25
+ protected onPointerOutOfBounds(event: AdaptedEvent): void;
25
26
  protected onPointerUp(event: AdaptedEvent): void;
26
27
  protected onPointerRemove(event: AdaptedEvent): void;
27
28
  private tryBegin;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-gesture-handler",
3
- "version": "2.22.0-rc.1",
3
+ "version": "2.22.0",
4
4
  "description": "Declarative API exposing native platform touch and gesture system to React Native",
5
5
  "scripts": {
6
6
  "prepare": "bob build && husky install",
@@ -39,6 +39,8 @@
39
39
  "android/common/src/main/java/",
40
40
  "android/reanimated/src/main/java/",
41
41
  "android/noreanimated/src/main/java/",
42
+ "android/package77/",
43
+ "android/packageDeprecated/",
42
44
  "apple/",
43
45
  "Swipeable/",
44
46
  "ReanimatedSwipeable/",
@@ -101,6 +101,12 @@ export default class LongPressGestureHandler extends GestureHandler {
101
101
  this.checkDistanceFail();
102
102
  }
103
103
 
104
+ protected onPointerOutOfBounds(event: AdaptedEvent): void {
105
+ super.onPointerOutOfBounds(event);
106
+ this.tracker.track(event);
107
+ this.checkDistanceFail();
108
+ }
109
+
104
110
  protected onPointerUp(event: AdaptedEvent): void {
105
111
  super.onPointerUp(event);
106
112
  this.tracker.removeFromTracker(event.pointerId);