@rnmapbox/maps 10.0.0-beta.69 → 10.0.0-beta.71

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 (262) hide show
  1. package/android/rctmgl/build.gradle +1 -1
  2. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/annotation/RCTMGLMarkerView.kt +0 -1
  3. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCamera.kt +78 -53
  4. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCameraManager.kt +16 -13
  5. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/LocationComponentManager.kt +125 -83
  6. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RCTMGLNativeUserLocation.kt +33 -7
  7. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RCTMGLNativeUserLocationManager.kt +32 -0
  8. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/UserTrackingMode.kt +42 -0
  9. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.kt +114 -38
  10. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/helpers/CameraChangeTracker.kt +23 -0
  11. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/MapUserTrackingModeEvent.kt +21 -0
  12. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/location/LocationManager.kt +64 -25
  13. package/index.d.ts +14 -62
  14. package/ios/RCTMGL-v10/MGLModule.swift +1 -0
  15. package/ios/RCTMGL-v10/RCTMGLAtmosphere.swift +1 -0
  16. package/ios/RCTMGL-v10/RCTMGLBackgroundLayer.swift +1 -0
  17. package/ios/RCTMGL-v10/RCTMGLCamera.swift +52 -26
  18. package/ios/RCTMGL-v10/RCTMGLCameraManager.m +5 -2
  19. package/ios/RCTMGL-v10/RCTMGLCircleLayer.swift +1 -0
  20. package/ios/RCTMGL-v10/RCTMGLEvent.swift +1 -0
  21. package/ios/RCTMGL-v10/RCTMGLFillExtrustionLayer.swift +1 -0
  22. package/ios/RCTMGL-v10/RCTMGLFillLayer.swift +1 -0
  23. package/ios/RCTMGL-v10/RCTMGLHeatmapLayer.swift +1 -0
  24. package/ios/RCTMGL-v10/RCTMGLImages.swift +54 -8
  25. package/ios/RCTMGL-v10/RCTMGLLayer.swift +4 -0
  26. package/ios/RCTMGL-v10/RCTMGLLight.swift +5 -3
  27. package/ios/RCTMGL-v10/RCTMGLLineLayer.swift +1 -0
  28. package/ios/RCTMGL-v10/RCTMGLLocationModule.m +4 -0
  29. package/ios/RCTMGL-v10/RCTMGLLocationModule.swift +101 -5
  30. package/ios/RCTMGL-v10/RCTMGLMapView.swift +15 -2
  31. package/ios/RCTMGL-v10/RCTMGLRasterLayer.swift +1 -0
  32. package/ios/RCTMGL-v10/RCTMGLSingletonLayer.swift +4 -0
  33. package/ios/RCTMGL-v10/RCTMGLSkyLayer.swift +1 -0
  34. package/ios/RCTMGL-v10/RCTMGLStyle.swift +58 -123
  35. package/ios/RCTMGL-v10/RCTMGLStyleValue.swift +51 -5
  36. package/ios/RCTMGL-v10/RCTMGLSymbolLayer.swift +1 -0
  37. package/ios/RCTMGL-v10/RCTMGLTerrain.swift +1 -0
  38. package/ios/install.md +1 -1
  39. package/javascript/components/Camera.tsx +7 -3
  40. package/javascript/components/Images.tsx +133 -0
  41. package/javascript/components/MapView.js +22 -2
  42. package/javascript/modules/location/locationManager.ts +227 -0
  43. package/javascript/utils/MapboxStyles.d.ts +3 -3
  44. package/javascript/utils/styleMap.ts +2 -2
  45. package/lib/commonjs/classes/AnimatedCoordinatesArray.js.map +1 -1
  46. package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js +2 -5
  47. package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
  48. package/lib/commonjs/classes/AnimatedPoint.js.map +1 -1
  49. package/lib/commonjs/classes/AnimatedRouteCoordinatesArray.js.map +1 -1
  50. package/lib/commonjs/classes/AnimatedShape.js.map +1 -1
  51. package/lib/commonjs/classes/index.d.js.map +1 -1
  52. package/lib/commonjs/classes/index.js.map +1 -1
  53. package/lib/commonjs/components/AbstractLayer.js +6 -10
  54. package/lib/commonjs/components/AbstractLayer.js.map +1 -1
  55. package/lib/commonjs/components/AbstractSource.js +3 -10
  56. package/lib/commonjs/components/AbstractSource.js.map +1 -1
  57. package/lib/commonjs/components/Atmosphere.js.map +1 -1
  58. package/lib/commonjs/components/BackgroundLayer.js +3 -6
  59. package/lib/commonjs/components/BackgroundLayer.js.map +1 -1
  60. package/lib/commonjs/components/Callout.js +27 -30
  61. package/lib/commonjs/components/Callout.js.map +1 -1
  62. package/lib/commonjs/components/Camera.js +3 -1
  63. package/lib/commonjs/components/Camera.js.map +1 -1
  64. package/lib/commonjs/components/CircleLayer.js +3 -6
  65. package/lib/commonjs/components/CircleLayer.js.map +1 -1
  66. package/lib/commonjs/components/FillExtrusionLayer.js +3 -6
  67. package/lib/commonjs/components/FillExtrusionLayer.js.map +1 -1
  68. package/lib/commonjs/components/FillLayer.js +3 -6
  69. package/lib/commonjs/components/FillLayer.js.map +1 -1
  70. package/lib/commonjs/components/HeadingIndicator.js.map +1 -1
  71. package/lib/commonjs/components/HeatmapLayer.js +3 -6
  72. package/lib/commonjs/components/HeatmapLayer.js.map +1 -1
  73. package/lib/commonjs/components/ImageSource.js +16 -19
  74. package/lib/commonjs/components/ImageSource.js.map +1 -1
  75. package/lib/commonjs/components/Images.js +3 -34
  76. package/lib/commonjs/components/Images.js.map +1 -1
  77. package/lib/commonjs/components/Light.js +7 -10
  78. package/lib/commonjs/components/Light.js.map +1 -1
  79. package/lib/commonjs/components/LineLayer.js +3 -6
  80. package/lib/commonjs/components/LineLayer.js.map +1 -1
  81. package/lib/commonjs/components/MapView.js +241 -227
  82. package/lib/commonjs/components/MapView.js.map +1 -1
  83. package/lib/commonjs/components/MarkerView.js +9 -16
  84. package/lib/commonjs/components/MarkerView.js.map +1 -1
  85. package/lib/commonjs/components/NativeBridgeComponent.js +0 -7
  86. package/lib/commonjs/components/NativeBridgeComponent.js.map +1 -1
  87. package/lib/commonjs/components/NativeUserLocation.js.map +1 -1
  88. package/lib/commonjs/components/PointAnnotation.js +8 -11
  89. package/lib/commonjs/components/PointAnnotation.js.map +1 -1
  90. package/lib/commonjs/components/RasterDemSource.js +36 -39
  91. package/lib/commonjs/components/RasterDemSource.js.map +1 -1
  92. package/lib/commonjs/components/RasterLayer.js +3 -6
  93. package/lib/commonjs/components/RasterLayer.js.map +1 -1
  94. package/lib/commonjs/components/RasterSource.js +45 -48
  95. package/lib/commonjs/components/RasterSource.js.map +1 -1
  96. package/lib/commonjs/components/ShapeSource.js +4 -7
  97. package/lib/commonjs/components/ShapeSource.js.map +1 -1
  98. package/lib/commonjs/components/SkyLayer.js +3 -6
  99. package/lib/commonjs/components/SkyLayer.js.map +1 -1
  100. package/lib/commonjs/components/Style.js.map +1 -1
  101. package/lib/commonjs/components/SymbolLayer.js +3 -6
  102. package/lib/commonjs/components/SymbolLayer.js.map +1 -1
  103. package/lib/commonjs/components/Terrain.js.map +1 -1
  104. package/lib/commonjs/components/UserLocation.js +65 -69
  105. package/lib/commonjs/components/UserLocation.js.map +1 -1
  106. package/lib/commonjs/components/VectorSource.js +63 -66
  107. package/lib/commonjs/components/VectorSource.js.map +1 -1
  108. package/lib/commonjs/components/annotations/Annotation.js +16 -19
  109. package/lib/commonjs/components/annotations/Annotation.js.map +1 -1
  110. package/lib/commonjs/index.js.map +1 -1
  111. package/lib/commonjs/index.web.js.map +1 -1
  112. package/lib/commonjs/modules/location/locationManager.js +37 -9
  113. package/lib/commonjs/modules/location/locationManager.js.map +1 -1
  114. package/lib/commonjs/modules/offline/OfflineCreatePackOptions.js.map +1 -1
  115. package/lib/commonjs/modules/offline/OfflinePack.js.map +1 -1
  116. package/lib/commonjs/modules/offline/offlineManager.js.map +1 -1
  117. package/lib/commonjs/modules/snapshot/SnapshotOptions.js.map +1 -1
  118. package/lib/commonjs/modules/snapshot/snapshotManager.js.map +1 -1
  119. package/lib/commonjs/requestAndroidLocationPermissions.js.map +1 -1
  120. package/lib/commonjs/types/index.js.map +1 -1
  121. package/lib/commonjs/utils/BridgeValue.js +0 -4
  122. package/lib/commonjs/utils/BridgeValue.js.map +1 -1
  123. package/lib/commonjs/utils/Logger.js +1 -4
  124. package/lib/commonjs/utils/Logger.js.map +1 -1
  125. package/lib/commonjs/utils/MapboxStyles.d.js.map +1 -1
  126. package/lib/commonjs/utils/StyleValue.js.map +1 -1
  127. package/lib/commonjs/utils/animated/Animated.js.map +1 -1
  128. package/lib/commonjs/utils/deprecation.js.map +1 -1
  129. package/lib/commonjs/utils/filterUtils.js.map +1 -1
  130. package/lib/commonjs/utils/geoUtils.d.js.map +1 -1
  131. package/lib/commonjs/utils/geoUtils.js.map +1 -1
  132. package/lib/commonjs/utils/getAnnotationsLayerID.js.map +1 -1
  133. package/lib/commonjs/utils/index.d.js.map +1 -1
  134. package/lib/commonjs/utils/index.js.map +1 -1
  135. package/lib/commonjs/utils/styleMap.js +2 -2
  136. package/lib/commonjs/utils/styleMap.js.map +1 -1
  137. package/lib/commonjs/web/MapContext.js.map +1 -1
  138. package/lib/commonjs/web/MapboxModule.js.map +1 -1
  139. package/lib/commonjs/web/UnimplementedComponent.js.map +1 -1
  140. package/lib/commonjs/web/components/Camera.js +2 -9
  141. package/lib/commonjs/web/components/Camera.js.map +1 -1
  142. package/lib/commonjs/web/components/MapView.js +5 -11
  143. package/lib/commonjs/web/components/MapView.js.map +1 -1
  144. package/lib/commonjs/web/index.js.map +1 -1
  145. package/lib/commonjs/web/utils/Logger.js +3 -7
  146. package/lib/commonjs/web/utils/Logger.js.map +1 -1
  147. package/lib/module/classes/AnimatedCoordinatesArray.js.map +1 -1
  148. package/lib/module/classes/AnimatedExtractCoordinateFromArray.js +2 -5
  149. package/lib/module/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
  150. package/lib/module/classes/AnimatedPoint.js.map +1 -1
  151. package/lib/module/classes/AnimatedRouteCoordinatesArray.js.map +1 -1
  152. package/lib/module/classes/AnimatedShape.js.map +1 -1
  153. package/lib/module/classes/index.d.js.map +1 -1
  154. package/lib/module/classes/index.js.map +1 -1
  155. package/lib/module/components/AbstractLayer.js +4 -10
  156. package/lib/module/components/AbstractLayer.js.map +1 -1
  157. package/lib/module/components/AbstractSource.js +3 -10
  158. package/lib/module/components/AbstractSource.js.map +1 -1
  159. package/lib/module/components/Atmosphere.js.map +1 -1
  160. package/lib/module/components/BackgroundLayer.js +3 -6
  161. package/lib/module/components/BackgroundLayer.js.map +1 -1
  162. package/lib/module/components/Callout.js +27 -30
  163. package/lib/module/components/Callout.js.map +1 -1
  164. package/lib/module/components/Camera.js +3 -1
  165. package/lib/module/components/Camera.js.map +1 -1
  166. package/lib/module/components/CircleLayer.js +3 -6
  167. package/lib/module/components/CircleLayer.js.map +1 -1
  168. package/lib/module/components/FillExtrusionLayer.js +3 -6
  169. package/lib/module/components/FillExtrusionLayer.js.map +1 -1
  170. package/lib/module/components/FillLayer.js +3 -6
  171. package/lib/module/components/FillLayer.js.map +1 -1
  172. package/lib/module/components/HeadingIndicator.js.map +1 -1
  173. package/lib/module/components/HeatmapLayer.js +3 -6
  174. package/lib/module/components/HeatmapLayer.js.map +1 -1
  175. package/lib/module/components/ImageSource.js +16 -19
  176. package/lib/module/components/ImageSource.js.map +1 -1
  177. package/lib/module/components/Images.js +3 -34
  178. package/lib/module/components/Images.js.map +1 -1
  179. package/lib/module/components/Light.js +7 -10
  180. package/lib/module/components/Light.js.map +1 -1
  181. package/lib/module/components/LineLayer.js +3 -6
  182. package/lib/module/components/LineLayer.js.map +1 -1
  183. package/lib/module/components/MapView.js +241 -227
  184. package/lib/module/components/MapView.js.map +1 -1
  185. package/lib/module/components/MarkerView.js +9 -16
  186. package/lib/module/components/MarkerView.js.map +1 -1
  187. package/lib/module/components/NativeBridgeComponent.js +0 -7
  188. package/lib/module/components/NativeBridgeComponent.js.map +1 -1
  189. package/lib/module/components/NativeUserLocation.js.map +1 -1
  190. package/lib/module/components/PointAnnotation.js +8 -11
  191. package/lib/module/components/PointAnnotation.js.map +1 -1
  192. package/lib/module/components/RasterDemSource.js +36 -39
  193. package/lib/module/components/RasterDemSource.js.map +1 -1
  194. package/lib/module/components/RasterLayer.js +3 -6
  195. package/lib/module/components/RasterLayer.js.map +1 -1
  196. package/lib/module/components/RasterSource.js +45 -48
  197. package/lib/module/components/RasterSource.js.map +1 -1
  198. package/lib/module/components/ShapeSource.js +4 -7
  199. package/lib/module/components/ShapeSource.js.map +1 -1
  200. package/lib/module/components/SkyLayer.js +3 -6
  201. package/lib/module/components/SkyLayer.js.map +1 -1
  202. package/lib/module/components/Style.js.map +1 -1
  203. package/lib/module/components/SymbolLayer.js +3 -6
  204. package/lib/module/components/SymbolLayer.js.map +1 -1
  205. package/lib/module/components/Terrain.js.map +1 -1
  206. package/lib/module/components/UserLocation.js +65 -69
  207. package/lib/module/components/UserLocation.js.map +1 -1
  208. package/lib/module/components/VectorSource.js +63 -66
  209. package/lib/module/components/VectorSource.js.map +1 -1
  210. package/lib/module/components/annotations/Annotation.js +16 -19
  211. package/lib/module/components/annotations/Annotation.js.map +1 -1
  212. package/lib/module/modules/location/locationManager.js +38 -9
  213. package/lib/module/modules/location/locationManager.js.map +1 -1
  214. package/lib/module/modules/offline/OfflineCreatePackOptions.js.map +1 -1
  215. package/lib/module/modules/offline/OfflinePack.js.map +1 -1
  216. package/lib/module/modules/offline/offlineManager.js.map +1 -1
  217. package/lib/module/modules/snapshot/SnapshotOptions.js.map +1 -1
  218. package/lib/module/modules/snapshot/snapshotManager.js.map +1 -1
  219. package/lib/module/requestAndroidLocationPermissions.js.map +1 -1
  220. package/lib/module/types/index.js.map +1 -1
  221. package/lib/module/utils/BridgeValue.js +0 -4
  222. package/lib/module/utils/BridgeValue.js.map +1 -1
  223. package/lib/module/utils/Logger.js +1 -4
  224. package/lib/module/utils/Logger.js.map +1 -1
  225. package/lib/module/utils/MapboxStyles.d.js.map +1 -1
  226. package/lib/module/utils/StyleValue.js.map +1 -1
  227. package/lib/module/utils/animated/Animated.js.map +1 -1
  228. package/lib/module/utils/deprecation.js.map +1 -1
  229. package/lib/module/utils/filterUtils.js.map +1 -1
  230. package/lib/module/utils/geoUtils.d.js.map +1 -1
  231. package/lib/module/utils/geoUtils.js.map +1 -1
  232. package/lib/module/utils/getAnnotationsLayerID.js.map +1 -1
  233. package/lib/module/utils/index.d.js.map +1 -1
  234. package/lib/module/utils/index.js.map +1 -1
  235. package/lib/module/utils/styleMap.js +2 -2
  236. package/lib/module/utils/styleMap.js.map +1 -1
  237. package/lib/module/web/MapContext.js.map +1 -1
  238. package/lib/module/web/MapboxModule.js.map +1 -1
  239. package/lib/module/web/UnimplementedComponent.js.map +1 -1
  240. package/lib/module/web/components/Camera.js +2 -9
  241. package/lib/module/web/components/Camera.js.map +1 -1
  242. package/lib/module/web/components/MapView.js +5 -11
  243. package/lib/module/web/components/MapView.js.map +1 -1
  244. package/lib/module/web/index.js.map +1 -1
  245. package/lib/module/web/utils/Logger.js +3 -7
  246. package/lib/module/web/utils/Logger.js.map +1 -1
  247. package/lib/typescript/components/Camera.d.ts +4 -2
  248. package/lib/typescript/components/Camera.d.ts.map +1 -1
  249. package/lib/typescript/components/Images.d.ts +57 -0
  250. package/lib/typescript/components/Images.d.ts.map +1 -0
  251. package/lib/typescript/modules/location/locationManager.d.ts +87 -0
  252. package/lib/typescript/modules/location/locationManager.d.ts.map +1 -0
  253. package/lib/typescript/utils/styleMap.d.ts +2 -2
  254. package/package.json +1 -1
  255. package/rnmapbox-maps.podspec +1 -1
  256. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RCTMGLNativeUserLocationManager.java +0 -34
  257. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/RenderMode.kt +0 -21
  258. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/UserTrackingMode.java +0 -54
  259. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/helpers/CameraChangeTracker.java +0 -37
  260. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/location/UserLocationVerticalAlignment.java +0 -7
  261. package/javascript/components/Images.js +0 -118
  262. package/javascript/modules/location/locationManager.js +0 -136
@@ -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.11.0'
133
+ implementation 'com.mapbox.maps:android:10.11.1'
134
134
  implementation 'com.mapbox.mapboxsdk:mapbox-sdk-turf:6.10.0'
135
135
  implementation 'androidx.asynclayoutinflater:asynclayoutinflater:1.0.0'
136
136
  }
@@ -13,7 +13,6 @@ import com.mapbox.maps.ViewAnnotationOptions
13
13
  import com.mapbox.maps.viewannotation.viewAnnotationOptions
14
14
  import com.mapbox.rctmgl.components.AbstractMapFeature
15
15
  import com.mapbox.rctmgl.components.mapview.RCTMGLMapView
16
- import com.mapbox.rctmgl.modules.RCTMGLLogging
17
16
  import com.mapbox.rctmgl.utils.Logger
18
17
  import java.util.Vector
19
18
 
@@ -3,50 +3,35 @@ package com.mapbox.rctmgl.components.camera
3
3
  import android.animation.Animator
4
4
  import android.content.Context
5
5
  import android.location.Location
6
- import com.mapbox.rctmgl.utils.GeoJSONUtils.toPoint
6
+ import com.facebook.react.bridge.ReadableMap
7
7
  import com.mapbox.maps.plugin.gestures.gestures
8
8
  import com.mapbox.rctmgl.location.LocationManager.Companion.getInstance
9
- import com.mapbox.maps.plugin.animation.camera
10
- import com.mapbox.rctmgl.utils.GeoJSONUtils.toLocation
11
- import com.mapbox.maps.plugin.animation.MapAnimationOptions.Builder
12
9
  import com.mapbox.maps.plugin.animation.flyTo
13
- import com.mapbox.rctmgl.components.camera.RCTMGLCameraManager
14
10
  import com.mapbox.rctmgl.components.AbstractMapFeature
15
11
  import com.mapbox.rctmgl.components.mapview.RCTMGLMapView
16
- import com.mapbox.rctmgl.components.camera.CameraStop
17
- import com.mapbox.rctmgl.components.camera.CameraUpdateQueue
18
12
  import com.mapbox.rctmgl.components.location.LocationComponentManager
19
13
  import com.mapbox.rctmgl.utils.LatLngBounds
20
- import com.mapbox.rctmgl.location.LocationManager.OnUserLocationChange
21
- import com.mapbox.rctmgl.utils.GeoJSONUtils
22
14
  import com.mapbox.maps.plugin.locationcomponent.OnIndicatorBearingChangedListener
23
15
  import com.mapbox.maps.plugin.locationcomponent.OnIndicatorPositionChangedListener
24
- import com.mapbox.rctmgl.components.camera.CameraUpdateItem
25
- import com.mapbox.rctmgl.events.IEvent
26
- import com.mapbox.rctmgl.events.MapChangeEvent
27
- import com.mapbox.rctmgl.events.constants.EventTypes
28
- import com.mapbox.rctmgl.components.camera.RCTMGLCamera
29
- import com.mapbox.android.core.permissions.PermissionsManager
30
- import com.mapbox.maps.plugin.animation.CameraAnimationsPlugin
31
16
  import com.facebook.react.bridge.WritableMap
32
17
  import com.facebook.react.bridge.WritableNativeMap
33
- import com.mapbox.geojson.Point
34
18
  import com.mapbox.maps.*
35
19
  import com.mapbox.maps.plugin.PuckBearingSource
36
20
  import com.mapbox.maps.plugin.locationcomponent.location
37
21
  import com.mapbox.maps.plugin.locationcomponent.location2
22
+ import com.mapbox.maps.plugin.viewport.ViewportStatus
23
+ import com.mapbox.maps.plugin.viewport.ViewportStatusObserver
38
24
  import com.mapbox.maps.plugin.viewport.data.FollowPuckViewportStateBearing
39
25
  import com.mapbox.maps.plugin.viewport.data.FollowPuckViewportStateOptions
26
+ import com.mapbox.maps.plugin.viewport.data.ViewportStatusChangeReason
40
27
  import com.mapbox.maps.plugin.viewport.viewport
41
28
  import com.mapbox.rctmgl.components.camera.constants.CameraMode
42
29
  import com.mapbox.rctmgl.components.location.*
30
+ import com.mapbox.rctmgl.events.MapUserTrackingModeEvent
43
31
  import com.mapbox.rctmgl.location.*
44
- import com.mapbox.rctmgl.modules.RCTMGLLogging
45
- import com.mapbox.rctmgl.utils.LatLng
46
32
  import com.mapbox.rctmgl.utils.Logger
47
33
 
48
34
 
49
-
50
35
  class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCameraManager) :
51
36
  AbstractMapFeature(
52
37
  mContext
@@ -62,21 +47,24 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
62
47
  private var mLocationComponentManager: LocationComponentManager? = null
63
48
  private var mUserTrackingMode = 0
64
49
  private var mUserTrackingState = UserTrackingState.POSSIBLE
65
- private val mUserLocationVerticalAlignment = UserLocationVerticalAlignment.CENTER
66
50
  private val mLocationManager: LocationManager?
67
51
  private val mUserLocation: UserLocation = UserLocation()
68
52
  private val mCenterCoordinate: ScreenCoordinate? = null
69
53
  private val mAnimated = false
70
54
  private val mHeading = 0.0
71
- private var mFollowPitch : Double? = null
55
+
56
+ private var mFollowUserLocation = false
57
+ private var mFollowUserMode: String? = null
72
58
  private var mFollowZoomLevel : Double? = null
59
+ private var mFollowPitch : Double? = null
73
60
  private var mFollowHeading : Double? = null
61
+ private var mFollowPadding : EdgeInsets? = null
62
+
74
63
  private var mZoomLevel = -1.0
75
64
  private var mMinZoomLevel : Double? = null
76
65
  private var mMaxZoomLevel : Double? = null
77
66
  private var mMaxBounds: LatLngBounds? = null
78
- private var mFollowUserLocation = false
79
- private var mFollowUserMode: String? = null
67
+
80
68
 
81
69
  private val mLocationBearingChangedListener = OnIndicatorBearingChangedListener { v ->
82
70
  if (mFollowUserLocation) {
@@ -113,7 +101,8 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
113
101
  setInitialCamera()
114
102
  updateMaxBounds()
115
103
  mCameraStop?.let { updateCamera(it) }
116
- _updateViewportState();
104
+ _observeViewportState(mapView)
105
+ _updateViewportState()
117
106
  }
118
107
 
119
108
  override fun removeFromMap(mapView: RCTMGLMapView) {
@@ -131,9 +120,14 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
131
120
  mDefaultStop = stop
132
121
  }
133
122
 
134
- fun setFollowPitch(pitch: Double) {
135
- mFollowPitch = pitch
136
- _updateViewportState();
123
+ fun setFollowUserMode(mode: String?) {
124
+ mFollowUserMode = mode
125
+ _updateViewportState()
126
+ }
127
+
128
+ fun setFollowUserLocation(value: Boolean) {
129
+ mFollowUserLocation = value
130
+ _updateViewportState()
137
131
  }
138
132
 
139
133
  fun setFollowZoomLevel(zoomLevel: Double) {
@@ -141,11 +135,30 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
141
135
  _updateViewportState();
142
136
  }
143
137
 
138
+ fun setFollowPitch(pitch: Double) {
139
+ mFollowPitch = pitch
140
+ _updateViewportState();
141
+ }
142
+
144
143
  fun setFollowHeading(heading: Double) {
145
144
  mFollowHeading = heading
146
145
  _updateViewportState();
147
146
  }
148
147
 
148
+ fun setFollowPadding(padding: ReadableMap) {
149
+ // scale padding by pixel ratio
150
+ val metrics = context.resources.displayMetrics
151
+ val edgeInsets = EdgeInsets(
152
+ if (padding.hasKey("paddingTop")) padding.getDouble("paddingTop") * metrics.density else 0.0,
153
+ if (padding.hasKey("paddingLeft")) padding.getDouble("paddingLeft") * metrics.density else 0.0,
154
+ if (padding.hasKey("paddingBottom")) padding.getDouble("paddingBottom") * metrics.density else 0.0,
155
+ if (padding.hasKey("paddingRight")) padding.getDouble("paddingRight") * metrics.density else 0.0,
156
+ )
157
+
158
+ mFollowPadding = edgeInsets
159
+ _updateViewportState();
160
+ }
161
+
149
162
  fun setMaxBounds(bounds: LatLngBounds?) {
150
163
  mMaxBounds = bounds
151
164
  updateMaxBounds()
@@ -182,14 +195,6 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
182
195
  mCameraUpdateQueue.execute(mMapView)
183
196
  }
184
197
 
185
- private fun updateUserTrackingMode(userTrackingMode: Int) {
186
- /* v10todo
187
- mUserLocation.setTrackingMode(userTrackingMode);
188
- IEvent event = new MapUserTrackingModeEvent(this, userTrackingMode);
189
- mManager.handleEvent(event);
190
- */
191
- }
192
-
193
198
  private fun updateUserLocation(isAnimated: Boolean) {
194
199
 
195
200
  }
@@ -224,7 +229,7 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
224
229
  if (mLocationComponentManager == null) {
225
230
  mLocationComponentManager = mMapView!!.locationComponentManager
226
231
  }
227
- mLocationComponentManager!!.update(style)
232
+ mLocationComponentManager!!.update()
228
233
  }
229
234
 
230
235
  fun setMinZoomLevel(zoomLevel: Double?) {
@@ -269,7 +274,7 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
269
274
  fun setUserTrackingMode(userTrackingMode: Int) {
270
275
  val oldTrackingMode = mUserTrackingMode
271
276
  mUserTrackingMode = userTrackingMode
272
- updateUserTrackingMode(userTrackingMode)
277
+ mManager.handleEvent(MapUserTrackingModeEvent(this@RCTMGLCamera, userTrackingMode))
273
278
  when (mUserTrackingMode) {
274
279
  UserTrackingMode.NONE -> mUserTrackingState = UserTrackingState.POSSIBLE
275
280
  UserTrackingMode.FOLLOW, UserTrackingMode.FollowWithCourse, UserTrackingMode.FollowWithHeading -> if (oldTrackingMode == UserTrackingMode.NONE) {
@@ -281,15 +286,33 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
281
286
  }
282
287
  }
283
288
 
284
- fun setFollowUserLocation(value: Boolean) {
285
- mFollowUserLocation = value
286
- _updateViewportState()
289
+ fun _observeViewportState(mapView: MapView) {
290
+ mapView.viewport.addStatusObserver(object: ViewportStatusObserver {
291
+ override fun onViewportStatusChanged(
292
+ from: ViewportStatus,
293
+ to: ViewportStatus,
294
+ reason: ViewportStatusChangeReason
295
+ ) {
296
+ if (to == ViewportStatus.Idle) {
297
+ mManager.handleEvent(MapUserTrackingModeEvent(this@RCTMGLCamera, UserTrackingMode.NONE))
298
+ } else if (to is ViewportStatus.Transition) {
299
+
300
+ } else if (to is ViewportStatus.State){
301
+ //mManager.handleEvent(MapUserTrackingModeEvent(this@RCTMGLCamera, UserTrackingMode.FOLLOW))
302
+ }
303
+ }
304
+ })
287
305
  }
288
306
 
289
307
  fun _updateViewportState() {
290
308
  mMapView?.let {
291
309
  val map = it
292
310
  val viewport = map.viewport;
311
+
312
+ if (mLocationComponentManager == null) {
313
+ mLocationComponentManager = it.locationComponentManager
314
+ }
315
+
293
316
  if (mFollowUserLocation == false) {
294
317
  viewport.idle()
295
318
  mLocationComponentManager?.setFollowLocation(false)
@@ -298,10 +321,10 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
298
321
 
299
322
  mLocationComponentManager?.setFollowLocation(true)
300
323
  mLocationManager?.let {
301
-
302
- val provider = it.provider
303
- map.location.setLocationProvider(provider);
304
- map.location2.setLocationProvider(provider);
324
+ val provider = map.location.getLocationProvider()
325
+ if (provider != null) {
326
+ it.provider = provider
327
+ }
305
328
  }
306
329
 
307
330
  val location = map.location2
@@ -334,15 +357,22 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
334
357
  }
335
358
  }
336
359
 
360
+ when(val it=mFollowZoomLevel) {
361
+ null -> followOptions.zoom(cameraState.zoom)
362
+ else -> followOptions.zoom(it)
363
+ }
364
+
337
365
  when(val it=mFollowPitch) {
338
366
  null -> followOptions.pitch(cameraState.pitch)
339
367
  else -> followOptions.pitch(it)
340
368
  }
341
- when(val it=mFollowZoomLevel) {
342
- null -> followOptions.zoom(cameraState.zoom)
343
- else -> followOptions.zoom(mFollowZoomLevel)
369
+
370
+ when(val it=mFollowPadding) {
371
+ null -> followOptions.padding(cameraState.padding)
372
+ else -> followOptions.padding(it)
344
373
  }
345
374
 
375
+
346
376
  val followState = viewport.makeFollowPuckViewportState(followOptions.build())
347
377
  viewport.transitionTo(followState)
348
378
  }
@@ -353,11 +383,6 @@ class RCTMGLCamera(private val mContext: Context, private val mManager: RCTMGLCa
353
383
  }
354
384
  }
355
385
 
356
- fun setFollowUserMode(mode: String?) {
357
- mFollowUserMode = mode
358
- _updateViewportState()
359
- }
360
-
361
386
  private fun updatedFollowUserMode() {
362
387
  if (mFollowUserLocation) {
363
388
  setUserTrackingMode(UserTrackingMode.fromString(mFollowUserMode))
@@ -1,5 +1,4 @@
1
1
  package com.mapbox.rctmgl.components.camera
2
-
3
2
  import com.facebook.react.bridge.ReactApplicationContext
4
3
  import com.facebook.react.bridge.ReadableMap
5
4
  import com.facebook.react.uimanager.ThemedReactContext
@@ -10,7 +9,6 @@ import com.mapbox.rctmgl.components.camera.CameraStop.Companion.fromReadableMap
10
9
  import com.mapbox.rctmgl.utils.GeoJSONUtils.toLatLngBounds
11
10
 
12
11
 
13
- //import com.mapbox.rctmgl.utils.GeoJSONUtils;
14
12
  class RCTMGLCameraManager(private val mContext: ReactApplicationContext) :
15
13
  AbstractEventEmitter<RCTMGLCamera?>(
16
14
  mContext
@@ -54,6 +52,16 @@ class RCTMGLCameraManager(private val mContext: ReactApplicationContext) :
54
52
  camera.setZoomLevel(zoomLevel)
55
53
  }
56
54
 
55
+ @ReactProp(name = "minZoomLevel")
56
+ fun setMinZoomLevel(camera: RCTMGLCamera, value: Double) {
57
+ camera.setMinZoomLevel(value)
58
+ }
59
+
60
+ @ReactProp(name = "maxZoomLevel")
61
+ fun setMaxZoomLevel(camera: RCTMGLCamera, value: Double) {
62
+ camera.setMaxZoomLevel(value)
63
+ }
64
+
57
65
  @ReactProp(name = "followUserLocation")
58
66
  fun setFollowUserLocation(camera: RCTMGLCamera, value: Boolean) {
59
67
  camera.setFollowUserLocation(value)
@@ -64,14 +72,9 @@ class RCTMGLCameraManager(private val mContext: ReactApplicationContext) :
64
72
  camera.setFollowUserMode(value)
65
73
  }
66
74
 
67
- @ReactProp(name = "minZoomLevel")
68
- fun setMinZoomLevel(camera: RCTMGLCamera, value: Double) {
69
- camera.setMinZoomLevel(value)
70
- }
71
-
72
- @ReactProp(name = "maxZoomLevel")
73
- fun setMaxZoomLevel(camera: RCTMGLCamera, value: Double) {
74
- camera.setMaxZoomLevel(value)
75
+ @ReactProp(name = "followZoomLevel")
76
+ fun setFollowZoomLevel(camera: RCTMGLCamera, value: Double) {
77
+ camera.setFollowZoomLevel(value)
75
78
  }
76
79
 
77
80
  @ReactProp(name = "followPitch")
@@ -84,9 +87,9 @@ class RCTMGLCameraManager(private val mContext: ReactApplicationContext) :
84
87
  camera.setFollowHeading(value)
85
88
  }
86
89
 
87
- @ReactProp(name = "followZoomLevel")
88
- fun setFollowZoomLevel(camera: RCTMGLCamera, value: Double) {
89
- camera.setFollowZoomLevel(value)
90
+ @ReactProp(name = "followPadding")
91
+ fun setFollowPadding(camera: RCTMGLCamera, value: ReadableMap) {
92
+ camera.setFollowPadding(value)
90
93
  }
91
94
 
92
95
  @ReactProp(name = "maxBounds")
@@ -2,124 +2,166 @@ package com.mapbox.rctmgl.components.location
2
2
 
3
3
  import android.content.Context
4
4
  import android.graphics.Color
5
+ import android.graphics.drawable.Drawable
5
6
  import android.graphics.drawable.VectorDrawable
6
7
  import androidx.appcompat.content.res.AppCompatResources
8
+ import androidx.lifecycle.Lifecycle
7
9
  import com.mapbox.maps.plugin.locationcomponent.location
8
10
  import com.mapbox.rctmgl.components.mapview.RCTMGLMapView
9
- import com.mapbox.maps.Style
10
11
  import com.mapbox.maps.plugin.LocationPuck2D
12
+ import com.mapbox.maps.plugin.PuckBearingSource
13
+ import com.mapbox.maps.plugin.lifecycle.lifecycle
11
14
  import com.mapbox.rctmgl.R
12
15
  import com.mapbox.rctmgl.location.LocationManager
13
16
 
14
17
  /**
15
18
  * The LocationComponent on android implements display of user's current location.
16
- * But viewport seems to be tied to it in the sense that if location is not enbabled then it's viewport user tracking is not working.
19
+ * But viewport seems to be tied to it in the sense that if location is not enabled then it's viewport user tracking is not working.
17
20
  * LocationComponentManager attempts to separate that, so that Camera can ask for location tracking independent of display of user current location.
18
21
  * And NativeUserLocation can ask for display of user's current location - independent of Camera's user tracking.
19
22
  */
20
23
  class LocationComponentManager(mapView: RCTMGLMapView, context: Context) {
21
- private var mShowNativeUserLocation = false
22
- private var mFollowLocation = false
23
24
  var mMapView = mapView
24
25
  var mContext = context
25
- var mState = State(enabled=true, hidden=false, tintColor= null)
26
- var mLocationManager: LocationManager? = LocationManager.getInstance(context!!)
26
+ private var mState = State(showUserLocation=false, followUserLocation=false, hidden=false, tintColor= null, bearingImage = null, puckBearingSource =null)
27
+
28
+ private var mLocationManager: LocationManager = LocationManager.getInstance(context)
29
+
30
+ private var mNeedsFullUpdate = true
31
+
32
+ private var mLocationManagerStarted = false
27
33
 
28
34
  data class State(
29
- val enabled: Boolean, // in case followUserLocation is active or visible
35
+ val showUserLocation: Boolean,
36
+ val followUserLocation: Boolean,
30
37
  val hidden: Boolean, // in case it isn't native
31
38
  val tintColor: Int?, // tint of location puck
32
- )
33
-
34
- fun showNativeUserLocation(showUserLocation: Boolean) {
35
- mShowNativeUserLocation = showUserLocation
36
-
37
- _applyChanges()
39
+ var bearingImage: Drawable?, // bearing image (background)
40
+ var puckBearingSource: PuckBearingSource? // bearing source
41
+ ) {
42
+ val enabled: Boolean
43
+ get() = showUserLocation || followUserLocation
38
44
  }
39
45
 
40
- fun setFollowLocation(followLoation: Boolean) {
41
- mFollowLocation = followLoation
42
-
43
- _applyChanges()
46
+ fun update(newStateCallback: (currentState: State) -> State) {
47
+ val newState = newStateCallback(mState);
48
+ if (newState != mState) {
49
+ applyStateChanges(mState, newState)
50
+ mState = newState
51
+ }
44
52
  }
45
53
 
46
- fun update(style: Style) {
47
- _applyChanges()
48
- }
54
+ private fun applyStateChanges(oldState: State, newState: State) {
55
+ mMapView.let {
56
+ val needsFullUpdate = mNeedsFullUpdate
49
57
 
50
- fun setRenderMode(renderMode: RenderMode) {
51
- _applyChanges()
58
+ applyStateChanges(it, oldState, newState, needsFullUpdate)
59
+
60
+ mNeedsFullUpdate = false
61
+ }
52
62
  }
53
63
 
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
- }
64
+ private fun applyStateChanges(map: RCTMGLMapView, oldState: State, newState: State, fullUpdate: Boolean) {
65
+ if (map.getLifecycleState() != Lifecycle.State.STARTED) {
66
+ // In case lifecycle was already stopped, so we're part of shutdown, do not call updateSettings as it'll just restart
67
+ // the loationComponent that will not be stopped. See https://github.com/mapbox/mapbox-maps-android/issues/2017
68
+ if (!newState.enabled) {
69
+ stopLocationManager()
70
+ }
71
+ return
72
+ }
73
+ map.location.updateSettings {
74
+ enabled = newState.enabled
75
+
76
+ if (fullUpdate || (newState.hidden != oldState.hidden) || (newState.tintColor != oldState.tintColor) || (newState.bearingImage != oldState.bearingImage)) {
77
+ if (newState.hidden) {
78
+ var emptyLocationPuck = LocationPuck2D()
79
+ val empty = AppCompatResources.getDrawable(mContext, R.drawable.empty)
80
+ emptyLocationPuck.bearingImage = empty
81
+ emptyLocationPuck.shadowImage = empty
82
+ emptyLocationPuck.topImage = empty
83
+ //emptyLocationPuck.opacity = 0.0
84
+ locationPuck = emptyLocationPuck
85
+ pulsingEnabled = false
86
+ } else {
87
+ val mapboxBlueColor = Color.parseColor("#4A90E2")
88
+ val tintColor = newState.tintColor
89
+ val defaultLocationPuck = LocationPuck2D()
90
+ var topImage = AppCompatResources.getDrawable(mContext, R.drawable.mapbox_user_icon)
91
+ if (tintColor != null) {
92
+ val drawable = topImage as VectorDrawable?
93
+ drawable!!.setTint(tintColor)
94
+ topImage = drawable
104
95
  }
105
- }
106
-
107
- 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
- }
96
+ defaultLocationPuck.topImage = topImage
97
+ val defaultBearingImage = AppCompatResources.getDrawable(
98
+ mContext, R.drawable.mapbox_user_stroke_icon
99
+ );
100
+ defaultLocationPuck.bearingImage = newState.bearingImage ?: defaultBearingImage
101
+ val shadowImage = AppCompatResources.getDrawable(
102
+ mContext, R.drawable.mapbox_user_icon_shadow
103
+ )
104
+ defaultLocationPuck.shadowImage = shadowImage
105
+ locationPuck = defaultLocationPuck
106
+ pulsingEnabled = true
107
+ if (tintColor != null) {
108
+ pulsingColor = tintColor
114
109
  } else {
115
- mLocationManager?.stopCounted()
110
+ pulsingColor = mapboxBlueColor
116
111
  }
117
112
  }
113
+ }
118
114
 
119
- mState = newState;
115
+ if (fullUpdate || newState.enabled != mState.enabled) {
116
+ if (newState.enabled) {
117
+ startLocationManager()
118
+ useMapLocationProvider(map)
119
+ } else {
120
+ stopLocationManager()
121
+ }
120
122
  }
123
+ }
124
+ }
125
+
126
+ private fun startLocationManager() {
127
+ if (!mLocationManagerStarted) {
128
+ mLocationManager.startCounted()
129
+ mLocationManagerStarted = true
130
+ }
131
+ }
132
+
133
+ private fun stopLocationManager() {
134
+ if (mLocationManagerStarted) {
135
+ mLocationManager.stopCounted()
136
+ mLocationManagerStarted = false
137
+ }
138
+ }
139
+
140
+ private fun useMapLocationProvider(mapView: RCTMGLMapView) {
141
+ val provider = mapView.location.getLocationProvider()
142
+ if (provider != null) {
143
+ mLocationManager.provider = provider
144
+ }
145
+ }
146
+
121
147
 
148
+ fun showNativeUserLocation(showUserLocation: Boolean) {
149
+ update {
150
+ it.copy(showUserLocation = showUserLocation)
151
+ }
152
+ }
122
153
 
154
+ fun setFollowLocation(followUserLocation: Boolean) {
155
+ update {
156
+ it.copy(followUserLocation = followUserLocation)
123
157
  }
124
158
  }
159
+
160
+ fun update() {
161
+ update { it }
162
+ }
163
+
164
+ fun onDestroy() {
165
+ stopLocationManager();
166
+ }
125
167
  }
@@ -2,25 +2,33 @@ package com.mapbox.rctmgl.components.location
2
2
 
3
3
  import android.annotation.SuppressLint
4
4
  import android.content.Context
5
+ import androidx.appcompat.content.res.AppCompatResources
5
6
  import com.mapbox.rctmgl.components.mapview.OnMapReadyCallback
6
7
  import com.mapbox.maps.MapboxMap
7
8
  import com.mapbox.android.core.permissions.PermissionsManager
8
9
  import com.mapbox.maps.Style
10
+ import com.mapbox.maps.plugin.PuckBearingSource
11
+ import com.mapbox.rctmgl.R
9
12
  import com.mapbox.rctmgl.components.AbstractMapFeature
10
13
  import com.mapbox.rctmgl.components.mapview.RCTMGLMapView
11
14
 
12
- class RCTMGLNativeUserLocation(context: Context?) : AbstractMapFeature(context), OnMapReadyCallback, Style.OnStyleLoaded {
15
+ enum class RenderMode {
16
+ GPS, COMPASS, NORMAL
17
+ }
18
+
19
+ class RCTMGLNativeUserLocation(context: Context) : AbstractMapFeature(context), OnMapReadyCallback, Style.OnStyleLoaded {
13
20
  private var mEnabled = true
14
21
  private var mMap: MapboxMap? = null
22
+ private var mRenderMode : RenderMode = RenderMode.NORMAL;
23
+ private var mContext : Context = context
15
24
 
16
- private var mRenderMode : RenderMode = RenderMode.COMPASS
17
25
  override fun addToMap(mapView: RCTMGLMapView) {
18
26
  super.addToMap(mapView)
19
27
  mEnabled = true
20
28
  mapView.getMapboxMap()
21
29
  mapView.getMapAsync(this)
22
- setRenderMode(mRenderMode)
23
30
  mMapView?.locationComponentManager?.showNativeUserLocation(true)
31
+ applyChanges()
24
32
  }
25
33
 
26
34
  override fun removeFromMap(mapView: RCTMGLMapView) {
@@ -34,6 +42,12 @@ class RCTMGLNativeUserLocation(context: Context?) : AbstractMapFeature(context),
34
42
  override fun onMapReady(mapboxMap: MapboxMap) {
35
43
  mMap = mapboxMap
36
44
  mapboxMap.getStyle(this)
45
+ applyChanges()
46
+ }
47
+
48
+ fun setAndroidRenderMode(renderMode: RenderMode) {
49
+ mRenderMode = renderMode;
50
+ applyChanges();
37
51
  }
38
52
 
39
53
  @SuppressLint("MissingPermission")
@@ -43,12 +57,24 @@ class RCTMGLNativeUserLocation(context: Context?) : AbstractMapFeature(context),
43
57
  return
44
58
  }
45
59
 
46
- mMapView?.locationComponentManager?.update(style)
60
+ mMapView?.locationComponentManager?.update()
47
61
  mMapView?.locationComponentManager?.showNativeUserLocation(mEnabled)
48
62
  }
49
63
 
50
- fun setRenderMode(renderMode: RenderMode) {
51
- mRenderMode = renderMode
52
- mMapView?.locationComponentManager?.setRenderMode(renderMode)
64
+ fun applyChanges() {
65
+ mMapView?.locationComponentManager?.let {
66
+ // emulate https://docs.mapbox.com/android/legacy/maps/guides/location-component/
67
+ when (mRenderMode) {
68
+ RenderMode.NORMAL ->
69
+ it.update { it.copy(bearingImage = null, puckBearingSource = null)}
70
+ RenderMode.GPS -> it.update {
71
+ it.copy(bearingImage = AppCompatResources.getDrawable(
72
+ mContext, R.drawable.mapbox_user_bearing_icon
73
+ ), puckBearingSource = PuckBearingSource.COURSE) }
74
+ RenderMode.COMPASS -> it.update{ it.copy(bearingImage= AppCompatResources.getDrawable(
75
+ mContext, R.drawable.mapbox_user_puck_icon
76
+ ), puckBearingSource = PuckBearingSource.HEADING) }
77
+ }
78
+ }
53
79
  }
54
80
  }