@rnmapbox/maps 10.2.6 → 10.2.8

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 (116) hide show
  1. package/android/build.gradle +9 -1
  2. package/android/src/main/java/com/rnmapbox/rnmbx/RNMBXPackage.kt +8 -0
  3. package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXMapView.kt +7 -1
  4. package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/RNMBXStyleFactory.kt +180 -0
  5. package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/RNMBXStyleValue.kt +4 -0
  6. package/android/src/main/java/com/rnmapbox/rnmbx/modules/CustomHttpHeaders.kt +31 -9
  7. package/android/src/main/java/com/rnmapbox/rnmbx/modules/RNMBXModule.kt +15 -1
  8. package/android/src/main/java/com/rnmapbox/rnmbx/modules/RNMBXOfflineModuleLegacy.kt +10 -0
  9. package/android/src/main/mapbox-v11-compat/v10/com/mapbox/maps/extension/style/layers/generated/RasterParticleLayer.kt +58 -0
  10. package/android/src/main/mapbox-v11-compat/v10/com/mapbox/maps/extension/style/sources/generated/RasterArraySource.kt +20 -0
  11. package/android/src/main/mapbox-v11-compat/v10/com/rnmapbox/rnmbx/components/styles/layers/RNMBXRasterParticleLayer.kt +22 -0
  12. package/android/src/main/mapbox-v11-compat/v10/com/rnmapbox/rnmbx/components/styles/layers/RNMBXRasterParticleLayerManager.kt +59 -0
  13. package/android/src/main/mapbox-v11-compat/v10/com/rnmapbox/rnmbx/components/styles/sources/RNMBXRasterArraySource.kt +16 -0
  14. package/android/src/main/mapbox-v11-compat/v10/com/rnmapbox/rnmbx/components/styles/sources/RNMBXRasterArraySourceManager.kt +59 -0
  15. package/android/src/main/mapbox-v11-compat/v10/com/rnmapbox/rnmbx/v11compat/StyleFactory.kt +45 -0
  16. package/android/src/main/mapbox-v11-compat/v11/com/rnmapbox/rnmbx/components/styles/layers/RNMBXRasterParticleLayer.kt +38 -0
  17. package/android/src/main/mapbox-v11-compat/v11/com/rnmapbox/rnmbx/components/styles/layers/RNMBXRasterParticleLayerManager.kt +85 -0
  18. package/android/src/main/mapbox-v11-compat/v11/com/rnmapbox/rnmbx/components/styles/sources/RNMBXRasterArraySource.kt +41 -0
  19. package/android/src/main/mapbox-v11-compat/v11/com/rnmapbox/rnmbx/components/styles/sources/RNMBXRasterArraySourceManager.kt +76 -0
  20. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXRasterArraySourceManagerDelegate.java +54 -0
  21. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXRasterArraySourceManagerInterface.java +23 -0
  22. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXRasterParticleLayerManagerDelegate.java +66 -0
  23. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXRasterParticleLayerManagerInterface.java +27 -0
  24. package/ios/RNMBX/CustomHttpHeaders.swift +36 -7
  25. package/ios/RNMBX/Offline/RNMBXOfflineModuleLegacy.m +2 -0
  26. package/ios/RNMBX/Offline/RNMBXOfflineModuleLegacy.swift +5 -0
  27. package/ios/RNMBX/RNMBXCamera.swift +88 -17
  28. package/ios/RNMBX/RNMBXCameraModule.h +3 -2
  29. package/ios/RNMBX/RNMBXCameraModule.mm +8 -16
  30. package/ios/RNMBX/RNMBXCustomLocationProvider.swift +18 -24
  31. package/ios/RNMBX/RNMBXImageModule.h +3 -2
  32. package/ios/RNMBX/RNMBXImageModule.mm +8 -16
  33. package/ios/RNMBX/RNMBXImages.swift +1 -4
  34. package/ios/RNMBX/RNMBXInteractiveElement.swift +22 -15
  35. package/ios/RNMBX/RNMBXMapView.swift +68 -6
  36. package/ios/RNMBX/RNMBXModule.m +1 -0
  37. package/ios/RNMBX/RNMBXModule.swift +16 -2
  38. package/ios/RNMBX/RNMBXNativeUserLocation.swift +6 -6
  39. package/ios/RNMBX/RNMBXPointAnnotation.swift +6 -8
  40. package/ios/RNMBX/RNMBXPointAnnotationModule.h +3 -2
  41. package/ios/RNMBX/RNMBXPointAnnotationModule.mm +8 -16
  42. package/ios/RNMBX/RNMBXRasterArraySource.swift +47 -0
  43. package/ios/RNMBX/RNMBXRasterArraySourceComponentView.h +15 -0
  44. package/ios/RNMBX/RNMBXRasterArraySourceComponentView.mm +168 -0
  45. package/ios/RNMBX/RNMBXRasterArraySourceViewManager.swift +16 -0
  46. package/ios/RNMBX/RNMBXRasterParticleLayer.swift +100 -0
  47. package/ios/RNMBX/RNMBXRasterParticleLayerComponentView.h +15 -0
  48. package/ios/RNMBX/RNMBXRasterParticleLayerComponentView.mm +121 -0
  49. package/ios/RNMBX/RNMBXRasterParticleLayerViewManager.swift +17 -0
  50. package/ios/RNMBX/RNMBXShapeSource.swift +5 -4
  51. package/ios/RNMBX/RNMBXShapeSourceModule.h +3 -2
  52. package/ios/RNMBX/RNMBXShapeSourceModule.mm +8 -16
  53. package/ios/RNMBX/RNMBXSource.swift +51 -21
  54. package/ios/RNMBX/RNMBXStyle.swift +152 -27
  55. package/ios/RNMBX/RNMBXStyleValue.swift +27 -0
  56. package/ios/RNMBX/RNMBXViewport.swift +13 -13
  57. package/ios/RNMBX/RNMBXViewportModule.h +3 -2
  58. package/ios/RNMBX/RNMBXViewportModule.mm +8 -16
  59. package/ios/RNMBX/Utils/RNMBXViewResolver.mm +15 -2
  60. package/lib/commonjs/plugin/build/withMapbox.js +8 -8
  61. package/lib/commonjs/plugin/src/withMapbox.ts +18 -8
  62. package/lib/module/Mapbox.native.js +2 -0
  63. package/lib/module/Mapbox.native.js.map +1 -1
  64. package/lib/module/RNMBXModule.js +15 -1
  65. package/lib/module/RNMBXModule.js.map +1 -1
  66. package/lib/module/components/PointAnnotation.js.map +1 -1
  67. package/lib/module/components/RasterArraySource.js +67 -0
  68. package/lib/module/components/RasterArraySource.js.map +1 -0
  69. package/lib/module/components/RasterParticleLayer.js +40 -0
  70. package/lib/module/components/RasterParticleLayer.js.map +1 -0
  71. package/lib/module/modules/offline/offlineManagerLegacy.js +14 -0
  72. package/lib/module/modules/offline/offlineManagerLegacy.js.map +1 -1
  73. package/lib/module/specs/RNMBXRasterArraySourceNativeComponent.ts +22 -0
  74. package/lib/module/specs/RNMBXRasterParticleLayerNativeComponent.ts +39 -0
  75. package/lib/module/utils/MapboxStyles.js.map +1 -1
  76. package/lib/module/utils/styleMap.js +9 -0
  77. package/lib/module/utils/styleMap.js.map +1 -1
  78. package/lib/typescript/plugin/build/withMapbox.d.ts +1 -6
  79. package/lib/typescript/plugin/build/withMapbox.d.ts.map +1 -1
  80. package/lib/typescript/plugin/src/withMapbox.d.ts.map +1 -1
  81. package/lib/typescript/scripts/autogenHelpers/generateCodeWithEjs.d.mts.map +1 -1
  82. package/lib/typescript/scripts/autogenHelpers/globals.d.mts +1 -1
  83. package/lib/typescript/scripts/autogenHelpers/globals.d.mts.map +1 -1
  84. package/lib/typescript/src/Mapbox.native.d.ts +3 -1
  85. package/lib/typescript/src/Mapbox.native.d.ts.map +1 -1
  86. package/lib/typescript/src/RNMBXModule.d.ts +11 -1
  87. package/lib/typescript/src/RNMBXModule.d.ts.map +1 -1
  88. package/lib/typescript/src/components/PointAnnotation.d.ts +1 -1
  89. package/lib/typescript/src/components/PointAnnotation.d.ts.map +1 -1
  90. package/lib/typescript/src/components/RasterArraySource.d.ts +72 -0
  91. package/lib/typescript/src/components/RasterArraySource.d.ts.map +1 -0
  92. package/lib/typescript/src/components/RasterParticleLayer.d.ts +80 -0
  93. package/lib/typescript/src/components/RasterParticleLayer.d.ts.map +1 -0
  94. package/lib/typescript/src/modules/offline/offlineManagerLegacy.d.ts +11 -0
  95. package/lib/typescript/src/modules/offline/offlineManagerLegacy.d.ts.map +1 -1
  96. package/lib/typescript/src/specs/RNMBXRasterArraySourceNativeComponent.d.ts +16 -0
  97. package/lib/typescript/src/specs/RNMBXRasterArraySourceNativeComponent.d.ts.map +1 -0
  98. package/lib/typescript/src/specs/RNMBXRasterParticleLayerNativeComponent.d.ts +25 -0
  99. package/lib/typescript/src/specs/RNMBXRasterParticleLayerNativeComponent.d.ts.map +1 -0
  100. package/lib/typescript/src/utils/MapboxStyles.d.ts +44 -2
  101. package/lib/typescript/src/utils/MapboxStyles.d.ts.map +1 -1
  102. package/lib/typescript/src/utils/styleMap.d.ts.map +1 -1
  103. package/package.json +13 -1
  104. package/plugin/build/withMapbox.js +8 -8
  105. package/plugin/src/withMapbox.ts +18 -8
  106. package/rnmapbox-maps.podspec +1 -1
  107. package/src/Mapbox.native.ts +3 -0
  108. package/src/RNMBXModule.ts +25 -2
  109. package/src/components/PointAnnotation.tsx +2 -2
  110. package/src/components/RasterArraySource.tsx +134 -0
  111. package/src/components/RasterParticleLayer.tsx +117 -0
  112. package/src/modules/offline/offlineManagerLegacy.ts +14 -0
  113. package/src/specs/RNMBXRasterArraySourceNativeComponent.ts +22 -0
  114. package/src/specs/RNMBXRasterParticleLayerNativeComponent.ts +39 -0
  115. package/src/utils/MapboxStyles.ts +47 -1
  116. package/src/utils/styleMap.ts +10 -0
@@ -1,5 +1,13 @@
1
1
  def defaultMapboxMapsImpl = "mapbox"
2
- def defaultMapboxMapsVersion = "11.15.2"
2
+
3
+ def getDefaultMapboxMapsVersion() {
4
+ def packageJson = new groovy.json.JsonSlurper().parseText(
5
+ new File(projectDir.getPath(), "../package.json").text
6
+ )
7
+ return packageJson.mapbox.android
8
+ }
9
+
10
+ def defaultMapboxMapsVersion = getDefaultMapboxMapsVersion()
3
11
 
4
12
  def safeExtGet(prop, fallback) {
5
13
  rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
@@ -34,11 +34,13 @@ import com.rnmapbox.rnmbx.components.styles.layers.RNMBXHeatmapLayerManager
34
34
  import com.rnmapbox.rnmbx.components.styles.layers.RNMBXLineLayerManager
35
35
  import com.rnmapbox.rnmbx.components.styles.layers.RNMBXModelLayerManager
36
36
  import com.rnmapbox.rnmbx.components.styles.layers.RNMBXRasterLayerManager
37
+ import com.rnmapbox.rnmbx.components.styles.layers.RNMBXRasterParticleLayerManager
37
38
  import com.rnmapbox.rnmbx.components.styles.layers.RNMBXSkyLayerManager
38
39
  import com.rnmapbox.rnmbx.components.styles.layers.RNMBXSymbolLayerManager
39
40
  import com.rnmapbox.rnmbx.components.styles.light.RNMBXLightManager
40
41
  import com.rnmapbox.rnmbx.components.styles.model.RNMBXModelsManager
41
42
  import com.rnmapbox.rnmbx.components.styles.sources.RNMBXImageSourceManager
43
+ import com.rnmapbox.rnmbx.components.styles.sources.RNMBXRasterArraySourceManager
42
44
  import com.rnmapbox.rnmbx.components.styles.sources.RNMBXRasterDemSourceManager
43
45
  import com.rnmapbox.rnmbx.components.styles.sources.RNMBXRasterSourceManager
44
46
  import com.rnmapbox.rnmbx.components.styles.sources.RNMBXShapeSourceManager
@@ -140,6 +142,9 @@ class RNMBXPackage : TurboReactPackage() {
140
142
  ))
141
143
  managers.add(RNMBXRasterDemSourceManager(reactApplicationContext))
142
144
  managers.add(RNMBXRasterSourceManager(reactApplicationContext))
145
+ if (RNMBXRasterArraySourceManager.isImplemented) {
146
+ managers.add(RNMBXRasterArraySourceManager(reactApplicationContext))
147
+ }
143
148
  managers.add(RNMBXImageSourceManager())
144
149
 
145
150
  // images
@@ -154,6 +159,9 @@ class RNMBXPackage : TurboReactPackage() {
154
159
  managers.add(RNMBXCircleLayerManager())
155
160
  managers.add(RNMBXSymbolLayerManager())
156
161
  managers.add(RNMBXRasterLayerManager())
162
+ if (RNMBXRasterParticleLayerManager.isImplemented) {
163
+ managers.add(RNMBXRasterParticleLayerManager())
164
+ }
157
165
  managers.add(RNMBXSkyLayerManager())
158
166
  managers.add(RNMBXTerrainManager())
159
167
  managers.add(RNMBXAtmosphereManager())
@@ -917,7 +917,13 @@ open class RNMBXMapView(private val mContext: Context, var mManager: RNMBXMapVie
917
917
  Logger.e("queryRenderedFeaturesAtPoint", "mapbox map is null")
918
918
  return
919
919
  }
920
- val screenCoordinate = ScreenCoordinate(point.x.toDouble(), point.y.toDouble())
920
+ // JS sends point values in DIP (see getPointInView which divides by display density),
921
+ // but Mapbox core expects screen pixel coordinates. Convert back to px here.
922
+ val density: Float = getDisplayDensity()
923
+ val screenCoordinate = ScreenCoordinate(
924
+ (point.x * density).toDouble(),
925
+ (point.y * density).toDouble()
926
+ )
921
927
  val queryGeometry = RenderedQueryGeometry(screenCoordinate)
922
928
  val layers = layerIDs?.takeUnless { it.isEmpty() } ?: null;
923
929
  val queryOptions = RenderedQueryOptions(layers, filter)
@@ -13,6 +13,7 @@ import com.mapbox.maps.extension.style.layers.generated.SkyLayer
13
13
  // import com.mapbox.maps.extension.style.layers.generated.PropertyFactory
14
14
  // import com.mapbox.maps.extension.style.layers.generated.PropertyValue
15
15
  import com.mapbox.maps.extension.style.layers.generated.RasterLayer
16
+ import com.mapbox.maps.extension.style.layers.generated.RasterParticleLayer
16
17
  import com.mapbox.maps.extension.style.layers.generated.SymbolLayer
17
18
  import com.mapbox.maps.extension.style.layers.generated.HeatmapLayer
18
19
  import com.mapbox.maps.extension.style.layers.generated.HillshadeLayer
@@ -704,6 +705,44 @@ object RNMBXStyleFactory {
704
705
  }
705
706
  }
706
707
  }
708
+ fun setRasterParticleLayerStyle(layer: RasterParticleLayer, style: RNMBXStyle ) {
709
+ val styleKeys = style.allStyleKeys
710
+
711
+ if (styleKeys.isEmpty()) {
712
+ return
713
+ }
714
+
715
+ for (styleKey in styleKeys) {
716
+ try {
717
+ val styleValue = style.getStyleValueForKey(styleKey)
718
+
719
+ when (styleKey) {
720
+ "visibility" ->
721
+ setVisibility(layer, styleValue)
722
+ "rasterParticleArrayBand" ->
723
+ setRasterParticleArrayBand(layer, styleValue)
724
+ "rasterParticleCount" ->
725
+ setRasterParticleCount(layer, styleValue)
726
+ "rasterParticleColor" ->
727
+ setRasterParticleColor(layer, styleValue)
728
+ "rasterParticleMaxSpeed" ->
729
+ setRasterParticleMaxSpeed(layer, styleValue)
730
+ "rasterParticleSpeedFactor" ->
731
+ setRasterParticleSpeedFactor(layer, styleValue)
732
+ "rasterParticleSpeedFactorTransition" ->
733
+ setRasterParticleSpeedFactorTransition(layer, styleValue)
734
+ "rasterParticleFadeOpacityFactor" ->
735
+ setRasterParticleFadeOpacityFactor(layer, styleValue)
736
+ "rasterParticleFadeOpacityFactorTransition" ->
737
+ setRasterParticleFadeOpacityFactorTransition(layer, styleValue)
738
+ "rasterParticleResetRateFactor" ->
739
+ setRasterParticleResetRateFactor(layer, styleValue)
740
+ }
741
+ } catch (e: MapboxStyleException) {
742
+ Logger.e(LOG_TAG, "Failed to update: $styleKey ${e.message}")
743
+ }
744
+ }
745
+ }
707
746
  fun setHillshadeLayerStyle(layer: HillshadeLayer, style: RNMBXStyle ) {
708
747
  val styleKeys = style.allStyleKeys
709
748
 
@@ -4354,6 +4393,147 @@ object RNMBXStyleFactory {
4354
4393
  }
4355
4394
  }
4356
4395
 
4396
+ fun setVisibility(layer: RasterParticleLayer, styleValue: RNMBXStyleValue ) {
4397
+ layer.visibility(Visibility.valueOf(styleValue.getEnumName()));
4398
+ }
4399
+
4400
+ fun setRasterParticleArrayBand(layer: RasterParticleLayer, styleValue: RNMBXStyleValue ) {
4401
+ if (styleValue.isExpression()) {
4402
+ val expression = styleValue.getExpression()
4403
+ if (expression != null) {
4404
+ layer.rasterParticleArrayBand(expression)
4405
+ } else {
4406
+ Logger.e("RNMBXRasterParticle", "Expression for rasterParticleArrayBand is null")
4407
+ }
4408
+ } else {
4409
+ val value = styleValue.getString(VALUE_KEY)
4410
+ if (value != null) {
4411
+ layer.rasterParticleArrayBand(value)
4412
+ } else {
4413
+ Logger.e("RNMBXRasterParticle", "value for rasterParticleArrayBand is null")
4414
+ }
4415
+ }
4416
+ }
4417
+
4418
+ fun setRasterParticleCount(layer: RasterParticleLayer, styleValue: RNMBXStyleValue ) {
4419
+ if (styleValue.isExpression()) {
4420
+ val expression = styleValue.getExpression()
4421
+ if (expression != null) {
4422
+ layer.rasterParticleCount(expression)
4423
+ } else {
4424
+ Logger.e("RNMBXRasterParticle", "Expression for rasterParticleCount is null")
4425
+ }
4426
+ } else {
4427
+ val value = styleValue.getLong(VALUE_KEY)
4428
+ if (value != null) {
4429
+ layer.rasterParticleCount(value)
4430
+ } else {
4431
+ Logger.e("RNMBXRasterParticle", "value for rasterParticleCount is null")
4432
+ }
4433
+ }
4434
+ }
4435
+
4436
+ fun setRasterParticleColor(layer: RasterParticleLayer, styleValue: RNMBXStyleValue ) {
4437
+ if (styleValue.isExpression()) {
4438
+ val expression = styleValue.getExpression()
4439
+ if (expression != null) {
4440
+ layer.rasterParticleColor(expression)
4441
+ } else {
4442
+ Logger.e("RNMBXRasterParticle", "Expression for rasterParticleColor is null")
4443
+ }
4444
+ } else {
4445
+ layer.rasterParticleColor(styleValue.getIntExpression(VALUE_KEY))
4446
+ }
4447
+ }
4448
+
4449
+ fun setRasterParticleMaxSpeed(layer: RasterParticleLayer, styleValue: RNMBXStyleValue ) {
4450
+ if (styleValue.isExpression()) {
4451
+ val expression = styleValue.getExpression()
4452
+ if (expression != null) {
4453
+ layer.rasterParticleMaxSpeed(expression)
4454
+ } else {
4455
+ Logger.e("RNMBXRasterParticle", "Expression for rasterParticleMaxSpeed is null")
4456
+ }
4457
+ } else {
4458
+ val value = styleValue.getDouble(VALUE_KEY)
4459
+ if (value != null) {
4460
+ layer.rasterParticleMaxSpeed(value)
4461
+ } else {
4462
+ Logger.e("RNMBXRasterParticle", "value for rasterParticleMaxSpeed is null")
4463
+ }
4464
+ }
4465
+ }
4466
+
4467
+ fun setRasterParticleSpeedFactor(layer: RasterParticleLayer, styleValue: RNMBXStyleValue ) {
4468
+ if (styleValue.isExpression()) {
4469
+ val expression = styleValue.getExpression()
4470
+ if (expression != null) {
4471
+ layer.rasterParticleSpeedFactor(expression)
4472
+ } else {
4473
+ Logger.e("RNMBXRasterParticle", "Expression for rasterParticleSpeedFactor is null")
4474
+ }
4475
+ } else {
4476
+ val value = styleValue.getDouble(VALUE_KEY)
4477
+ if (value != null) {
4478
+ layer.rasterParticleSpeedFactor(value)
4479
+ } else {
4480
+ Logger.e("RNMBXRasterParticle", "value for rasterParticleSpeedFactor is null")
4481
+ }
4482
+ }
4483
+ }
4484
+
4485
+
4486
+ fun setRasterParticleSpeedFactorTransition(layer: RasterParticleLayer, styleValue: RNMBXStyleValue) {
4487
+ val transition = styleValue.transition
4488
+ if (transition != null) {
4489
+ layer.rasterParticleSpeedFactorTransition(transition);
4490
+ }
4491
+ }
4492
+
4493
+ fun setRasterParticleFadeOpacityFactor(layer: RasterParticleLayer, styleValue: RNMBXStyleValue ) {
4494
+ if (styleValue.isExpression()) {
4495
+ val expression = styleValue.getExpression()
4496
+ if (expression != null) {
4497
+ layer.rasterParticleFadeOpacityFactor(expression)
4498
+ } else {
4499
+ Logger.e("RNMBXRasterParticle", "Expression for rasterParticleFadeOpacityFactor is null")
4500
+ }
4501
+ } else {
4502
+ val value = styleValue.getDouble(VALUE_KEY)
4503
+ if (value != null) {
4504
+ layer.rasterParticleFadeOpacityFactor(value)
4505
+ } else {
4506
+ Logger.e("RNMBXRasterParticle", "value for rasterParticleFadeOpacityFactor is null")
4507
+ }
4508
+ }
4509
+ }
4510
+
4511
+
4512
+ fun setRasterParticleFadeOpacityFactorTransition(layer: RasterParticleLayer, styleValue: RNMBXStyleValue) {
4513
+ val transition = styleValue.transition
4514
+ if (transition != null) {
4515
+ layer.rasterParticleFadeOpacityFactorTransition(transition);
4516
+ }
4517
+ }
4518
+
4519
+ fun setRasterParticleResetRateFactor(layer: RasterParticleLayer, styleValue: RNMBXStyleValue ) {
4520
+ if (styleValue.isExpression()) {
4521
+ val expression = styleValue.getExpression()
4522
+ if (expression != null) {
4523
+ layer.rasterParticleResetRateFactor(expression)
4524
+ } else {
4525
+ Logger.e("RNMBXRasterParticle", "Expression for rasterParticleResetRateFactor is null")
4526
+ }
4527
+ } else {
4528
+ val value = styleValue.getDouble(VALUE_KEY)
4529
+ if (value != null) {
4530
+ layer.rasterParticleResetRateFactor(value)
4531
+ } else {
4532
+ Logger.e("RNMBXRasterParticle", "value for rasterParticleResetRateFactor is null")
4533
+ }
4534
+ }
4535
+ }
4536
+
4357
4537
  fun setVisibility(layer: HillshadeLayer, styleValue: RNMBXStyleValue ) {
4358
4538
  layer.visibility(Visibility.valueOf(styleValue.getEnumName()));
4359
4539
  }
@@ -33,6 +33,10 @@ class RNMBXStyleValue(key: String?, config: ReadableMap) {
33
33
  return mPayload!!.getInt(key!!)
34
34
  }
35
35
 
36
+ fun getLong(key: String?): Long {
37
+ return mPayload!!.getInt(key!!).toLong()
38
+ }
39
+
36
40
  fun getIntExpression(key: String?): Expression {
37
41
  return Expression.literal(mPayload!!.getInt(key!!).toLong())
38
42
  }
@@ -1,36 +1,58 @@
1
1
  package com.rnmapbox.rnmbx.modules
2
2
 
3
3
  import com.mapbox.common.*
4
-
5
4
  import com.rnmapbox.rnmbx.v11compat.httpinterceptor.*
6
5
 
6
+ data class CustomHttpHeadersOptions(val urlRegexp: Regex?)
7
+
8
+ data class CustomHttpHeadersMapValue(
9
+ val headerValue: String,
10
+ val options: CustomHttpHeadersOptions?
11
+ )
12
+
7
13
  object CustomHttpHeaders : HttpServiceBase() {
14
+ const val LOG_TAG = "CustomHttpHeaders"
15
+
8
16
  init {}
9
17
 
10
- val map = mutableMapOf<String, String>()
18
+ val map = mutableMapOf<String, CustomHttpHeadersMapValue>()
11
19
 
12
- fun addCustomHeader(headerName: String, headerValue: String) {
20
+ fun addCustomHeader(headerName: String, headerValue: String, options: CustomHttpHeadersOptions? = null) {
13
21
  HttpServiceFactory.getInstance().setInterceptor(
14
22
  this
15
23
  )
16
- map.put(headerName, headerValue)
24
+ map.put(headerName, CustomHttpHeadersMapValue(headerValue = headerValue, options = options))
17
25
  }
18
26
 
19
27
  fun removeCustomHeader(headerName: String) {
20
28
  map.remove(headerName)
21
29
  }
22
30
 
23
- override fun onRequest(request: HttpRequest): HttpRequest {
31
+ fun getCustomRequestHeaders(customRequestHeaders: MutableMap<String, CustomHttpHeadersMapValue>, httpRequest: HttpRequest): HashMap<String, String> {
32
+ val headers = hashMapOf<String, String>()
24
33
  for (entry in map.entries.iterator()) {
25
- request.headers[entry.key] = entry.value
34
+ val urlRegexp = entry.value.options?.urlRegexp
35
+ if (urlRegexp != null) {
36
+ val destination = httpRequest.headers.getOrDefault("location", httpRequest.url)
37
+ if (urlRegexp.matches(destination)) {
38
+ headers[entry.key] = entry.value.headerValue
39
+ }
40
+ }
41
+ else {
42
+ headers[entry.key] = entry.value.headerValue
43
+ }
26
44
  }
45
+ return headers
46
+ }
47
+
48
+ override fun onRequest(request: HttpRequest): HttpRequest {
49
+ request.headers.remove("Authorization")
50
+ request.headers.putAll(getCustomRequestHeaders(map, request))
27
51
  return request
28
52
  }
29
53
 
30
54
  override fun onDownload(download: DownloadOptions): DownloadOptions {
31
- for (entry in map.entries.iterator()) {
32
- download.request.headers[entry.key] = entry.value
33
- }
55
+ download.request.headers.putAll(getCustomRequestHeaders(map, download.request))
34
56
  return download
35
57
  }
36
58
 
@@ -1,6 +1,7 @@
1
1
  package com.rnmapbox.rnmbx.modules
2
2
 
3
3
  import android.os.Handler
4
+ import androidx.annotation.Nullable
4
5
  import com.facebook.react.bridge.Promise
5
6
  import com.mapbox.maps.extension.style.layers.properties.generated.LineJoin
6
7
  import com.facebook.react.module.annotations.ReactModule
@@ -11,6 +12,8 @@ import com.rnmapbox.rnmbx.events.constants.EventTypes
11
12
  import com.rnmapbox.rnmbx.modules.RNMBXOfflineModule
12
13
  import com.rnmapbox.rnmbx.modules.RNMBXLocationModule
13
14
  import com.facebook.react.bridge.ReactMethod
15
+ import com.facebook.react.bridge.Arguments
16
+ import com.facebook.react.bridge.ReadableMap
14
17
  import com.facebook.react.common.MapBuilder
15
18
  import com.mapbox.bindgen.None
16
19
  import com.mapbox.common.*
@@ -24,6 +27,7 @@ import java.util.HashMap
24
27
 
25
28
  import com.rnmapbox.rnmbx.v11compat.resourceoption.*
26
29
  import com.rnmapbox.rnmbx.v11compat.mapboxmap.*
30
+ import java.util.regex.PatternSyntaxException
27
31
 
28
32
  @ReactModule(name = RNMBXModule.REACT_CLASS)
29
33
  class RNMBXModule(private val mReactContext: ReactApplicationContext) : ReactContextBaseJavaModule(
@@ -165,7 +169,17 @@ class RNMBXModule(private val mReactContext: ReactApplicationContext) : ReactCon
165
169
 
166
170
  @ReactMethod
167
171
  fun addCustomHeader(headerName: String, headerValue: String) {
168
- CustomHttpHeaders.addCustomHeader(headerName, headerValue)
172
+ addCustomHeaderWithOptions(headerName, headerValue)
173
+ }
174
+
175
+ @ReactMethod
176
+ fun addCustomHeaderWithOptions(headerName: String, headerValue: String, options: ReadableMap? = Arguments.createMap()) {
177
+ try {
178
+ val urlRegexp = options?.getString("urlRegexp")?.toRegex()
179
+ CustomHttpHeaders.addCustomHeader(headerName, headerValue, CustomHttpHeadersOptions(urlRegexp = urlRegexp))
180
+ } catch (e: PatternSyntaxException) {
181
+ Logger.e(CustomHttpHeaders.LOG_TAG, e.localizedMessage ?: "Error converting ${options?.getString("urlRegexp")} to regex")
182
+ }
169
183
  }
170
184
 
171
185
  @ReactMethod
@@ -374,6 +374,16 @@ class RNMBXOfflineModuleLegacy(private val mReactContext: ReactApplicationContex
374
374
  }
375
375
  }
376
376
 
377
+ @ReactMethod
378
+ fun setTileCountLimit(tileCountLimit: Int) {
379
+ UiThreadUtil.runOnUiThread {
380
+ val offlineRegionManager = getOfflineRegionManager {
381
+ RNMBXModule.getAccessToken(mReactContext)
382
+ }
383
+ offlineRegionManager.setOfflineMapboxTileCountLimit(tileCountLimit.toLong())
384
+ }
385
+ }
386
+
377
387
  @ReactMethod
378
388
  fun resetDatabase(promise: Promise) {
379
389
  UiThreadUtil.runOnUiThread {
@@ -0,0 +1,58 @@
1
+ // Dummy RasterParticleLayer for v10 compatibility
2
+ // RasterParticleLayer is only available in Mapbox SDK v11+
3
+ package com.mapbox.maps.extension.style.layers.generated
4
+
5
+ import com.mapbox.maps.extension.style.expressions.generated.Expression
6
+ import com.mapbox.maps.extension.style.layers.properties.generated.Visibility
7
+ import com.mapbox.maps.extension.style.types.StyleTransition
8
+
9
+ /**
10
+ * Dummy implementation of RasterParticleLayer for v10 compatibility.
11
+ * This class should never be instantiated in v10 builds.
12
+ * Note: Does not extend Layer to avoid abstract method issues in v10.
13
+ */
14
+ class RasterParticleLayer(private val id: String, private val sourceId: String) {
15
+
16
+ val layerId: String
17
+ get() = id
18
+
19
+ var minZoom: Double? = null
20
+ private set
21
+
22
+ var maxZoom: Double? = null
23
+ private set
24
+
25
+ var visibility: Visibility? = null
26
+ private set
27
+
28
+ fun minZoom(minZoom: Double): RasterParticleLayer {
29
+ this.minZoom = minZoom
30
+ return this
31
+ }
32
+
33
+ fun maxZoom(maxZoom: Double): RasterParticleLayer {
34
+ this.maxZoom = maxZoom
35
+ return this
36
+ }
37
+
38
+ fun getType(): String = "raster-particle"
39
+
40
+ fun rasterParticleArrayBand(value: String) {}
41
+ fun rasterParticleArrayBand(expression: Expression) {}
42
+ fun rasterParticleCount(value: Long) {}
43
+ fun rasterParticleCount(expression: Expression) {}
44
+ fun rasterParticleColor(expression: Expression) {}
45
+ fun rasterParticleMaxSpeed(value: Double) {}
46
+ fun rasterParticleMaxSpeed(expression: Expression) {}
47
+ fun rasterParticleSpeedFactor(value: Double) {}
48
+ fun rasterParticleSpeedFactor(expression: Expression) {}
49
+ fun rasterParticleSpeedFactorTransition(transition: StyleTransition) {}
50
+ fun rasterParticleFadeOpacityFactor(value: Double) {}
51
+ fun rasterParticleFadeOpacityFactor(expression: Expression) {}
52
+ fun rasterParticleFadeOpacityFactorTransition(transition: StyleTransition) {}
53
+ fun rasterParticleResetRateFactor(value: Double) {}
54
+ fun rasterParticleResetRateFactor(expression: Expression) {}
55
+ fun visibility(visibility: Visibility) {
56
+ this.visibility = visibility
57
+ }
58
+ }
@@ -0,0 +1,20 @@
1
+ // Dummy RasterArraySource for v10 compatibility
2
+ // RasterArraySource is only available in Mapbox SDK v11+
3
+ package com.mapbox.maps.extension.style.sources.generated
4
+
5
+ /**
6
+ * Dummy implementation of RasterArraySource for v10 compatibility.
7
+ * This class should never be instantiated in v10 builds.
8
+ * Note: Does not extend Source to avoid abstract method issues in v10.
9
+ */
10
+ class RasterArraySource private constructor(
11
+ builder: Builder
12
+ ) {
13
+ val sourceId: String = builder.sourceId
14
+
15
+ class Builder(val sourceId: String) {
16
+ fun url(url: String): Builder = this
17
+ fun tileSize(tileSize: Long): Builder = this
18
+ fun build(): RasterArraySource = RasterArraySource(this)
19
+ }
20
+ }
@@ -0,0 +1,22 @@
1
+ package com.rnmapbox.rnmbx.components.styles.layers
2
+
3
+ import android.content.Context
4
+ import android.view.ViewGroup
5
+
6
+ /**
7
+ * Dummy implementation of RNMBXRasterParticleLayer for v10 compatibility.
8
+ * This class extends ViewGroup directly (instead of RNMBXLayer) to avoid
9
+ * inheriting from Layer which has internal abstract methods in v10.
10
+ * This class should never be instantiated in v10 builds.
11
+ */
12
+ class RNMBXRasterParticleLayer(context: Context) : ViewGroup(context) {
13
+ var mSourceLayerID: String? = null
14
+
15
+ override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
16
+ // Stub - never called
17
+ }
18
+
19
+ fun setSourceLayerID(sourceLayer: String?) {
20
+ mSourceLayerID = sourceLayer
21
+ }
22
+ }
@@ -0,0 +1,59 @@
1
+ package com.rnmapbox.rnmbx.components.styles.layers
2
+
3
+ import com.facebook.react.bridge.Dynamic
4
+ import com.facebook.react.uimanager.ThemedReactContext
5
+ import com.facebook.react.uimanager.ViewGroupManager
6
+ import com.facebook.react.uimanager.annotations.ReactProp
7
+ import com.facebook.react.viewmanagers.RNMBXRasterParticleLayerManagerInterface
8
+
9
+ class RNMBXRasterParticleLayerManager : ViewGroupManager<RNMBXRasterParticleLayer>(),
10
+ RNMBXRasterParticleLayerManagerInterface<RNMBXRasterParticleLayer> {
11
+ override fun getName(): String {
12
+ return REACT_CLASS
13
+ }
14
+
15
+ override fun createViewInstance(reactContext: ThemedReactContext): RNMBXRasterParticleLayer {
16
+ throw UnsupportedOperationException("RasterParticleLayer is only supported in Mapbox v11+")
17
+ }
18
+
19
+ @ReactProp(name = "id")
20
+ override fun setId(layer: RNMBXRasterParticleLayer, id: Dynamic) {}
21
+
22
+ @ReactProp(name = "existing")
23
+ override fun setExisting(layer: RNMBXRasterParticleLayer, existing: Dynamic) {}
24
+
25
+ @ReactProp(name = "sourceID")
26
+ override fun setSourceID(layer: RNMBXRasterParticleLayer, sourceID: Dynamic) {}
27
+
28
+ @ReactProp(name = "aboveLayerID")
29
+ override fun setAboveLayerID(layer: RNMBXRasterParticleLayer, aboveLayerID: Dynamic) {}
30
+
31
+ @ReactProp(name = "belowLayerID")
32
+ override fun setBelowLayerID(layer: RNMBXRasterParticleLayer, belowLayerID: Dynamic) {}
33
+
34
+ @ReactProp(name = "layerIndex")
35
+ override fun setLayerIndex(layer: RNMBXRasterParticleLayer, layerIndex: Dynamic) {}
36
+
37
+ @ReactProp(name = "minZoomLevel")
38
+ override fun setMinZoomLevel(layer: RNMBXRasterParticleLayer, minZoomLevel: Dynamic) {}
39
+
40
+ @ReactProp(name = "maxZoomLevel")
41
+ override fun setMaxZoomLevel(layer: RNMBXRasterParticleLayer, maxZoomLevel: Dynamic) {}
42
+
43
+ @ReactProp(name = "reactStyle")
44
+ override fun setReactStyle(layer: RNMBXRasterParticleLayer, style: Dynamic) {}
45
+
46
+ @ReactProp(name = "sourceLayerID")
47
+ override fun setSourceLayerID(layer: RNMBXRasterParticleLayer, sourceLayerID: Dynamic) {}
48
+
49
+ @ReactProp(name = "filter")
50
+ override fun setFilter(layer: RNMBXRasterParticleLayer, filterList: Dynamic) {}
51
+
52
+ @ReactProp(name = "slot")
53
+ override fun setSlot(layer: RNMBXRasterParticleLayer, slot: Dynamic) {}
54
+
55
+ companion object {
56
+ const val REACT_CLASS = "RNMBXRasterParticleLayer"
57
+ const val isImplemented = false
58
+ }
59
+ }
@@ -0,0 +1,16 @@
1
+ package com.rnmapbox.rnmbx.components.styles.sources
2
+
3
+ import android.content.Context
4
+ import android.view.ViewGroup
5
+
6
+ /**
7
+ * Dummy implementation of RNMBXRasterArraySource for v10 compatibility.
8
+ * This class extends ViewGroup directly (instead of RNMBXTileSource) to avoid
9
+ * inheriting from Source which has internal abstract methods in v10.
10
+ * This class should never be instantiated in v10 builds.
11
+ */
12
+ class RNMBXRasterArraySource(context: Context) : ViewGroup(context) {
13
+ override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
14
+ // Stub - never called
15
+ }
16
+ }
@@ -0,0 +1,59 @@
1
+ package com.rnmapbox.rnmbx.components.styles.sources
2
+
3
+ import com.facebook.react.bridge.Dynamic
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.uimanager.ThemedReactContext
6
+ import com.facebook.react.uimanager.ViewGroupManager
7
+ import com.facebook.react.uimanager.annotations.ReactProp
8
+ import com.facebook.react.viewmanagers.RNMBXRasterArraySourceManagerInterface
9
+ import javax.annotation.Nonnull
10
+
11
+ class RNMBXRasterArraySourceManager(reactApplicationContext: ReactApplicationContext) :
12
+ ViewGroupManager<RNMBXRasterArraySource>(),
13
+ RNMBXRasterArraySourceManagerInterface<RNMBXRasterArraySource> {
14
+ @Nonnull
15
+ override fun getName(): String {
16
+ return REACT_CLASS
17
+ }
18
+
19
+ @Nonnull
20
+ override fun createViewInstance(@Nonnull reactContext: ThemedReactContext): RNMBXRasterArraySource {
21
+ throw UnsupportedOperationException("RasterArraySource is only supported in Mapbox v11+")
22
+ }
23
+
24
+ @ReactProp(name = "id")
25
+ override fun setId(source: RNMBXRasterArraySource, id: Dynamic) {}
26
+
27
+ @ReactProp(name = "url")
28
+ override fun setUrl(source: RNMBXRasterArraySource, url: Dynamic) {}
29
+
30
+ @ReactProp(name = "tileUrlTemplates")
31
+ override fun setTileUrlTemplates(source: RNMBXRasterArraySource, tileUrlTemplates: Dynamic) {}
32
+
33
+ @ReactProp(name = "tileSize")
34
+ override fun setTileSize(source: RNMBXRasterArraySource, tileSize: Dynamic) {}
35
+
36
+ @ReactProp(name = "minZoomLevel")
37
+ override fun setMinZoomLevel(source: RNMBXRasterArraySource, minZoomLevel: Dynamic) {}
38
+
39
+ @ReactProp(name = "maxZoomLevel")
40
+ override fun setMaxZoomLevel(source: RNMBXRasterArraySource, maxZoomLevel: Dynamic) {}
41
+
42
+ @ReactProp(name = "attribution")
43
+ fun setAttribution(source: RNMBXRasterArraySource, attribution: Dynamic) {}
44
+
45
+ fun customEvents(): Map<String, String>? {
46
+ return null
47
+ }
48
+
49
+ companion object {
50
+ const val REACT_CLASS = "RNMBXRasterArraySource"
51
+ const val isImplemented = false
52
+ }
53
+
54
+ @ReactProp(name = "existing")
55
+ override fun setExisting(source: RNMBXRasterArraySource, value: Dynamic) {}
56
+
57
+ @ReactProp(name = "sourceBounds")
58
+ override fun setSourceBounds(source: RNMBXRasterArraySource, value: Dynamic) {}
59
+ }