@rnmapbox/maps 10.0.0-beta.58 → 10.0.0-beta.60

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 (186) 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 +36 -72
  8. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/RCTMGLMapViewManager.kt +10 -0
  9. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/styles/RCTMGLStyleFactory.java +26 -5
  10. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/styles/layers/RCTLayer.kt +2 -7
  11. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/LocationEvent.kt +75 -0
  12. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/location/LocationManager.kt +66 -12
  13. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/modules/RCTMGLLocationModule.kt +147 -0
  14. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/utils/extensions/CoordinateBounds.kt +3 -9
  15. package/ios/RCTMGL/RCTMGLLocation.m +1 -1
  16. package/ios/RCTMGL-v10/RCTMGLBackgroundLayer.swift +3 -1
  17. package/ios/RCTMGL-v10/RCTMGLCircleLayer.swift +3 -1
  18. package/ios/RCTMGL-v10/RCTMGLFillExtrustionLayer.swift +3 -1
  19. package/ios/RCTMGL-v10/RCTMGLFillLayer.swift +3 -1
  20. package/ios/RCTMGL-v10/RCTMGLHeatmapLayer.swift +3 -1
  21. package/ios/RCTMGL-v10/RCTMGLLayer.swift +0 -2
  22. package/ios/RCTMGL-v10/RCTMGLLineLayer.swift +3 -1
  23. package/ios/RCTMGL-v10/RCTMGLLocationModule.swift +1 -1
  24. package/ios/RCTMGL-v10/RCTMGLLogging.swift +10 -2
  25. package/ios/RCTMGL-v10/RCTMGLRasterLayer.swift +3 -1
  26. package/ios/RCTMGL-v10/RCTMGLSkyLayer.swift +3 -1
  27. package/ios/RCTMGL-v10/RCTMGLStyle.swift +25 -15
  28. package/ios/RCTMGL-v10/RCTMGLSymbolLayer.swift +3 -1
  29. package/{assets → javascript/assets}/heading.png +0 -0
  30. package/{assets → javascript/assets}/heading@2x.png +0 -0
  31. package/{assets → javascript/assets}/heading@3x.png +0 -0
  32. package/javascript/components/Camera.tsx +1 -1
  33. package/javascript/components/HeadingIndicator.tsx +1 -1
  34. package/lib/commonjs/assets/heading.png +0 -0
  35. package/lib/commonjs/assets/heading@2x.png +0 -0
  36. package/lib/commonjs/assets/heading@3x.png +0 -0
  37. package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js +3 -1
  38. package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
  39. package/lib/commonjs/components/AbstractLayer.js +3 -1
  40. package/lib/commonjs/components/AbstractLayer.js.map +1 -1
  41. package/lib/commonjs/components/AbstractSource.js +3 -1
  42. package/lib/commonjs/components/AbstractSource.js.map +1 -1
  43. package/lib/commonjs/components/BackgroundLayer.js +3 -1
  44. package/lib/commonjs/components/BackgroundLayer.js.map +1 -1
  45. package/lib/commonjs/components/Callout.js +3 -1
  46. package/lib/commonjs/components/Callout.js.map +1 -1
  47. package/lib/commonjs/components/Camera.js.map +1 -1
  48. package/lib/commonjs/components/CircleLayer.js +3 -1
  49. package/lib/commonjs/components/CircleLayer.js.map +1 -1
  50. package/lib/commonjs/components/FillExtrusionLayer.js +3 -1
  51. package/lib/commonjs/components/FillExtrusionLayer.js.map +1 -1
  52. package/lib/commonjs/components/FillLayer.js +3 -1
  53. package/lib/commonjs/components/FillLayer.js.map +1 -1
  54. package/lib/commonjs/components/HeadingIndicator.js +1 -1
  55. package/lib/commonjs/components/HeatmapLayer.js +3 -1
  56. package/lib/commonjs/components/HeatmapLayer.js.map +1 -1
  57. package/lib/commonjs/components/ImageSource.js +3 -1
  58. package/lib/commonjs/components/ImageSource.js.map +1 -1
  59. package/lib/commonjs/components/Images.js +3 -1
  60. package/lib/commonjs/components/Images.js.map +1 -1
  61. package/lib/commonjs/components/Light.js +3 -1
  62. package/lib/commonjs/components/Light.js.map +1 -1
  63. package/lib/commonjs/components/LineLayer.js +3 -1
  64. package/lib/commonjs/components/LineLayer.js.map +1 -1
  65. package/lib/commonjs/components/MapView.js +3 -1
  66. package/lib/commonjs/components/MapView.js.map +1 -1
  67. package/lib/commonjs/components/MarkerView.js +3 -1
  68. package/lib/commonjs/components/MarkerView.js.map +1 -1
  69. package/lib/commonjs/components/NativeBridgeComponent.js +3 -1
  70. package/lib/commonjs/components/NativeBridgeComponent.js.map +1 -1
  71. package/lib/commonjs/components/NativeUserLocation.js +3 -1
  72. package/lib/commonjs/components/NativeUserLocation.js.map +1 -1
  73. package/lib/commonjs/components/PointAnnotation.js +3 -1
  74. package/lib/commonjs/components/PointAnnotation.js.map +1 -1
  75. package/lib/commonjs/components/RasterDemSource.js +3 -1
  76. package/lib/commonjs/components/RasterDemSource.js.map +1 -1
  77. package/lib/commonjs/components/RasterLayer.js +3 -1
  78. package/lib/commonjs/components/RasterLayer.js.map +1 -1
  79. package/lib/commonjs/components/RasterSource.js +3 -1
  80. package/lib/commonjs/components/RasterSource.js.map +1 -1
  81. package/lib/commonjs/components/ShapeSource.js +3 -1
  82. package/lib/commonjs/components/ShapeSource.js.map +1 -1
  83. package/lib/commonjs/components/SkyLayer.js +3 -1
  84. package/lib/commonjs/components/SkyLayer.js.map +1 -1
  85. package/lib/commonjs/components/SymbolLayer.js +3 -1
  86. package/lib/commonjs/components/SymbolLayer.js.map +1 -1
  87. package/lib/commonjs/components/UserLocation.js +3 -1
  88. package/lib/commonjs/components/UserLocation.js.map +1 -1
  89. package/lib/commonjs/components/VectorSource.js +3 -1
  90. package/lib/commonjs/components/VectorSource.js.map +1 -1
  91. package/lib/commonjs/components/annotations/Annotation.js +3 -1
  92. package/lib/commonjs/components/annotations/Annotation.js.map +1 -1
  93. package/lib/commonjs/utils/BridgeValue.js +3 -1
  94. package/lib/commonjs/utils/BridgeValue.js.map +1 -1
  95. package/lib/commonjs/utils/Logger.js +3 -1
  96. package/lib/commonjs/utils/Logger.js.map +1 -1
  97. package/lib/commonjs/web/components/Camera.js +3 -1
  98. package/lib/commonjs/web/components/Camera.js.map +1 -1
  99. package/lib/commonjs/web/components/MapView.js +3 -1
  100. package/lib/commonjs/web/components/MapView.js.map +1 -1
  101. package/lib/commonjs/web/utils/Logger.js +3 -1
  102. package/lib/commonjs/web/utils/Logger.js.map +1 -1
  103. package/lib/module/assets/heading.png +0 -0
  104. package/lib/module/assets/heading@2x.png +0 -0
  105. package/lib/module/assets/heading@3x.png +0 -0
  106. package/lib/module/classes/AnimatedExtractCoordinateFromArray.js +3 -1
  107. package/lib/module/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
  108. package/lib/module/components/AbstractLayer.js +3 -1
  109. package/lib/module/components/AbstractLayer.js.map +1 -1
  110. package/lib/module/components/AbstractSource.js +3 -1
  111. package/lib/module/components/AbstractSource.js.map +1 -1
  112. package/lib/module/components/BackgroundLayer.js +3 -1
  113. package/lib/module/components/BackgroundLayer.js.map +1 -1
  114. package/lib/module/components/Callout.js +3 -1
  115. package/lib/module/components/Callout.js.map +1 -1
  116. package/lib/module/components/Camera.js.map +1 -1
  117. package/lib/module/components/CircleLayer.js +3 -1
  118. package/lib/module/components/CircleLayer.js.map +1 -1
  119. package/lib/module/components/FillExtrusionLayer.js +3 -1
  120. package/lib/module/components/FillExtrusionLayer.js.map +1 -1
  121. package/lib/module/components/FillLayer.js +3 -1
  122. package/lib/module/components/FillLayer.js.map +1 -1
  123. package/lib/module/components/HeadingIndicator.js +1 -1
  124. package/lib/module/components/HeadingIndicator.js.map +1 -1
  125. package/lib/module/components/HeatmapLayer.js +3 -1
  126. package/lib/module/components/HeatmapLayer.js.map +1 -1
  127. package/lib/module/components/ImageSource.js +3 -1
  128. package/lib/module/components/ImageSource.js.map +1 -1
  129. package/lib/module/components/Images.js +3 -1
  130. package/lib/module/components/Images.js.map +1 -1
  131. package/lib/module/components/Light.js +3 -1
  132. package/lib/module/components/Light.js.map +1 -1
  133. package/lib/module/components/LineLayer.js +3 -1
  134. package/lib/module/components/LineLayer.js.map +1 -1
  135. package/lib/module/components/MapView.js +3 -1
  136. package/lib/module/components/MapView.js.map +1 -1
  137. package/lib/module/components/MarkerView.js +3 -1
  138. package/lib/module/components/MarkerView.js.map +1 -1
  139. package/lib/module/components/NativeBridgeComponent.js +3 -1
  140. package/lib/module/components/NativeBridgeComponent.js.map +1 -1
  141. package/lib/module/components/NativeUserLocation.js +3 -1
  142. package/lib/module/components/NativeUserLocation.js.map +1 -1
  143. package/lib/module/components/PointAnnotation.js +3 -1
  144. package/lib/module/components/PointAnnotation.js.map +1 -1
  145. package/lib/module/components/RasterDemSource.js +3 -1
  146. package/lib/module/components/RasterDemSource.js.map +1 -1
  147. package/lib/module/components/RasterLayer.js +3 -1
  148. package/lib/module/components/RasterLayer.js.map +1 -1
  149. package/lib/module/components/RasterSource.js +3 -1
  150. package/lib/module/components/RasterSource.js.map +1 -1
  151. package/lib/module/components/ShapeSource.js +3 -1
  152. package/lib/module/components/ShapeSource.js.map +1 -1
  153. package/lib/module/components/SkyLayer.js +3 -1
  154. package/lib/module/components/SkyLayer.js.map +1 -1
  155. package/lib/module/components/SymbolLayer.js +3 -1
  156. package/lib/module/components/SymbolLayer.js.map +1 -1
  157. package/lib/module/components/UserLocation.js +3 -1
  158. package/lib/module/components/UserLocation.js.map +1 -1
  159. package/lib/module/components/VectorSource.js +3 -1
  160. package/lib/module/components/VectorSource.js.map +1 -1
  161. package/lib/module/components/annotations/Annotation.js +3 -1
  162. package/lib/module/components/annotations/Annotation.js.map +1 -1
  163. package/lib/module/utils/BridgeValue.js +3 -1
  164. package/lib/module/utils/BridgeValue.js.map +1 -1
  165. package/lib/module/utils/Logger.js +3 -1
  166. package/lib/module/utils/Logger.js.map +1 -1
  167. package/lib/module/web/components/Camera.js +3 -1
  168. package/lib/module/web/components/Camera.js.map +1 -1
  169. package/lib/module/web/components/MapView.js +3 -1
  170. package/lib/module/web/components/MapView.js.map +1 -1
  171. package/lib/module/web/utils/Logger.js +3 -1
  172. package/lib/module/web/utils/Logger.js.map +1 -1
  173. package/lib/typescript/components/Camera.d.ts +1 -1
  174. package/lib/typescript/components/Camera.d.ts.map +1 -1
  175. package/package.json +6 -5
  176. package/plugin/build/generateCode.d.ts +42 -0
  177. package/plugin/build/generateCode.js +107 -0
  178. package/plugin/build/withMapbox.d.ts +1 -1
  179. package/plugin/build/withMapbox.js +3 -3
  180. package/plugin/src/generateCode.ts +155 -0
  181. package/plugin/src/withMapbox.ts +3 -5
  182. package/rnmapbox-maps.podspec +1 -1
  183. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/LocationComponentManager.java +0 -215
  184. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RenderMode.java +0 -42
  185. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/LocationEvent.java +0 -100
  186. 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.0'
133
+ implementation 'com.mapbox.maps:android:10.9.1'
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
+
@@ -713,7 +713,7 @@ open class RCTMGLMapView(private val mContext: Context, var mManager: RCTMGLMapV
713
713
  val density: Float = getDisplayDensity()
714
714
  val screenCoordinate = ScreenCoordinate(pixel.x * density, pixel.y * density)
715
715
 
716
- val coordinate = mMap!!.coordinateForPixel(pixel)
716
+ val coordinate = mMap!!.coordinateForPixel(screenCoordinate)
717
717
 
718
718
  sendResponse(callbackID, {
719
719
  it.putArray("coordinateFromView", coordinate.toReadableArray())
@@ -1069,48 +1069,33 @@ open class RCTMGLMapView(private val mContext: Context, var mManager: RCTMGLMapV
1069
1069
  }
1070
1070
 
1071
1071
  // region Attribution
1072
- private var mAttributionEnabled: Boolean? = null;
1073
- private var mAttributionGravity: Int? = null
1074
- private var mAttributionMargin: IntArray? = null
1072
+ var mAttributionSettings = OrnamentSettings(enabled = AttributionSettings().enabled)
1075
1073
 
1076
1074
  fun setReactAttributionEnabled(attributionEnabled: Boolean?) {
1077
- mAttributionEnabled = attributionEnabled ?: AttributionSettings().enabled
1075
+ mAttributionSettings.enabled = attributionEnabled
1078
1076
  updateAttribution()
1079
1077
  }
1080
1078
 
1081
- fun setReactAttributionPosition(position: ReadableMap?) {
1082
- if (position == null) {
1083
- // reset from explicit to default
1084
- if (mAttributionGravity != null) {
1085
- val defaultOptions = AttributionSettings()
1086
- mAttributionGravity = defaultOptions.position
1087
- mAttributionMargin = intArrayOf(defaultOptions.marginLeft.toInt(),defaultOptions.marginTop.toInt(),defaultOptions.marginRight.toInt(),defaultOptions.marginBottom.toInt())
1088
- updateAttribution()
1089
- }
1090
- return
1091
- }
1079
+ fun setReactAttributionViewMargins(margins: ReadableMap) {
1080
+ mAttributionSettings.margins = margins
1081
+ updateAttribution()
1082
+ }
1092
1083
 
1093
- val (attributionGravity, attributionMargin) = getGravityAndMargin(position)
1094
- mAttributionGravity = attributionGravity
1095
- mAttributionMargin = attributionMargin
1084
+ fun setReactAttributionViewPosition(position: Int) {
1085
+ mAttributionSettings.position = position
1086
+ updateAttribution()
1087
+ }
1088
+
1089
+ fun setReactAttributionPosition(position: ReadableMap?) {
1090
+ mAttributionSettings.setPosAndMargins(position)
1096
1091
  updateAttribution()
1097
1092
  }
1098
1093
 
1099
1094
  private fun updateAttribution() {
1100
1095
  attribution.updateSettings {
1101
- if(mAttributionEnabled!= null){
1102
- enabled = mAttributionEnabled!!
1103
- }
1104
- if(mAttributionGravity != null){
1105
- position = mAttributionGravity!!
1106
- }
1107
- if(mAttributionMargin != null){
1108
- marginLeft = mAttributionMargin!![0].toFloat()
1109
- marginTop = mAttributionMargin!![1].toFloat()
1110
- marginRight = mAttributionMargin!![2].toFloat()
1111
- marginBottom = mAttributionMargin!![3].toFloat()
1112
- }
1096
+ updateOrnament("attribution", mAttributionSettings, this.toGenericOrnamentSettings())
1113
1097
  }
1098
+ workaroundToRelayoutChildOfMapView()
1114
1099
  }
1115
1100
  //endregion
1116
1101
 
@@ -1147,46 +1132,6 @@ open class RCTMGLMapView(private val mContext: Context, var mManager: RCTMGLMapV
1147
1132
  }
1148
1133
  workaroundToRelayoutChildOfMapView()
1149
1134
  }
1150
- /*
1151
- fun setReactLogoEnabled(logoEnabled: Boolean?) {
1152
- mLogoEnabled = logoEnabled ?: LogoSettings().enabled
1153
- updateLogo()
1154
- }
1155
-
1156
- fun setReactLogoPosition(position: ReadableMap?) {
1157
- if (position == null) {
1158
- // reset from explicit to default
1159
- if (mLogoGravity != null) {
1160
- val defaultOptions = LogoSettings()
1161
- mLogoGravity = defaultOptions.position
1162
- mLogoMargin = intArrayOf(defaultOptions.marginLeft.toInt(),defaultOptions.marginTop.toInt(),defaultOptions.marginRight.toInt(),defaultOptions.marginBottom.toInt())
1163
- updateLogo()
1164
- }
1165
- return
1166
- }
1167
- val (logoGravity, logoMargin) = getGravityAndMargin(position)
1168
- mLogoGravity = logoGravity
1169
- mLogoMargin = logoMargin
1170
- updateLogo()
1171
- }
1172
-
1173
- private fun updateLogo() {
1174
- logo.updateSettings {
1175
- if(mLogoEnabled != null){
1176
- enabled = mLogoEnabled!!
1177
- }
1178
- if(mLogoGravity != null){
1179
- position = mLogoGravity!!
1180
- }
1181
- if(mLogoMargin != null){
1182
- marginLeft = mLogoMargin!![0].toFloat()
1183
- marginTop = mLogoMargin!![1].toFloat()
1184
- marginRight = mLogoMargin!![2].toFloat()
1185
- marginBottom = mLogoMargin!![3].toFloat()
1186
- }
1187
- }
1188
- }
1189
- */
1190
1135
  // endregion
1191
1136
 
1192
1137
  // region lifecycle
@@ -1332,7 +1277,26 @@ fun LogoSettings.toGenericOrnamentSettings() = object : GenericOrnamentSettings
1332
1277
  override var position: Int
1333
1278
  get() = settings.position
1334
1279
  set(value) {
1335
- println(String.format("logo :: position: 0x%08x", value))
1280
+ settings.position = value
1281
+ }
1282
+ }
1283
+
1284
+ fun AttributionSettings.toGenericOrnamentSettings() = object : GenericOrnamentSettings {
1285
+ private var settings = this@toGenericOrnamentSettings;
1286
+ override fun setHMargins(left: Float?, right: Float?) {
1287
+ left?.let { settings.marginLeft = it }
1288
+ right?.let { settings.marginRight = it }
1289
+ }
1290
+ override fun setVMargins(top: Float?, bottom: Float?) {
1291
+ top?.let { settings.marginTop = it }
1292
+ bottom?.let { settings.marginBottom = it }
1293
+ }
1294
+ override var enabled: Boolean
1295
+ get() = settings.enabled
1296
+ set(value) { settings.enabled = value }
1297
+ override var position: Int
1298
+ get() = settings.position
1299
+ set(value) {
1336
1300
  settings.position = value
1337
1301
  }
1338
1302
  }
@@ -132,6 +132,16 @@ open class RCTMGLMapViewManager(context: ReactApplicationContext?) :
132
132
  mapView!!.setReactAttributionPosition(attributionPosition);
133
133
  }
134
134
 
135
+ @ReactProp(name = "attributionViewMargins")
136
+ fun setAttributionViewMargins(mapView: RCTMGLMapView?, scaleBarMargins: ReadableMap?) {
137
+ mapView!!.setReactAttributionViewMargins(scaleBarMargins!!);
138
+ }
139
+
140
+ @ReactProp(name = "attributionViewPosition")
141
+ fun setAttributionViewPosition(mapView: RCTMGLMapView?, scaleBarPosition: Int) {
142
+ mapView!!.setReactAttributionViewPosition(scaleBarPosition!!)
143
+ }
144
+
135
145
  @ReactProp(name = "logoEnabled")
136
146
  fun setLogoEnabled(mapView: RCTMGLMapView?, logoEnabled: Boolean?) {
137
147
  mapView!!.setReactLogoEnabled(logoEnabled);
@@ -24,6 +24,7 @@ import com.mapbox.maps.extension.style.types.StyleTransition;
24
24
  import com.mapbox.maps.extension.style.light.generated.Light;
25
25
  import com.mapbox.maps.extension.style.light.LightPosition;
26
26
  import com.mapbox.rctmgl.utils.DownloadMapImageTask;
27
+ import com.mapbox.rctmgl.utils.Logger;
27
28
 
28
29
  import java.util.List;
29
30
 
@@ -82,7 +83,11 @@ public class RCTMGLStyleFactory {
82
83
  style.addImage(styleValue, new DownloadMapImageTask.OnAllImagesLoaded() {
83
84
  @Override
84
85
  public void onAllImagesLoaded() {
85
- RCTMGLStyleFactory.setFillPattern(layer, styleValue);
86
+ try {
87
+ RCTMGLStyleFactory.setFillPattern(layer, styleValue);
88
+ } catch (RuntimeException exception) {
89
+ Logger.INSTANCE.e("RCTMGLFill",String.format("Exception failed during setFillPattern: %s", exception.getMessage()));
90
+ }
86
91
  }
87
92
  });
88
93
  break;
@@ -176,7 +181,11 @@ public class RCTMGLStyleFactory {
176
181
  style.addImage(styleValue, new DownloadMapImageTask.OnAllImagesLoaded() {
177
182
  @Override
178
183
  public void onAllImagesLoaded() {
179
- RCTMGLStyleFactory.setLinePattern(layer, styleValue);
184
+ try {
185
+ RCTMGLStyleFactory.setLinePattern(layer, styleValue);
186
+ } catch (RuntimeException exception) {
187
+ Logger.INSTANCE.e("RCTMGLLine",String.format("Exception failed during setLinePattern: %s", exception.getMessage()));
188
+ }
180
189
  }
181
190
  });
182
191
  break;
@@ -243,7 +252,11 @@ public class RCTMGLStyleFactory {
243
252
  style.addImage(styleValue, new DownloadMapImageTask.OnAllImagesLoaded() {
244
253
  @Override
245
254
  public void onAllImagesLoaded() {
246
- RCTMGLStyleFactory.setIconImage(layer, styleValue);
255
+ try {
256
+ RCTMGLStyleFactory.setIconImage(layer, styleValue);
257
+ } catch (RuntimeException exception) {
258
+ Logger.INSTANCE.e("RCTMGLSymbol",String.format("Exception failed during setIconImage: %s", exception.getMessage()));
259
+ }
247
260
  }
248
261
  });
249
262
  break;
@@ -572,7 +585,11 @@ public class RCTMGLStyleFactory {
572
585
  style.addImage(styleValue, new DownloadMapImageTask.OnAllImagesLoaded() {
573
586
  @Override
574
587
  public void onAllImagesLoaded() {
575
- RCTMGLStyleFactory.setFillExtrusionPattern(layer, styleValue);
588
+ try {
589
+ RCTMGLStyleFactory.setFillExtrusionPattern(layer, styleValue);
590
+ } catch (RuntimeException exception) {
591
+ Logger.INSTANCE.e("RCTMGLFillExtrusion",String.format("Exception failed during setFillExtrusionPattern: %s", exception.getMessage()));
592
+ }
576
593
  }
577
594
  });
578
595
  break;
@@ -727,7 +744,11 @@ public class RCTMGLStyleFactory {
727
744
  style.addImage(styleValue, new DownloadMapImageTask.OnAllImagesLoaded() {
728
745
  @Override
729
746
  public void onAllImagesLoaded() {
730
- RCTMGLStyleFactory.setBackgroundPattern(layer, styleValue);
747
+ try {
748
+ RCTMGLStyleFactory.setBackgroundPattern(layer, styleValue);
749
+ } catch (RuntimeException exception) {
750
+ Logger.INSTANCE.e("RCTMGLBackground",String.format("Exception failed during setBackgroundPattern: %s", exception.getMessage()));
751
+ }
731
752
  }
732
753
  });
733
754
  break;
@@ -21,8 +21,6 @@ import com.mapbox.rctmgl.utils.ExpressionParser
21
21
  import java.lang.ClassCastException
22
22
  import com.mapbox.rctmgl.utils.Logger
23
23
 
24
-
25
- // import com.mapbox.rctmgl.utils.ExpressionParser;
26
24
  abstract class RCTLayer<T : Layer?>(protected var mContext: Context) : AbstractSourceConsumer(
27
25
  mContext
28
26
  ) {
@@ -253,15 +251,12 @@ abstract class RCTLayer<T : Layer?>(protected var mContext: Context) : AbstractS
253
251
  super.removeFromMap(mapView)
254
252
  }
255
253
 
256
- // v10TOOD: adding anything seems to make getStyle null
257
- // return mMap.getStyle();
258
254
  private val style: Style?
259
- private get() =// v10TOOD: adding anything seems to make getStyle null
255
+ private get() =
260
256
  if (mMap == null) {
261
257
  null
262
- } else mMapView!!.savedStyle
258
+ } else mMapView?.savedStyle
263
259
 
264
- // return mMap.getStyle();
265
260
  abstract fun makeLayer(): T
266
261
  abstract fun addStyles()
267
262
  private fun hasInitialized(): Boolean {