@rnmapbox/maps 10.1.0-beta.6 → 10.1.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/android/src/main/java/com/rnmapbox/rnmbx/RNMBXPackage.kt +17 -3
- package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt +5 -3
- package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/NativeMapViewModule.kt +14 -18
- package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXAndroidTextureMapViewManager.kt +4 -2
- package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXMapView.kt +37 -0
- package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXMapViewManager.kt +9 -1
- package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/RNMBXStyleValue.kt +2 -2
- package/android/src/main/java/com/rnmapbox/rnmbx/utils/ViewTagResolver.kt +68 -0
- package/ios/RNMBX/RNMBXCamera.swift +2 -18
- package/ios/RNMBX/RNMBXLocationModule.swift +23 -59
- package/ios/RNMBX/RNMBXLocationModuleV11.swift +248 -2
- package/ios/RNMBX/RNMBXMapView.swift +13 -2
- package/ios/RNMBX/RNMBXStyleImport.swift +7 -1
- package/lib/commonjs/Mapbox.js +3 -6
- package/lib/commonjs/Mapbox.js.map +1 -1
- package/lib/commonjs/classes/AnimatedCoordinatesArray.js +1 -2
- package/lib/commonjs/classes/AnimatedCoordinatesArray.js.map +1 -1
- package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js +1 -2
- package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
- package/lib/commonjs/classes/AnimatedPoint.js +1 -2
- package/lib/commonjs/classes/AnimatedPoint.js.map +1 -1
- package/lib/commonjs/classes/AnimatedRouteCoordinatesArray.js +1 -2
- package/lib/commonjs/classes/AnimatedRouteCoordinatesArray.js.map +1 -1
- package/lib/commonjs/classes/AnimatedShape.js +1 -2
- package/lib/commonjs/classes/AnimatedShape.js.map +1 -1
- package/lib/commonjs/components/AbstractLayer.js +1 -2
- package/lib/commonjs/components/AbstractLayer.js.map +1 -1
- package/lib/commonjs/components/AbstractSource.js +1 -2
- package/lib/commonjs/components/AbstractSource.js.map +1 -1
- package/lib/commonjs/components/Annotation.js +1 -2
- package/lib/commonjs/components/Annotation.js.map +1 -1
- package/lib/commonjs/components/Atmosphere.js +2 -4
- package/lib/commonjs/components/Atmosphere.js.map +1 -1
- package/lib/commonjs/components/BackgroundLayer.js +2 -4
- package/lib/commonjs/components/BackgroundLayer.js.map +1 -1
- package/lib/commonjs/components/Callout.js +2 -4
- package/lib/commonjs/components/Callout.js.map +1 -1
- package/lib/commonjs/components/Camera.js +4 -6
- package/lib/commonjs/components/Camera.js.map +1 -1
- package/lib/commonjs/components/CircleLayer.js +2 -4
- package/lib/commonjs/components/CircleLayer.js.map +1 -1
- package/lib/commonjs/components/FillExtrusionLayer.js +2 -4
- package/lib/commonjs/components/FillExtrusionLayer.js.map +1 -1
- package/lib/commonjs/components/FillLayer.js +2 -4
- package/lib/commonjs/components/FillLayer.js.map +1 -1
- package/lib/commonjs/components/HeadingIndicator.js +1 -2
- package/lib/commonjs/components/HeadingIndicator.js.map +1 -1
- package/lib/commonjs/components/HeatmapLayer.js +2 -4
- package/lib/commonjs/components/HeatmapLayer.js.map +1 -1
- package/lib/commonjs/components/Image.js +2 -4
- package/lib/commonjs/components/Image.js.map +1 -1
- package/lib/commonjs/components/ImageSource.js +2 -4
- package/lib/commonjs/components/ImageSource.js.map +1 -1
- package/lib/commonjs/components/Images.js +2 -4
- package/lib/commonjs/components/Images.js.map +1 -1
- package/lib/commonjs/components/Light.js +2 -4
- package/lib/commonjs/components/Light.js.map +1 -1
- package/lib/commonjs/components/LineLayer.js +2 -4
- package/lib/commonjs/components/LineLayer.js.map +1 -1
- package/lib/commonjs/components/MapView.js +2 -4
- package/lib/commonjs/components/MapView.js.map +1 -1
- package/lib/commonjs/components/MarkerView.js +2 -4
- package/lib/commonjs/components/MarkerView.js.map +1 -1
- package/lib/commonjs/components/NativeBridgeComponent.js +1 -2
- package/lib/commonjs/components/NativeBridgeComponent.js.map +1 -1
- package/lib/commonjs/components/NativeUserLocation.js +1 -2
- package/lib/commonjs/components/NativeUserLocation.js.map +1 -1
- package/lib/commonjs/components/PointAnnotation.js +2 -4
- package/lib/commonjs/components/PointAnnotation.js.map +1 -1
- package/lib/commonjs/components/RasterDemSource.js +2 -4
- package/lib/commonjs/components/RasterDemSource.js.map +1 -1
- package/lib/commonjs/components/RasterLayer.js +2 -4
- package/lib/commonjs/components/RasterLayer.js.map +1 -1
- package/lib/commonjs/components/RasterSource.js +2 -4
- package/lib/commonjs/components/RasterSource.js.map +1 -1
- package/lib/commonjs/components/ShapeSource.js +1 -2
- package/lib/commonjs/components/ShapeSource.js.map +1 -1
- package/lib/commonjs/components/SkyLayer.js +2 -4
- package/lib/commonjs/components/SkyLayer.js.map +1 -1
- package/lib/commonjs/components/Style.js +1 -2
- package/lib/commonjs/components/Style.js.map +1 -1
- package/lib/commonjs/components/StyleImport.js +6 -2
- package/lib/commonjs/components/StyleImport.js.map +1 -1
- package/lib/commonjs/components/SymbolLayer.js +1 -2
- package/lib/commonjs/components/SymbolLayer.js.map +1 -1
- package/lib/commonjs/components/Terrain.js +2 -4
- package/lib/commonjs/components/Terrain.js.map +1 -1
- package/lib/commonjs/components/UserLocation.js +2 -4
- package/lib/commonjs/components/UserLocation.js.map +1 -1
- package/lib/commonjs/components/VectorSource.js +3 -4
- package/lib/commonjs/components/VectorSource.js.map +1 -1
- package/lib/commonjs/index.js +1 -2
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/modules/location/locationManager.js +3 -4
- package/lib/commonjs/modules/location/locationManager.js.map +1 -1
- package/lib/commonjs/modules/offline/OfflineCreatePackOptions.js +1 -2
- package/lib/commonjs/modules/offline/OfflineCreatePackOptions.js.map +1 -1
- package/lib/commonjs/modules/offline/OfflinePack.js +1 -2
- package/lib/commonjs/modules/offline/OfflinePack.js.map +1 -1
- package/lib/commonjs/modules/offline/offlineManager.js +2 -4
- package/lib/commonjs/modules/offline/offlineManager.js.map +1 -1
- package/lib/commonjs/modules/snapshot/SnapshotOptions.js +1 -2
- package/lib/commonjs/modules/snapshot/SnapshotOptions.js.map +1 -1
- package/lib/commonjs/modules/snapshot/snapshotManager.js +1 -2
- package/lib/commonjs/modules/snapshot/snapshotManager.js.map +1 -1
- package/lib/commonjs/specs/NativeMapViewModule.js +1 -2
- package/lib/commonjs/specs/NativeMapViewModule.js.map +1 -1
- package/lib/commonjs/specs/RNMBXAndroidTextureMapViewNativeComponent.js +1 -2
- package/lib/commonjs/specs/RNMBXAndroidTextureMapViewNativeComponent.js.map +1 -1
- package/lib/commonjs/specs/RNMBXMapViewNativeComponent.js +1 -2
- package/lib/commonjs/specs/RNMBXMapViewNativeComponent.js.map +1 -1
- package/lib/commonjs/specs/RNMBXStyleImportNativeComponent.js +1 -2
- package/lib/commonjs/specs/RNMBXStyleImportNativeComponent.js.map +1 -1
- package/lib/commonjs/utils/Logger.js +1 -2
- package/lib/commonjs/utils/Logger.js.map +1 -1
- package/lib/commonjs/utils/animated/Animated.js +1 -2
- package/lib/commonjs/utils/animated/Animated.js.map +1 -1
- package/lib/commonjs/utils/geoUtils.js +5 -10
- package/lib/commonjs/utils/geoUtils.js.map +1 -1
- package/lib/commonjs/utils/styleMap.js +2 -4
- package/lib/commonjs/utils/styleMap.js.map +1 -1
- package/lib/commonjs/web/MapContext.js +1 -2
- package/lib/commonjs/web/MapContext.js.map +1 -1
- package/lib/commonjs/web/MapboxModule.js +1 -2
- package/lib/commonjs/web/MapboxModule.js.map +1 -1
- package/lib/commonjs/web/UnimplementedComponent.js +1 -2
- package/lib/commonjs/web/UnimplementedComponent.js.map +1 -1
- package/lib/commonjs/web/components/Camera.js +1 -2
- package/lib/commonjs/web/components/Camera.js.map +1 -1
- package/lib/commonjs/web/components/MapView.js +1 -2
- package/lib/commonjs/web/components/MapView.js.map +1 -1
- package/lib/commonjs/web/index.js +1 -2
- package/lib/commonjs/web/index.js.map +1 -1
- package/lib/commonjs/web/utils/Logger.js +1 -2
- package/lib/commonjs/web/utils/Logger.js.map +1 -1
- package/lib/module/components/StyleImport.js +5 -0
- package/lib/module/components/StyleImport.js.map +1 -1
- package/lib/typescript/components/StyleImport.d.ts +16 -0
- package/lib/typescript/components/StyleImport.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/StyleImport.tsx +16 -0
package/README.md
CHANGED
|
@@ -16,6 +16,7 @@ import com.rnmapbox.rnmbx.components.images.RNMBXImagesManager
|
|
|
16
16
|
import com.rnmapbox.rnmbx.components.location.RNMBXNativeUserLocationManager
|
|
17
17
|
import com.rnmapbox.rnmbx.components.mapview.NativeMapViewModule
|
|
18
18
|
import com.rnmapbox.rnmbx.components.mapview.RNMBXAndroidTextureMapViewManager
|
|
19
|
+
import com.rnmapbox.rnmbx.components.mapview.RNMBXMapView
|
|
19
20
|
import com.rnmapbox.rnmbx.components.mapview.RNMBXMapViewManager
|
|
20
21
|
import com.rnmapbox.rnmbx.components.styles.RNMBXStyleImportManager
|
|
21
22
|
import com.rnmapbox.rnmbx.components.styles.atmosphere.RNMBXAtmosphereManager
|
|
@@ -40,8 +41,21 @@ import com.rnmapbox.rnmbx.modules.RNMBXLogging
|
|
|
40
41
|
import com.rnmapbox.rnmbx.modules.RNMBXModule
|
|
41
42
|
import com.rnmapbox.rnmbx.modules.RNMBXOfflineModule
|
|
42
43
|
import com.rnmapbox.rnmbx.modules.RNMBXSnapshotModule
|
|
44
|
+
import com.rnmapbox.rnmbx.utils.ViewTagResolver
|
|
43
45
|
|
|
44
46
|
class RNMBXPackage : TurboReactPackage() {
|
|
47
|
+
|
|
48
|
+
var mapViewTagResolver: ViewTagResolver<RNMBXMapView>? = null
|
|
49
|
+
fun getMapViewTagResolver(context: ReactApplicationContext) : ViewTagResolver<RNMBXMapView> {
|
|
50
|
+
val viewTagResolver = mapViewTagResolver
|
|
51
|
+
if (viewTagResolver == null) {
|
|
52
|
+
val viewTagResolver = ViewTagResolver<RNMBXMapView>(context)
|
|
53
|
+
mapViewTagResolver = viewTagResolver
|
|
54
|
+
return viewTagResolver
|
|
55
|
+
}
|
|
56
|
+
return viewTagResolver
|
|
57
|
+
}
|
|
58
|
+
|
|
45
59
|
override fun getModule(
|
|
46
60
|
s: String,
|
|
47
61
|
reactApplicationContext: ReactApplicationContext
|
|
@@ -52,7 +66,7 @@ class RNMBXPackage : TurboReactPackage() {
|
|
|
52
66
|
RNMBXOfflineModule.REACT_CLASS -> return RNMBXOfflineModule(reactApplicationContext)
|
|
53
67
|
RNMBXSnapshotModule.REACT_CLASS -> return RNMBXSnapshotModule(reactApplicationContext)
|
|
54
68
|
RNMBXLogging.REACT_CLASS -> return RNMBXLogging(reactApplicationContext)
|
|
55
|
-
NativeMapViewModule.NAME -> return NativeMapViewModule(reactApplicationContext)
|
|
69
|
+
NativeMapViewModule.NAME -> return NativeMapViewModule(reactApplicationContext, getMapViewTagResolver(reactApplicationContext))
|
|
56
70
|
}
|
|
57
71
|
return null
|
|
58
72
|
}
|
|
@@ -67,8 +81,8 @@ class RNMBXPackage : TurboReactPackage() {
|
|
|
67
81
|
|
|
68
82
|
// components
|
|
69
83
|
managers.add(RNMBXCameraManager(reactApplicationContext))
|
|
70
|
-
managers.add(RNMBXAndroidTextureMapViewManager(reactApplicationContext))
|
|
71
|
-
managers.add(RNMBXMapViewManager(reactApplicationContext))
|
|
84
|
+
managers.add(RNMBXAndroidTextureMapViewManager(reactApplicationContext, getMapViewTagResolver(reactApplicationContext)))
|
|
85
|
+
managers.add(RNMBXMapViewManager(reactApplicationContext, getMapViewTagResolver(reactApplicationContext)))
|
|
72
86
|
managers.add(RNMBXStyleImportManager(reactApplicationContext))
|
|
73
87
|
|
|
74
88
|
// annotations
|
|
@@ -91,9 +91,11 @@ class RNMBXCamera(private val mContext: Context, private val mManager: RNMBXCame
|
|
|
91
91
|
|
|
92
92
|
override fun addToMap(mapView: RNMBXMapView) {
|
|
93
93
|
super.addToMap(mapView)
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
94
|
+
mapView.callIfAttachedToWindow {
|
|
95
|
+
setInitialCamera()
|
|
96
|
+
updateMaxBounds()
|
|
97
|
+
mCameraStop?.let { updateCamera(it) }
|
|
98
|
+
}
|
|
97
99
|
_observeViewportState(mapView.mapView)
|
|
98
100
|
_updateViewportState()
|
|
99
101
|
}
|
|
@@ -1,38 +1,34 @@
|
|
|
1
1
|
package com.rnmapbox.rnmbx.components.mapview
|
|
2
2
|
|
|
3
|
+
import android.util.Log
|
|
3
4
|
import com.facebook.react.bridge.Promise
|
|
4
5
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
5
6
|
import com.facebook.react.bridge.ReadableArray
|
|
7
|
+
import com.facebook.react.bridge.UIManager
|
|
6
8
|
import com.facebook.react.bridge.WritableMap
|
|
7
9
|
import com.facebook.react.bridge.WritableNativeMap
|
|
10
|
+
import com.facebook.react.uimanager.IllegalViewOperationException
|
|
8
11
|
import com.facebook.react.uimanager.UIManagerHelper
|
|
9
12
|
import com.facebook.react.uimanager.common.UIManagerType
|
|
10
13
|
import com.rnmapbox.rnmbx.BuildConfig
|
|
11
14
|
import com.rnmapbox.rnmbx.NativeMapViewModuleSpec
|
|
12
15
|
import com.rnmapbox.rnmbx.utils.ConvertUtils
|
|
13
16
|
import com.rnmapbox.rnmbx.utils.ExpressionParser
|
|
17
|
+
import com.rnmapbox.rnmbx.utils.Logger
|
|
18
|
+
import com.rnmapbox.rnmbx.utils.ViewTagResolver
|
|
14
19
|
import com.rnmapbox.rnmbx.utils.extensions.toCoordinate
|
|
15
20
|
import com.rnmapbox.rnmbx.utils.extensions.toScreenCoordinate
|
|
16
21
|
|
|
17
|
-
class NativeMapViewModule(context: ReactApplicationContext) : NativeMapViewModuleSpec(context) {
|
|
18
|
-
private fun withMapViewOnUIThread(
|
|
22
|
+
class NativeMapViewModule(context: ReactApplicationContext, val viewTagResolver: ViewTagResolver<RNMBXMapView>) : NativeMapViewModuleSpec(context) {
|
|
23
|
+
private fun withMapViewOnUIThread(
|
|
24
|
+
viewRef: Double?,
|
|
25
|
+
reject: Promise,
|
|
26
|
+
fn: (RNMBXMapView) -> Unit
|
|
27
|
+
) {
|
|
19
28
|
if (viewRef == null) {
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
reactApplicationContext.runOnUiQueueThread {
|
|
24
|
-
val manager = if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED)
|
|
25
|
-
UIManagerHelper.getUIManager(reactApplicationContext, UIManagerType.FABRIC)
|
|
26
|
-
else
|
|
27
|
-
UIManagerHelper.getUIManager(reactApplicationContext, UIManagerType.DEFAULT)
|
|
28
|
-
|
|
29
|
-
val view = manager?.resolveView(viewRef.toInt()) as? RNMBXMapView
|
|
30
|
-
|
|
31
|
-
if (view != null) {
|
|
32
|
-
fn(view)
|
|
33
|
-
} else {
|
|
34
|
-
promise.reject(Exception("cannot find map view for tag ${viewRef.toInt()}"))
|
|
35
|
-
}
|
|
29
|
+
reject.reject(Exception("viewRef is null"))
|
|
30
|
+
} else {
|
|
31
|
+
viewTagResolver.withViewResolved(viewRef.toInt(), reject, fn)
|
|
36
32
|
}
|
|
37
33
|
}
|
|
38
34
|
|
|
@@ -7,9 +7,11 @@ import com.facebook.react.viewmanagers.RNMBXAndroidTextureMapViewManagerDelegate
|
|
|
7
7
|
import com.facebook.react.viewmanagers.RNMBXAndroidTextureMapViewManagerInterface
|
|
8
8
|
import com.facebook.react.viewmanagers.RNMBXMapViewManagerDelegate
|
|
9
9
|
import com.mapbox.maps.MapInitOptions
|
|
10
|
+
import com.rnmapbox.rnmbx.utils.ViewTagResolver
|
|
10
11
|
|
|
11
|
-
class RNMBXAndroidTextureMapViewManager(context: ReactApplicationContext) : RNMBXMapViewManager(
|
|
12
|
-
context
|
|
12
|
+
class RNMBXAndroidTextureMapViewManager(context: ReactApplicationContext, viewTagResolver: ViewTagResolver<RNMBXMapView>) : RNMBXMapViewManager(
|
|
13
|
+
context,
|
|
14
|
+
viewTagResolver
|
|
13
15
|
), RNMBXAndroidTextureMapViewManagerInterface<RNMBXMapView> {
|
|
14
16
|
private val mDelegate: ViewManagerDelegate<RNMBXMapView>
|
|
15
17
|
|
|
@@ -4,6 +4,8 @@ import android.content.Context
|
|
|
4
4
|
import android.graphics.BitmapFactory
|
|
5
5
|
import android.graphics.PointF
|
|
6
6
|
import android.graphics.RectF
|
|
7
|
+
import android.os.Handler
|
|
8
|
+
import android.os.Looper
|
|
7
9
|
import android.util.Log
|
|
8
10
|
import android.view.Gravity
|
|
9
11
|
import android.view.View
|
|
@@ -102,6 +104,10 @@ interface RNMBXLifeCycleOwner : LifecycleOwner {
|
|
|
102
104
|
fun handleLifecycleEvent(event: Lifecycle.Event)
|
|
103
105
|
}
|
|
104
106
|
|
|
107
|
+
fun interface Cancelable {
|
|
108
|
+
fun cancel()
|
|
109
|
+
}
|
|
110
|
+
|
|
105
111
|
class RNMBXLifeCycle {
|
|
106
112
|
private var lifecycleOwner : RNMBXLifeCycleOwner? = null
|
|
107
113
|
|
|
@@ -150,6 +156,25 @@ class RNMBXLifeCycle {
|
|
|
150
156
|
fun getState() : Lifecycle.State {
|
|
151
157
|
return lifecycleOwner?.lifecycle?.currentState ?: Lifecycle.State.INITIALIZED;
|
|
152
158
|
}
|
|
159
|
+
|
|
160
|
+
var attachedToWindowWaiters : MutableList<()-> Unit> = mutableListOf()
|
|
161
|
+
|
|
162
|
+
fun callIfAttachedToWindow(callback: () -> Unit) : com.rnmapbox.rnmbx.components.mapview.Cancelable {
|
|
163
|
+
if (getState() == Lifecycle.State.STARTED) {
|
|
164
|
+
callback()
|
|
165
|
+
return com.rnmapbox.rnmbx.components.mapview.Cancelable {}
|
|
166
|
+
} else {
|
|
167
|
+
attachedToWindowWaiters.add(callback)
|
|
168
|
+
return com.rnmapbox.rnmbx.components.mapview.Cancelable {
|
|
169
|
+
attachedToWindowWaiters.removeIf { it === callback }
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
fun afterAttachFromLooper() {
|
|
175
|
+
attachedToWindowWaiters.forEach { it() }
|
|
176
|
+
attachedToWindowWaiters.clear()
|
|
177
|
+
}
|
|
153
178
|
}
|
|
154
179
|
|
|
155
180
|
data class FeatureEntry(val feature: AbstractMapFeature?, val view: View?, var addedToMap: Boolean = false) {
|
|
@@ -215,6 +240,11 @@ open class RNMBXMapView(private val mContext: Context, var mManager: RNMBXMapVie
|
|
|
215
240
|
return mapView.getMapboxMap()
|
|
216
241
|
}
|
|
217
242
|
|
|
243
|
+
override fun setId(id: Int) {
|
|
244
|
+
super.setId(id)
|
|
245
|
+
mManager.tagAssigned(id)
|
|
246
|
+
}
|
|
247
|
+
|
|
218
248
|
val pointAnnotationManager: PointAnnotationManager?
|
|
219
249
|
get() {
|
|
220
250
|
if (mPointAnnotationManager == null) {
|
|
@@ -1413,6 +1443,13 @@ open class RNMBXMapView(private val mContext: Context, var mManager: RNMBXMapVie
|
|
|
1413
1443
|
override fun onAttachedToWindow() {
|
|
1414
1444
|
lifecycle.onAttachedToWindow(this)
|
|
1415
1445
|
super.onAttachedToWindow()
|
|
1446
|
+
Handler(Looper.getMainLooper()).post {
|
|
1447
|
+
lifecycle.afterAttachFromLooper()
|
|
1448
|
+
}
|
|
1449
|
+
}
|
|
1450
|
+
|
|
1451
|
+
fun callIfAttachedToWindow(callback: () -> Unit) {
|
|
1452
|
+
lifecycle.callIfAttachedToWindow(callback)
|
|
1416
1453
|
}
|
|
1417
1454
|
|
|
1418
1455
|
override fun onLayoutChange(
|
|
@@ -22,6 +22,7 @@ import com.rnmapbox.rnmbx.events.AndroidCallbackEvent
|
|
|
22
22
|
import com.rnmapbox.rnmbx.utils.ConvertUtils
|
|
23
23
|
import com.rnmapbox.rnmbx.utils.ExpressionParser
|
|
24
24
|
import com.rnmapbox.rnmbx.utils.Logger
|
|
25
|
+
import com.rnmapbox.rnmbx.utils.ViewTagResolver
|
|
25
26
|
import com.rnmapbox.rnmbx.utils.extensions.toCoordinate
|
|
26
27
|
import com.rnmapbox.rnmbx.utils.extensions.toRectF
|
|
27
28
|
import com.rnmapbox.rnmbx.utils.extensions.toScreenCoordinate
|
|
@@ -46,7 +47,7 @@ interface CommandResponse {
|
|
|
46
47
|
fun error(message: String)
|
|
47
48
|
}
|
|
48
49
|
|
|
49
|
-
open class RNMBXMapViewManager(context: ReactApplicationContext) :
|
|
50
|
+
open class RNMBXMapViewManager(context: ReactApplicationContext, val viewTagResolver: ViewTagResolver<RNMBXMapView>) :
|
|
50
51
|
AbstractEventEmitter<RNMBXMapView>(context), RNMBXMapViewManagerInterface<RNMBXMapView> {
|
|
51
52
|
private val mViews: MutableMap<Int, RNMBXMapView>
|
|
52
53
|
|
|
@@ -107,6 +108,9 @@ open class RNMBXMapViewManager(context: ReactApplicationContext) :
|
|
|
107
108
|
|
|
108
109
|
override fun onDropViewInstance(mapView: RNMBXMapView) {
|
|
109
110
|
val reactTag = mapView.id
|
|
111
|
+
|
|
112
|
+
viewTagResolver.viewRemoved(reactTag)
|
|
113
|
+
|
|
110
114
|
if (mViews.containsKey(reactTag)) {
|
|
111
115
|
mViews.remove(reactTag)
|
|
112
116
|
}
|
|
@@ -118,6 +122,10 @@ open class RNMBXMapViewManager(context: ReactApplicationContext) :
|
|
|
118
122
|
return mViews[reactTag]
|
|
119
123
|
}
|
|
120
124
|
|
|
125
|
+
fun tagAssigned(reactTag: Int) {
|
|
126
|
+
return viewTagResolver.tagAssigned(reactTag)
|
|
127
|
+
}
|
|
128
|
+
|
|
121
129
|
// region React Props
|
|
122
130
|
@ReactProp(name = "projection")
|
|
123
131
|
override fun setProjection(mapView: RNMBXMapView, projection: String?) {
|
|
@@ -169,12 +169,12 @@ class RNMBXStyleValue(config: ReadableMap) {
|
|
|
169
169
|
config.getMap("enablePlacementTransitions")!!.getBoolean("value")
|
|
170
170
|
}
|
|
171
171
|
var duration = 300
|
|
172
|
-
|
|
172
|
+
var delay = 0
|
|
173
173
|
if (config.hasKey("duration") && ReadableType.Map == config.getType("duration")) {
|
|
174
174
|
duration = config.getMap("duration")!!.getInt("value")
|
|
175
175
|
}
|
|
176
176
|
if (config.hasKey("delay") && ReadableType.Map == config.getType("delay")) {
|
|
177
|
-
|
|
177
|
+
delay = config.getMap("delay")!!.getInt("value")
|
|
178
178
|
}
|
|
179
179
|
return Builder().duration(duration.toLong()).delay(delay.toLong()).build()
|
|
180
180
|
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
package com.rnmapbox.rnmbx.utils
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Promise
|
|
4
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
5
|
+
import com.facebook.react.bridge.UIManager
|
|
6
|
+
import com.facebook.react.uimanager.IllegalViewOperationException
|
|
7
|
+
import com.facebook.react.uimanager.UIManagerHelper
|
|
8
|
+
import com.facebook.react.uimanager.common.UIManagerType
|
|
9
|
+
import com.rnmapbox.rnmbx.BuildConfig
|
|
10
|
+
|
|
11
|
+
data class ViewTagWaiter<V>(
|
|
12
|
+
val fn: (V) -> Unit,
|
|
13
|
+
val reject: Promise?
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
// see https://github.com/rnmapbox/maps/pull/3074
|
|
17
|
+
open class ViewTagResolver<V>(val context: ReactApplicationContext) {
|
|
18
|
+
private val createdViews: HashSet<Int> = hashSetOf<Int>()
|
|
19
|
+
private val viewWaiters: HashMap<Int, MutableList<ViewTagWaiter<V>>> = hashMapOf()
|
|
20
|
+
|
|
21
|
+
// to be called from view.setId
|
|
22
|
+
fun tagAssigned(viewTag: Int) {
|
|
23
|
+
createdViews.add(viewTag)
|
|
24
|
+
|
|
25
|
+
val list = viewWaiters[viewTag]
|
|
26
|
+
if (list != null) {
|
|
27
|
+
context.runOnUiQueueThread {
|
|
28
|
+
try {
|
|
29
|
+
val view = manager.resolveView(viewTag) as V
|
|
30
|
+
|
|
31
|
+
list.forEach { it.fn(view) }
|
|
32
|
+
} catch (err: IllegalViewOperationException) {
|
|
33
|
+
list.forEach { it.reject?.reject(err) }
|
|
34
|
+
}
|
|
35
|
+
viewWaiters.remove(viewTag)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
fun viewRemoved(viewTag: Int) {
|
|
41
|
+
viewWaiters.remove(viewTag)
|
|
42
|
+
createdViews.remove(viewTag)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private val manager : UIManager
|
|
46
|
+
get() =
|
|
47
|
+
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
|
|
48
|
+
UIManagerHelper.getUIManager(context, UIManagerType.FABRIC)!!
|
|
49
|
+
} else {
|
|
50
|
+
UIManagerHelper.getUIManager(context, UIManagerType.DEFAULT)!!
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// calls on UiQueueThread with resolved view
|
|
54
|
+
fun withViewResolved(viewTag: Int, reject: Promise? = null, fn: (V) -> Unit) {
|
|
55
|
+
context.runOnUiQueueThread() {
|
|
56
|
+
try {
|
|
57
|
+
val view = manager.resolveView(viewTag) as V
|
|
58
|
+
fn(view)
|
|
59
|
+
} catch (err: IllegalViewOperationException) {
|
|
60
|
+
if (!createdViews.contains(viewTag)) {
|
|
61
|
+
viewWaiters.getOrPut(viewTag) { mutableListOf<ViewTagWaiter<V>>() }.add(ViewTagWaiter(fn, reject))
|
|
62
|
+
} else {
|
|
63
|
+
reject?.reject(err)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -287,25 +287,9 @@ class RNMBXCamera : RNMBXMapComponentBase {
|
|
|
287
287
|
}
|
|
288
288
|
|
|
289
289
|
if let locationModule = RNMBXLocationModule.shared {
|
|
290
|
-
|
|
291
|
-
#if !RNMBX_11
|
|
292
|
-
if let currentProvider = map.location.locationProvider as? AnyObject, let newProvider = locationModule.locationProvider as? AnyObject {
|
|
293
|
-
if currentProvider === newProvider {
|
|
294
|
-
isSameProvider = true
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
#endif
|
|
298
|
-
if !isSameProvider {
|
|
299
|
-
#if RNMBX_11
|
|
300
|
-
map.location.override(provider: locationModule.locationProvider)
|
|
301
|
-
#else
|
|
302
|
-
map.location.overrideLocationProvider(with: locationModule.locationProvider)
|
|
303
|
-
#endif
|
|
304
|
-
}
|
|
290
|
+
locationModule.override(for: map.location)
|
|
305
291
|
}
|
|
306
|
-
#if RNMBX_11
|
|
307
|
-
// RNMBX_11_TODO
|
|
308
|
-
#else
|
|
292
|
+
#if !RNMBX_11
|
|
309
293
|
map.location.locationProvider.requestWhenInUseAuthorization()
|
|
310
294
|
#endif
|
|
311
295
|
var trackingModeChanged = false
|
|
@@ -34,10 +34,6 @@ let RCT_MAPBOX_USER_LOCATION_UPDATE = "MapboxUserLocationUpdate";
|
|
|
34
34
|
/// This implementation of LocationProviderDelegate is used by `LocationManager` to work around
|
|
35
35
|
/// the fact that the `LocationProvider` API does not allow the delegate to be set to `nil`.
|
|
36
36
|
internal class EmptyLocationProviderDelegate: LocationProviderDelegate {
|
|
37
|
-
#if RNMBX_11
|
|
38
|
-
func onLocationUpdateReceived(for locations: [Location]) {}
|
|
39
|
-
#endif
|
|
40
|
-
|
|
41
37
|
func locationProvider(_ provider: LocationProvider, didFailWithError error: Error) {}
|
|
42
38
|
func locationProvider(_ provider: LocationProvider, didUpdateHeading newHeading: CLHeading) {}
|
|
43
39
|
func locationProvider(_ provider: LocationProvider, didUpdateLocations locations: [CLLocation]) {}
|
|
@@ -51,17 +47,6 @@ protocol LocationProviderRNMBXDelegate : AnyObject {
|
|
|
51
47
|
class RNMBXAppleLocationProvider: NSObject {
|
|
52
48
|
private var locationProvider: CLLocationManager
|
|
53
49
|
|
|
54
|
-
#if RNMBX_11
|
|
55
|
-
private var observers : [LocationObserver] = []
|
|
56
|
-
private var privateAppleLocationProviderOptions: AppleLocationProvider.Options {
|
|
57
|
-
didSet {
|
|
58
|
-
locationProvider.distanceFilter = privateAppleLocationProviderOptions.distanceFilter
|
|
59
|
-
locationProvider.desiredAccuracy = privateAppleLocationProviderOptions.desiredAccuracy
|
|
60
|
-
locationProvider.activityType = privateAppleLocationProviderOptions.activityType
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
private var privateLocationProviderOptions: LocationOptions
|
|
64
|
-
#else
|
|
65
50
|
private var privateLocationProviderOptions: LocationOptions {
|
|
66
51
|
didSet {
|
|
67
52
|
locationProvider.distanceFilter = privateLocationProviderOptions.distanceFilter
|
|
@@ -70,7 +55,6 @@ class RNMBXAppleLocationProvider: NSObject {
|
|
|
70
55
|
}
|
|
71
56
|
}
|
|
72
57
|
private weak var delegate: LocationProviderDelegate?
|
|
73
|
-
#endif
|
|
74
58
|
|
|
75
59
|
public var headingOrientation: CLDeviceOrientation {
|
|
76
60
|
didSet { locationProvider.headingOrientation = headingOrientation }
|
|
@@ -78,9 +62,6 @@ class RNMBXAppleLocationProvider: NSObject {
|
|
|
78
62
|
|
|
79
63
|
public override init() {
|
|
80
64
|
locationProvider = CLLocationManager()
|
|
81
|
-
#if RNMBX_11
|
|
82
|
-
privateAppleLocationProviderOptions = AppleLocationProvider.Options()
|
|
83
|
-
#endif
|
|
84
65
|
privateLocationProviderOptions = LocationOptions()
|
|
85
66
|
headingOrientation = locationProvider.headingOrientation
|
|
86
67
|
super.init()
|
|
@@ -89,21 +70,6 @@ class RNMBXAppleLocationProvider: NSObject {
|
|
|
89
70
|
}
|
|
90
71
|
|
|
91
72
|
extension RNMBXAppleLocationProvider: LocationProvider {
|
|
92
|
-
#if RNMBX_11
|
|
93
|
-
func addLocationObserver(for observer: LocationObserver) {
|
|
94
|
-
observers.append(observer)
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
func removeLocationObserver(for observer: LocationObserver) {
|
|
98
|
-
observers.removeAll { $0 === observer }
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
func getLastObservedLocation() -> Location? {
|
|
102
|
-
locationProvider.location
|
|
103
|
-
}
|
|
104
|
-
#endif
|
|
105
|
-
|
|
106
|
-
|
|
107
73
|
public var locationProviderOptions: LocationOptions {
|
|
108
74
|
get { privateLocationProviderOptions }
|
|
109
75
|
set { privateLocationProviderOptions = newValue }
|
|
@@ -169,45 +135,29 @@ extension RNMBXAppleLocationProvider: LocationProvider {
|
|
|
169
135
|
|
|
170
136
|
extension RNMBXAppleLocationProvider: CLLocationManagerDelegate {
|
|
171
137
|
public func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
|
|
172
|
-
#if RNMBX_11
|
|
173
|
-
observers.forEach { $0.onLocationUpdateReceived(for: locations) }
|
|
174
|
-
#else
|
|
175
138
|
delegate?.locationProvider(self, didUpdateLocations: locations)
|
|
176
|
-
#endif
|
|
177
139
|
}
|
|
178
140
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
#if RNMBX_11
|
|
182
|
-
|
|
183
|
-
#else
|
|
184
|
-
delegate?.locationProvider(self, didUpdateHeading: heading)
|
|
185
|
-
#endif
|
|
141
|
+
public func locationManager(_ manager: CLLocationManager, didUpdateHeading heading: CLHeading) {
|
|
142
|
+
delegate?.locationProvider(self, didUpdateHeading: heading)
|
|
186
143
|
}
|
|
187
144
|
|
|
188
145
|
public func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
|
|
189
|
-
#if RNMBX_11
|
|
190
|
-
|
|
191
|
-
#else
|
|
192
146
|
delegate?.locationProvider(self, didFailWithError: error)
|
|
193
|
-
#endif
|
|
194
147
|
}
|
|
195
148
|
|
|
196
|
-
|
|
149
|
+
@available(iOS 14.0, *)
|
|
197
150
|
public func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
|
|
198
|
-
#if RNMBX_11
|
|
199
|
-
#else
|
|
200
151
|
delegate?.locationProviderDidChangeAuthorization(self)
|
|
201
|
-
#endif
|
|
202
152
|
}
|
|
203
153
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
return calibratingDelegate.locationProviderShouldDisplayHeadingCalibration(self)
|
|
154
|
+
public func locationManagerShouldDisplayHeadingCalibration(_ manager: CLLocationManager) -> Bool {
|
|
155
|
+
guard let calibratingDelegate = delegate as? CalibratingLocationProviderDelegate else {
|
|
156
|
+
return false
|
|
210
157
|
}
|
|
158
|
+
|
|
159
|
+
return calibratingDelegate.locationProviderShouldDisplayHeadingCalibration(self)
|
|
160
|
+
}
|
|
211
161
|
}
|
|
212
162
|
|
|
213
163
|
internal protocol CalibratingLocationProviderDelegate: LocationProviderDelegate {
|
|
@@ -593,6 +543,20 @@ class RNMBXLocationModule: RCTEventEmitter, LocationProviderRNMBXDelegate {
|
|
|
593
543
|
}
|
|
594
544
|
}
|
|
595
545
|
|
|
546
|
+
func override(for locationManager: LocationManager) {
|
|
547
|
+
if let locationModule = RNMBXLocationModule.shared {
|
|
548
|
+
var isSameProvider = false
|
|
549
|
+
if let currentProvider = locationManager.locationProvider as? AnyObject, let newProvider = locationModule.locationProvider as? AnyObject {
|
|
550
|
+
if currentProvider === newProvider {
|
|
551
|
+
isSameProvider = true
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
if !isSameProvider {
|
|
555
|
+
locationManager.overrideLocationProvider(with: locationModule.locationProvider)
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
|
|
596
560
|
// MARK: - location event throttle
|
|
597
561
|
@objc
|
|
598
562
|
func setLocationEventThrottle(_ throttleValue:NSNumber) {
|