@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.
Files changed (181) hide show
  1. package/android/rctmgl/build.gradle +1 -1
  2. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCamera.kt +5 -96
  3. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCameraManager.kt +1 -1
  4. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/LocationComponentManager.kt +125 -0
  5. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RCTMGLNativeUserLocation.kt +6 -10
  6. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RenderMode.kt +21 -0
  7. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.kt +2 -1
  8. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/LocationEvent.kt +75 -0
  9. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/location/LocationManager.kt +48 -6
  10. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/modules/RCTMGLLocationModule.kt +147 -0
  11. package/index.d.ts +7 -0
  12. package/ios/RCTMGL-v10/MGLModule.swift +1 -0
  13. package/ios/RCTMGL-v10/RCTMGLAtmosphere.swift +3 -2
  14. package/ios/RCTMGL-v10/RCTMGLCircleLayer.swift +3 -3
  15. package/ios/RCTMGL-v10/RCTMGLEvent.swift +1 -0
  16. package/ios/RCTMGL-v10/RCTMGLFillExtrustionLayer.swift +4 -4
  17. package/ios/RCTMGL-v10/RCTMGLFillLayer.swift +4 -3
  18. package/ios/RCTMGL-v10/RCTMGLHeatmapLayer.swift +5 -4
  19. package/ios/RCTMGL-v10/RCTMGLLayer.swift +0 -2
  20. package/ios/RCTMGL-v10/RCTMGLLogging.swift +10 -2
  21. package/ios/RCTMGL-v10/RCTMGLMapView.swift +27 -2
  22. package/ios/RCTMGL-v10/RCTMGLRasterLayer.swift +3 -2
  23. package/ios/RCTMGL-v10/RCTMGLStyle.swift +25 -15
  24. package/ios/RCTMGL-v10/RCTMGLSymbolLayer.swift +1 -1
  25. package/ios/RCTMGL-v10/RCTMGLTerrain.swift +3 -2
  26. package/javascript/index.js +3 -0
  27. package/javascript/utils/{filterUtils.tsx → filterUtils.ts} +0 -0
  28. package/javascript/utils/getAnnotationsLayerID.ts +16 -0
  29. package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js +3 -1
  30. package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
  31. package/lib/commonjs/components/AbstractLayer.js +3 -1
  32. package/lib/commonjs/components/AbstractLayer.js.map +1 -1
  33. package/lib/commonjs/components/AbstractSource.js +3 -1
  34. package/lib/commonjs/components/AbstractSource.js.map +1 -1
  35. package/lib/commonjs/components/BackgroundLayer.js +3 -1
  36. package/lib/commonjs/components/BackgroundLayer.js.map +1 -1
  37. package/lib/commonjs/components/Callout.js +3 -1
  38. package/lib/commonjs/components/Callout.js.map +1 -1
  39. package/lib/commonjs/components/CircleLayer.js +3 -1
  40. package/lib/commonjs/components/CircleLayer.js.map +1 -1
  41. package/lib/commonjs/components/FillExtrusionLayer.js +3 -1
  42. package/lib/commonjs/components/FillExtrusionLayer.js.map +1 -1
  43. package/lib/commonjs/components/FillLayer.js +3 -1
  44. package/lib/commonjs/components/FillLayer.js.map +1 -1
  45. package/lib/commonjs/components/HeatmapLayer.js +3 -1
  46. package/lib/commonjs/components/HeatmapLayer.js.map +1 -1
  47. package/lib/commonjs/components/ImageSource.js +3 -1
  48. package/lib/commonjs/components/ImageSource.js.map +1 -1
  49. package/lib/commonjs/components/Images.js +3 -1
  50. package/lib/commonjs/components/Images.js.map +1 -1
  51. package/lib/commonjs/components/Light.js +3 -1
  52. package/lib/commonjs/components/Light.js.map +1 -1
  53. package/lib/commonjs/components/LineLayer.js +3 -1
  54. package/lib/commonjs/components/LineLayer.js.map +1 -1
  55. package/lib/commonjs/components/MapView.js +3 -1
  56. package/lib/commonjs/components/MapView.js.map +1 -1
  57. package/lib/commonjs/components/MarkerView.js +3 -1
  58. package/lib/commonjs/components/MarkerView.js.map +1 -1
  59. package/lib/commonjs/components/NativeBridgeComponent.js +3 -1
  60. package/lib/commonjs/components/NativeBridgeComponent.js.map +1 -1
  61. package/lib/commonjs/components/NativeUserLocation.js +3 -1
  62. package/lib/commonjs/components/NativeUserLocation.js.map +1 -1
  63. package/lib/commonjs/components/PointAnnotation.js +3 -1
  64. package/lib/commonjs/components/PointAnnotation.js.map +1 -1
  65. package/lib/commonjs/components/RasterDemSource.js +3 -1
  66. package/lib/commonjs/components/RasterDemSource.js.map +1 -1
  67. package/lib/commonjs/components/RasterLayer.js +3 -1
  68. package/lib/commonjs/components/RasterLayer.js.map +1 -1
  69. package/lib/commonjs/components/RasterSource.js +3 -1
  70. package/lib/commonjs/components/RasterSource.js.map +1 -1
  71. package/lib/commonjs/components/ShapeSource.js +3 -1
  72. package/lib/commonjs/components/ShapeSource.js.map +1 -1
  73. package/lib/commonjs/components/SkyLayer.js +3 -1
  74. package/lib/commonjs/components/SkyLayer.js.map +1 -1
  75. package/lib/commonjs/components/SymbolLayer.js +3 -1
  76. package/lib/commonjs/components/SymbolLayer.js.map +1 -1
  77. package/lib/commonjs/components/UserLocation.js +3 -1
  78. package/lib/commonjs/components/UserLocation.js.map +1 -1
  79. package/lib/commonjs/components/VectorSource.js +3 -1
  80. package/lib/commonjs/components/VectorSource.js.map +1 -1
  81. package/lib/commonjs/components/annotations/Annotation.js +3 -1
  82. package/lib/commonjs/components/annotations/Annotation.js.map +1 -1
  83. package/lib/commonjs/index.js +8 -0
  84. package/lib/commonjs/index.js.map +1 -1
  85. package/lib/commonjs/utils/BridgeValue.js +3 -1
  86. package/lib/commonjs/utils/BridgeValue.js.map +1 -1
  87. package/lib/commonjs/utils/Logger.js +3 -1
  88. package/lib/commonjs/utils/Logger.js.map +1 -1
  89. package/lib/commonjs/utils/filterUtils.js.map +1 -1
  90. package/lib/commonjs/utils/getAnnotationsLayerID.js +21 -0
  91. package/lib/commonjs/utils/getAnnotationsLayerID.js.map +1 -0
  92. package/lib/commonjs/web/components/Camera.js +3 -1
  93. package/lib/commonjs/web/components/Camera.js.map +1 -1
  94. package/lib/commonjs/web/components/MapView.js +3 -1
  95. package/lib/commonjs/web/components/MapView.js.map +1 -1
  96. package/lib/commonjs/web/utils/Logger.js +3 -1
  97. package/lib/commonjs/web/utils/Logger.js.map +1 -1
  98. package/lib/module/classes/AnimatedExtractCoordinateFromArray.js +3 -1
  99. package/lib/module/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
  100. package/lib/module/components/AbstractLayer.js +3 -1
  101. package/lib/module/components/AbstractLayer.js.map +1 -1
  102. package/lib/module/components/AbstractSource.js +3 -1
  103. package/lib/module/components/AbstractSource.js.map +1 -1
  104. package/lib/module/components/BackgroundLayer.js +3 -1
  105. package/lib/module/components/BackgroundLayer.js.map +1 -1
  106. package/lib/module/components/Callout.js +3 -1
  107. package/lib/module/components/Callout.js.map +1 -1
  108. package/lib/module/components/CircleLayer.js +3 -1
  109. package/lib/module/components/CircleLayer.js.map +1 -1
  110. package/lib/module/components/FillExtrusionLayer.js +3 -1
  111. package/lib/module/components/FillExtrusionLayer.js.map +1 -1
  112. package/lib/module/components/FillLayer.js +3 -1
  113. package/lib/module/components/FillLayer.js.map +1 -1
  114. package/lib/module/components/HeatmapLayer.js +3 -1
  115. package/lib/module/components/HeatmapLayer.js.map +1 -1
  116. package/lib/module/components/ImageSource.js +3 -1
  117. package/lib/module/components/ImageSource.js.map +1 -1
  118. package/lib/module/components/Images.js +3 -1
  119. package/lib/module/components/Images.js.map +1 -1
  120. package/lib/module/components/Light.js +3 -1
  121. package/lib/module/components/Light.js.map +1 -1
  122. package/lib/module/components/LineLayer.js +3 -1
  123. package/lib/module/components/LineLayer.js.map +1 -1
  124. package/lib/module/components/MapView.js +3 -1
  125. package/lib/module/components/MapView.js.map +1 -1
  126. package/lib/module/components/MarkerView.js +3 -1
  127. package/lib/module/components/MarkerView.js.map +1 -1
  128. package/lib/module/components/NativeBridgeComponent.js +3 -1
  129. package/lib/module/components/NativeBridgeComponent.js.map +1 -1
  130. package/lib/module/components/NativeUserLocation.js +3 -1
  131. package/lib/module/components/NativeUserLocation.js.map +1 -1
  132. package/lib/module/components/PointAnnotation.js +3 -1
  133. package/lib/module/components/PointAnnotation.js.map +1 -1
  134. package/lib/module/components/RasterDemSource.js +3 -1
  135. package/lib/module/components/RasterDemSource.js.map +1 -1
  136. package/lib/module/components/RasterLayer.js +3 -1
  137. package/lib/module/components/RasterLayer.js.map +1 -1
  138. package/lib/module/components/RasterSource.js +3 -1
  139. package/lib/module/components/RasterSource.js.map +1 -1
  140. package/lib/module/components/ShapeSource.js +3 -1
  141. package/lib/module/components/ShapeSource.js.map +1 -1
  142. package/lib/module/components/SkyLayer.js +3 -1
  143. package/lib/module/components/SkyLayer.js.map +1 -1
  144. package/lib/module/components/SymbolLayer.js +3 -1
  145. package/lib/module/components/SymbolLayer.js.map +1 -1
  146. package/lib/module/components/UserLocation.js +3 -1
  147. package/lib/module/components/UserLocation.js.map +1 -1
  148. package/lib/module/components/VectorSource.js +3 -1
  149. package/lib/module/components/VectorSource.js.map +1 -1
  150. package/lib/module/components/annotations/Annotation.js +3 -1
  151. package/lib/module/components/annotations/Annotation.js.map +1 -1
  152. package/lib/module/index.js +3 -1
  153. package/lib/module/index.js.map +1 -1
  154. package/lib/module/utils/BridgeValue.js +3 -1
  155. package/lib/module/utils/BridgeValue.js.map +1 -1
  156. package/lib/module/utils/Logger.js +3 -1
  157. package/lib/module/utils/Logger.js.map +1 -1
  158. package/lib/module/utils/filterUtils.js.map +1 -1
  159. package/lib/module/utils/getAnnotationsLayerID.js +15 -0
  160. package/lib/module/utils/getAnnotationsLayerID.js.map +1 -0
  161. package/lib/module/web/components/Camera.js +3 -1
  162. package/lib/module/web/components/Camera.js.map +1 -1
  163. package/lib/module/web/components/MapView.js +3 -1
  164. package/lib/module/web/components/MapView.js.map +1 -1
  165. package/lib/module/web/utils/Logger.js +3 -1
  166. package/lib/module/web/utils/Logger.js.map +1 -1
  167. package/lib/typescript/utils/filterUtils.d.ts.map +1 -1
  168. package/lib/typescript/utils/getAnnotationsLayerID.d.ts +2 -0
  169. package/lib/typescript/utils/getAnnotationsLayerID.d.ts.map +1 -0
  170. package/package.json +7 -6
  171. package/plugin/build/generateCode.d.ts +42 -0
  172. package/plugin/build/generateCode.js +107 -0
  173. package/plugin/build/withMapbox.d.ts +2 -2
  174. package/plugin/build/withMapbox.js +49 -62
  175. package/plugin/src/generateCode.ts +155 -0
  176. package/plugin/src/withMapbox.ts +61 -66
  177. package/rnmapbox-maps.podspec +1 -1
  178. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/LocationComponentManager.java +0 -215
  179. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RenderMode.java +0 -42
  180. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/LocationEvent.java +0 -100
  181. 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.9.1'
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
  }
@@ -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
- private val mLocationChangeListener: OnUserLocationChange = object : OnUserLocationChange {
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
- if (mFollowUserLocation) {
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
- mLocationManager?.disable()
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
@@ -49,7 +49,7 @@ class RCTMGLCameraManager(private val mContext: ReactApplicationContext) :
49
49
  throw AssertionError("Unused code")
50
50
  }
51
51
 
52
- @ReactProp(name = "followZoomLevel")
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
- @RenderMode.Mode
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?.showUserLocation(mEnabled)
47
+ mMapView?.locationComponentManager?.showNativeUserLocation(mEnabled)
52
48
  }
53
49
 
54
- fun setRenderMode(@RenderMode.Mode renderMode: Int) {
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
+
@@ -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
  }