@rnmapbox/maps 10.1.0-beta.6 → 10.1.0-beta.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 (142) hide show
  1. package/README.md +1 -0
  2. package/android/src/main/java/com/rnmapbox/rnmbx/RNMBXPackage.kt +17 -3
  3. package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt +5 -3
  4. package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/NativeMapViewModule.kt +14 -18
  5. package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXAndroidTextureMapViewManager.kt +4 -2
  6. package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXMapView.kt +37 -0
  7. package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXMapViewManager.kt +9 -1
  8. package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/RNMBXStyleValue.kt +2 -2
  9. package/android/src/main/java/com/rnmapbox/rnmbx/utils/ViewTagResolver.kt +68 -0
  10. package/ios/RNMBX/RNMBXCamera.swift +2 -18
  11. package/ios/RNMBX/RNMBXLocationModule.swift +23 -59
  12. package/ios/RNMBX/RNMBXLocationModuleV11.swift +248 -2
  13. package/ios/RNMBX/RNMBXMapView.swift +13 -2
  14. package/ios/RNMBX/RNMBXStyleImport.swift +7 -1
  15. package/lib/commonjs/Mapbox.js +3 -6
  16. package/lib/commonjs/Mapbox.js.map +1 -1
  17. package/lib/commonjs/classes/AnimatedCoordinatesArray.js +1 -2
  18. package/lib/commonjs/classes/AnimatedCoordinatesArray.js.map +1 -1
  19. package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js +1 -2
  20. package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
  21. package/lib/commonjs/classes/AnimatedPoint.js +1 -2
  22. package/lib/commonjs/classes/AnimatedPoint.js.map +1 -1
  23. package/lib/commonjs/classes/AnimatedRouteCoordinatesArray.js +1 -2
  24. package/lib/commonjs/classes/AnimatedRouteCoordinatesArray.js.map +1 -1
  25. package/lib/commonjs/classes/AnimatedShape.js +1 -2
  26. package/lib/commonjs/classes/AnimatedShape.js.map +1 -1
  27. package/lib/commonjs/components/AbstractLayer.js +1 -2
  28. package/lib/commonjs/components/AbstractLayer.js.map +1 -1
  29. package/lib/commonjs/components/AbstractSource.js +1 -2
  30. package/lib/commonjs/components/AbstractSource.js.map +1 -1
  31. package/lib/commonjs/components/Annotation.js +1 -2
  32. package/lib/commonjs/components/Annotation.js.map +1 -1
  33. package/lib/commonjs/components/Atmosphere.js +2 -4
  34. package/lib/commonjs/components/Atmosphere.js.map +1 -1
  35. package/lib/commonjs/components/BackgroundLayer.js +2 -4
  36. package/lib/commonjs/components/BackgroundLayer.js.map +1 -1
  37. package/lib/commonjs/components/Callout.js +2 -4
  38. package/lib/commonjs/components/Callout.js.map +1 -1
  39. package/lib/commonjs/components/Camera.js +4 -6
  40. package/lib/commonjs/components/Camera.js.map +1 -1
  41. package/lib/commonjs/components/CircleLayer.js +2 -4
  42. package/lib/commonjs/components/CircleLayer.js.map +1 -1
  43. package/lib/commonjs/components/FillExtrusionLayer.js +2 -4
  44. package/lib/commonjs/components/FillExtrusionLayer.js.map +1 -1
  45. package/lib/commonjs/components/FillLayer.js +2 -4
  46. package/lib/commonjs/components/FillLayer.js.map +1 -1
  47. package/lib/commonjs/components/HeadingIndicator.js +1 -2
  48. package/lib/commonjs/components/HeadingIndicator.js.map +1 -1
  49. package/lib/commonjs/components/HeatmapLayer.js +2 -4
  50. package/lib/commonjs/components/HeatmapLayer.js.map +1 -1
  51. package/lib/commonjs/components/Image.js +2 -4
  52. package/lib/commonjs/components/Image.js.map +1 -1
  53. package/lib/commonjs/components/ImageSource.js +2 -4
  54. package/lib/commonjs/components/ImageSource.js.map +1 -1
  55. package/lib/commonjs/components/Images.js +2 -4
  56. package/lib/commonjs/components/Images.js.map +1 -1
  57. package/lib/commonjs/components/Light.js +2 -4
  58. package/lib/commonjs/components/Light.js.map +1 -1
  59. package/lib/commonjs/components/LineLayer.js +2 -4
  60. package/lib/commonjs/components/LineLayer.js.map +1 -1
  61. package/lib/commonjs/components/MapView.js +2 -4
  62. package/lib/commonjs/components/MapView.js.map +1 -1
  63. package/lib/commonjs/components/MarkerView.js +2 -4
  64. package/lib/commonjs/components/MarkerView.js.map +1 -1
  65. package/lib/commonjs/components/NativeBridgeComponent.js +1 -2
  66. package/lib/commonjs/components/NativeBridgeComponent.js.map +1 -1
  67. package/lib/commonjs/components/NativeUserLocation.js +1 -2
  68. package/lib/commonjs/components/NativeUserLocation.js.map +1 -1
  69. package/lib/commonjs/components/PointAnnotation.js +2 -4
  70. package/lib/commonjs/components/PointAnnotation.js.map +1 -1
  71. package/lib/commonjs/components/RasterDemSource.js +2 -4
  72. package/lib/commonjs/components/RasterDemSource.js.map +1 -1
  73. package/lib/commonjs/components/RasterLayer.js +2 -4
  74. package/lib/commonjs/components/RasterLayer.js.map +1 -1
  75. package/lib/commonjs/components/RasterSource.js +2 -4
  76. package/lib/commonjs/components/RasterSource.js.map +1 -1
  77. package/lib/commonjs/components/ShapeSource.js +1 -2
  78. package/lib/commonjs/components/ShapeSource.js.map +1 -1
  79. package/lib/commonjs/components/SkyLayer.js +2 -4
  80. package/lib/commonjs/components/SkyLayer.js.map +1 -1
  81. package/lib/commonjs/components/Style.js +1 -2
  82. package/lib/commonjs/components/Style.js.map +1 -1
  83. package/lib/commonjs/components/StyleImport.js +6 -2
  84. package/lib/commonjs/components/StyleImport.js.map +1 -1
  85. package/lib/commonjs/components/SymbolLayer.js +1 -2
  86. package/lib/commonjs/components/SymbolLayer.js.map +1 -1
  87. package/lib/commonjs/components/Terrain.js +2 -4
  88. package/lib/commonjs/components/Terrain.js.map +1 -1
  89. package/lib/commonjs/components/UserLocation.js +2 -4
  90. package/lib/commonjs/components/UserLocation.js.map +1 -1
  91. package/lib/commonjs/components/VectorSource.js +3 -4
  92. package/lib/commonjs/components/VectorSource.js.map +1 -1
  93. package/lib/commonjs/index.js +1 -2
  94. package/lib/commonjs/index.js.map +1 -1
  95. package/lib/commonjs/modules/location/locationManager.js +3 -4
  96. package/lib/commonjs/modules/location/locationManager.js.map +1 -1
  97. package/lib/commonjs/modules/offline/OfflineCreatePackOptions.js +1 -2
  98. package/lib/commonjs/modules/offline/OfflineCreatePackOptions.js.map +1 -1
  99. package/lib/commonjs/modules/offline/OfflinePack.js +1 -2
  100. package/lib/commonjs/modules/offline/OfflinePack.js.map +1 -1
  101. package/lib/commonjs/modules/offline/offlineManager.js +2 -4
  102. package/lib/commonjs/modules/offline/offlineManager.js.map +1 -1
  103. package/lib/commonjs/modules/snapshot/SnapshotOptions.js +1 -2
  104. package/lib/commonjs/modules/snapshot/SnapshotOptions.js.map +1 -1
  105. package/lib/commonjs/modules/snapshot/snapshotManager.js +1 -2
  106. package/lib/commonjs/modules/snapshot/snapshotManager.js.map +1 -1
  107. package/lib/commonjs/specs/NativeMapViewModule.js +1 -2
  108. package/lib/commonjs/specs/NativeMapViewModule.js.map +1 -1
  109. package/lib/commonjs/specs/RNMBXAndroidTextureMapViewNativeComponent.js +1 -2
  110. package/lib/commonjs/specs/RNMBXAndroidTextureMapViewNativeComponent.js.map +1 -1
  111. package/lib/commonjs/specs/RNMBXMapViewNativeComponent.js +1 -2
  112. package/lib/commonjs/specs/RNMBXMapViewNativeComponent.js.map +1 -1
  113. package/lib/commonjs/specs/RNMBXStyleImportNativeComponent.js +1 -2
  114. package/lib/commonjs/specs/RNMBXStyleImportNativeComponent.js.map +1 -1
  115. package/lib/commonjs/utils/Logger.js +1 -2
  116. package/lib/commonjs/utils/Logger.js.map +1 -1
  117. package/lib/commonjs/utils/animated/Animated.js +1 -2
  118. package/lib/commonjs/utils/animated/Animated.js.map +1 -1
  119. package/lib/commonjs/utils/geoUtils.js +5 -10
  120. package/lib/commonjs/utils/geoUtils.js.map +1 -1
  121. package/lib/commonjs/utils/styleMap.js +2 -4
  122. package/lib/commonjs/utils/styleMap.js.map +1 -1
  123. package/lib/commonjs/web/MapContext.js +1 -2
  124. package/lib/commonjs/web/MapContext.js.map +1 -1
  125. package/lib/commonjs/web/MapboxModule.js +1 -2
  126. package/lib/commonjs/web/MapboxModule.js.map +1 -1
  127. package/lib/commonjs/web/UnimplementedComponent.js +1 -2
  128. package/lib/commonjs/web/UnimplementedComponent.js.map +1 -1
  129. package/lib/commonjs/web/components/Camera.js +1 -2
  130. package/lib/commonjs/web/components/Camera.js.map +1 -1
  131. package/lib/commonjs/web/components/MapView.js +1 -2
  132. package/lib/commonjs/web/components/MapView.js.map +1 -1
  133. package/lib/commonjs/web/index.js +1 -2
  134. package/lib/commonjs/web/index.js.map +1 -1
  135. package/lib/commonjs/web/utils/Logger.js +1 -2
  136. package/lib/commonjs/web/utils/Logger.js.map +1 -1
  137. package/lib/module/components/StyleImport.js +5 -0
  138. package/lib/module/components/StyleImport.js.map +1 -1
  139. package/lib/typescript/components/StyleImport.d.ts +16 -0
  140. package/lib/typescript/components/StyleImport.d.ts.map +1 -1
  141. package/package.json +1 -1
  142. package/src/components/StyleImport.tsx +16 -0
package/README.md CHANGED
@@ -175,6 +175,7 @@ const styles = StyleSheet.create({
175
175
  ### Components
176
176
 
177
177
  - [MapView](/docs/MapView.md)
178
+ - [StyleImport](/docs/StyleImport.md)
178
179
  - [Light](/docs/Light.md)
179
180
  - [StyleSheet](/docs/StyleSheet.md)
180
181
  - [PointAnnotation](/docs/PointAnnotation.md)
@@ -16,6 +16,7 @@ import com.rnmapbox.rnmbx.components.images.RNMBXImagesManager
16
16
  import com.rnmapbox.rnmbx.components.location.RNMBXNativeUserLocationManager
17
17
  import com.rnmapbox.rnmbx.components.mapview.NativeMapViewModule
18
18
  import com.rnmapbox.rnmbx.components.mapview.RNMBXAndroidTextureMapViewManager
19
+ import com.rnmapbox.rnmbx.components.mapview.RNMBXMapView
19
20
  import com.rnmapbox.rnmbx.components.mapview.RNMBXMapViewManager
20
21
  import com.rnmapbox.rnmbx.components.styles.RNMBXStyleImportManager
21
22
  import com.rnmapbox.rnmbx.components.styles.atmosphere.RNMBXAtmosphereManager
@@ -40,8 +41,21 @@ import com.rnmapbox.rnmbx.modules.RNMBXLogging
40
41
  import com.rnmapbox.rnmbx.modules.RNMBXModule
41
42
  import com.rnmapbox.rnmbx.modules.RNMBXOfflineModule
42
43
  import com.rnmapbox.rnmbx.modules.RNMBXSnapshotModule
44
+ import com.rnmapbox.rnmbx.utils.ViewTagResolver
43
45
 
44
46
  class RNMBXPackage : TurboReactPackage() {
47
+
48
+ var mapViewTagResolver: ViewTagResolver<RNMBXMapView>? = null
49
+ fun getMapViewTagResolver(context: ReactApplicationContext) : ViewTagResolver<RNMBXMapView> {
50
+ val viewTagResolver = mapViewTagResolver
51
+ if (viewTagResolver == null) {
52
+ val viewTagResolver = ViewTagResolver<RNMBXMapView>(context)
53
+ mapViewTagResolver = viewTagResolver
54
+ return viewTagResolver
55
+ }
56
+ return viewTagResolver
57
+ }
58
+
45
59
  override fun getModule(
46
60
  s: String,
47
61
  reactApplicationContext: ReactApplicationContext
@@ -52,7 +66,7 @@ class RNMBXPackage : TurboReactPackage() {
52
66
  RNMBXOfflineModule.REACT_CLASS -> return RNMBXOfflineModule(reactApplicationContext)
53
67
  RNMBXSnapshotModule.REACT_CLASS -> return RNMBXSnapshotModule(reactApplicationContext)
54
68
  RNMBXLogging.REACT_CLASS -> return RNMBXLogging(reactApplicationContext)
55
- NativeMapViewModule.NAME -> return NativeMapViewModule(reactApplicationContext)
69
+ NativeMapViewModule.NAME -> return NativeMapViewModule(reactApplicationContext, getMapViewTagResolver(reactApplicationContext))
56
70
  }
57
71
  return null
58
72
  }
@@ -67,8 +81,8 @@ class RNMBXPackage : TurboReactPackage() {
67
81
 
68
82
  // components
69
83
  managers.add(RNMBXCameraManager(reactApplicationContext))
70
- managers.add(RNMBXAndroidTextureMapViewManager(reactApplicationContext))
71
- managers.add(RNMBXMapViewManager(reactApplicationContext))
84
+ managers.add(RNMBXAndroidTextureMapViewManager(reactApplicationContext, getMapViewTagResolver(reactApplicationContext)))
85
+ managers.add(RNMBXMapViewManager(reactApplicationContext, getMapViewTagResolver(reactApplicationContext)))
72
86
  managers.add(RNMBXStyleImportManager(reactApplicationContext))
73
87
 
74
88
  // annotations
@@ -91,9 +91,11 @@ class RNMBXCamera(private val mContext: Context, private val mManager: RNMBXCame
91
91
 
92
92
  override fun addToMap(mapView: RNMBXMapView) {
93
93
  super.addToMap(mapView)
94
- setInitialCamera()
95
- updateMaxBounds()
96
- mCameraStop?.let { updateCamera(it) }
94
+ mapView.callIfAttachedToWindow {
95
+ setInitialCamera()
96
+ updateMaxBounds()
97
+ mCameraStop?.let { updateCamera(it) }
98
+ }
97
99
  _observeViewportState(mapView.mapView)
98
100
  _updateViewportState()
99
101
  }
@@ -1,38 +1,34 @@
1
1
  package com.rnmapbox.rnmbx.components.mapview
2
2
 
3
+ import android.util.Log
3
4
  import com.facebook.react.bridge.Promise
4
5
  import com.facebook.react.bridge.ReactApplicationContext
5
6
  import com.facebook.react.bridge.ReadableArray
7
+ import com.facebook.react.bridge.UIManager
6
8
  import com.facebook.react.bridge.WritableMap
7
9
  import com.facebook.react.bridge.WritableNativeMap
10
+ import com.facebook.react.uimanager.IllegalViewOperationException
8
11
  import com.facebook.react.uimanager.UIManagerHelper
9
12
  import com.facebook.react.uimanager.common.UIManagerType
10
13
  import com.rnmapbox.rnmbx.BuildConfig
11
14
  import com.rnmapbox.rnmbx.NativeMapViewModuleSpec
12
15
  import com.rnmapbox.rnmbx.utils.ConvertUtils
13
16
  import com.rnmapbox.rnmbx.utils.ExpressionParser
17
+ import com.rnmapbox.rnmbx.utils.Logger
18
+ import com.rnmapbox.rnmbx.utils.ViewTagResolver
14
19
  import com.rnmapbox.rnmbx.utils.extensions.toCoordinate
15
20
  import com.rnmapbox.rnmbx.utils.extensions.toScreenCoordinate
16
21
 
17
- class NativeMapViewModule(context: ReactApplicationContext) : NativeMapViewModuleSpec(context) {
18
- private fun withMapViewOnUIThread(viewRef: Double?, promise: Promise, fn: (RNMBXMapView) -> Unit) {
22
+ class NativeMapViewModule(context: ReactApplicationContext, val viewTagResolver: ViewTagResolver<RNMBXMapView>) : NativeMapViewModuleSpec(context) {
23
+ private fun withMapViewOnUIThread(
24
+ viewRef: Double?,
25
+ reject: Promise,
26
+ fn: (RNMBXMapView) -> Unit
27
+ ) {
19
28
  if (viewRef == null) {
20
- return
21
- }
22
-
23
- reactApplicationContext.runOnUiQueueThread {
24
- val manager = if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED)
25
- UIManagerHelper.getUIManager(reactApplicationContext, UIManagerType.FABRIC)
26
- else
27
- UIManagerHelper.getUIManager(reactApplicationContext, UIManagerType.DEFAULT)
28
-
29
- val view = manager?.resolveView(viewRef.toInt()) as? RNMBXMapView
30
-
31
- if (view != null) {
32
- fn(view)
33
- } else {
34
- promise.reject(Exception("cannot find map view for tag ${viewRef.toInt()}"))
35
- }
29
+ reject.reject(Exception("viewRef is null"))
30
+ } else {
31
+ viewTagResolver.withViewResolved(viewRef.toInt(), reject, fn)
36
32
  }
37
33
  }
38
34
 
@@ -7,9 +7,11 @@ import com.facebook.react.viewmanagers.RNMBXAndroidTextureMapViewManagerDelegate
7
7
  import com.facebook.react.viewmanagers.RNMBXAndroidTextureMapViewManagerInterface
8
8
  import com.facebook.react.viewmanagers.RNMBXMapViewManagerDelegate
9
9
  import com.mapbox.maps.MapInitOptions
10
+ import com.rnmapbox.rnmbx.utils.ViewTagResolver
10
11
 
11
- class RNMBXAndroidTextureMapViewManager(context: ReactApplicationContext) : RNMBXMapViewManager(
12
- context
12
+ class RNMBXAndroidTextureMapViewManager(context: ReactApplicationContext, viewTagResolver: ViewTagResolver<RNMBXMapView>) : RNMBXMapViewManager(
13
+ context,
14
+ viewTagResolver
13
15
  ), RNMBXAndroidTextureMapViewManagerInterface<RNMBXMapView> {
14
16
  private val mDelegate: ViewManagerDelegate<RNMBXMapView>
15
17
 
@@ -4,6 +4,8 @@ import android.content.Context
4
4
  import android.graphics.BitmapFactory
5
5
  import android.graphics.PointF
6
6
  import android.graphics.RectF
7
+ import android.os.Handler
8
+ import android.os.Looper
7
9
  import android.util.Log
8
10
  import android.view.Gravity
9
11
  import android.view.View
@@ -102,6 +104,10 @@ interface RNMBXLifeCycleOwner : LifecycleOwner {
102
104
  fun handleLifecycleEvent(event: Lifecycle.Event)
103
105
  }
104
106
 
107
+ fun interface Cancelable {
108
+ fun cancel()
109
+ }
110
+
105
111
  class RNMBXLifeCycle {
106
112
  private var lifecycleOwner : RNMBXLifeCycleOwner? = null
107
113
 
@@ -150,6 +156,25 @@ class RNMBXLifeCycle {
150
156
  fun getState() : Lifecycle.State {
151
157
  return lifecycleOwner?.lifecycle?.currentState ?: Lifecycle.State.INITIALIZED;
152
158
  }
159
+
160
+ var attachedToWindowWaiters : MutableList<()-> Unit> = mutableListOf()
161
+
162
+ fun callIfAttachedToWindow(callback: () -> Unit) : com.rnmapbox.rnmbx.components.mapview.Cancelable {
163
+ if (getState() == Lifecycle.State.STARTED) {
164
+ callback()
165
+ return com.rnmapbox.rnmbx.components.mapview.Cancelable {}
166
+ } else {
167
+ attachedToWindowWaiters.add(callback)
168
+ return com.rnmapbox.rnmbx.components.mapview.Cancelable {
169
+ attachedToWindowWaiters.removeIf { it === callback }
170
+ }
171
+ }
172
+ }
173
+
174
+ fun afterAttachFromLooper() {
175
+ attachedToWindowWaiters.forEach { it() }
176
+ attachedToWindowWaiters.clear()
177
+ }
153
178
  }
154
179
 
155
180
  data class FeatureEntry(val feature: AbstractMapFeature?, val view: View?, var addedToMap: Boolean = false) {
@@ -215,6 +240,11 @@ open class RNMBXMapView(private val mContext: Context, var mManager: RNMBXMapVie
215
240
  return mapView.getMapboxMap()
216
241
  }
217
242
 
243
+ override fun setId(id: Int) {
244
+ super.setId(id)
245
+ mManager.tagAssigned(id)
246
+ }
247
+
218
248
  val pointAnnotationManager: PointAnnotationManager?
219
249
  get() {
220
250
  if (mPointAnnotationManager == null) {
@@ -1413,6 +1443,13 @@ open class RNMBXMapView(private val mContext: Context, var mManager: RNMBXMapVie
1413
1443
  override fun onAttachedToWindow() {
1414
1444
  lifecycle.onAttachedToWindow(this)
1415
1445
  super.onAttachedToWindow()
1446
+ Handler(Looper.getMainLooper()).post {
1447
+ lifecycle.afterAttachFromLooper()
1448
+ }
1449
+ }
1450
+
1451
+ fun callIfAttachedToWindow(callback: () -> Unit) {
1452
+ lifecycle.callIfAttachedToWindow(callback)
1416
1453
  }
1417
1454
 
1418
1455
  override fun onLayoutChange(
@@ -22,6 +22,7 @@ import com.rnmapbox.rnmbx.events.AndroidCallbackEvent
22
22
  import com.rnmapbox.rnmbx.utils.ConvertUtils
23
23
  import com.rnmapbox.rnmbx.utils.ExpressionParser
24
24
  import com.rnmapbox.rnmbx.utils.Logger
25
+ import com.rnmapbox.rnmbx.utils.ViewTagResolver
25
26
  import com.rnmapbox.rnmbx.utils.extensions.toCoordinate
26
27
  import com.rnmapbox.rnmbx.utils.extensions.toRectF
27
28
  import com.rnmapbox.rnmbx.utils.extensions.toScreenCoordinate
@@ -46,7 +47,7 @@ interface CommandResponse {
46
47
  fun error(message: String)
47
48
  }
48
49
 
49
- open class RNMBXMapViewManager(context: ReactApplicationContext) :
50
+ open class RNMBXMapViewManager(context: ReactApplicationContext, val viewTagResolver: ViewTagResolver<RNMBXMapView>) :
50
51
  AbstractEventEmitter<RNMBXMapView>(context), RNMBXMapViewManagerInterface<RNMBXMapView> {
51
52
  private val mViews: MutableMap<Int, RNMBXMapView>
52
53
 
@@ -107,6 +108,9 @@ open class RNMBXMapViewManager(context: ReactApplicationContext) :
107
108
 
108
109
  override fun onDropViewInstance(mapView: RNMBXMapView) {
109
110
  val reactTag = mapView.id
111
+
112
+ viewTagResolver.viewRemoved(reactTag)
113
+
110
114
  if (mViews.containsKey(reactTag)) {
111
115
  mViews.remove(reactTag)
112
116
  }
@@ -118,6 +122,10 @@ open class RNMBXMapViewManager(context: ReactApplicationContext) :
118
122
  return mViews[reactTag]
119
123
  }
120
124
 
125
+ fun tagAssigned(reactTag: Int) {
126
+ return viewTagResolver.tagAssigned(reactTag)
127
+ }
128
+
121
129
  // region React Props
122
130
  @ReactProp(name = "projection")
123
131
  override fun setProjection(mapView: RNMBXMapView, projection: String?) {
@@ -169,12 +169,12 @@ class RNMBXStyleValue(config: ReadableMap) {
169
169
  config.getMap("enablePlacementTransitions")!!.getBoolean("value")
170
170
  }
171
171
  var duration = 300
172
- val delay = 0
172
+ var delay = 0
173
173
  if (config.hasKey("duration") && ReadableType.Map == config.getType("duration")) {
174
174
  duration = config.getMap("duration")!!.getInt("value")
175
175
  }
176
176
  if (config.hasKey("delay") && ReadableType.Map == config.getType("delay")) {
177
- duration = config.getMap("delay")!!.getInt("value")
177
+ delay = config.getMap("delay")!!.getInt("value")
178
178
  }
179
179
  return Builder().duration(duration.toLong()).delay(delay.toLong()).build()
180
180
  }
@@ -0,0 +1,68 @@
1
+ package com.rnmapbox.rnmbx.utils
2
+
3
+ import com.facebook.react.bridge.Promise
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.bridge.UIManager
6
+ import com.facebook.react.uimanager.IllegalViewOperationException
7
+ import com.facebook.react.uimanager.UIManagerHelper
8
+ import com.facebook.react.uimanager.common.UIManagerType
9
+ import com.rnmapbox.rnmbx.BuildConfig
10
+
11
+ data class ViewTagWaiter<V>(
12
+ val fn: (V) -> Unit,
13
+ val reject: Promise?
14
+ )
15
+
16
+ // see https://github.com/rnmapbox/maps/pull/3074
17
+ open class ViewTagResolver<V>(val context: ReactApplicationContext) {
18
+ private val createdViews: HashSet<Int> = hashSetOf<Int>()
19
+ private val viewWaiters: HashMap<Int, MutableList<ViewTagWaiter<V>>> = hashMapOf()
20
+
21
+ // to be called from view.setId
22
+ fun tagAssigned(viewTag: Int) {
23
+ createdViews.add(viewTag)
24
+
25
+ val list = viewWaiters[viewTag]
26
+ if (list != null) {
27
+ context.runOnUiQueueThread {
28
+ try {
29
+ val view = manager.resolveView(viewTag) as V
30
+
31
+ list.forEach { it.fn(view) }
32
+ } catch (err: IllegalViewOperationException) {
33
+ list.forEach { it.reject?.reject(err) }
34
+ }
35
+ viewWaiters.remove(viewTag)
36
+ }
37
+ }
38
+ }
39
+
40
+ fun viewRemoved(viewTag: Int) {
41
+ viewWaiters.remove(viewTag)
42
+ createdViews.remove(viewTag)
43
+ }
44
+
45
+ private val manager : UIManager
46
+ get() =
47
+ if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
48
+ UIManagerHelper.getUIManager(context, UIManagerType.FABRIC)!!
49
+ } else {
50
+ UIManagerHelper.getUIManager(context, UIManagerType.DEFAULT)!!
51
+ }
52
+
53
+ // calls on UiQueueThread with resolved view
54
+ fun withViewResolved(viewTag: Int, reject: Promise? = null, fn: (V) -> Unit) {
55
+ context.runOnUiQueueThread() {
56
+ try {
57
+ val view = manager.resolveView(viewTag) as V
58
+ fn(view)
59
+ } catch (err: IllegalViewOperationException) {
60
+ if (!createdViews.contains(viewTag)) {
61
+ viewWaiters.getOrPut(viewTag) { mutableListOf<ViewTagWaiter<V>>() }.add(ViewTagWaiter(fn, reject))
62
+ } else {
63
+ reject?.reject(err)
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
@@ -287,25 +287,9 @@ class RNMBXCamera : RNMBXMapComponentBase {
287
287
  }
288
288
 
289
289
  if let locationModule = RNMBXLocationModule.shared {
290
- var isSameProvider = false
291
- #if !RNMBX_11
292
- if let currentProvider = map.location.locationProvider as? AnyObject, let newProvider = locationModule.locationProvider as? AnyObject {
293
- if currentProvider === newProvider {
294
- isSameProvider = true
295
- }
296
- }
297
- #endif
298
- if !isSameProvider {
299
- #if RNMBX_11
300
- map.location.override(provider: locationModule.locationProvider)
301
- #else
302
- map.location.overrideLocationProvider(with: locationModule.locationProvider)
303
- #endif
304
- }
290
+ locationModule.override(for: map.location)
305
291
  }
306
- #if RNMBX_11
307
- // RNMBX_11_TODO
308
- #else
292
+ #if !RNMBX_11
309
293
  map.location.locationProvider.requestWhenInUseAuthorization()
310
294
  #endif
311
295
  var trackingModeChanged = false
@@ -34,10 +34,6 @@ let RCT_MAPBOX_USER_LOCATION_UPDATE = "MapboxUserLocationUpdate";
34
34
  /// This implementation of LocationProviderDelegate is used by `LocationManager` to work around
35
35
  /// the fact that the `LocationProvider` API does not allow the delegate to be set to `nil`.
36
36
  internal class EmptyLocationProviderDelegate: LocationProviderDelegate {
37
- #if RNMBX_11
38
- func onLocationUpdateReceived(for locations: [Location]) {}
39
- #endif
40
-
41
37
  func locationProvider(_ provider: LocationProvider, didFailWithError error: Error) {}
42
38
  func locationProvider(_ provider: LocationProvider, didUpdateHeading newHeading: CLHeading) {}
43
39
  func locationProvider(_ provider: LocationProvider, didUpdateLocations locations: [CLLocation]) {}
@@ -51,17 +47,6 @@ protocol LocationProviderRNMBXDelegate : AnyObject {
51
47
  class RNMBXAppleLocationProvider: NSObject {
52
48
  private var locationProvider: CLLocationManager
53
49
 
54
- #if RNMBX_11
55
- private var observers : [LocationObserver] = []
56
- private var privateAppleLocationProviderOptions: AppleLocationProvider.Options {
57
- didSet {
58
- locationProvider.distanceFilter = privateAppleLocationProviderOptions.distanceFilter
59
- locationProvider.desiredAccuracy = privateAppleLocationProviderOptions.desiredAccuracy
60
- locationProvider.activityType = privateAppleLocationProviderOptions.activityType
61
- }
62
- }
63
- private var privateLocationProviderOptions: LocationOptions
64
- #else
65
50
  private var privateLocationProviderOptions: LocationOptions {
66
51
  didSet {
67
52
  locationProvider.distanceFilter = privateLocationProviderOptions.distanceFilter
@@ -70,7 +55,6 @@ class RNMBXAppleLocationProvider: NSObject {
70
55
  }
71
56
  }
72
57
  private weak var delegate: LocationProviderDelegate?
73
- #endif
74
58
 
75
59
  public var headingOrientation: CLDeviceOrientation {
76
60
  didSet { locationProvider.headingOrientation = headingOrientation }
@@ -78,9 +62,6 @@ class RNMBXAppleLocationProvider: NSObject {
78
62
 
79
63
  public override init() {
80
64
  locationProvider = CLLocationManager()
81
- #if RNMBX_11
82
- privateAppleLocationProviderOptions = AppleLocationProvider.Options()
83
- #endif
84
65
  privateLocationProviderOptions = LocationOptions()
85
66
  headingOrientation = locationProvider.headingOrientation
86
67
  super.init()
@@ -89,21 +70,6 @@ class RNMBXAppleLocationProvider: NSObject {
89
70
  }
90
71
 
91
72
  extension RNMBXAppleLocationProvider: LocationProvider {
92
- #if RNMBX_11
93
- func addLocationObserver(for observer: LocationObserver) {
94
- observers.append(observer)
95
- }
96
-
97
- func removeLocationObserver(for observer: LocationObserver) {
98
- observers.removeAll { $0 === observer }
99
- }
100
-
101
- func getLastObservedLocation() -> Location? {
102
- locationProvider.location
103
- }
104
- #endif
105
-
106
-
107
73
  public var locationProviderOptions: LocationOptions {
108
74
  get { privateLocationProviderOptions }
109
75
  set { privateLocationProviderOptions = newValue }
@@ -169,45 +135,29 @@ extension RNMBXAppleLocationProvider: LocationProvider {
169
135
 
170
136
  extension RNMBXAppleLocationProvider: CLLocationManagerDelegate {
171
137
  public func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
172
- #if RNMBX_11
173
- observers.forEach { $0.onLocationUpdateReceived(for: locations) }
174
- #else
175
138
  delegate?.locationProvider(self, didUpdateLocations: locations)
176
- #endif
177
139
  }
178
140
 
179
- public func locationManager(_ manager: CLLocationManager, didUpdateHeading heading: CLHeading)
180
- {
181
- #if RNMBX_11
182
-
183
- #else
184
- delegate?.locationProvider(self, didUpdateHeading: heading)
185
- #endif
141
+ public func locationManager(_ manager: CLLocationManager, didUpdateHeading heading: CLHeading) {
142
+ delegate?.locationProvider(self, didUpdateHeading: heading)
186
143
  }
187
144
 
188
145
  public func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
189
- #if RNMBX_11
190
-
191
- #else
192
146
  delegate?.locationProvider(self, didFailWithError: error)
193
- #endif
194
147
  }
195
148
 
196
- @available(iOS 14.0, *)
149
+ @available(iOS 14.0, *)
197
150
  public func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
198
- #if RNMBX_11
199
- #else
200
151
  delegate?.locationProviderDidChangeAuthorization(self)
201
- #endif
202
152
  }
203
153
 
204
- public func locationManagerShouldDisplayHeadingCalibration(_ manager: CLLocationManager) -> Bool {
205
- guard let calibratingDelegate = delegate as? CalibratingLocationProviderDelegate else {
206
- return false
207
- }
208
-
209
- return calibratingDelegate.locationProviderShouldDisplayHeadingCalibration(self)
154
+ public func locationManagerShouldDisplayHeadingCalibration(_ manager: CLLocationManager) -> Bool {
155
+ guard let calibratingDelegate = delegate as? CalibratingLocationProviderDelegate else {
156
+ return false
210
157
  }
158
+
159
+ return calibratingDelegate.locationProviderShouldDisplayHeadingCalibration(self)
160
+ }
211
161
  }
212
162
 
213
163
  internal protocol CalibratingLocationProviderDelegate: LocationProviderDelegate {
@@ -593,6 +543,20 @@ class RNMBXLocationModule: RCTEventEmitter, LocationProviderRNMBXDelegate {
593
543
  }
594
544
  }
595
545
 
546
+ func override(for locationManager: LocationManager) {
547
+ if let locationModule = RNMBXLocationModule.shared {
548
+ var isSameProvider = false
549
+ if let currentProvider = locationManager.locationProvider as? AnyObject, let newProvider = locationModule.locationProvider as? AnyObject {
550
+ if currentProvider === newProvider {
551
+ isSameProvider = true
552
+ }
553
+ }
554
+ if !isSameProvider {
555
+ locationManager.overrideLocationProvider(with: locationModule.locationProvider)
556
+ }
557
+ }
558
+ }
559
+
596
560
  // MARK: - location event throttle
597
561
  @objc
598
562
  func setLocationEventThrottle(_ throttleValue:NSNumber) {