@rnmapbox/maps 10.1.0-beta.23 → 10.1.0-beta.25

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 (153) hide show
  1. package/android/src/main/java/com/rnmapbox/rnmbx/RNMBXPackage.kt +4 -0
  2. package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXViewport.kt +69 -2
  3. package/android/src/main/java/com/rnmapbox/rnmbx/components/images/RNMBXImagesManager.kt +27 -3
  4. package/android/src/main/java/com/rnmapbox/rnmbx/components/location/RNMBXNativeUserLocation.kt +51 -0
  5. package/android/src/main/java/com/rnmapbox/rnmbx/components/location/RNMBXNativeUserLocationManager.kt +8 -0
  6. package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/NativeMapViewModule.kt +1 -1
  7. package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/RNMBXStyleFactory.kt +1184 -109
  8. package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/layers/RNMBXModelLayer.kt +33 -0
  9. package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/layers/RNMBXModelLayerManager.kt +85 -0
  10. package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/model/RNMBXModels.kt +33 -0
  11. package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/model/RNMBXModelsManager.kt +59 -0
  12. package/android/src/main/java/com/rnmapbox/rnmbx/utils/extensions/ReadableMap.kt +37 -5
  13. package/android/src/main/mapbox-v11-compat/v10/com/rnmapbox/rnmbx/v11compat/StyleFactory.kt +395 -0
  14. package/android/src/main/mapbox-v11-compat/v11/com/rnmapbox/rnmbx/v11compat/StyleFactory.kt +8 -0
  15. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXModelLayerManagerDelegate.java +65 -0
  16. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXModelLayerManagerInterface.java +28 -0
  17. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXModelsManagerDelegate.java +32 -0
  18. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXModelsManagerInterface.java +17 -0
  19. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXNativeUserLocationManagerDelegate.java +3 -0
  20. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXNativeUserLocationManagerInterface.java +1 -0
  21. package/ios/RNMBX/RNMBXFabricPropConvert.h +11 -5
  22. package/ios/RNMBX/RNMBXFabricPropConvert.mm +5 -0
  23. package/ios/RNMBX/RNMBXInteractiveElement.swift +1 -1
  24. package/ios/RNMBX/RNMBXModelLayer.swift +59 -0
  25. package/ios/RNMBX/RNMBXModelLayerComponentView.h +15 -0
  26. package/ios/RNMBX/RNMBXModelLayerComponentView.mm +70 -0
  27. package/ios/RNMBX/RNMBXModelLayerViewManager.m +12 -0
  28. package/ios/RNMBX/RNMBXModelLayerViewManager.swift +13 -0
  29. package/ios/RNMBX/RNMBXModels.swift +63 -0
  30. package/ios/RNMBX/RNMBXModelsComponentView.h +17 -0
  31. package/ios/RNMBX/RNMBXModelsComponentView.mm +67 -0
  32. package/ios/RNMBX/RNMBXModelsManager.mm +9 -0
  33. package/ios/RNMBX/RNMBXModelsManager.swift +13 -0
  34. package/ios/RNMBX/RNMBXNativeUserLocation.swift +47 -16
  35. package/ios/RNMBX/RNMBXNativeUserLocationComponentView.mm +8 -7
  36. package/ios/RNMBX/RNMBXNativeUserLocationViewManager.m +1 -0
  37. package/ios/RNMBX/RNMBXStyle.swift +786 -1
  38. package/ios/RNMBX/RNMBXStyleValue.swift +34 -3
  39. package/ios/RNMBX/RNMBXViewport.swift +59 -3
  40. package/lib/commonjs/Mapbox.js +16 -0
  41. package/lib/commonjs/Mapbox.js.map +1 -1
  42. package/lib/commonjs/components/AbstractLayer.js +1 -1
  43. package/lib/commonjs/components/AbstractLayer.js.map +1 -1
  44. package/lib/commonjs/components/ModelLayer.js +37 -0
  45. package/lib/commonjs/components/ModelLayer.js.map +1 -0
  46. package/lib/commonjs/components/Models.js +43 -0
  47. package/lib/commonjs/components/Models.js.map +1 -0
  48. package/lib/commonjs/components/NativeUserLocation.js +25 -1
  49. package/lib/commonjs/components/NativeUserLocation.js.map +1 -1
  50. package/lib/commonjs/components/Viewport.js.map +1 -1
  51. package/lib/commonjs/specs/RNMBXCircleLayerNativeComponent.js.map +1 -1
  52. package/lib/commonjs/specs/RNMBXFillLayerNativeComponent.js.map +1 -1
  53. package/lib/commonjs/specs/RNMBXHeatmapLayerNativeComponent.js.map +1 -1
  54. package/lib/commonjs/specs/RNMBXLineLayerNativeComponent.js.map +1 -1
  55. package/lib/commonjs/specs/RNMBXModelLayerNativeComponent.js +13 -0
  56. package/lib/commonjs/specs/RNMBXModelLayerNativeComponent.js.map +1 -0
  57. package/lib/commonjs/specs/RNMBXModelsNativeComponent.js +10 -0
  58. package/lib/commonjs/specs/RNMBXModelsNativeComponent.js.map +1 -0
  59. package/lib/commonjs/specs/RNMBXNativeUserLocationNativeComponent.js.map +1 -1
  60. package/lib/commonjs/specs/RNMBXRasterLayerNativeComponent.js.map +1 -1
  61. package/lib/commonjs/specs/RNMBXSymbolLayerNativeComponent.js.map +1 -1
  62. package/lib/commonjs/specs/codeparts/CommonLayerNativeComponentsProps.codepart-ts +11 -10
  63. package/lib/commonjs/utils/MapboxStyles.d.js +5 -0
  64. package/lib/commonjs/utils/MapboxStyles.d.js.map +1 -1
  65. package/lib/commonjs/utils/styleMap.js +67 -2
  66. package/lib/commonjs/utils/styleMap.js.map +1 -1
  67. package/lib/module/Mapbox.js +2 -0
  68. package/lib/module/Mapbox.js.map +1 -1
  69. package/lib/module/components/AbstractLayer.js +1 -1
  70. package/lib/module/components/AbstractLayer.js.map +1 -1
  71. package/lib/module/components/ModelLayer.js +30 -0
  72. package/lib/module/components/ModelLayer.js.map +1 -0
  73. package/lib/module/components/Models.js +36 -0
  74. package/lib/module/components/Models.js.map +1 -0
  75. package/lib/module/components/NativeUserLocation.js +25 -1
  76. package/lib/module/components/NativeUserLocation.js.map +1 -1
  77. package/lib/module/components/Viewport.js.map +1 -1
  78. package/lib/module/specs/RNMBXCircleLayerNativeComponent.js +2 -0
  79. package/lib/module/specs/RNMBXCircleLayerNativeComponent.js.map +1 -1
  80. package/lib/module/specs/RNMBXFillLayerNativeComponent.js +2 -0
  81. package/lib/module/specs/RNMBXFillLayerNativeComponent.js.map +1 -1
  82. package/lib/module/specs/RNMBXHeatmapLayerNativeComponent.js +2 -0
  83. package/lib/module/specs/RNMBXHeatmapLayerNativeComponent.js.map +1 -1
  84. package/lib/module/specs/RNMBXLineLayerNativeComponent.js +2 -0
  85. package/lib/module/specs/RNMBXLineLayerNativeComponent.js.map +1 -1
  86. package/lib/module/specs/RNMBXModelLayerNativeComponent.js +9 -0
  87. package/lib/module/specs/RNMBXModelLayerNativeComponent.js.map +1 -0
  88. package/lib/module/specs/RNMBXModelsNativeComponent.js +3 -0
  89. package/lib/module/specs/RNMBXModelsNativeComponent.js.map +1 -0
  90. package/lib/module/specs/RNMBXNativeUserLocationNativeComponent.js.map +1 -1
  91. package/lib/module/specs/RNMBXRasterLayerNativeComponent.js +2 -0
  92. package/lib/module/specs/RNMBXRasterLayerNativeComponent.js.map +1 -1
  93. package/lib/module/specs/RNMBXSymbolLayerNativeComponent.js +2 -0
  94. package/lib/module/specs/RNMBXSymbolLayerNativeComponent.js.map +1 -1
  95. package/lib/module/specs/RNMBXViewportNativeComponent.js +2 -0
  96. package/lib/module/specs/RNMBXViewportNativeComponent.js.map +1 -1
  97. package/lib/module/specs/codeparts/CommonLayerNativeComponentsProps.codepart-ts +11 -10
  98. package/lib/module/utils/MapboxStyles.d.js +5 -0
  99. package/lib/module/utils/MapboxStyles.d.js.map +1 -1
  100. package/lib/module/utils/styleMap.js +67 -2
  101. package/lib/module/utils/styleMap.js.map +1 -1
  102. package/lib/typescript/src/Mapbox.d.ts +3 -1
  103. package/lib/typescript/src/Mapbox.d.ts.map +1 -1
  104. package/lib/typescript/src/components/AbstractLayer.d.ts +9 -4
  105. package/lib/typescript/src/components/AbstractLayer.d.ts.map +1 -1
  106. package/lib/typescript/src/components/MapView.d.ts +1 -5
  107. package/lib/typescript/src/components/MapView.d.ts.map +1 -1
  108. package/lib/typescript/src/components/ModelLayer.d.ts +77 -0
  109. package/lib/typescript/src/components/ModelLayer.d.ts.map +1 -0
  110. package/lib/typescript/src/components/Models.d.ts +15 -0
  111. package/lib/typescript/src/components/Models.d.ts.map +1 -0
  112. package/lib/typescript/src/components/NativeUserLocation.d.ts +20 -0
  113. package/lib/typescript/src/components/NativeUserLocation.d.ts.map +1 -1
  114. package/lib/typescript/src/components/Viewport.d.ts +32 -1
  115. package/lib/typescript/src/components/Viewport.d.ts.map +1 -1
  116. package/lib/typescript/src/specs/RNMBXCircleLayerNativeComponent.d.ts +12 -10
  117. package/lib/typescript/src/specs/RNMBXCircleLayerNativeComponent.d.ts.map +1 -1
  118. package/lib/typescript/src/specs/RNMBXFillLayerNativeComponent.d.ts +12 -10
  119. package/lib/typescript/src/specs/RNMBXFillLayerNativeComponent.d.ts.map +1 -1
  120. package/lib/typescript/src/specs/RNMBXHeatmapLayerNativeComponent.d.ts +12 -10
  121. package/lib/typescript/src/specs/RNMBXHeatmapLayerNativeComponent.d.ts.map +1 -1
  122. package/lib/typescript/src/specs/RNMBXLineLayerNativeComponent.d.ts +12 -10
  123. package/lib/typescript/src/specs/RNMBXLineLayerNativeComponent.d.ts.map +1 -1
  124. package/lib/typescript/src/specs/RNMBXModelLayerNativeComponent.d.ts +28 -0
  125. package/lib/typescript/src/specs/RNMBXModelLayerNativeComponent.d.ts.map +1 -0
  126. package/lib/typescript/src/specs/RNMBXModelsNativeComponent.d.ts +15 -0
  127. package/lib/typescript/src/specs/RNMBXModelsNativeComponent.d.ts.map +1 -0
  128. package/lib/typescript/src/specs/RNMBXNativeUserLocationNativeComponent.d.ts +9 -1
  129. package/lib/typescript/src/specs/RNMBXNativeUserLocationNativeComponent.d.ts.map +1 -1
  130. package/lib/typescript/src/specs/RNMBXRasterLayerNativeComponent.d.ts +12 -10
  131. package/lib/typescript/src/specs/RNMBXRasterLayerNativeComponent.d.ts.map +1 -1
  132. package/lib/typescript/src/specs/RNMBXSymbolLayerNativeComponent.d.ts +12 -10
  133. package/lib/typescript/src/specs/RNMBXSymbolLayerNativeComponent.d.ts.map +1 -1
  134. package/lib/typescript/src/utils/styleMap.d.ts.map +1 -1
  135. package/package.json +1 -1
  136. package/src/Mapbox.ts +3 -0
  137. package/src/components/AbstractLayer.tsx +11 -5
  138. package/src/components/ModelLayer.tsx +107 -0
  139. package/src/components/Models.tsx +44 -0
  140. package/src/components/NativeUserLocation.tsx +46 -2
  141. package/src/components/Viewport.tsx +37 -0
  142. package/src/specs/RNMBXCircleLayerNativeComponent.ts +15 -12
  143. package/src/specs/RNMBXFillLayerNativeComponent.ts +15 -12
  144. package/src/specs/RNMBXHeatmapLayerNativeComponent.ts +15 -12
  145. package/src/specs/RNMBXLineLayerNativeComponent.ts +15 -12
  146. package/src/specs/RNMBXModelLayerNativeComponent.ts +38 -0
  147. package/src/specs/RNMBXModelsNativeComponent.ts +18 -0
  148. package/src/specs/RNMBXNativeUserLocationNativeComponent.ts +14 -1
  149. package/src/specs/RNMBXRasterLayerNativeComponent.ts +15 -12
  150. package/src/specs/RNMBXSymbolLayerNativeComponent.ts +15 -12
  151. package/src/specs/codeparts/CommonLayerNativeComponentsProps.codepart-ts +11 -10
  152. package/src/utils/MapboxStyles.d.ts +526 -63
  153. package/src/utils/styleMap.ts +69 -2
@@ -30,10 +30,12 @@ import com.rnmapbox.rnmbx.components.styles.layers.RNMBXFillExtrusionLayerManage
30
30
  import com.rnmapbox.rnmbx.components.styles.layers.RNMBXFillLayerManager
31
31
  import com.rnmapbox.rnmbx.components.styles.layers.RNMBXHeatmapLayerManager
32
32
  import com.rnmapbox.rnmbx.components.styles.layers.RNMBXLineLayerManager
33
+ import com.rnmapbox.rnmbx.components.styles.layers.RNMBXModelLayerManager
33
34
  import com.rnmapbox.rnmbx.components.styles.layers.RNMBXRasterLayerManager
34
35
  import com.rnmapbox.rnmbx.components.styles.layers.RNMBXSkyLayerManager
35
36
  import com.rnmapbox.rnmbx.components.styles.layers.RNMBXSymbolLayerManager
36
37
  import com.rnmapbox.rnmbx.components.styles.light.RNMBXLightManager
38
+ import com.rnmapbox.rnmbx.components.styles.model.RNMBXModelsManager
37
39
  import com.rnmapbox.rnmbx.components.styles.sources.RNMBXImageSourceManager
38
40
  import com.rnmapbox.rnmbx.components.styles.sources.RNMBXRasterDemSourceManager
39
41
  import com.rnmapbox.rnmbx.components.styles.sources.RNMBXRasterSourceManager
@@ -111,6 +113,7 @@ class RNMBXPackage : TurboReactPackage() {
111
113
  managers.add(RNMBXViewportManager(reactApplicationContext))
112
114
  managers.add(RNMBXMapViewManager(reactApplicationContext, getViewTagResolver(reactApplicationContext, "RNMBXMapViewManager")))
113
115
  managers.add(RNMBXStyleImportManager(reactApplicationContext))
116
+ managers.add(RNMBXModelsManager(reactApplicationContext))
114
117
 
115
118
  // annotations
116
119
  managers.add(RNMBXMarkerViewManager(reactApplicationContext))
@@ -146,6 +149,7 @@ class RNMBXPackage : TurboReactPackage() {
146
149
  managers.add(RNMBXAtmosphereManager())
147
150
  managers.add(RNMBXBackgroundLayerManager())
148
151
  managers.add(RNMBXLightManager())
152
+ managers.add(RNMBXModelLayerManager())
149
153
  return managers
150
154
  }
151
155
 
@@ -32,9 +32,11 @@ import com.rnmapbox.rnmbx.utils.extensions.*
32
32
  import com.rnmapbox.rnmbx.utils.writableMapOf
33
33
 
34
34
  import com.facebook.react.uimanager.events.Event
35
+ import com.mapbox.geojson.Geometry
35
36
  import com.mapbox.maps.EdgeInsets
36
37
  import com.mapbox.maps.plugin.viewport.data.FollowPuckViewportStateBearing
37
38
  import com.mapbox.maps.plugin.viewport.data.FollowPuckViewportStateOptions
39
+ import com.mapbox.maps.plugin.viewport.data.OverviewViewportStateOptions
38
40
  import com.rnmapbox.rnmbx.events.constants.EventKeys
39
41
 
40
42
  class BaseEvent(
@@ -123,7 +125,9 @@ mContext
123
125
  "followPuck" -> viewport.makeFollowPuckViewportState(
124
126
  parseFollowViewportOptions(state)
125
127
  )
126
- //"overview" -> return viewport.makeOverviewViewportState()
128
+ "overview" -> return viewport.makeOverviewViewportState(
129
+ parseOverviewViewportOption(state)
130
+ )
127
131
  else -> {
128
132
  Logger.e(LOG_TAG, "toState: unexpected state: $kind")
129
133
  null
@@ -191,14 +195,73 @@ mContext
191
195
  builder.padding(null)
192
196
  } else {
193
197
  options.getAndLogIfNotMap("padding", LOG_TAG)?.let { paddingMap ->
194
- paddingMap?.toPadding(LOG_TAG)?.let { padding ->
198
+ paddingMap?.toPadding(LOG_TAG, resources.displayMetrics.density)?.let { padding ->
195
199
  builder.padding(padding)
196
200
  }
197
201
  }
198
202
  }
199
203
  }
204
+ }
205
+ return builder.build()
206
+ }
207
+
208
+ private fun parseOverviewViewportOption(state: ReadableMap): OverviewViewportStateOptions {
209
+ val builder = OverviewViewportStateOptions.Builder()
200
210
 
211
+ state.getAndLogIfNotMap("options", LOG_TAG)?.let { options ->
212
+ if (options.hasKey("padding")) {
213
+ if (!options.isNull("padding")) {
214
+ options.getAndLogIfNotMap("padding", LOG_TAG)?.let { paddingMap ->
215
+ paddingMap?.toPadding(LOG_TAG, resources.displayMetrics.density)?.let { padding ->
216
+ builder.padding(padding)
217
+ }
218
+ }
219
+ }
220
+ }
221
+
222
+ if (options.hasKey("bearing")) {
223
+ when (options.getType("bearing")) {
224
+ ReadableType.Number ->
225
+ builder.bearing(options.getDouble("bearing"))
226
+ ReadableType.Null ->
227
+ builder.bearing(null)
228
+ else -> {
229
+ Logger.e(
230
+ LOG_TAG,
231
+ "bearing in viewport options should be either constant number or null"
232
+ )
233
+ null
234
+ }
235
+ }
236
+ }
237
+
238
+ if (options.hasKey("pitch")) {
239
+ if (options.isNull("pitch")) {
240
+ builder.pitch(null)
241
+ } else {
242
+ options.getAndLogIfNotDouble("pitch", LOG_TAG)?.let {pitch ->
243
+ builder.pitch(pitch)
244
+ }
245
+ }
246
+ }
247
+
248
+ if (options.hasKey("animationDuration")) {
249
+ if (!options.isNull("animationDuration")) {
250
+ options.getAndLogIfNotDouble("zoom", LOG_TAG)?.let { duration ->
251
+ builder.animationDurationMs((duration * 1000.0).toLong())
252
+ }
253
+ }
254
+ }
255
+
256
+ if (options.hasKey("geometry")) {
257
+ options.getAndLogIfNotMap("geometry")?.let {map ->
258
+ map.toGeometry()?.let { geometry ->
259
+ builder.geometry(geometry)
260
+ }
261
+ }
262
+ }
201
263
  }
264
+
202
265
  return builder.build()
203
266
  }
204
267
 
@@ -215,6 +278,10 @@ mContext
215
278
  return builder.build()
216
279
  }
217
280
 
281
+ private fun toGeometry(geometry: ReadableMap): Geometry? {
282
+ return geometry.toGeometry()
283
+ }
284
+
218
285
  private fun toTransition(viewport: ViewportPlugin, state: ReadableMap?): ViewportTransition? {
219
286
  viewport.idle()
220
287
  return when (val kind = state?.getAndLogIfNotString("kind", LOG_TAG)) {
@@ -1,6 +1,9 @@
1
1
  package com.rnmapbox.rnmbx.components.images
2
2
 
3
+ import android.graphics.Bitmap
4
+ import android.graphics.Canvas
3
5
  import android.graphics.drawable.BitmapDrawable
6
+ import android.graphics.drawable.Drawable
4
7
  import android.view.View
5
8
  import com.facebook.react.bridge.*
6
9
  import com.facebook.react.common.MapBuilder
@@ -134,12 +137,33 @@ class RNMBXImagesManager(private val mContext: ReactApplicationContext) :
134
137
  images.setHasOnImageMissing(value.asBoolean())
135
138
  }
136
139
 
140
+ private fun convertDrawableToBitmap(sourceDrawable: Drawable?): BitmapDrawable? {
141
+ if (sourceDrawable == null) {
142
+ return null
143
+ }
144
+ return if (sourceDrawable is BitmapDrawable) {
145
+ sourceDrawable
146
+ } else {
147
+ // copying drawable object to not manipulate on the same reference
148
+ val constantState = sourceDrawable.constantState ?: return null
149
+ val drawable = constantState.newDrawable().mutate()
150
+ val bitmap: Bitmap = Bitmap.createBitmap(
151
+ drawable.intrinsicWidth, drawable.intrinsicHeight,
152
+ Bitmap.Config.ARGB_8888
153
+ )
154
+ val canvas = Canvas(bitmap)
155
+ drawable.setBounds(0, 0, canvas.width, canvas.height)
156
+ drawable.draw(canvas)
157
+ BitmapDrawable(mContext.resources, bitmap)
158
+ }
159
+ }
160
+
137
161
  fun toNativeImage(dynamic: Dynamic): NativeImage? {
138
162
  when (dynamic.type) {
139
163
  ReadableType.String -> {
140
164
  val resourceName = dynamic.asString();
141
165
  val drawable =
142
- ResourceUtils.getDrawableByName(mContext, resourceName) as BitmapDrawable?
166
+ convertDrawableToBitmap(ResourceUtils.getDrawableByName(mContext, resourceName))
143
167
  if (drawable != null) {
144
168
  return NativeImage(ImageInfo(name=resourceName), drawable)
145
169
  } else {
@@ -151,7 +175,7 @@ class RNMBXImagesManager(private val mContext: ReactApplicationContext) :
151
175
  val map = dynamic.asMap()
152
176
  val resourceName = map.getString("name")
153
177
  val drawable =
154
- ResourceUtils.getDrawableByName(mContext, resourceName) as BitmapDrawable?
178
+ convertDrawableToBitmap(ResourceUtils.getDrawableByName(mContext, resourceName))
155
179
  if (drawable != null && resourceName != null) {
156
180
  return NativeImage(imageInfo(resourceName, map), drawable)
157
181
  } else {
@@ -267,4 +291,4 @@ class RNMBXImagesManager(private val mContext: ReactApplicationContext) :
267
291
  return ImageContent(result[0].toFloat(), result[1].toFloat() ,result[2].toFloat(), result[3].toFloat())
268
292
  }
269
293
  }
270
- }
294
+ }
@@ -7,6 +7,9 @@ import android.graphics.Bitmap
7
7
  import android.graphics.BitmapFactory
8
8
  import android.graphics.drawable.BitmapDrawable
9
9
  import android.graphics.drawable.Drawable
10
+ import com.facebook.react.bridge.ColorPropConverter
11
+ import com.facebook.react.bridge.ReadableMap
12
+ import com.facebook.react.bridge.ReadableType
10
13
  import com.mapbox.android.core.permissions.PermissionsManager
11
14
  import com.mapbox.bindgen.Value
12
15
  import com.mapbox.maps.Image
@@ -14,6 +17,7 @@ import com.mapbox.maps.MapView
14
17
  import com.mapbox.maps.MapboxMap
15
18
  import com.mapbox.maps.Style
16
19
  import com.mapbox.maps.plugin.LocationPuck2D
20
+ import com.mapbox.maps.plugin.locationcomponent.LocationComponentConstants
17
21
  import com.mapbox.maps.plugin.locationcomponent.location
18
22
  import com.mapbox.maps.plugin.locationcomponent.R as LR
19
23
  import com.rnmapbox.rnmbx.R
@@ -26,6 +30,8 @@ import com.rnmapbox.rnmbx.components.mapview.OnMapReadyCallback
26
30
  import com.rnmapbox.rnmbx.components.mapview.RNMBXMapView
27
31
  import com.rnmapbox.rnmbx.utils.BitmapUtils
28
32
  import com.rnmapbox.rnmbx.utils.Logger
33
+ import com.rnmapbox.rnmbx.utils.extensions.getAndLogIfNotBoolean
34
+ import com.rnmapbox.rnmbx.utils.extensions.getAndLogIfNotString
29
35
  import com.rnmapbox.rnmbx.v11compat.image.AppCompatResourcesV11
30
36
  import com.rnmapbox.rnmbx.v11compat.image.ImageHolder
31
37
  import com.rnmapbox.rnmbx.v11compat.image.toDrawable
@@ -85,6 +91,12 @@ class RNMBXNativeUserLocation(context: Context) : AbstractMapFeature(context), O
85
91
  _apply()
86
92
  }
87
93
 
94
+ var pulsing: ReadableMap? = null
95
+ set(value) {
96
+ field = value
97
+ _apply()
98
+ }
99
+
88
100
  private fun imageNameUpdated(image: PuckImagePart, name: String?) {
89
101
  if (name != null) {
90
102
  imageNames[image] = name
@@ -153,6 +165,41 @@ class RNMBXNativeUserLocation(context: Context) : AbstractMapFeature(context), O
153
165
  this.puckBearingEnabled?.let {
154
166
  location2.puckBearingEnabled = it
155
167
  }
168
+
169
+ pulsing?.let { pulsing ->
170
+ pulsing.getAndLogIfNotString("kind")?.also { kind ->
171
+ if (kind == "default") {
172
+ location2.pulsingEnabled = true
173
+ }
174
+ }
175
+ if (pulsing.hasKey("color")) {
176
+ when (pulsing.getType("color")) {
177
+ ReadableType.Map ->
178
+ location2.pulsingColor = ColorPropConverter.getColor(pulsing.getMap("color"), mContext)
179
+ ReadableType.Number ->
180
+ location2.pulsingColor = pulsing.getInt("color")
181
+ else ->
182
+ Logger.e(LOG_TAG, "pusling.color should be either a map or a number, but was ${pulsing.getDynamic("color")}")
183
+ }
184
+ }
185
+ pulsing.getAndLogIfNotBoolean("isEnabled")?.let { enabled ->
186
+ location2.pulsingEnabled = enabled
187
+ }
188
+ if (pulsing.hasKey("radius")) {
189
+ when (pulsing.getType("radius")) {
190
+ ReadableType.Number ->
191
+ location2.pulsingMaxRadius = pulsing.getDouble("radius").toFloat()
192
+ ReadableType.String ->
193
+ if (pulsing.getString("radius") == "accuracy") {
194
+ location2.pulsingMaxRadius = LocationComponentConstants.PULSING_MAX_RADIUS_FOLLOW_ACCURACY
195
+ } else {
196
+ Logger.e(LOG_TAG, "Expected pulsing/radius to be a number or accuracy but was ${pulsing.getString("radius")}")
197
+ }
198
+ else ->
199
+ Logger.e(LOG_TAG, "Expected pulsing/radius to be a number or accuracy but was ${pulsing.getString("radius")}")
200
+ }
201
+ }
202
+ }
156
203
  }
157
204
 
158
205
  override fun addToMap(mapView: RNMBXMapView) {
@@ -229,6 +276,10 @@ class RNMBXNativeUserLocation(context: Context) : AbstractMapFeature(context), O
229
276
  }
230
277
  }
231
278
  // endregion
279
+
280
+ companion object {
281
+ const val LOG_TAG = "RNMBXNativeUserLocation"
282
+ }
232
283
  }
233
284
 
234
285
  fun makeDefaultLocationPuck2D(context: Context, renderMode: RenderMode): LocationPuck2D {
@@ -1,6 +1,7 @@
1
1
  package com.rnmapbox.rnmbx.components.location
2
2
 
3
3
  import com.facebook.react.bridge.Dynamic
4
+ import com.facebook.react.bridge.ReadableMap
4
5
  import com.facebook.react.bridge.ReadableType
5
6
  import com.facebook.react.uimanager.ThemedReactContext
6
7
  import com.facebook.react.uimanager.ViewGroupManager
@@ -82,6 +83,13 @@ class RNMBXNativeUserLocationManager : ViewGroupManager<RNMBXNativeUserLocation>
82
83
  view.visible = value
83
84
  }
84
85
 
86
+ @ReactProp(name = "pulsing")
87
+ override fun setPulsing(view: RNMBXNativeUserLocation, value: Dynamic) {
88
+ if (!value.isNull) {
89
+ view.pulsing = value.asMap()
90
+ }
91
+ }
92
+
85
93
  @Nonnull
86
94
  override fun createViewInstance(@Nonnull reactContext: ThemedReactContext): RNMBXNativeUserLocation {
87
95
  return RNMBXNativeUserLocation(reactContext)
@@ -125,7 +125,7 @@ class NativeMapViewModule(context: ReactApplicationContext, val viewTagResolver:
125
125
  viewRef: Double?,
126
126
  withBBox: ReadableArray,
127
127
  withFilter: ReadableArray,
128
- withLayerIDs: ReadableArray,
128
+ withLayerIDs: ReadableArray?,
129
129
  promise: Promise
130
130
  ) {
131
131
  withMapViewOnUIThread(viewRef, promise) {