@rnmapbox/maps 10.0.0-beta.59 → 10.0.0-beta.61
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/build.gradle +1 -1
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCamera.kt +5 -96
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCameraManager.kt +1 -1
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/LocationComponentManager.kt +125 -0
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RCTMGLNativeUserLocation.kt +6 -10
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RenderMode.kt +21 -0
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.kt +2 -1
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/LocationEvent.kt +75 -0
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/location/LocationManager.kt +48 -6
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/modules/RCTMGLLocationModule.kt +147 -0
- package/index.d.ts +7 -0
- package/ios/RCTMGL-v10/MGLModule.swift +1 -0
- package/ios/RCTMGL-v10/RCTMGLAtmosphere.swift +3 -2
- package/ios/RCTMGL-v10/RCTMGLCircleLayer.swift +3 -3
- package/ios/RCTMGL-v10/RCTMGLEvent.swift +1 -0
- package/ios/RCTMGL-v10/RCTMGLFillExtrustionLayer.swift +4 -4
- package/ios/RCTMGL-v10/RCTMGLFillLayer.swift +4 -3
- package/ios/RCTMGL-v10/RCTMGLHeatmapLayer.swift +5 -4
- package/ios/RCTMGL-v10/RCTMGLLayer.swift +0 -2
- package/ios/RCTMGL-v10/RCTMGLLogging.swift +10 -2
- package/ios/RCTMGL-v10/RCTMGLMapView.swift +27 -2
- package/ios/RCTMGL-v10/RCTMGLRasterLayer.swift +3 -2
- package/ios/RCTMGL-v10/RCTMGLStyle.swift +25 -15
- package/ios/RCTMGL-v10/RCTMGLSymbolLayer.swift +1 -1
- package/ios/RCTMGL-v10/RCTMGLTerrain.swift +3 -2
- package/javascript/index.js +3 -0
- package/javascript/utils/{filterUtils.tsx → filterUtils.ts} +0 -0
- package/javascript/utils/getAnnotationsLayerID.ts +16 -0
- package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js +3 -1
- package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
- package/lib/commonjs/components/AbstractLayer.js +3 -1
- package/lib/commonjs/components/AbstractLayer.js.map +1 -1
- package/lib/commonjs/components/AbstractSource.js +3 -1
- package/lib/commonjs/components/AbstractSource.js.map +1 -1
- package/lib/commonjs/components/BackgroundLayer.js +3 -1
- package/lib/commonjs/components/BackgroundLayer.js.map +1 -1
- package/lib/commonjs/components/Callout.js +3 -1
- package/lib/commonjs/components/Callout.js.map +1 -1
- package/lib/commonjs/components/CircleLayer.js +3 -1
- package/lib/commonjs/components/CircleLayer.js.map +1 -1
- package/lib/commonjs/components/FillExtrusionLayer.js +3 -1
- package/lib/commonjs/components/FillExtrusionLayer.js.map +1 -1
- package/lib/commonjs/components/FillLayer.js +3 -1
- package/lib/commonjs/components/FillLayer.js.map +1 -1
- package/lib/commonjs/components/HeatmapLayer.js +3 -1
- package/lib/commonjs/components/HeatmapLayer.js.map +1 -1
- package/lib/commonjs/components/ImageSource.js +3 -1
- package/lib/commonjs/components/ImageSource.js.map +1 -1
- package/lib/commonjs/components/Images.js +3 -1
- package/lib/commonjs/components/Images.js.map +1 -1
- package/lib/commonjs/components/Light.js +3 -1
- package/lib/commonjs/components/Light.js.map +1 -1
- package/lib/commonjs/components/LineLayer.js +3 -1
- package/lib/commonjs/components/LineLayer.js.map +1 -1
- package/lib/commonjs/components/MapView.js +3 -1
- package/lib/commonjs/components/MapView.js.map +1 -1
- package/lib/commonjs/components/MarkerView.js +3 -1
- package/lib/commonjs/components/MarkerView.js.map +1 -1
- package/lib/commonjs/components/NativeBridgeComponent.js +3 -1
- package/lib/commonjs/components/NativeBridgeComponent.js.map +1 -1
- package/lib/commonjs/components/NativeUserLocation.js +3 -1
- package/lib/commonjs/components/NativeUserLocation.js.map +1 -1
- package/lib/commonjs/components/PointAnnotation.js +3 -1
- package/lib/commonjs/components/PointAnnotation.js.map +1 -1
- package/lib/commonjs/components/RasterDemSource.js +3 -1
- package/lib/commonjs/components/RasterDemSource.js.map +1 -1
- package/lib/commonjs/components/RasterLayer.js +3 -1
- package/lib/commonjs/components/RasterLayer.js.map +1 -1
- package/lib/commonjs/components/RasterSource.js +3 -1
- package/lib/commonjs/components/RasterSource.js.map +1 -1
- package/lib/commonjs/components/ShapeSource.js +3 -1
- package/lib/commonjs/components/ShapeSource.js.map +1 -1
- package/lib/commonjs/components/SkyLayer.js +3 -1
- package/lib/commonjs/components/SkyLayer.js.map +1 -1
- package/lib/commonjs/components/SymbolLayer.js +3 -1
- package/lib/commonjs/components/SymbolLayer.js.map +1 -1
- package/lib/commonjs/components/UserLocation.js +3 -1
- package/lib/commonjs/components/UserLocation.js.map +1 -1
- package/lib/commonjs/components/VectorSource.js +3 -1
- package/lib/commonjs/components/VectorSource.js.map +1 -1
- package/lib/commonjs/components/annotations/Annotation.js +3 -1
- package/lib/commonjs/components/annotations/Annotation.js.map +1 -1
- package/lib/commonjs/index.js +8 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/BridgeValue.js +3 -1
- package/lib/commonjs/utils/BridgeValue.js.map +1 -1
- package/lib/commonjs/utils/Logger.js +3 -1
- package/lib/commonjs/utils/Logger.js.map +1 -1
- package/lib/commonjs/utils/filterUtils.js.map +1 -1
- package/lib/commonjs/utils/getAnnotationsLayerID.js +21 -0
- package/lib/commonjs/utils/getAnnotationsLayerID.js.map +1 -0
- package/lib/commonjs/web/components/Camera.js +3 -1
- package/lib/commonjs/web/components/Camera.js.map +1 -1
- package/lib/commonjs/web/components/MapView.js +3 -1
- package/lib/commonjs/web/components/MapView.js.map +1 -1
- package/lib/commonjs/web/utils/Logger.js +3 -1
- package/lib/commonjs/web/utils/Logger.js.map +1 -1
- package/lib/module/classes/AnimatedExtractCoordinateFromArray.js +3 -1
- package/lib/module/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
- package/lib/module/components/AbstractLayer.js +3 -1
- package/lib/module/components/AbstractLayer.js.map +1 -1
- package/lib/module/components/AbstractSource.js +3 -1
- package/lib/module/components/AbstractSource.js.map +1 -1
- package/lib/module/components/BackgroundLayer.js +3 -1
- package/lib/module/components/BackgroundLayer.js.map +1 -1
- package/lib/module/components/Callout.js +3 -1
- package/lib/module/components/Callout.js.map +1 -1
- package/lib/module/components/CircleLayer.js +3 -1
- package/lib/module/components/CircleLayer.js.map +1 -1
- package/lib/module/components/FillExtrusionLayer.js +3 -1
- package/lib/module/components/FillExtrusionLayer.js.map +1 -1
- package/lib/module/components/FillLayer.js +3 -1
- package/lib/module/components/FillLayer.js.map +1 -1
- package/lib/module/components/HeatmapLayer.js +3 -1
- package/lib/module/components/HeatmapLayer.js.map +1 -1
- package/lib/module/components/ImageSource.js +3 -1
- package/lib/module/components/ImageSource.js.map +1 -1
- package/lib/module/components/Images.js +3 -1
- package/lib/module/components/Images.js.map +1 -1
- package/lib/module/components/Light.js +3 -1
- package/lib/module/components/Light.js.map +1 -1
- package/lib/module/components/LineLayer.js +3 -1
- package/lib/module/components/LineLayer.js.map +1 -1
- package/lib/module/components/MapView.js +3 -1
- package/lib/module/components/MapView.js.map +1 -1
- package/lib/module/components/MarkerView.js +3 -1
- package/lib/module/components/MarkerView.js.map +1 -1
- package/lib/module/components/NativeBridgeComponent.js +3 -1
- package/lib/module/components/NativeBridgeComponent.js.map +1 -1
- package/lib/module/components/NativeUserLocation.js +3 -1
- package/lib/module/components/NativeUserLocation.js.map +1 -1
- package/lib/module/components/PointAnnotation.js +3 -1
- package/lib/module/components/PointAnnotation.js.map +1 -1
- package/lib/module/components/RasterDemSource.js +3 -1
- package/lib/module/components/RasterDemSource.js.map +1 -1
- package/lib/module/components/RasterLayer.js +3 -1
- package/lib/module/components/RasterLayer.js.map +1 -1
- package/lib/module/components/RasterSource.js +3 -1
- package/lib/module/components/RasterSource.js.map +1 -1
- package/lib/module/components/ShapeSource.js +3 -1
- package/lib/module/components/ShapeSource.js.map +1 -1
- package/lib/module/components/SkyLayer.js +3 -1
- package/lib/module/components/SkyLayer.js.map +1 -1
- package/lib/module/components/SymbolLayer.js +3 -1
- package/lib/module/components/SymbolLayer.js.map +1 -1
- package/lib/module/components/UserLocation.js +3 -1
- package/lib/module/components/UserLocation.js.map +1 -1
- package/lib/module/components/VectorSource.js +3 -1
- package/lib/module/components/VectorSource.js.map +1 -1
- package/lib/module/components/annotations/Annotation.js +3 -1
- package/lib/module/components/annotations/Annotation.js.map +1 -1
- package/lib/module/index.js +3 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/BridgeValue.js +3 -1
- package/lib/module/utils/BridgeValue.js.map +1 -1
- package/lib/module/utils/Logger.js +3 -1
- package/lib/module/utils/Logger.js.map +1 -1
- package/lib/module/utils/filterUtils.js.map +1 -1
- package/lib/module/utils/getAnnotationsLayerID.js +15 -0
- package/lib/module/utils/getAnnotationsLayerID.js.map +1 -0
- package/lib/module/web/components/Camera.js +3 -1
- package/lib/module/web/components/Camera.js.map +1 -1
- package/lib/module/web/components/MapView.js +3 -1
- package/lib/module/web/components/MapView.js.map +1 -1
- package/lib/module/web/utils/Logger.js +3 -1
- package/lib/module/web/utils/Logger.js.map +1 -1
- package/lib/typescript/utils/filterUtils.d.ts.map +1 -1
- package/lib/typescript/utils/getAnnotationsLayerID.d.ts +2 -0
- package/lib/typescript/utils/getAnnotationsLayerID.d.ts.map +1 -0
- package/package.json +7 -6
- package/plugin/build/generateCode.d.ts +42 -0
- package/plugin/build/generateCode.js +107 -0
- package/plugin/build/withMapbox.d.ts +2 -2
- package/plugin/build/withMapbox.js +49 -62
- package/plugin/src/generateCode.ts +155 -0
- package/plugin/src/withMapbox.ts +61 -66
- package/rnmapbox-maps.podspec +1 -1
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/LocationComponentManager.java +0 -215
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RenderMode.java +0 -42
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/LocationEvent.java +0 -100
- package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/modules/RCTMGLLocationModule.java +0 -160
|
@@ -130,7 +130,7 @@ dependencies {
|
|
|
130
130
|
implementation 'com.mapbox.mapboxsdk:mapbox-sdk-turf:5.1.0'
|
|
131
131
|
}
|
|
132
132
|
else if (safeExtGet("RNMapboxMapsImpl", defaultMapboxMapsImpl) == "mapbox") {
|
|
133
|
-
implementation 'com.mapbox.maps:android:10.
|
|
133
|
+
implementation 'com.mapbox.maps:android:10.10.0'
|
|
134
134
|
implementation 'com.mapbox.mapboxsdk:mapbox-sdk-turf:6.8.0'
|
|
135
135
|
implementation 'androidx.asynclayoutinflater:asynclayoutinflater:1.0.0'
|
|
136
136
|
}
|
package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCamera.kt
CHANGED
|
@@ -77,15 +77,7 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
|
|
|
77
77
|
private var mMaxBounds: LatLngBounds? = null
|
|
78
78
|
private var mFollowUserLocation = false
|
|
79
79
|
private var mFollowUserMode: String? = null
|
|
80
|
-
|
|
81
|
-
override fun onLocationChange(nextLocation: Location?) {
|
|
82
|
-
if (mapboxMap == null || mLocationComponentManager == null || !mLocationComponentManager!!.hasLocationComponent() || !mFollowUserLocation) {
|
|
83
|
-
return
|
|
84
|
-
}
|
|
85
|
-
mUserLocation.currentLocation = nextLocation
|
|
86
|
-
sendUserLocationUpdateEvent(toPoint(nextLocation!!))
|
|
87
|
-
}
|
|
88
|
-
}
|
|
80
|
+
|
|
89
81
|
private val mLocationBearingChangedListener = OnIndicatorBearingChangedListener { v ->
|
|
90
82
|
if (mFollowUserLocation) {
|
|
91
83
|
mMapView!!.getMapboxMap().setCamera(CameraOptions.Builder().bearing(v).build())
|
|
@@ -95,7 +87,6 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
|
|
|
95
87
|
if (mFollowUserLocation) {
|
|
96
88
|
mMapView!!.getMapboxMap().setCamera(CameraOptions.Builder().center(point).build())
|
|
97
89
|
mMapView!!.gestures.focalPoint = mMapView!!.getMapboxMap().pixelForCoordinate(point)
|
|
98
|
-
sendUserLocationUpdateEvent(point)
|
|
99
90
|
}
|
|
100
91
|
}
|
|
101
92
|
private val mCameraCallback: Animator.AnimatorListener = object : Animator.AnimatorListener {
|
|
@@ -122,10 +113,7 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
|
|
|
122
113
|
setInitialCamera()
|
|
123
114
|
updateMaxBounds()
|
|
124
115
|
mCameraStop?.let { updateCamera(it) }
|
|
125
|
-
|
|
126
|
-
// updateFollowLocation(mFollowUserLocation);
|
|
127
|
-
enableLocation()
|
|
128
|
-
}
|
|
116
|
+
_updateViewportState();
|
|
129
117
|
}
|
|
130
118
|
|
|
131
119
|
override fun removeFromMap(mapView: RCTMGLMapView) {
|
|
@@ -221,18 +209,6 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
|
|
|
221
209
|
return direction
|
|
222
210
|
}
|
|
223
211
|
|
|
224
|
-
private fun sendUserLocationUpdateEvent(point: Point?) {
|
|
225
|
-
if (point == null) {
|
|
226
|
-
return
|
|
227
|
-
}
|
|
228
|
-
val event: IEvent = MapChangeEvent(
|
|
229
|
-
this, EventTypes.USER_LOCATION_UPDATED, makeLocationChangePayload(
|
|
230
|
-
toLocation(point)
|
|
231
|
-
)
|
|
232
|
-
)
|
|
233
|
-
mManager.handleEvent(event)
|
|
234
|
-
}
|
|
235
|
-
|
|
236
212
|
private fun hasSetCenterCoordinate(): Boolean {
|
|
237
213
|
val state = mapboxMap!!.cameraState
|
|
238
214
|
val center = state.center
|
|
@@ -244,78 +220,11 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
|
|
|
244
220
|
mLocationManager = getInstance(mContext)
|
|
245
221
|
}
|
|
246
222
|
|
|
247
|
-
private fun enableLocation() {
|
|
248
|
-
if (!PermissionsManager.areLocationPermissionsGranted(mContext)) {
|
|
249
|
-
return
|
|
250
|
-
}
|
|
251
|
-
if (!mLocationManager!!.isActive()) {
|
|
252
|
-
mLocationManager.enable()
|
|
253
|
-
}
|
|
254
|
-
mMapView!!.getMapboxMap().getStyle {
|
|
255
|
-
enableLocationComponent(it)
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
private fun enableLocationComponent(style: Style) {
|
|
260
|
-
updateUserLocation(false)
|
|
261
|
-
updateLocationLayer(style)
|
|
262
|
-
val lastKnownLocation = mLocationManager!!.lastKnownLocation
|
|
263
|
-
mLocationManager.addLocationListener(mLocationChangeListener)
|
|
264
|
-
if (lastKnownLocation != null) {
|
|
265
|
-
mLocationChangeListener.onLocationChange(lastKnownLocation)
|
|
266
|
-
postDelayed({ mMapView!!.sendRegionDidChangeEvent() }, 200)
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
|
|
270
223
|
private fun updateLocationLayer(style: Style) {
|
|
271
224
|
if (mLocationComponentManager == null) {
|
|
272
225
|
mLocationComponentManager = mMapView!!.locationComponentManager
|
|
273
226
|
}
|
|
274
227
|
mLocationComponentManager!!.update(style)
|
|
275
|
-
if (mFollowUserLocation) {
|
|
276
|
-
mLocationComponentManager!!.setCameraMode(
|
|
277
|
-
UserTrackingMode.getCameraMode(
|
|
278
|
-
mUserTrackingMode
|
|
279
|
-
)
|
|
280
|
-
)
|
|
281
|
-
}
|
|
282
|
-
mLocationComponentManager!!.setFollowUserLocation(mFollowUserLocation)
|
|
283
|
-
if (mFollowUserLocation) {
|
|
284
|
-
mLocationComponentManager!!.setCameraMode(
|
|
285
|
-
UserTrackingMode.getCameraMode(
|
|
286
|
-
mUserTrackingMode
|
|
287
|
-
)
|
|
288
|
-
)
|
|
289
|
-
|
|
290
|
-
/*
|
|
291
|
-
mLocationComponentManager.addOnCameraTrackingChangedListener(new OnCameraTrackingChangedListener() {
|
|
292
|
-
@Override public void onCameraTrackingChanged(int currentMode) {
|
|
293
|
-
int userTrackingMode = UserTrackingMode.NONE;
|
|
294
|
-
switch (currentMode) {
|
|
295
|
-
case CameraMode.NONE:
|
|
296
|
-
userTrackingMode = UserTrackingMode.NONE;
|
|
297
|
-
break;
|
|
298
|
-
case CameraMode.TRACKING:
|
|
299
|
-
userTrackingMode = UserTrackingMode.FOLLOW;
|
|
300
|
-
break;
|
|
301
|
-
case CameraMode.TRACKING_COMPASS:
|
|
302
|
-
userTrackingMode = UserTrackingMode.FollowWithHeading;
|
|
303
|
-
break;
|
|
304
|
-
case CameraMode.TRACKING_GPS:
|
|
305
|
-
userTrackingMode = UserTrackingMode.FollowWithCourse;
|
|
306
|
-
break;
|
|
307
|
-
default:
|
|
308
|
-
userTrackingMode = UserTrackingMode.NONE;
|
|
309
|
-
}
|
|
310
|
-
updateUserTrackingMode(userTrackingMode);
|
|
311
|
-
}
|
|
312
|
-
@Override public void onCameraTrackingDismissed() {
|
|
313
|
-
}
|
|
314
|
-
});
|
|
315
|
-
*/
|
|
316
|
-
} else {
|
|
317
|
-
mLocationComponentManager!!.setCameraMode(com.mapbox.rctmgl.components.location.CameraMode.NONE)
|
|
318
|
-
}
|
|
319
228
|
}
|
|
320
229
|
|
|
321
230
|
fun setMinZoomLevel(zoomLevel: Double?) {
|
|
@@ -383,16 +292,16 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
|
|
|
383
292
|
val viewport = map.viewport;
|
|
384
293
|
if (mFollowUserLocation == false) {
|
|
385
294
|
viewport.idle()
|
|
386
|
-
|
|
295
|
+
mLocationComponentManager?.setFollowLocation(false)
|
|
387
296
|
return;
|
|
388
297
|
}
|
|
389
298
|
|
|
299
|
+
mLocationComponentManager?.setFollowLocation(true)
|
|
390
300
|
mLocationManager?.let {
|
|
391
|
-
val provider = it.provider
|
|
392
301
|
|
|
302
|
+
val provider = it.provider
|
|
393
303
|
map.location.setLocationProvider(provider);
|
|
394
304
|
map.location2.setLocationProvider(provider);
|
|
395
|
-
it.enable();
|
|
396
305
|
}
|
|
397
306
|
|
|
398
307
|
val location = map.location2
|
package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCameraManager.kt
CHANGED
|
@@ -49,7 +49,7 @@ class RCTMGLCameraManager(private val mContext: ReactApplicationContext) :
|
|
|
49
49
|
throw AssertionError("Unused code")
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
@ReactProp(name = "
|
|
52
|
+
@ReactProp(name = "zoomLevel")
|
|
53
53
|
fun setZoomLevel(camera: RCTMGLCamera, zoomLevel: Double) {
|
|
54
54
|
camera.setZoomLevel(zoomLevel)
|
|
55
55
|
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
package com.mapbox.rctmgl.components.location
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.graphics.Color
|
|
5
|
+
import android.graphics.drawable.VectorDrawable
|
|
6
|
+
import androidx.appcompat.content.res.AppCompatResources
|
|
7
|
+
import com.mapbox.maps.plugin.locationcomponent.location
|
|
8
|
+
import com.mapbox.rctmgl.components.mapview.RCTMGLMapView
|
|
9
|
+
import com.mapbox.maps.Style
|
|
10
|
+
import com.mapbox.maps.plugin.LocationPuck2D
|
|
11
|
+
import com.mapbox.rctmgl.R
|
|
12
|
+
import com.mapbox.rctmgl.location.LocationManager
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* 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 enbabled then it's viewport user tracking is not working.
|
|
17
|
+
* LocationComponentManager attempts to separate that, so that Camera can ask for location tracking independent of display of user current location.
|
|
18
|
+
* And NativeUserLocation can ask for display of user's current location - independent of Camera's user tracking.
|
|
19
|
+
*/
|
|
20
|
+
class LocationComponentManager(mapView: RCTMGLMapView, context: Context) {
|
|
21
|
+
private var mShowNativeUserLocation = false
|
|
22
|
+
private var mFollowLocation = false
|
|
23
|
+
var mMapView = mapView
|
|
24
|
+
var mContext = context
|
|
25
|
+
var mState = State(enabled=true, hidden=false, tintColor= null)
|
|
26
|
+
var mLocationManager: LocationManager? = LocationManager.getInstance(context!!)
|
|
27
|
+
|
|
28
|
+
data class State(
|
|
29
|
+
val enabled: Boolean, // in case followUserLocation is active or visible
|
|
30
|
+
val hidden: Boolean, // in case it isn't native
|
|
31
|
+
val tintColor: Int?, // tint of location puck
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
fun showNativeUserLocation(showUserLocation: Boolean) {
|
|
35
|
+
mShowNativeUserLocation = showUserLocation
|
|
36
|
+
|
|
37
|
+
_applyChanges()
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
fun setFollowLocation(followLoation: Boolean) {
|
|
41
|
+
mFollowLocation = followLoation
|
|
42
|
+
|
|
43
|
+
_applyChanges()
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
fun update(style: Style) {
|
|
47
|
+
_applyChanges()
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
fun setRenderMode(renderMode: RenderMode) {
|
|
51
|
+
_applyChanges()
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
fun _applyChanges() {
|
|
55
|
+
mMapView?.let {
|
|
56
|
+
val newState = State(
|
|
57
|
+
enabled = mShowNativeUserLocation || mFollowLocation,
|
|
58
|
+
hidden = !mShowNativeUserLocation,
|
|
59
|
+
tintColor = mMapView!!.tintColor,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
if (! mState.equals(newState)) {
|
|
63
|
+
it.location.updateSettings {
|
|
64
|
+
val trackLocation = true
|
|
65
|
+
enabled = newState.enabled
|
|
66
|
+
|
|
67
|
+
if ((newState.hidden != mState.hidden) || (newState.tintColor != mState.tintColor)) {
|
|
68
|
+
if (newState.hidden) {
|
|
69
|
+
var emptyLocationPuck = LocationPuck2D()
|
|
70
|
+
val empty = AppCompatResources.getDrawable(mContext!!, R.drawable.empty)
|
|
71
|
+
emptyLocationPuck.bearingImage = empty
|
|
72
|
+
emptyLocationPuck.shadowImage = empty
|
|
73
|
+
emptyLocationPuck.topImage = empty
|
|
74
|
+
//emptyLocationPuck.opacity = 0.0
|
|
75
|
+
locationPuck = emptyLocationPuck
|
|
76
|
+
pulsingEnabled = false
|
|
77
|
+
} else {
|
|
78
|
+
val mapboxBlueColor = Color.parseColor("#4A90E2")
|
|
79
|
+
val tintColor = newState.tintColor
|
|
80
|
+
val defaultLocationPuck = LocationPuck2D()
|
|
81
|
+
var topImage = AppCompatResources.getDrawable(mContext!!, R.drawable.mapbox_user_icon)
|
|
82
|
+
if (tintColor != null) {
|
|
83
|
+
val drawable = topImage as VectorDrawable?
|
|
84
|
+
drawable!!.setTint(tintColor)
|
|
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
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (newState.enabled != mState.enabled) {
|
|
108
|
+
if (newState.enabled) {
|
|
109
|
+
mLocationManager?.startCounted()
|
|
110
|
+
val provider = mLocationManager?.provider
|
|
111
|
+
if (provider != null) {
|
|
112
|
+
it.location.setLocationProvider(provider)
|
|
113
|
+
}
|
|
114
|
+
} else {
|
|
115
|
+
mLocationManager?.stopCounted()
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
mState = newState;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -9,27 +9,23 @@ import com.mapbox.maps.Style
|
|
|
9
9
|
import com.mapbox.rctmgl.components.AbstractMapFeature
|
|
10
10
|
import com.mapbox.rctmgl.components.mapview.RCTMGLMapView
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
import com.mapbox.mapboxsdk.location.modes.RenderMode;
|
|
14
|
-
import com.mapbox.mapboxsdk.maps.MapboxMap;
|
|
15
|
-
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
|
|
16
|
-
import com.mapbox.mapboxsdk.maps.Style;
|
|
17
|
-
*/ class RCTMGLNativeUserLocation(context: Context?) : AbstractMapFeature(context), OnMapReadyCallback, Style.OnStyleLoaded {
|
|
12
|
+
class RCTMGLNativeUserLocation(context: Context?) : AbstractMapFeature(context), OnMapReadyCallback, Style.OnStyleLoaded {
|
|
18
13
|
private var mEnabled = true
|
|
19
14
|
private var mMap: MapboxMap? = null
|
|
20
15
|
|
|
21
|
-
|
|
22
|
-
private var mRenderMode = RenderMode.COMPASS
|
|
16
|
+
private var mRenderMode : RenderMode = RenderMode.COMPASS
|
|
23
17
|
override fun addToMap(mapView: RCTMGLMapView) {
|
|
24
18
|
super.addToMap(mapView)
|
|
25
19
|
mEnabled = true
|
|
26
20
|
mapView.getMapboxMap()
|
|
27
21
|
mapView.getMapAsync(this)
|
|
28
22
|
setRenderMode(mRenderMode)
|
|
23
|
+
mMapView?.locationComponentManager?.showNativeUserLocation(true)
|
|
29
24
|
}
|
|
30
25
|
|
|
31
26
|
override fun removeFromMap(mapView: RCTMGLMapView) {
|
|
32
27
|
mEnabled = false
|
|
28
|
+
mMapView?.locationComponentManager?.showNativeUserLocation(false)
|
|
33
29
|
mMap?.getStyle(this)
|
|
34
30
|
super.removeFromMap(mapView)
|
|
35
31
|
}
|
|
@@ -48,10 +44,10 @@ import com.mapbox.mapboxsdk.maps.Style;
|
|
|
48
44
|
}
|
|
49
45
|
|
|
50
46
|
mMapView?.locationComponentManager?.update(style)
|
|
51
|
-
mMapView?.locationComponentManager?.
|
|
47
|
+
mMapView?.locationComponentManager?.showNativeUserLocation(mEnabled)
|
|
52
48
|
}
|
|
53
49
|
|
|
54
|
-
fun setRenderMode(
|
|
50
|
+
fun setRenderMode(renderMode: RenderMode) {
|
|
55
51
|
mRenderMode = renderMode
|
|
56
52
|
mMapView?.locationComponentManager?.setRenderMode(renderMode)
|
|
57
53
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
package com.mapbox.rctmgl.components.location
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Contains the variety of ways the user location can be rendered on the map.
|
|
5
|
+
*/
|
|
6
|
+
enum class RenderMode {
|
|
7
|
+
/**
|
|
8
|
+
* Basic tracking is enabled, bearing ignored.
|
|
9
|
+
*/
|
|
10
|
+
NORMAL,
|
|
11
|
+
/**
|
|
12
|
+
* Tracking the user location with bearing considered
|
|
13
|
+
* from a [CompassEngine].
|
|
14
|
+
*/
|
|
15
|
+
COMPASS,
|
|
16
|
+
/**
|
|
17
|
+
* Tracking the user location with bearing considered from [android.location.Location].
|
|
18
|
+
*/
|
|
19
|
+
GPS
|
|
20
|
+
}
|
|
21
|
+
|
package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.kt
CHANGED
|
@@ -29,6 +29,7 @@ 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
31
|
import com.mapbox.maps.plugin.annotation.Annotation
|
|
32
|
+
import com.mapbox.maps.plugin.annotation.AnnotationConfig
|
|
32
33
|
import com.mapbox.maps.plugin.annotation.annotations
|
|
33
34
|
import com.mapbox.maps.plugin.annotation.generated.*
|
|
34
35
|
import com.mapbox.maps.plugin.attribution.attribution
|
|
@@ -125,7 +126,7 @@ open class RCTMGLMapView(private val mContext: Context, var mManager: RCTMGLMapV
|
|
|
125
126
|
gesturesPlugin.removeOnMapClickListener(_this)
|
|
126
127
|
gesturesPlugin.removeOnMapLongClickListener(_this)
|
|
127
128
|
|
|
128
|
-
mPointAnnotationManager = annotations.createPointAnnotationManager()
|
|
129
|
+
mPointAnnotationManager = annotations.createPointAnnotationManager(AnnotationConfig(layerId = "rctmgl-mapview-annotations"))
|
|
129
130
|
mPointAnnotationManager?.addClickListener(OnPointAnnotationClickListener { pointAnnotation ->
|
|
130
131
|
onMarkerClick(pointAnnotation)
|
|
131
132
|
false
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
package com.mapbox.rctmgl.events
|
|
2
|
+
|
|
3
|
+
import android.location.Location
|
|
4
|
+
import com.facebook.react.bridge.Arguments
|
|
5
|
+
import com.mapbox.rctmgl.components.mapview.RCTMGLMapView
|
|
6
|
+
import com.mapbox.rctmgl.events.IEvent
|
|
7
|
+
import com.mapbox.rctmgl.events.constants.EventKeys
|
|
8
|
+
import com.mapbox.rctmgl.events.constants.EventTypes
|
|
9
|
+
import com.mapbox.rctmgl.events.LocationEvent
|
|
10
|
+
import com.facebook.react.bridge.WritableMap
|
|
11
|
+
import com.facebook.react.bridge.WritableNativeMap
|
|
12
|
+
import java.util.*
|
|
13
|
+
|
|
14
|
+
class LocationEvent(private val location: Location, private val mapView: RCTMGLMapView?) : IEvent {
|
|
15
|
+
val uUID: UUID
|
|
16
|
+
|
|
17
|
+
init {
|
|
18
|
+
uUID = UUID.randomUUID()
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
constructor(location: Location) : this(location, null) {}
|
|
22
|
+
|
|
23
|
+
override fun getID(): Int {
|
|
24
|
+
return mapView?.id ?: -1
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
override fun getKey(): String {
|
|
28
|
+
return EventKeys.USER_LOCATION_UPDATE
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
override fun getType(): String {
|
|
32
|
+
return EventTypes.USER_LOCATION_UPDATED
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
override fun getTimestamp(): Long {
|
|
36
|
+
return System.currentTimeMillis()
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
override fun equals(event: IEvent): Boolean {
|
|
40
|
+
val other = event as LocationEvent
|
|
41
|
+
return uUID == other.uUID
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
fun equals(event: LocationEvent): Boolean {
|
|
45
|
+
return uUID == event.uUID
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
override fun getPayload(): WritableMap {
|
|
49
|
+
val positionProperties: WritableMap = WritableNativeMap()
|
|
50
|
+
val coords: WritableMap = WritableNativeMap()
|
|
51
|
+
coords.putDouble("longitude", location.longitude)
|
|
52
|
+
coords.putDouble("latitude", location.latitude)
|
|
53
|
+
coords.putDouble("altitude", location.altitude)
|
|
54
|
+
coords.putDouble("accuracy", location.accuracy.toDouble())
|
|
55
|
+
// A better solution will be to pull the heading from the compass engine,
|
|
56
|
+
// unfortunately the api is not publicly available in the mapbox sdk
|
|
57
|
+
coords.putDouble("heading", location.bearing.toDouble())
|
|
58
|
+
coords.putDouble("course", location.bearing.toDouble())
|
|
59
|
+
coords.putDouble("speed", location.speed.toDouble())
|
|
60
|
+
positionProperties.putMap("coords", coords)
|
|
61
|
+
positionProperties.putDouble("timestamp", location.time.toDouble())
|
|
62
|
+
return positionProperties
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
override fun toJSON(): WritableMap {
|
|
66
|
+
val map = Arguments.createMap()
|
|
67
|
+
map.putString("type", type)
|
|
68
|
+
map.putMap("payload", payload)
|
|
69
|
+
return map
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
override fun canCoalesce(): Boolean {
|
|
73
|
+
return true
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -10,7 +10,6 @@ import com.mapbox.android.core.location.LocationEngineCallback
|
|
|
10
10
|
import com.mapbox.android.core.location.LocationEngineResult
|
|
11
11
|
import com.mapbox.maps.plugin.locationcomponent.LocationConsumer
|
|
12
12
|
import com.mapbox.android.core.location.LocationEngineRequest
|
|
13
|
-
import com.mapbox.rctmgl.location.LocationProviderForEngine
|
|
14
13
|
import com.mapbox.android.core.location.LocationEngineProvider
|
|
15
14
|
import com.mapbox.android.core.permissions.PermissionsManager
|
|
16
15
|
import android.os.Looper
|
|
@@ -68,6 +67,11 @@ class LocationManager private constructor(private val context: Context) : Locati
|
|
|
68
67
|
private var lastLocation: Location? = null
|
|
69
68
|
private var locationEngineRequest: LocationEngineRequest? = null
|
|
70
69
|
private var locationProvider: LocationProviderForEngine? = null
|
|
70
|
+
private var nStarts : Int = 0;
|
|
71
|
+
private var isPaused : Boolean = false;
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
71
75
|
val provider: LocationProvider
|
|
72
76
|
get() {
|
|
73
77
|
if (locationProvider == null) {
|
|
@@ -80,6 +84,41 @@ class LocationManager private constructor(private val context: Context) : Locati
|
|
|
80
84
|
fun onLocationChange(location: Location?)
|
|
81
85
|
}
|
|
82
86
|
|
|
87
|
+
|
|
88
|
+
/// public interface
|
|
89
|
+
|
|
90
|
+
fun startCounted() {
|
|
91
|
+
nStarts += 1;
|
|
92
|
+
if (nStarts == 1) {
|
|
93
|
+
enable(false);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
fun stopCounted() {
|
|
98
|
+
nStarts -= 1;
|
|
99
|
+
if (nStarts == 0) {
|
|
100
|
+
dispose();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
fun pause() {
|
|
105
|
+
isPaused = true
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
fun resume() {
|
|
109
|
+
isPaused = false
|
|
110
|
+
if (nStarts > 0) {
|
|
111
|
+
enable(false)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
fun destroy() {
|
|
116
|
+
dispose();
|
|
117
|
+
nStarts = -1000;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
////
|
|
121
|
+
|
|
83
122
|
private fun buildEngineRequest() {
|
|
84
123
|
engine = LocationEngineProvider.getBestLocationEngine(context.applicationContext)
|
|
85
124
|
locationEngineRequest = LocationEngineRequest.Builder(DEFAULT_INTERVAL_MILLIS)
|
|
@@ -103,10 +142,14 @@ class LocationManager private constructor(private val context: Context) : Locati
|
|
|
103
142
|
|
|
104
143
|
fun setMinDisplacement(minDisplacement: Float) {
|
|
105
144
|
mMinDisplacement = minDisplacement
|
|
145
|
+
|
|
146
|
+
if (isActive) {
|
|
147
|
+
enable(true)
|
|
148
|
+
}
|
|
106
149
|
}
|
|
107
150
|
|
|
108
151
|
@SuppressLint("MissingPermission")
|
|
109
|
-
fun enable() {
|
|
152
|
+
private fun enable(refresh: Boolean) {
|
|
110
153
|
if (!PermissionsManager.areLocationPermissionsGranted(context)) {
|
|
111
154
|
return
|
|
112
155
|
}
|
|
@@ -126,17 +169,16 @@ class LocationManager private constructor(private val context: Context) : Locati
|
|
|
126
169
|
isActive = true
|
|
127
170
|
}
|
|
128
171
|
|
|
129
|
-
fun disable() {
|
|
172
|
+
private fun disable() {
|
|
130
173
|
engine?.removeLocationUpdates(this)
|
|
131
174
|
isActive = false
|
|
132
175
|
}
|
|
133
176
|
|
|
134
|
-
fun dispose() {
|
|
177
|
+
private fun dispose() {
|
|
135
178
|
if (engine == null) {
|
|
136
179
|
return
|
|
137
180
|
}
|
|
138
181
|
disable()
|
|
139
|
-
engine?.removeLocationUpdates(this)
|
|
140
182
|
}
|
|
141
183
|
|
|
142
184
|
fun isActive(): Boolean {
|
|
@@ -149,7 +191,7 @@ class LocationManager private constructor(private val context: Context) : Locati
|
|
|
149
191
|
} else lastLocation
|
|
150
192
|
|
|
151
193
|
@SuppressLint("MissingPermission")
|
|
152
|
-
fun getLastKnownLocation(callback: LocationEngineCallback<LocationEngineResult
|
|
194
|
+
fun getLastKnownLocation(callback: LocationEngineCallback<LocationEngineResult>) {
|
|
153
195
|
if (engine == null) {
|
|
154
196
|
callback.onFailure(Exception("LocationEngine not initialized"))
|
|
155
197
|
}
|