@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
package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/annotation/RCTMGLMarkerView.kt
CHANGED
|
@@ -13,7 +13,6 @@ import com.mapbox.maps.ViewAnnotationOptions
|
|
|
13
13
|
import com.mapbox.maps.viewannotation.viewAnnotationOptions
|
|
14
14
|
import com.mapbox.rctmgl.components.AbstractMapFeature
|
|
15
15
|
import com.mapbox.rctmgl.components.mapview.RCTMGLMapView
|
|
16
|
-
import com.mapbox.rctmgl.modules.RCTMGLLogging
|
|
17
16
|
import com.mapbox.rctmgl.utils.Logger
|
|
18
17
|
import java.util.Vector
|
|
19
18
|
|
package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCamera.kt
CHANGED
|
@@ -3,34 +3,17 @@ package com.mapbox.rctmgl.components.camera
|
|
|
3
3
|
import android.animation.Animator
|
|
4
4
|
import android.content.Context
|
|
5
5
|
import android.location.Location
|
|
6
|
-
import com.mapbox.rctmgl.utils.GeoJSONUtils.toPoint
|
|
7
6
|
import com.mapbox.maps.plugin.gestures.gestures
|
|
8
7
|
import com.mapbox.rctmgl.location.LocationManager.Companion.getInstance
|
|
9
|
-
import com.mapbox.maps.plugin.animation.camera
|
|
10
|
-
import com.mapbox.rctmgl.utils.GeoJSONUtils.toLocation
|
|
11
|
-
import com.mapbox.maps.plugin.animation.MapAnimationOptions.Builder
|
|
12
8
|
import com.mapbox.maps.plugin.animation.flyTo
|
|
13
|
-
import com.mapbox.rctmgl.components.camera.RCTMGLCameraManager
|
|
14
9
|
import com.mapbox.rctmgl.components.AbstractMapFeature
|
|
15
10
|
import com.mapbox.rctmgl.components.mapview.RCTMGLMapView
|
|
16
|
-
import com.mapbox.rctmgl.components.camera.CameraStop
|
|
17
|
-
import com.mapbox.rctmgl.components.camera.CameraUpdateQueue
|
|
18
11
|
import com.mapbox.rctmgl.components.location.LocationComponentManager
|
|
19
12
|
import com.mapbox.rctmgl.utils.LatLngBounds
|
|
20
|
-
import com.mapbox.rctmgl.location.LocationManager.OnUserLocationChange
|
|
21
|
-
import com.mapbox.rctmgl.utils.GeoJSONUtils
|
|
22
13
|
import com.mapbox.maps.plugin.locationcomponent.OnIndicatorBearingChangedListener
|
|
23
14
|
import com.mapbox.maps.plugin.locationcomponent.OnIndicatorPositionChangedListener
|
|
24
|
-
import com.mapbox.rctmgl.components.camera.CameraUpdateItem
|
|
25
|
-
import com.mapbox.rctmgl.events.IEvent
|
|
26
|
-
import com.mapbox.rctmgl.events.MapChangeEvent
|
|
27
|
-
import com.mapbox.rctmgl.events.constants.EventTypes
|
|
28
|
-
import com.mapbox.rctmgl.components.camera.RCTMGLCamera
|
|
29
|
-
import com.mapbox.android.core.permissions.PermissionsManager
|
|
30
|
-
import com.mapbox.maps.plugin.animation.CameraAnimationsPlugin
|
|
31
15
|
import com.facebook.react.bridge.WritableMap
|
|
32
16
|
import com.facebook.react.bridge.WritableNativeMap
|
|
33
|
-
import com.mapbox.geojson.Point
|
|
34
17
|
import com.mapbox.maps.*
|
|
35
18
|
import com.mapbox.maps.plugin.PuckBearingSource
|
|
36
19
|
import com.mapbox.maps.plugin.locationcomponent.location
|
|
@@ -41,8 +24,6 @@ import com.mapbox.maps.plugin.viewport.viewport
|
|
|
41
24
|
import com.mapbox.rctmgl.components.camera.constants.CameraMode
|
|
42
25
|
import com.mapbox.rctmgl.components.location.*
|
|
43
26
|
import com.mapbox.rctmgl.location.*
|
|
44
|
-
import com.mapbox.rctmgl.modules.RCTMGLLogging
|
|
45
|
-
import com.mapbox.rctmgl.utils.LatLng
|
|
46
27
|
import com.mapbox.rctmgl.utils.Logger
|
|
47
28
|
|
|
48
29
|
|
|
@@ -224,7 +205,7 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
|
|
|
224
205
|
if (mLocationComponentManager == null) {
|
|
225
206
|
mLocationComponentManager = mMapView!!.locationComponentManager
|
|
226
207
|
}
|
|
227
|
-
mLocationComponentManager!!.update(
|
|
208
|
+
mLocationComponentManager!!.update()
|
|
228
209
|
}
|
|
229
210
|
|
|
230
211
|
fun setMinZoomLevel(zoomLevel: Double?) {
|
|
@@ -290,6 +271,11 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
|
|
|
290
271
|
mMapView?.let {
|
|
291
272
|
val map = it
|
|
292
273
|
val viewport = map.viewport;
|
|
274
|
+
|
|
275
|
+
if (mLocationComponentManager == null) {
|
|
276
|
+
mLocationComponentManager = it.locationComponentManager
|
|
277
|
+
}
|
|
278
|
+
|
|
293
279
|
if (mFollowUserLocation == false) {
|
|
294
280
|
viewport.idle()
|
|
295
281
|
mLocationComponentManager?.setFollowLocation(false)
|
|
@@ -298,10 +284,10 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
|
|
|
298
284
|
|
|
299
285
|
mLocationComponentManager?.setFollowLocation(true)
|
|
300
286
|
mLocationManager?.let {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
287
|
+
val provider = map.location.getLocationProvider()
|
|
288
|
+
if (provider != null) {
|
|
289
|
+
it.provider = provider
|
|
290
|
+
}
|
|
305
291
|
}
|
|
306
292
|
|
|
307
293
|
val location = map.location2
|
|
@@ -2,124 +2,166 @@ package com.mapbox.rctmgl.components.location
|
|
|
2
2
|
|
|
3
3
|
import android.content.Context
|
|
4
4
|
import android.graphics.Color
|
|
5
|
+
import android.graphics.drawable.Drawable
|
|
5
6
|
import android.graphics.drawable.VectorDrawable
|
|
6
7
|
import androidx.appcompat.content.res.AppCompatResources
|
|
8
|
+
import androidx.lifecycle.Lifecycle
|
|
7
9
|
import com.mapbox.maps.plugin.locationcomponent.location
|
|
8
10
|
import com.mapbox.rctmgl.components.mapview.RCTMGLMapView
|
|
9
|
-
import com.mapbox.maps.Style
|
|
10
11
|
import com.mapbox.maps.plugin.LocationPuck2D
|
|
12
|
+
import com.mapbox.maps.plugin.PuckBearingSource
|
|
13
|
+
import com.mapbox.maps.plugin.lifecycle.lifecycle
|
|
11
14
|
import com.mapbox.rctmgl.R
|
|
12
15
|
import com.mapbox.rctmgl.location.LocationManager
|
|
13
16
|
|
|
14
17
|
/**
|
|
15
18
|
* The LocationComponent on android implements display of user's current location.
|
|
16
|
-
* But viewport seems to be tied to it in the sense that if location is not
|
|
19
|
+
* But viewport seems to be tied to it in the sense that if location is not enabled then it's viewport user tracking is not working.
|
|
17
20
|
* LocationComponentManager attempts to separate that, so that Camera can ask for location tracking independent of display of user current location.
|
|
18
21
|
* And NativeUserLocation can ask for display of user's current location - independent of Camera's user tracking.
|
|
19
22
|
*/
|
|
20
23
|
class LocationComponentManager(mapView: RCTMGLMapView, context: Context) {
|
|
21
|
-
private var mShowNativeUserLocation = false
|
|
22
|
-
private var mFollowLocation = false
|
|
23
24
|
var mMapView = mapView
|
|
24
25
|
var mContext = context
|
|
25
|
-
var mState = State(
|
|
26
|
-
|
|
26
|
+
private var mState = State(showUserLocation=false, followUserLocation=false, hidden=false, tintColor= null, bearingImage = null, puckBearingSource =null)
|
|
27
|
+
|
|
28
|
+
private var mLocationManager: LocationManager = LocationManager.getInstance(context)
|
|
29
|
+
|
|
30
|
+
private var mNeedsFullUpdate = true
|
|
31
|
+
|
|
32
|
+
private var mLocationManagerStarted = false
|
|
27
33
|
|
|
28
34
|
data class State(
|
|
29
|
-
val
|
|
35
|
+
val showUserLocation: Boolean,
|
|
36
|
+
val followUserLocation: Boolean,
|
|
30
37
|
val hidden: Boolean, // in case it isn't native
|
|
31
38
|
val tintColor: Int?, // tint of location puck
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
_applyChanges()
|
|
39
|
+
var bearingImage: Drawable?, // bearing image (background)
|
|
40
|
+
var puckBearingSource: PuckBearingSource? // bearing source
|
|
41
|
+
) {
|
|
42
|
+
val enabled: Boolean
|
|
43
|
+
get() = showUserLocation || followUserLocation
|
|
38
44
|
}
|
|
39
45
|
|
|
40
|
-
fun
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
fun update(newStateCallback: (currentState: State) -> State) {
|
|
47
|
+
val newState = newStateCallback(mState);
|
|
48
|
+
if (newState != mState) {
|
|
49
|
+
applyStateChanges(mState, newState)
|
|
50
|
+
mState = newState
|
|
51
|
+
}
|
|
44
52
|
}
|
|
45
53
|
|
|
46
|
-
fun
|
|
47
|
-
|
|
48
|
-
|
|
54
|
+
private fun applyStateChanges(oldState: State, newState: State) {
|
|
55
|
+
mMapView.let {
|
|
56
|
+
val needsFullUpdate = mNeedsFullUpdate
|
|
49
57
|
|
|
50
|
-
|
|
51
|
-
|
|
58
|
+
applyStateChanges(it, oldState, newState, needsFullUpdate)
|
|
59
|
+
|
|
60
|
+
mNeedsFullUpdate = false
|
|
61
|
+
}
|
|
52
62
|
}
|
|
53
63
|
|
|
54
|
-
fun
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
topImage = drawable
|
|
86
|
-
}
|
|
87
|
-
defaultLocationPuck.topImage = topImage
|
|
88
|
-
val bearingImage = AppCompatResources.getDrawable(
|
|
89
|
-
mContext!!, R.drawable.mapbox_user_stroke_icon
|
|
90
|
-
)
|
|
91
|
-
defaultLocationPuck.bearingImage = bearingImage
|
|
92
|
-
val shadowImage = AppCompatResources.getDrawable(
|
|
93
|
-
mContext!!, R.drawable.mapbox_user_icon_shadow
|
|
94
|
-
)
|
|
95
|
-
defaultLocationPuck.shadowImage = shadowImage
|
|
96
|
-
locationPuck = defaultLocationPuck
|
|
97
|
-
pulsingEnabled = true
|
|
98
|
-
if (tintColor != null) {
|
|
99
|
-
pulsingColor = tintColor
|
|
100
|
-
} else {
|
|
101
|
-
pulsingColor = mapboxBlueColor
|
|
102
|
-
}
|
|
103
|
-
}
|
|
64
|
+
private fun applyStateChanges(map: RCTMGLMapView, oldState: State, newState: State, fullUpdate: Boolean) {
|
|
65
|
+
if (map.getLifecycleState() != Lifecycle.State.STARTED) {
|
|
66
|
+
// In case lifecycle was already stopped, so we're part of shutdown, do not call updateSettings as it'll just restart
|
|
67
|
+
// the loationComponent that will not be stopped. See https://github.com/mapbox/mapbox-maps-android/issues/2017
|
|
68
|
+
if (!newState.enabled) {
|
|
69
|
+
stopLocationManager()
|
|
70
|
+
}
|
|
71
|
+
return
|
|
72
|
+
}
|
|
73
|
+
map.location.updateSettings {
|
|
74
|
+
enabled = newState.enabled
|
|
75
|
+
|
|
76
|
+
if (fullUpdate || (newState.hidden != oldState.hidden) || (newState.tintColor != oldState.tintColor) || (newState.bearingImage != oldState.bearingImage)) {
|
|
77
|
+
if (newState.hidden) {
|
|
78
|
+
var emptyLocationPuck = LocationPuck2D()
|
|
79
|
+
val empty = AppCompatResources.getDrawable(mContext, R.drawable.empty)
|
|
80
|
+
emptyLocationPuck.bearingImage = empty
|
|
81
|
+
emptyLocationPuck.shadowImage = empty
|
|
82
|
+
emptyLocationPuck.topImage = empty
|
|
83
|
+
//emptyLocationPuck.opacity = 0.0
|
|
84
|
+
locationPuck = emptyLocationPuck
|
|
85
|
+
pulsingEnabled = false
|
|
86
|
+
} else {
|
|
87
|
+
val mapboxBlueColor = Color.parseColor("#4A90E2")
|
|
88
|
+
val tintColor = newState.tintColor
|
|
89
|
+
val defaultLocationPuck = LocationPuck2D()
|
|
90
|
+
var topImage = AppCompatResources.getDrawable(mContext, R.drawable.mapbox_user_icon)
|
|
91
|
+
if (tintColor != null) {
|
|
92
|
+
val drawable = topImage as VectorDrawable?
|
|
93
|
+
drawable!!.setTint(tintColor)
|
|
94
|
+
topImage = drawable
|
|
104
95
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
96
|
+
defaultLocationPuck.topImage = topImage
|
|
97
|
+
val defaultBearingImage = AppCompatResources.getDrawable(
|
|
98
|
+
mContext, R.drawable.mapbox_user_stroke_icon
|
|
99
|
+
);
|
|
100
|
+
defaultLocationPuck.bearingImage = newState.bearingImage ?: defaultBearingImage
|
|
101
|
+
val shadowImage = AppCompatResources.getDrawable(
|
|
102
|
+
mContext, R.drawable.mapbox_user_icon_shadow
|
|
103
|
+
)
|
|
104
|
+
defaultLocationPuck.shadowImage = shadowImage
|
|
105
|
+
locationPuck = defaultLocationPuck
|
|
106
|
+
pulsingEnabled = true
|
|
107
|
+
if (tintColor != null) {
|
|
108
|
+
pulsingColor = tintColor
|
|
114
109
|
} else {
|
|
115
|
-
|
|
110
|
+
pulsingColor = mapboxBlueColor
|
|
116
111
|
}
|
|
117
112
|
}
|
|
113
|
+
}
|
|
118
114
|
|
|
119
|
-
|
|
115
|
+
if (fullUpdate || newState.enabled != mState.enabled) {
|
|
116
|
+
if (newState.enabled) {
|
|
117
|
+
startLocationManager()
|
|
118
|
+
useMapLocationProvider(map)
|
|
119
|
+
} else {
|
|
120
|
+
stopLocationManager()
|
|
121
|
+
}
|
|
120
122
|
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
private fun startLocationManager() {
|
|
127
|
+
if (!mLocationManagerStarted) {
|
|
128
|
+
mLocationManager.startCounted()
|
|
129
|
+
mLocationManagerStarted = true
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
private fun stopLocationManager() {
|
|
134
|
+
if (mLocationManagerStarted) {
|
|
135
|
+
mLocationManager.stopCounted()
|
|
136
|
+
mLocationManagerStarted = false
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private fun useMapLocationProvider(mapView: RCTMGLMapView) {
|
|
141
|
+
val provider = mapView.location.getLocationProvider()
|
|
142
|
+
if (provider != null) {
|
|
143
|
+
mLocationManager.provider = provider
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
121
147
|
|
|
148
|
+
fun showNativeUserLocation(showUserLocation: Boolean) {
|
|
149
|
+
update {
|
|
150
|
+
it.copy(showUserLocation = showUserLocation)
|
|
151
|
+
}
|
|
152
|
+
}
|
|
122
153
|
|
|
154
|
+
fun setFollowLocation(followUserLocation: Boolean) {
|
|
155
|
+
update {
|
|
156
|
+
it.copy(followUserLocation = followUserLocation)
|
|
123
157
|
}
|
|
124
158
|
}
|
|
159
|
+
|
|
160
|
+
fun update() {
|
|
161
|
+
update { it }
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
fun onDestroy() {
|
|
165
|
+
stopLocationManager();
|
|
166
|
+
}
|
|
125
167
|
}
|
|
@@ -2,25 +2,33 @@ package com.mapbox.rctmgl.components.location
|
|
|
2
2
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.content.Context
|
|
5
|
+
import androidx.appcompat.content.res.AppCompatResources
|
|
5
6
|
import com.mapbox.rctmgl.components.mapview.OnMapReadyCallback
|
|
6
7
|
import com.mapbox.maps.MapboxMap
|
|
7
8
|
import com.mapbox.android.core.permissions.PermissionsManager
|
|
8
9
|
import com.mapbox.maps.Style
|
|
10
|
+
import com.mapbox.maps.plugin.PuckBearingSource
|
|
11
|
+
import com.mapbox.rctmgl.R
|
|
9
12
|
import com.mapbox.rctmgl.components.AbstractMapFeature
|
|
10
13
|
import com.mapbox.rctmgl.components.mapview.RCTMGLMapView
|
|
11
14
|
|
|
12
|
-
class
|
|
15
|
+
enum class RenderMode {
|
|
16
|
+
GPS, COMPASS, NORMAL
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
class RCTMGLNativeUserLocation(context: Context) : AbstractMapFeature(context), OnMapReadyCallback, Style.OnStyleLoaded {
|
|
13
20
|
private var mEnabled = true
|
|
14
21
|
private var mMap: MapboxMap? = null
|
|
22
|
+
private var mRenderMode : RenderMode = RenderMode.NORMAL;
|
|
23
|
+
private var mContext : Context = context
|
|
15
24
|
|
|
16
|
-
private var mRenderMode : RenderMode = RenderMode.COMPASS
|
|
17
25
|
override fun addToMap(mapView: RCTMGLMapView) {
|
|
18
26
|
super.addToMap(mapView)
|
|
19
27
|
mEnabled = true
|
|
20
28
|
mapView.getMapboxMap()
|
|
21
29
|
mapView.getMapAsync(this)
|
|
22
|
-
setRenderMode(mRenderMode)
|
|
23
30
|
mMapView?.locationComponentManager?.showNativeUserLocation(true)
|
|
31
|
+
applyChanges()
|
|
24
32
|
}
|
|
25
33
|
|
|
26
34
|
override fun removeFromMap(mapView: RCTMGLMapView) {
|
|
@@ -34,6 +42,12 @@ class RCTMGLNativeUserLocation(context: Context?) : AbstractMapFeature(context),
|
|
|
34
42
|
override fun onMapReady(mapboxMap: MapboxMap) {
|
|
35
43
|
mMap = mapboxMap
|
|
36
44
|
mapboxMap.getStyle(this)
|
|
45
|
+
applyChanges()
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
fun setAndroidRenderMode(renderMode: RenderMode) {
|
|
49
|
+
mRenderMode = renderMode;
|
|
50
|
+
applyChanges();
|
|
37
51
|
}
|
|
38
52
|
|
|
39
53
|
@SuppressLint("MissingPermission")
|
|
@@ -43,12 +57,24 @@ class RCTMGLNativeUserLocation(context: Context?) : AbstractMapFeature(context),
|
|
|
43
57
|
return
|
|
44
58
|
}
|
|
45
59
|
|
|
46
|
-
mMapView?.locationComponentManager?.update(
|
|
60
|
+
mMapView?.locationComponentManager?.update()
|
|
47
61
|
mMapView?.locationComponentManager?.showNativeUserLocation(mEnabled)
|
|
48
62
|
}
|
|
49
63
|
|
|
50
|
-
fun
|
|
51
|
-
|
|
52
|
-
|
|
64
|
+
fun applyChanges() {
|
|
65
|
+
mMapView?.locationComponentManager?.let {
|
|
66
|
+
// emulate https://docs.mapbox.com/android/legacy/maps/guides/location-component/
|
|
67
|
+
when (mRenderMode) {
|
|
68
|
+
RenderMode.NORMAL ->
|
|
69
|
+
it.update { it.copy(bearingImage = null, puckBearingSource = null)}
|
|
70
|
+
RenderMode.GPS -> it.update {
|
|
71
|
+
it.copy(bearingImage = AppCompatResources.getDrawable(
|
|
72
|
+
mContext, R.drawable.mapbox_user_bearing_icon
|
|
73
|
+
), puckBearingSource = PuckBearingSource.COURSE) }
|
|
74
|
+
RenderMode.COMPASS -> it.update{ it.copy(bearingImage= AppCompatResources.getDrawable(
|
|
75
|
+
mContext, R.drawable.mapbox_user_puck_icon
|
|
76
|
+
), puckBearingSource = PuckBearingSource.HEADING) }
|
|
77
|
+
}
|
|
78
|
+
}
|
|
53
79
|
}
|
|
54
80
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
package com.mapbox.rctmgl.components.location
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
4
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
5
|
+
import com.facebook.react.uimanager.annotations.ReactProp
|
|
6
|
+
import com.mapbox.rctmgl.utils.Logger
|
|
7
|
+
import javax.annotation.Nonnull
|
|
8
|
+
|
|
9
|
+
class RCTMGLNativeUserLocationManager : ViewGroupManager<RCTMGLNativeUserLocation>() {
|
|
10
|
+
@Nonnull
|
|
11
|
+
override fun getName(): String {
|
|
12
|
+
return REACT_CLASS
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@ReactProp(name = "androidRenderMode")
|
|
16
|
+
fun setAndroidRenderMode(userLocation: RCTMGLNativeUserLocation, mode: String) {
|
|
17
|
+
when (mode) {
|
|
18
|
+
"compass" -> userLocation.setAndroidRenderMode(RenderMode.COMPASS);
|
|
19
|
+
"gps" -> userLocation.setAndroidRenderMode(RenderMode.GPS);
|
|
20
|
+
"normal" -> userLocation.setAndroidRenderMode(RenderMode.NORMAL);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@Nonnull
|
|
25
|
+
override fun createViewInstance(@Nonnull reactContext: ThemedReactContext): RCTMGLNativeUserLocation {
|
|
26
|
+
return RCTMGLNativeUserLocation(reactContext)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
companion object {
|
|
30
|
+
const val REACT_CLASS = "RCTMGLNativeUserLocation"
|
|
31
|
+
}
|
|
32
|
+
}
|
package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.kt
CHANGED
|
@@ -28,6 +28,7 @@ import com.mapbox.maps.extension.style.layers.properties.generated.ProjectionNam
|
|
|
28
28
|
import com.mapbox.maps.extension.style.layers.properties.generated.Visibility
|
|
29
29
|
import com.mapbox.maps.extension.style.projection.generated.Projection
|
|
30
30
|
import com.mapbox.maps.extension.style.projection.generated.setProjection
|
|
31
|
+
import com.mapbox.maps.plugin.animation.camera
|
|
31
32
|
import com.mapbox.maps.plugin.annotation.Annotation
|
|
32
33
|
import com.mapbox.maps.plugin.annotation.AnnotationConfig
|
|
33
34
|
import com.mapbox.maps.plugin.annotation.annotations
|
|
@@ -38,10 +39,13 @@ import com.mapbox.maps.plugin.compass.compass
|
|
|
38
39
|
import com.mapbox.maps.plugin.compass.generated.CompassSettings
|
|
39
40
|
import com.mapbox.maps.plugin.delegates.listeners.*
|
|
40
41
|
import com.mapbox.maps.plugin.gestures.*
|
|
42
|
+
import com.mapbox.maps.plugin.locationcomponent.location
|
|
43
|
+
import com.mapbox.maps.plugin.locationcomponent.location2
|
|
41
44
|
import com.mapbox.maps.plugin.logo.generated.LogoSettings
|
|
42
45
|
import com.mapbox.maps.plugin.logo.logo
|
|
43
46
|
import com.mapbox.maps.plugin.scalebar.generated.ScaleBarSettings
|
|
44
47
|
import com.mapbox.maps.plugin.scalebar.scalebar
|
|
48
|
+
import com.mapbox.maps.plugin.viewport.viewport
|
|
45
49
|
import com.mapbox.rctmgl.R
|
|
46
50
|
import com.mapbox.rctmgl.components.AbstractMapFeature
|
|
47
51
|
import com.mapbox.rctmgl.components.annotation.RCTMGLMarkerView
|
|
@@ -77,11 +81,64 @@ data class OrnamentSettings(
|
|
|
77
81
|
var position: Int = -1
|
|
78
82
|
)
|
|
79
83
|
|
|
80
|
-
|
|
81
|
-
|
|
84
|
+
/***
|
|
85
|
+
* Mapbox's MapView observers lifecycle events see MapboxLifecyclePluginImpl - (ON_START, ON_STOP, ON_DESTROY)
|
|
86
|
+
* We need to emulate those.
|
|
87
|
+
*/
|
|
88
|
+
interface RCTMGLLifeCycleOwner : LifecycleOwner {
|
|
82
89
|
fun handleLifecycleEvent(event: Lifecycle.Event)
|
|
83
90
|
}
|
|
84
91
|
|
|
92
|
+
class RCTMGLLifeCycle {
|
|
93
|
+
private var lifecycleOwner : RCTMGLLifeCycleOwner? = null
|
|
94
|
+
|
|
95
|
+
fun onAttachedToWindow(view: View) {
|
|
96
|
+
if (lifecycleOwner == null) {
|
|
97
|
+
lifecycleOwner = object : RCTMGLLifeCycleOwner {
|
|
98
|
+
private lateinit var lifecycleRegistry: LifecycleRegistry
|
|
99
|
+
init {
|
|
100
|
+
lifecycleRegistry = LifecycleRegistry(this)
|
|
101
|
+
lifecycleRegistry.currentState = Lifecycle.State.CREATED
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
override fun handleLifecycleEvent(event: Lifecycle.Event) {
|
|
105
|
+
try {
|
|
106
|
+
lifecycleRegistry.handleLifecycleEvent(event)
|
|
107
|
+
} catch (e: RuntimeException) {
|
|
108
|
+
Log.e("RCTMGLMapView", "handleLifecycleEvent, handleLifecycleEvent error: $e")
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
override fun getLifecycle(): Lifecycle {
|
|
113
|
+
return lifecycleRegistry
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
ViewTreeLifecycleOwner.set(view, lifecycleOwner);
|
|
117
|
+
}
|
|
118
|
+
lifecycleOwner?.handleLifecycleEvent(Lifecycle.Event.ON_START)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
fun onDetachedFromWindow() {
|
|
122
|
+
if (lifecycleOwner?.lifecycle?.currentState == Lifecycle.State.DESTROYED) {
|
|
123
|
+
return
|
|
124
|
+
}
|
|
125
|
+
lifecycleOwner?.handleLifecycleEvent(androidx.lifecycle.Lifecycle.Event.ON_STOP)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
fun onDestroy() {
|
|
129
|
+
if (lifecycleOwner?.lifecycle?.currentState == Lifecycle.State.STARTED || lifecycleOwner?.lifecycle?.currentState == Lifecycle.State.RESUMED) {
|
|
130
|
+
lifecycleOwner?.handleLifecycleEvent(androidx.lifecycle.Lifecycle.Event.ON_STOP)
|
|
131
|
+
}
|
|
132
|
+
if (lifecycleOwner?.lifecycle?.currentState != Lifecycle.State.DESTROYED) {
|
|
133
|
+
lifecycleOwner?.handleLifecycleEvent(androidx.lifecycle.Lifecycle.Event.ON_DESTROY)
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
fun getState() : Lifecycle.State {
|
|
138
|
+
return lifecycleOwner?.lifecycle?.currentState ?: Lifecycle.State.INITIALIZED;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
85
142
|
open class RCTMGLMapView(private val mContext: Context, var mManager: RCTMGLMapViewManager /*, MapboxMapOptions options*/) : MapView(mContext), OnMapClickListener, OnMapLongClickListener {
|
|
86
143
|
/**
|
|
87
144
|
* `PointAnnotations` are rendered to a canvas, but the React Native `Image` component is
|
|
@@ -1140,51 +1197,34 @@ open class RCTMGLMapView(private val mContext: Context, var mManager: RCTMGLMapV
|
|
|
1140
1197
|
// endregion
|
|
1141
1198
|
|
|
1142
1199
|
// region lifecycle
|
|
1143
|
-
private
|
|
1200
|
+
private val lifecycle : RCTMGLLifeCycle by lazy { RCTMGLLifeCycle() }
|
|
1201
|
+
|
|
1202
|
+
fun getLifecycleState() : Lifecycle.State {
|
|
1203
|
+
return this.lifecycle.getState()
|
|
1204
|
+
}
|
|
1144
1205
|
|
|
1145
1206
|
override fun onDetachedFromWindow() {
|
|
1146
|
-
|
|
1207
|
+
lifecycle.onDetachedFromWindow()
|
|
1147
1208
|
super.onDetachedFromWindow();
|
|
1148
1209
|
}
|
|
1149
1210
|
|
|
1150
1211
|
override fun onDestroy() {
|
|
1151
1212
|
removeAllFeatures()
|
|
1152
1213
|
viewAnnotationManager.removeAllViewAnnotations()
|
|
1153
|
-
|
|
1214
|
+
mLocationComponentManager?.onDestroy();
|
|
1215
|
+
|
|
1216
|
+
lifecycle.onDestroy()
|
|
1154
1217
|
super.onDestroy()
|
|
1155
1218
|
}
|
|
1156
1219
|
|
|
1157
1220
|
fun onDropViewInstance() {
|
|
1158
1221
|
removeAllFeatures()
|
|
1159
1222
|
viewAnnotationManager.removeAllViewAnnotations()
|
|
1160
|
-
|
|
1223
|
+
lifecycle.onDestroy()
|
|
1161
1224
|
}
|
|
1162
1225
|
|
|
1163
1226
|
override fun onAttachedToWindow() {
|
|
1164
|
-
|
|
1165
|
-
lifecycleOwner = object : RCTMGLMapViewLifecycleOwner {
|
|
1166
|
-
private lateinit var lifecycleRegistry: LifecycleRegistry
|
|
1167
|
-
init {
|
|
1168
|
-
lifecycleRegistry = LifecycleRegistry(this)
|
|
1169
|
-
lifecycleRegistry.currentState = Lifecycle.State.CREATED
|
|
1170
|
-
}
|
|
1171
|
-
|
|
1172
|
-
override fun handleLifecycleEvent(event: Lifecycle.Event) {
|
|
1173
|
-
try {
|
|
1174
|
-
lifecycleRegistry.handleLifecycleEvent(event)
|
|
1175
|
-
} catch (e: RuntimeException) {
|
|
1176
|
-
Log.e("RCTMGLMapView", "onAttachedToWindow error: $e")
|
|
1177
|
-
}
|
|
1178
|
-
}
|
|
1179
|
-
|
|
1180
|
-
override fun getLifecycle(): Lifecycle {
|
|
1181
|
-
return lifecycleRegistry
|
|
1182
|
-
}
|
|
1183
|
-
}
|
|
1184
|
-
ViewTreeLifecycleOwner.set(this, lifecycleOwner);
|
|
1185
|
-
} else {
|
|
1186
|
-
lifecycleOwner?.handleLifecycleEvent(Lifecycle.Event.ON_RESUME)
|
|
1187
|
-
}
|
|
1227
|
+
lifecycle.onAttachedToWindow(this)
|
|
1188
1228
|
super.onAttachedToWindow()
|
|
1189
1229
|
}
|
|
1190
1230
|
|