@rnmapbox/maps 10.0.0-beta.69 → 10.0.0-beta.70
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/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/annotation/RCTMGLMarkerView.kt +0 -1
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCamera.kt +10 -24
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/LocationComponentManager.kt +125 -83
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RCTMGLNativeUserLocation.kt +33 -7
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RCTMGLNativeUserLocationManager.kt +32 -0
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.kt +70 -30
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/location/LocationManager.kt +64 -25
- package/ios/RCTMGL-v10/MGLModule.swift +1 -0
- package/ios/RCTMGL-v10/RCTMGLAtmosphere.swift +1 -0
- package/ios/RCTMGL-v10/RCTMGLBackgroundLayer.swift +1 -0
- package/ios/RCTMGL-v10/RCTMGLCircleLayer.swift +1 -0
- package/ios/RCTMGL-v10/RCTMGLEvent.swift +1 -0
- package/ios/RCTMGL-v10/RCTMGLFillExtrustionLayer.swift +1 -0
- package/ios/RCTMGL-v10/RCTMGLFillLayer.swift +1 -0
- package/ios/RCTMGL-v10/RCTMGLHeatmapLayer.swift +1 -0
- package/ios/RCTMGL-v10/RCTMGLLayer.swift +4 -0
- package/ios/RCTMGL-v10/RCTMGLLight.swift +5 -3
- package/ios/RCTMGL-v10/RCTMGLLineLayer.swift +1 -0
- package/ios/RCTMGL-v10/RCTMGLLocationModule.m +4 -0
- package/ios/RCTMGL-v10/RCTMGLLocationModule.swift +101 -5
- package/ios/RCTMGL-v10/RCTMGLMapView.swift +15 -2
- package/ios/RCTMGL-v10/RCTMGLRasterLayer.swift +1 -0
- package/ios/RCTMGL-v10/RCTMGLSingletonLayer.swift +4 -0
- package/ios/RCTMGL-v10/RCTMGLSkyLayer.swift +1 -0
- package/ios/RCTMGL-v10/RCTMGLStyle.swift +58 -123
- package/ios/RCTMGL-v10/RCTMGLStyleValue.swift +51 -5
- package/ios/RCTMGL-v10/RCTMGLSymbolLayer.swift +1 -0
- package/ios/RCTMGL-v10/RCTMGLTerrain.swift +1 -0
- package/javascript/components/MapView.js +22 -2
- package/javascript/modules/location/locationManager.js +18 -0
- package/lib/commonjs/classes/AnimatedCoordinatesArray.js.map +1 -1
- package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
- package/lib/commonjs/classes/AnimatedPoint.js.map +1 -1
- package/lib/commonjs/classes/AnimatedRouteCoordinatesArray.js.map +1 -1
- package/lib/commonjs/classes/AnimatedShape.js.map +1 -1
- package/lib/commonjs/classes/index.d.js.map +1 -1
- package/lib/commonjs/classes/index.js.map +1 -1
- package/lib/commonjs/components/AbstractLayer.js.map +1 -1
- package/lib/commonjs/components/AbstractSource.js.map +1 -1
- package/lib/commonjs/components/Atmosphere.js.map +1 -1
- package/lib/commonjs/components/BackgroundLayer.js.map +1 -1
- package/lib/commonjs/components/Callout.js.map +1 -1
- package/lib/commonjs/components/Camera.js.map +1 -1
- package/lib/commonjs/components/CircleLayer.js.map +1 -1
- package/lib/commonjs/components/FillExtrusionLayer.js.map +1 -1
- package/lib/commonjs/components/FillLayer.js.map +1 -1
- package/lib/commonjs/components/HeadingIndicator.js.map +1 -1
- package/lib/commonjs/components/HeatmapLayer.js.map +1 -1
- package/lib/commonjs/components/ImageSource.js.map +1 -1
- package/lib/commonjs/components/Images.js.map +1 -1
- package/lib/commonjs/components/Light.js.map +1 -1
- package/lib/commonjs/components/LineLayer.js.map +1 -1
- package/lib/commonjs/components/MapView.js +19 -2
- package/lib/commonjs/components/MapView.js.map +1 -1
- package/lib/commonjs/components/MarkerView.js.map +1 -1
- package/lib/commonjs/components/NativeBridgeComponent.js.map +1 -1
- package/lib/commonjs/components/NativeUserLocation.js.map +1 -1
- package/lib/commonjs/components/PointAnnotation.js.map +1 -1
- package/lib/commonjs/components/RasterDemSource.js.map +1 -1
- package/lib/commonjs/components/RasterLayer.js.map +1 -1
- package/lib/commonjs/components/RasterSource.js.map +1 -1
- package/lib/commonjs/components/ShapeSource.js.map +1 -1
- package/lib/commonjs/components/SkyLayer.js.map +1 -1
- package/lib/commonjs/components/Style.js.map +1 -1
- package/lib/commonjs/components/SymbolLayer.js.map +1 -1
- 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.map +1 -1
- package/lib/commonjs/components/annotations/Annotation.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/modules/location/locationManager.js +17 -0
- package/lib/commonjs/modules/location/locationManager.js.map +1 -1
- package/lib/commonjs/modules/offline/OfflineCreatePackOptions.js.map +1 -1
- package/lib/commonjs/modules/offline/OfflinePack.js.map +1 -1
- package/lib/commonjs/modules/offline/offlineManager.js.map +1 -1
- package/lib/commonjs/modules/snapshot/SnapshotOptions.js.map +1 -1
- package/lib/commonjs/modules/snapshot/snapshotManager.js.map +1 -1
- package/lib/commonjs/requestAndroidLocationPermissions.js.map +1 -1
- package/lib/commonjs/utils/BridgeValue.js.map +1 -1
- package/lib/commonjs/utils/Logger.js.map +1 -1
- package/lib/commonjs/utils/StyleValue.js.map +1 -1
- package/lib/commonjs/utils/animated/Animated.js.map +1 -1
- package/lib/commonjs/utils/deprecation.js.map +1 -1
- package/lib/commonjs/utils/filterUtils.js.map +1 -1
- package/lib/commonjs/utils/geoUtils.js.map +1 -1
- package/lib/commonjs/utils/getAnnotationsLayerID.js.map +1 -1
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/utils/styleMap.js.map +1 -1
- package/lib/commonjs/web/MapContext.js.map +1 -1
- package/lib/commonjs/web/MapboxModule.js.map +1 -1
- package/lib/commonjs/web/UnimplementedComponent.js.map +1 -1
- package/lib/commonjs/web/components/Camera.js.map +1 -1
- package/lib/commonjs/web/components/MapView.js.map +1 -1
- package/lib/commonjs/web/index.js.map +1 -1
- package/lib/commonjs/web/utils/Logger.js.map +1 -1
- package/lib/module/classes/AnimatedCoordinatesArray.js.map +1 -1
- package/lib/module/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
- package/lib/module/classes/AnimatedPoint.js.map +1 -1
- package/lib/module/classes/AnimatedRouteCoordinatesArray.js.map +1 -1
- package/lib/module/classes/AnimatedShape.js.map +1 -1
- package/lib/module/components/AbstractLayer.js.map +1 -1
- package/lib/module/components/AbstractSource.js.map +1 -1
- package/lib/module/components/Atmosphere.js.map +1 -1
- package/lib/module/components/BackgroundLayer.js.map +1 -1
- package/lib/module/components/Callout.js.map +1 -1
- package/lib/module/components/Camera.js.map +1 -1
- package/lib/module/components/CircleLayer.js.map +1 -1
- package/lib/module/components/FillExtrusionLayer.js.map +1 -1
- package/lib/module/components/FillLayer.js.map +1 -1
- package/lib/module/components/HeadingIndicator.js.map +1 -1
- package/lib/module/components/HeatmapLayer.js.map +1 -1
- package/lib/module/components/ImageSource.js.map +1 -1
- package/lib/module/components/Images.js.map +1 -1
- package/lib/module/components/Light.js.map +1 -1
- package/lib/module/components/LineLayer.js.map +1 -1
- package/lib/module/components/MapView.js +19 -2
- package/lib/module/components/MapView.js.map +1 -1
- package/lib/module/components/MarkerView.js.map +1 -1
- package/lib/module/components/NativeBridgeComponent.js.map +1 -1
- package/lib/module/components/NativeUserLocation.js.map +1 -1
- package/lib/module/components/PointAnnotation.js.map +1 -1
- package/lib/module/components/RasterDemSource.js.map +1 -1
- package/lib/module/components/RasterLayer.js.map +1 -1
- package/lib/module/components/RasterSource.js.map +1 -1
- package/lib/module/components/ShapeSource.js.map +1 -1
- package/lib/module/components/SkyLayer.js.map +1 -1
- package/lib/module/components/Style.js.map +1 -1
- package/lib/module/components/SymbolLayer.js.map +1 -1
- package/lib/module/components/Terrain.js.map +1 -1
- package/lib/module/components/UserLocation.js +2 -4
- package/lib/module/components/UserLocation.js.map +1 -1
- package/lib/module/components/VectorSource.js.map +1 -1
- package/lib/module/components/annotations/Annotation.js.map +1 -1
- package/lib/module/modules/location/locationManager.js +17 -0
- package/lib/module/modules/location/locationManager.js.map +1 -1
- package/lib/module/modules/offline/OfflineCreatePackOptions.js.map +1 -1
- package/lib/module/modules/offline/OfflinePack.js.map +1 -1
- package/lib/module/modules/offline/offlineManager.js.map +1 -1
- package/lib/module/modules/snapshot/SnapshotOptions.js.map +1 -1
- package/lib/module/modules/snapshot/snapshotManager.js.map +1 -1
- package/lib/module/requestAndroidLocationPermissions.js.map +1 -1
- package/lib/module/utils/BridgeValue.js.map +1 -1
- package/lib/module/utils/Logger.js.map +1 -1
- package/lib/module/utils/StyleValue.js.map +1 -1
- package/lib/module/utils/deprecation.js.map +1 -1
- package/lib/module/utils/filterUtils.js.map +1 -1
- package/lib/module/utils/geoUtils.js.map +1 -1
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/utils/styleMap.js.map +1 -1
- package/lib/module/web/UnimplementedComponent.js.map +1 -1
- package/lib/module/web/components/Camera.js.map +1 -1
- package/lib/module/web/components/MapView.js.map +1 -1
- package/lib/module/web/utils/Logger.js.map +1 -1
- package/package.json +1 -1
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RCTMGLNativeUserLocationManager.java +0 -34
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RenderMode.kt +0 -21
|
@@ -3,8 +3,6 @@ package com.mapbox.rctmgl.location
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.content.Context
|
|
5
5
|
import android.location.Location
|
|
6
|
-
//import com.mapbox.maps.plugin.locationcomponent.LocationConsumer.onLocationUpdated
|
|
7
|
-
//import com.mapbox.maps.plugin.locationcomponent.LocationConsumer.onBearingUpdated
|
|
8
6
|
import com.mapbox.android.core.location.LocationEngine
|
|
9
7
|
import com.mapbox.android.core.location.LocationEngineCallback
|
|
10
8
|
import com.mapbox.android.core.location.LocationEngineResult
|
|
@@ -20,9 +18,52 @@ import java.lang.ref.WeakReference
|
|
|
20
18
|
import java.util.ArrayList
|
|
21
19
|
import kotlin.Exception
|
|
22
20
|
|
|
23
|
-
|
|
21
|
+
|
|
22
|
+
open class SingletonHolder<out T, in A>(creator: (A) -> T) {
|
|
23
|
+
private var creator: ((A) -> T)? = creator
|
|
24
|
+
@Volatile private var instance: T? = null
|
|
25
|
+
|
|
26
|
+
fun getInstance(arg: A): T {
|
|
27
|
+
val i = instance
|
|
28
|
+
if (i != null) {
|
|
29
|
+
return i
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return synchronized(this) {
|
|
33
|
+
val i2 = instance
|
|
34
|
+
if (i2 != null) {
|
|
35
|
+
i2
|
|
36
|
+
} else {
|
|
37
|
+
val created = creator!!(arg)
|
|
38
|
+
instance = created
|
|
39
|
+
creator = null
|
|
40
|
+
created
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
internal class LocationProviderForEngine(var mEngine: LocationEngine?, val context: Context) : LocationProvider, LocationEngineCallback<LocationEngineResult> {
|
|
24
47
|
var mConsumers = ArrayList<LocationConsumer>()
|
|
25
|
-
|
|
48
|
+
@SuppressLint("MissingPermission")
|
|
49
|
+
fun beforeAddingFirstConsumer() {
|
|
50
|
+
val request = LocationEngineRequest.Builder(LocationManager.DEFAULT_INTERVAL_MILLIS
|
|
51
|
+
)
|
|
52
|
+
.setFastestInterval(LocationManager.DEFAULT_FASTEST_INTERVAL_MILLIS)
|
|
53
|
+
.setPriority(LocationEngineRequest.PRIORITY_HIGH_ACCURACY)
|
|
54
|
+
.build();
|
|
55
|
+
|
|
56
|
+
if (!PermissionsManager.areLocationPermissionsGranted(context)) {
|
|
57
|
+
return
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
mEngine?.requestLocationUpdates(
|
|
61
|
+
request,
|
|
62
|
+
this,
|
|
63
|
+
Looper.getMainLooper()
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
}
|
|
26
67
|
fun afterRemovedLastConsumer() {}
|
|
27
68
|
@SuppressLint("MissingPermission")
|
|
28
69
|
override fun registerLocationConsumer(locationConsumer: LocationConsumer) {
|
|
@@ -66,25 +107,29 @@ class LocationManager private constructor(private val context: Context) : Locati
|
|
|
66
107
|
private var isActive = false
|
|
67
108
|
private var lastLocation: Location? = null
|
|
68
109
|
private var locationEngineRequest: LocationEngineRequest? = null
|
|
69
|
-
private var locationProvider:
|
|
70
|
-
private var nStarts : Int = 0
|
|
71
|
-
private var isPaused : Boolean = false
|
|
72
|
-
|
|
110
|
+
private var locationProvider: LocationProvider? = null
|
|
111
|
+
private var nStarts : Int = 0
|
|
112
|
+
private var isPaused : Boolean = false
|
|
73
113
|
|
|
74
|
-
|
|
75
|
-
val provider: LocationProvider
|
|
114
|
+
var provider: LocationProvider
|
|
76
115
|
get() {
|
|
77
|
-
|
|
78
|
-
|
|
116
|
+
var ret = locationProvider
|
|
117
|
+
if (ret == null) {
|
|
118
|
+
val engine = LocationProviderForEngine(engine, context)
|
|
119
|
+
locationProvider = engine
|
|
120
|
+
return engine
|
|
121
|
+
} else {
|
|
122
|
+
return ret
|
|
79
123
|
}
|
|
80
|
-
|
|
124
|
+
}
|
|
125
|
+
set(value) {
|
|
126
|
+
locationProvider = value
|
|
81
127
|
}
|
|
82
128
|
|
|
83
129
|
interface OnUserLocationChange {
|
|
84
130
|
fun onLocationChange(location: Location?)
|
|
85
131
|
}
|
|
86
132
|
|
|
87
|
-
|
|
88
133
|
/// public interface
|
|
89
134
|
|
|
90
135
|
fun startCounted() {
|
|
@@ -228,23 +273,17 @@ class LocationManager private constructor(private val context: Context) : Locati
|
|
|
228
273
|
|
|
229
274
|
override fun onSuccess(result: LocationEngineResult?) {
|
|
230
275
|
onLocationChanged(result?.lastLocation)
|
|
231
|
-
|
|
232
|
-
|
|
276
|
+
val provider = locationProvider
|
|
277
|
+
if (provider != null && provider is LocationProviderForEngine) {
|
|
278
|
+
provider.onSuccess(result)
|
|
233
279
|
}
|
|
234
280
|
}
|
|
235
281
|
|
|
236
|
-
companion object {
|
|
282
|
+
companion object : SingletonHolder<LocationManager, Context>(::LocationManager) {
|
|
237
283
|
const val DEFAULT_FASTEST_INTERVAL_MILLIS: Long = 1000
|
|
238
284
|
const val DEFAULT_INTERVAL_MILLIS: Long = 1000
|
|
239
285
|
const val LOG_TAG = "LocationManager"
|
|
240
|
-
|
|
241
|
-
@JvmStatic
|
|
242
|
-
fun getInstance(context: Context): LocationManager? {
|
|
243
|
-
if (INSTANCE == null) {
|
|
244
|
-
INSTANCE = WeakReference(LocationManager(context))
|
|
245
|
-
}
|
|
246
|
-
return INSTANCE!!.get()
|
|
247
|
-
}
|
|
286
|
+
|
|
248
287
|
}
|
|
249
288
|
|
|
250
289
|
init {
|
|
@@ -55,6 +55,7 @@ class MGLModule : NSObject {
|
|
|
55
55
|
"WillStartLoadingMap": RCTMGLEvent.EventType.willStartLoadingMap.rawValue,
|
|
56
56
|
"DidFinishLoadingStyle": RCTMGLEvent.EventType.didFinishLoadingStyle.rawValue,
|
|
57
57
|
"DidFinishLoadingMap": RCTMGLEvent.EventType.didFinishLoadingMap.rawValue,
|
|
58
|
+
"MapLoadingError": RCTMGLEvent.EventType.mapLoadingError.rawValue,
|
|
58
59
|
"DidFinishRenderingFrameFully": RCTMGLEvent.EventType.didFinishRenderingFully.rawValue,
|
|
59
60
|
"DidFinishRenderingFrame": RCTMGLEvent.EventType.didFinishRendering.rawValue,
|
|
60
61
|
],
|
|
@@ -56,6 +56,7 @@ class RCTMGLAtmosphere : RCTMGLSingletonLayer, RCTMGLMapComponent, RCTMGLSourceC
|
|
|
56
56
|
styler.atmosphereLayer(
|
|
57
57
|
layer: &atmosphere,
|
|
58
58
|
reactStyle: reactStyle,
|
|
59
|
+
oldReactStyle: oldReactStyle,
|
|
59
60
|
applyUpdater: { (updater) in fatalError("Atmosphere: TODO - implement apply updater")},
|
|
60
61
|
isValid: { fatalError("Atmosphere: TODO - no isValid") }
|
|
61
62
|
)
|
|
@@ -33,6 +33,7 @@ class RCTMGLBackgroundLayer: RCTMGLLayer {
|
|
|
33
33
|
styler.backgroundLayer(
|
|
34
34
|
layer: &styleLayer,
|
|
35
35
|
reactStyle: reactStyle,
|
|
36
|
+
oldReactStyle: oldReatStyle,
|
|
36
37
|
applyUpdater: { (updater) in logged("RCTMGLBackgroundLayer.addStyles") {
|
|
37
38
|
try style.updateLayer(withId: self.id, type: LayerType.self) { (layer: inout LayerType) in updater(&layer) }
|
|
38
39
|
}},
|
|
@@ -34,6 +34,7 @@ class RCTMGLCircleLayer: RCTMGLVectorLayer {
|
|
|
34
34
|
styler.circleLayer(
|
|
35
35
|
layer: &styleLayer,
|
|
36
36
|
reactStyle: reactStyle,
|
|
37
|
+
oldReactStyle: oldReatStyle,
|
|
37
38
|
applyUpdater: { (updater) in logged("RCTMGLCircleLayer.updateLayer") {
|
|
38
39
|
try style.updateLayer(withId: self.id, type: LayerType.self) { (layer: inout LayerType) in updater(&layer) }
|
|
39
40
|
}},
|
|
@@ -33,6 +33,7 @@ class RCTMGLFillExtrusionLayer: RCTMGLVectorLayer {
|
|
|
33
33
|
styler.fillExtrusionLayer(
|
|
34
34
|
layer: &styleLayer,
|
|
35
35
|
reactStyle: reactStyle,
|
|
36
|
+
oldReactStyle: oldReatStyle,
|
|
36
37
|
applyUpdater: { (updater) in logged("RCTMGLFillExtrusionLayer.updateLayer") {
|
|
37
38
|
try style.updateLayer(withId: self.id, type: LayerType.self) { (layer: inout LayerType) in updater(&layer) }
|
|
38
39
|
}},
|
|
@@ -35,6 +35,7 @@ class RCTMGLFillLayer: RCTMGLVectorLayer {
|
|
|
35
35
|
styler.fillLayer(
|
|
36
36
|
layer: &styleLayer,
|
|
37
37
|
reactStyle: reactStyle,
|
|
38
|
+
oldReactStyle: oldReatStyle,
|
|
38
39
|
applyUpdater: { (updater) in logged("RCTMGLFillLayer.updateLayer") {
|
|
39
40
|
try style.updateLayer(withId: self.id, type: LayerType.self) { (layer: inout FillLayer) in updater(&layer) }
|
|
40
41
|
}},
|
|
@@ -35,6 +35,7 @@ class RCTMGLHeatmapLayer: RCTMGLVectorLayer {
|
|
|
35
35
|
styler.heatmapLayer(
|
|
36
36
|
layer: &styleLayer,
|
|
37
37
|
reactStyle: reactStyle,
|
|
38
|
+
oldReactStyle: oldReatStyle,
|
|
38
39
|
applyUpdater: { (updater) in logged("RCTMGLHeatmapLayer.updateLayer") {
|
|
39
40
|
try style.updateLayer(withId: self.id, type: LayerType.self) { (layer: inout HeatmapLayer) in updater(&layer) }
|
|
40
41
|
}},
|
|
@@ -13,7 +13,11 @@ class RCTMGLLayer : UIView, RCTMGLMapComponent, RCTMGLSourceConsumer {
|
|
|
13
13
|
didSet { self.optionsChanged() }
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
var oldReatStyle: Dictionary<String, Any>? = nil
|
|
16
17
|
@objc var reactStyle : Dictionary<String, Any>? = nil {
|
|
18
|
+
willSet {
|
|
19
|
+
oldReatStyle = reactStyle
|
|
20
|
+
}
|
|
17
21
|
didSet {
|
|
18
22
|
DispatchQueue.main.async {
|
|
19
23
|
self.addStylesAndUpdate()
|
|
@@ -4,7 +4,11 @@ import MapboxMaps
|
|
|
4
4
|
class RCTMGLLight: UIView, RCTMGLMapComponent {
|
|
5
5
|
weak var bridge : RCTBridge! = nil
|
|
6
6
|
weak var map: MapboxMap! = nil
|
|
7
|
+
var oldReactStyle: [String:Any]?
|
|
7
8
|
@objc var reactStyle : [String:Any]! = nil {
|
|
9
|
+
willSet {
|
|
10
|
+
oldReactStyle = reactStyle
|
|
11
|
+
}
|
|
8
12
|
didSet {
|
|
9
13
|
if map != nil {
|
|
10
14
|
addStyles()
|
|
@@ -13,17 +17,15 @@ class RCTMGLLight: UIView, RCTMGLMapComponent {
|
|
|
13
17
|
}
|
|
14
18
|
|
|
15
19
|
func apply(light: Light) {
|
|
16
|
-
self.map.style
|
|
17
20
|
let lightData = try! JSONEncoder().encode(light)
|
|
18
21
|
let lightDictionary = try! JSONSerialization.jsonObject(with: lightData)
|
|
19
|
-
print("=> lightDictionary \(lightDictionary)")
|
|
20
22
|
try! self.map.style.setLight(properties: lightDictionary as! [String:Any])
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
func addStyles() {
|
|
24
26
|
var light = Light()
|
|
25
27
|
let style = RCTMGLStyle(style: map.style)
|
|
26
|
-
style.lightLayer(layer: &light, reactStyle: reactStyle, applyUpdater: { (updater) in
|
|
28
|
+
style.lightLayer(layer: &light, reactStyle: reactStyle, oldReactStyle: oldReactStyle, applyUpdater: { (updater) in
|
|
27
29
|
updater(&light)
|
|
28
30
|
self.apply(light: light)
|
|
29
31
|
}, isValid: {
|
|
@@ -37,6 +37,7 @@ class RCTMGLLineLayer: RCTMGLVectorLayer {
|
|
|
37
37
|
styler.lineLayer(
|
|
38
38
|
layer: &styleLayer,
|
|
39
39
|
reactStyle: reactStyle,
|
|
40
|
+
oldReactStyle: oldReatStyle,
|
|
40
41
|
applyUpdater: { (updater) in logged("RCTMGLLineLayer.updateLayer") {
|
|
41
42
|
try style.updateLayer(withId: self.id, type: LayerType.self) { (layer: inout LayerType) in updater(&layer) }
|
|
42
43
|
}},
|
|
@@ -12,5 +12,9 @@ RCT_EXTERN_METHOD(getLastKnownLocation)
|
|
|
12
12
|
RCT_EXTERN_METHOD(setMinDisplacement:(CLLocationDistance)minDisplacement)
|
|
13
13
|
RCT_EXTERN_METHOD(setRequestsAlwaysUse:(BOOL)requestsAlwaysUse)
|
|
14
14
|
|
|
15
|
+
RCT_EXTERN_METHOD(setLocationEventThrottle:(NSNumber *)throttleValue)
|
|
16
|
+
|
|
17
|
+
RCT_EXTERN_METHOD(simulateHeading:(nonnull NSNumber)changesPerSecond increment:(nonnull NSNumber))
|
|
18
|
+
|
|
15
19
|
|
|
16
20
|
@end
|
|
@@ -57,6 +57,10 @@ class RCTMGLLocationManager : LocationProviderDelegate {
|
|
|
57
57
|
weak var delegate: RCTMGLLocationManagerDelegate?
|
|
58
58
|
weak var locationProviderDelage: LocationProviderDelegate?
|
|
59
59
|
|
|
60
|
+
var headingSimulator: Timer? = nil
|
|
61
|
+
var simulatedHeading: Double = 0.0
|
|
62
|
+
var simulatedHeadingIncrement: Double = 1.0
|
|
63
|
+
|
|
60
64
|
init() {
|
|
61
65
|
provider = AppleLocationProvider()
|
|
62
66
|
provider.setDelegate(self)
|
|
@@ -219,6 +223,54 @@ extension RCTMGLLocationManager: LocationProvider {
|
|
|
219
223
|
}
|
|
220
224
|
}
|
|
221
225
|
|
|
226
|
+
// MARK: heading simulation
|
|
227
|
+
|
|
228
|
+
final public class SimulatedHeading: CLHeading {
|
|
229
|
+
init(trueHeading: CLLocationDirection, timestamp: Date) {
|
|
230
|
+
_trueHeading = trueHeading
|
|
231
|
+
_timestamp = timestamp
|
|
232
|
+
super.init()
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
required init?(coder: NSCoder) {
|
|
236
|
+
fatalError("init(coder:) has not been implemented")
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
private var _trueHeading: CLLocationDirection = 0
|
|
240
|
+
private var _timestamp: Date
|
|
241
|
+
|
|
242
|
+
public override var trueHeading: CLLocationDirection {
|
|
243
|
+
get { _trueHeading }
|
|
244
|
+
set { _trueHeading = newValue }
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
public override var timestamp: Date{
|
|
248
|
+
get { _timestamp }
|
|
249
|
+
set { _timestamp = newValue }
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
extension RCTMGLLocationManager {
|
|
254
|
+
func simulateHeading(changesPerSecond: Int, increment: Double) {
|
|
255
|
+
self.simulatedHeadingIncrement = increment
|
|
256
|
+
DispatchQueue.main.async {
|
|
257
|
+
if let headingSimulator = self.headingSimulator {
|
|
258
|
+
headingSimulator.invalidate()
|
|
259
|
+
}
|
|
260
|
+
self.headingSimulator = nil
|
|
261
|
+
|
|
262
|
+
if (changesPerSecond > 0) {
|
|
263
|
+
self.headingSimulator = Timer.scheduledTimer(withTimeInterval: 1.0/Double(changesPerSecond), repeats: true) { [weak self] (_) in
|
|
264
|
+
guard let self = self else { return }
|
|
265
|
+
|
|
266
|
+
self.simulatedHeading = (self.simulatedHeading + self.simulatedHeadingIncrement).truncatingRemainder(dividingBy: 360.0)
|
|
267
|
+
self.locationProvider(self.provider, didUpdateHeading: SimulatedHeading(trueHeading: self.simulatedHeading, timestamp: Date()) )
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
222
274
|
|
|
223
275
|
@objc(RCTMGLLocationModule)
|
|
224
276
|
class RCTMGLLocationModule: RCTEventEmitter, RCTMGLLocationManagerDelegate {
|
|
@@ -234,6 +286,14 @@ class RCTMGLLocationModule: RCTEventEmitter, RCTMGLLocationManagerDelegate {
|
|
|
234
286
|
}
|
|
235
287
|
}
|
|
236
288
|
|
|
289
|
+
var locationEventThrottle : (
|
|
290
|
+
waitBetweenEvents: Double?,
|
|
291
|
+
lastSentTimestamp: Double?
|
|
292
|
+
) = (
|
|
293
|
+
nil,
|
|
294
|
+
nil
|
|
295
|
+
)
|
|
296
|
+
|
|
237
297
|
override init() {
|
|
238
298
|
locationManager = RCTMGLLocationManager()
|
|
239
299
|
super.init()
|
|
@@ -277,6 +337,10 @@ class RCTMGLLocationModule: RCTEventEmitter, RCTMGLLocationManagerDelegate {
|
|
|
277
337
|
locationManager.setRequestsAlwaysUse(requestsAlwaysUse);
|
|
278
338
|
}
|
|
279
339
|
|
|
340
|
+
@objc func simulateHeading(_ changesPerSecond: NSNumber, increment: NSNumber) {
|
|
341
|
+
locationManager.simulateHeading(changesPerSecond: changesPerSecond.intValue, increment: increment.doubleValue)
|
|
342
|
+
}
|
|
343
|
+
|
|
280
344
|
@objc
|
|
281
345
|
override func startObserving() {
|
|
282
346
|
super.startObserving()
|
|
@@ -290,14 +354,46 @@ class RCTMGLLocationModule: RCTEventEmitter, RCTMGLLocationManagerDelegate {
|
|
|
290
354
|
}
|
|
291
355
|
|
|
292
356
|
func locationManager(_ locationManager: RCTMGLLocationManager, didUpdateLocation location: RCTMGLLocation) {
|
|
293
|
-
guard hasListener else {
|
|
357
|
+
guard hasListener, let _ = bridge else {
|
|
294
358
|
return
|
|
295
359
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
360
|
+
|
|
361
|
+
if shouldSendLocationEvent() {
|
|
362
|
+
self.sendEvent(withName: RCT_MAPBOX_USER_LOCATION_UPDATE, body: location.toJSON())
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// MARK: - location event throttle
|
|
367
|
+
@objc
|
|
368
|
+
func setLocationEventThrottle(_ throttleValue:NSNumber) {
|
|
369
|
+
let throttleValue = throttleValue.doubleValue
|
|
370
|
+
if throttleValue > 0.0 {
|
|
371
|
+
locationEventThrottle.waitBetweenEvents = throttleValue
|
|
372
|
+
} else {
|
|
373
|
+
locationEventThrottle.waitBetweenEvents = nil
|
|
299
374
|
}
|
|
375
|
+
}
|
|
300
376
|
|
|
301
|
-
|
|
377
|
+
func shouldSendLocationEvent() -> Bool {
|
|
378
|
+
guard let waitBetweenEvents = locationEventThrottle.waitBetweenEvents, waitBetweenEvents > 0 else {
|
|
379
|
+
return true
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
let currentTimestamp: Double = CACurrentMediaTime() * 1000.0
|
|
383
|
+
|
|
384
|
+
guard let lastSentTimestamp = locationEventThrottle.lastSentTimestamp else {
|
|
385
|
+
locationEventThrottle.lastSentTimestamp = currentTimestamp
|
|
386
|
+
return true;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
if (currentTimestamp - lastSentTimestamp > waitBetweenEvents) {
|
|
390
|
+
locationEventThrottle.lastSentTimestamp = currentTimestamp
|
|
391
|
+
return true;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
return false;
|
|
302
395
|
}
|
|
396
|
+
|
|
303
397
|
}
|
|
398
|
+
|
|
399
|
+
|
|
@@ -445,8 +445,21 @@ extension RCTMGLMapView {
|
|
|
445
445
|
}
|
|
446
446
|
|
|
447
447
|
public func setupEvents() {
|
|
448
|
-
self.onEvery(event: .mapLoadingError, handler: {(self, event) in
|
|
449
|
-
|
|
448
|
+
self.onEvery(event: .mapLoadingError, handler: { (self, event) in
|
|
449
|
+
let eventPayload : MapLoadingErrorPayload = event.payload
|
|
450
|
+
var payload : [String:String] = [
|
|
451
|
+
"error": eventPayload.error.errorDescription ?? eventPayload.error.localizedDescription
|
|
452
|
+
]
|
|
453
|
+
if let tileId = eventPayload.tileId {
|
|
454
|
+
payload["tileId"] = "x:\(tileId.x) y:\(tileId.y) z:\(tileId.z)"
|
|
455
|
+
}
|
|
456
|
+
if let sourceId = eventPayload.sourceId {
|
|
457
|
+
payload["sourceId"] = sourceId
|
|
458
|
+
}
|
|
459
|
+
let rctmglEvent = RCTMGLEvent(type: .mapLoadingError, payload: payload);
|
|
460
|
+
self.fireEvent(event: rctmglEvent, callback: self.reactOnMapChange)
|
|
461
|
+
|
|
462
|
+
if let message = eventPayload.error.errorDescription {
|
|
450
463
|
Logger.log(level: .error, message: "MapLoad error \(message)")
|
|
451
464
|
} else {
|
|
452
465
|
Logger.log(level: .error, message: "MapLoad error \(event)")
|
|
@@ -29,6 +29,7 @@ class RCTMGLRasterLayer: RCTMGLLayer {
|
|
|
29
29
|
styler.rasterLayer(
|
|
30
30
|
layer: &styleLayer,
|
|
31
31
|
reactStyle: reactStyle,
|
|
32
|
+
oldReactStyle: oldReatStyle,
|
|
32
33
|
applyUpdater:{ (updater) in logged("RCTMGLRasterLayer.updateLayer") {
|
|
33
34
|
try style.updateLayer(withId: self.id, type: LayerType.self) { (layer: inout LayerType) in updater(&layer) }
|
|
34
35
|
}},
|
|
@@ -7,7 +7,11 @@ class RCTMGLSingletonLayer : UIView {
|
|
|
7
7
|
weak var map : RCTMGLMapView? = nil
|
|
8
8
|
var style: Style? = nil
|
|
9
9
|
|
|
10
|
+
var oldReactStyle: [String:Any]?
|
|
10
11
|
@objc var reactStyle : Dictionary<String, Any>? = nil {
|
|
12
|
+
willSet {
|
|
13
|
+
oldReactStyle = reactStyle
|
|
14
|
+
}
|
|
11
15
|
didSet {
|
|
12
16
|
DispatchQueue.main.async {
|
|
13
17
|
self.addStylesAndUpdate()
|
|
@@ -32,6 +32,7 @@ class RCTMGLSkyLayer: RCTMGLLayer {
|
|
|
32
32
|
styler.skyLayer(
|
|
33
33
|
layer: &styleLayer,
|
|
34
34
|
reactStyle: reactStyle,
|
|
35
|
+
oldReactStyle: oldReatStyle,
|
|
35
36
|
applyUpdater: { (updater) in logged("RCTMGLSkyLayer.addStyles") {
|
|
36
37
|
try style.updateLayer(withId: self.id, type: LayerType.self) { (layer: inout LayerType) in updater(&layer) }
|
|
37
38
|
}},
|