@rnmapbox/maps 10.1.0-beta.18 → 10.1.0-beta.19

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 (225) hide show
  1. package/android/src/main/java/com/rnmapbox/rnmbx/RNMBXPackage.kt +19 -3
  2. package/android/src/main/java/com/rnmapbox/rnmbx/components/AbstractEvent.kt +24 -0
  3. package/android/src/main/java/com/rnmapbox/rnmbx/components/AbstractEventEmitter.kt +5 -0
  4. package/android/src/main/java/com/rnmapbox/rnmbx/components/annotation/RNMBXMarkerView.kt +5 -5
  5. package/android/src/main/java/com/rnmapbox/rnmbx/components/annotation/RNMBXMarkerViewManager.kt +3 -9
  6. package/android/src/main/java/com/rnmapbox/rnmbx/components/annotation/RNMBXPointAnnotationManager.kt +8 -7
  7. package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt +4 -4
  8. package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXVIewportManager.kt +55 -0
  9. package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXViewport.kt +259 -0
  10. package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXViewportModule.kt +66 -0
  11. package/android/src/main/java/com/rnmapbox/rnmbx/components/images/ImageManager.kt +53 -0
  12. package/android/src/main/java/com/rnmapbox/rnmbx/components/images/RNMBXImages.kt +2 -1
  13. package/android/src/main/java/com/rnmapbox/rnmbx/components/images/RNMBXImagesManager.kt +4 -3
  14. package/android/src/main/java/com/rnmapbox/rnmbx/components/location/LocationComponentManager.kt +78 -47
  15. package/android/src/main/java/com/rnmapbox/rnmbx/components/location/RNMBXCustomLocationProvider.kt +114 -0
  16. package/android/src/main/java/com/rnmapbox/rnmbx/components/location/RNMBXCustomLocationProviderManager.kt +45 -0
  17. package/android/src/main/java/com/rnmapbox/rnmbx/components/location/RNMBXNativeUserLocation.kt +194 -25
  18. package/android/src/main/java/com/rnmapbox/rnmbx/components/location/RNMBXNativeUserLocationManager.kt +82 -7
  19. package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/NativeMapViewModule.kt +0 -7
  20. package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXMapView.kt +12 -8
  21. package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXMapViewManager.kt +9 -8
  22. package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/RNMBXStyle.kt +1 -1
  23. package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/sources/RNMBXShapeSourceManager.kt +5 -4
  24. package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/sources/RNMBXVectorSourceManager.kt +5 -4
  25. package/android/src/main/java/com/rnmapbox/rnmbx/events/AndroidCallbackEvent.java +1 -1
  26. package/android/src/main/java/com/rnmapbox/rnmbx/events/FeatureClickEvent.java +3 -3
  27. package/android/src/main/java/com/rnmapbox/rnmbx/events/IEvent.kt +1 -4
  28. package/android/src/main/java/com/rnmapbox/rnmbx/events/ImageMissingEvent.java +1 -1
  29. package/android/src/main/java/com/rnmapbox/rnmbx/events/LocationEvent.kt +1 -1
  30. package/android/src/main/java/com/rnmapbox/rnmbx/events/MapChangeEvent.kt +1 -1
  31. package/android/src/main/java/com/rnmapbox/rnmbx/events/MapClickEvent.java +2 -2
  32. package/android/src/main/java/com/rnmapbox/rnmbx/events/MapUserTrackingModeEvent.kt +4 -4
  33. package/android/src/main/java/com/rnmapbox/rnmbx/events/PointAnnotationClickEvent.java +1 -1
  34. package/android/src/main/java/com/rnmapbox/rnmbx/events/PointAnnotationDragEvent.java +3 -3
  35. package/android/src/main/java/com/rnmapbox/rnmbx/events/constants/EventKeys.kt +44 -0
  36. package/android/src/main/java/com/rnmapbox/rnmbx/utils/BitmapUtils.kt +3 -0
  37. package/android/src/main/java/com/rnmapbox/rnmbx/utils/DownloadMapImageTask.kt +5 -2
  38. package/android/src/main/java/com/rnmapbox/rnmbx/utils/extensions/ReadableArray.kt +21 -1
  39. package/android/src/main/java/com/rnmapbox/rnmbx/utils/extensions/ReadableMap.kt +34 -0
  40. package/android/src/main/mapbox-v11-compat/v10/com/rnmapbox/rnmbx/v11compat/Annotation.kt +29 -1
  41. package/android/src/main/mapbox-v11-compat/v10/com/rnmapbox/rnmbx/v11compat/Cancelable.kt +15 -0
  42. package/android/src/main/mapbox-v11-compat/v10/com/rnmapbox/rnmbx/v11compat/Image.kt +17 -1
  43. package/android/src/main/mapbox-v11-compat/v10/com/rnmapbox/rnmbx/v11compat/Location.kt +6 -9
  44. package/android/src/main/mapbox-v11-compat/v11/com/rnmapbox/rnmbx/v11compat/Annotation.kt +29 -1
  45. package/android/src/main/mapbox-v11-compat/v11/com/rnmapbox/rnmbx/v11compat/Cancelable.kt +3 -0
  46. package/android/src/main/mapbox-v11-compat/v11/com/rnmapbox/rnmbx/v11compat/Image.kt +21 -1
  47. package/android/src/main/mapbox-v11-compat/v11/com/rnmapbox/rnmbx/v11compat/Location.kt +2 -2
  48. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXCustomLocationProviderManagerDelegate.java +32 -0
  49. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXCustomLocationProviderManagerInterface.java +17 -0
  50. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXNativeUserLocationManagerDelegate.java +20 -2
  51. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXNativeUserLocationManagerInterface.java +7 -1
  52. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXViewportManagerDelegate.java +35 -0
  53. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXViewportManagerInterface.java +18 -0
  54. package/android/src/main/old-arch/com/rnmapbox/rnmbx/NativeRNMBXViewportModuleSpec.java +49 -0
  55. package/ios/RNMBX/ImageManager.swift +41 -0
  56. package/ios/RNMBX/RNMBXCustomLocationProvider.swift +269 -0
  57. package/ios/RNMBX/RNMBXCustomLocationProviderComponentView.h +15 -0
  58. package/ios/RNMBX/RNMBXCustomLocationProviderComponentView.mm +67 -0
  59. package/ios/RNMBX/RNMBXCustomLocationProviderVIewManager.swift +13 -0
  60. package/ios/RNMBX/RNMBXCustomLocationProviderViewManager.m +9 -0
  61. package/ios/RNMBX/RNMBXFabricPropConvert.h +41 -0
  62. package/ios/RNMBX/RNMBXFabricPropConvert.mm +131 -0
  63. package/ios/RNMBX/RNMBXImageModule.mm +2 -2
  64. package/ios/RNMBX/RNMBXImages.swift +20 -4
  65. package/ios/RNMBX/RNMBXImagesComponentView.mm +19 -1
  66. package/ios/RNMBX/RNMBXLocationModule.swift +25 -14
  67. package/ios/RNMBX/RNMBXLocationModuleV11.swift +81 -14
  68. package/ios/RNMBX/RNMBXLogging.swift +8 -0
  69. package/ios/RNMBX/RNMBXMapView.swift +4 -3
  70. package/ios/RNMBX/RNMBXMapViewComponentView.mm +2 -0
  71. package/ios/RNMBX/RNMBXMapViewManager.swift +0 -1
  72. package/ios/RNMBX/RNMBXMapViewModule.mm +0 -1
  73. package/ios/RNMBX/RNMBXMarkerView.swift +0 -1
  74. package/ios/RNMBX/RNMBXNativeUserLocation.swift +217 -21
  75. package/ios/RNMBX/RNMBXNativeUserLocationComponentView.mm +14 -6
  76. package/ios/RNMBX/RNMBXNativeUserLocationViewManager.m +7 -0
  77. package/ios/RNMBX/RNMBXPointAnnotationModule.mm +2 -2
  78. package/ios/RNMBX/RNMBXUtils.swift +2 -7
  79. package/ios/RNMBX/RNMBXViewport.swift +220 -0
  80. package/ios/RNMBX/RNMBXViewportComponentView.h +17 -0
  81. package/ios/RNMBX/RNMBXViewportComponentView.mm +119 -0
  82. package/ios/RNMBX/RNMBXViewportManager.m +12 -0
  83. package/ios/RNMBX/RNMBXViewportManager.swift +38 -0
  84. package/ios/RNMBX/RNMBXViewportModule.h +18 -0
  85. package/ios/RNMBX/RNMBXViewportModule.mm +87 -0
  86. package/ios/RNMBX/Uitls/PropertyChanges.swift +3 -4
  87. package/ios/RNMBX/rnmapbox_maps-Swift.pre.h +3 -0
  88. package/lib/commonjs/Mapbox.js +24 -0
  89. package/lib/commonjs/Mapbox.js.map +1 -1
  90. package/lib/commonjs/classes/AnimatedCoordinatesArray.js +4 -4
  91. package/lib/commonjs/classes/AnimatedCoordinatesArray.js.map +1 -1
  92. package/lib/commonjs/classes/AnimatedPoint.js +9 -14
  93. package/lib/commonjs/classes/AnimatedPoint.js.map +1 -1
  94. package/lib/commonjs/classes/AnimatedRouteCoordinatesArray.js +1 -2
  95. package/lib/commonjs/classes/AnimatedRouteCoordinatesArray.js.map +1 -1
  96. package/lib/commonjs/components/Annotation.js +1 -2
  97. package/lib/commonjs/components/Annotation.js.map +1 -1
  98. package/lib/commonjs/components/Camera.js +5 -11
  99. package/lib/commonjs/components/Camera.js.map +1 -1
  100. package/lib/commonjs/components/CustomLocationProvider.js +16 -0
  101. package/lib/commonjs/components/CustomLocationProvider.js.map +1 -0
  102. package/lib/commonjs/components/HeadingIndicator.js +3 -4
  103. package/lib/commonjs/components/HeadingIndicator.js.map +1 -1
  104. package/lib/commonjs/components/Image.js +7 -8
  105. package/lib/commonjs/components/Image.js.map +1 -1
  106. package/lib/commonjs/components/MapView.js +6 -15
  107. package/lib/commonjs/components/MapView.js.map +1 -1
  108. package/lib/commonjs/components/NativeBridgeComponent.js +3 -4
  109. package/lib/commonjs/components/NativeBridgeComponent.js.map +1 -1
  110. package/lib/commonjs/components/NativeUserLocation.js +23 -1
  111. package/lib/commonjs/components/NativeUserLocation.js.map +1 -1
  112. package/lib/commonjs/components/UserLocation.js +3 -4
  113. package/lib/commonjs/components/UserLocation.js.map +1 -1
  114. package/lib/commonjs/components/Viewport.js +105 -0
  115. package/lib/commonjs/components/Viewport.js.map +1 -0
  116. package/lib/commonjs/modules/location/locationManager.js +1 -2
  117. package/lib/commonjs/modules/location/locationManager.js.map +1 -1
  118. package/lib/commonjs/modules/snapshot/SnapshotOptions.js +1 -2
  119. package/lib/commonjs/modules/snapshot/SnapshotOptions.js.map +1 -1
  120. package/lib/commonjs/modules/snapshot/snapshotManager.js +1 -2
  121. package/lib/commonjs/modules/snapshot/snapshotManager.js.map +1 -1
  122. package/lib/commonjs/specs/NativeRNMBXViewportModule.js +10 -0
  123. package/lib/commonjs/specs/NativeRNMBXViewportModule.js.map +1 -0
  124. package/lib/commonjs/specs/RNMBXCustomLocationProviderNativeComponent.js +11 -0
  125. package/lib/commonjs/specs/RNMBXCustomLocationProviderNativeComponent.js.map +1 -0
  126. package/lib/commonjs/specs/RNMBXNativeUserLocationNativeComponent.js +1 -0
  127. package/lib/commonjs/specs/RNMBXNativeUserLocationNativeComponent.js.map +1 -1
  128. package/lib/commonjs/specs/RNMBXViewportNativeComponent.js +36 -0
  129. package/lib/commonjs/specs/RNMBXViewportNativeComponent.js.map +1 -0
  130. package/lib/commonjs/utils/deprecation.js +3 -4
  131. package/lib/commonjs/utils/deprecation.js.map +1 -1
  132. package/lib/commonjs/utils/geoUtils.js +1 -3
  133. package/lib/commonjs/utils/geoUtils.js.map +1 -1
  134. package/lib/commonjs/utils/index.js +2 -4
  135. package/lib/commonjs/utils/index.js.map +1 -1
  136. package/lib/commonjs/web/components/Camera.js +1 -3
  137. package/lib/commonjs/web/components/Camera.js.map +1 -1
  138. package/lib/module/Mapbox.js +3 -0
  139. package/lib/module/Mapbox.js.map +1 -1
  140. package/lib/module/classes/AnimatedCoordinatesArray.js +4 -4
  141. package/lib/module/classes/AnimatedCoordinatesArray.js.map +1 -1
  142. package/lib/module/classes/AnimatedPoint.js +9 -14
  143. package/lib/module/classes/AnimatedPoint.js.map +1 -1
  144. package/lib/module/classes/AnimatedRouteCoordinatesArray.js +1 -2
  145. package/lib/module/classes/AnimatedRouteCoordinatesArray.js.map +1 -1
  146. package/lib/module/components/Annotation.js +1 -2
  147. package/lib/module/components/Annotation.js.map +1 -1
  148. package/lib/module/components/Camera.js +5 -11
  149. package/lib/module/components/Camera.js.map +1 -1
  150. package/lib/module/components/CustomLocationProvider.js +7 -0
  151. package/lib/module/components/CustomLocationProvider.js.map +1 -0
  152. package/lib/module/components/HeadingIndicator.js +3 -4
  153. package/lib/module/components/HeadingIndicator.js.map +1 -1
  154. package/lib/module/components/Image.js +7 -8
  155. package/lib/module/components/Image.js.map +1 -1
  156. package/lib/module/components/MapView.js +6 -15
  157. package/lib/module/components/MapView.js.map +1 -1
  158. package/lib/module/components/NativeBridgeComponent.js +3 -4
  159. package/lib/module/components/NativeBridgeComponent.js.map +1 -1
  160. package/lib/module/components/NativeUserLocation.js +24 -2
  161. package/lib/module/components/NativeUserLocation.js.map +1 -1
  162. package/lib/module/components/UserLocation.js +3 -4
  163. package/lib/module/components/UserLocation.js.map +1 -1
  164. package/lib/module/components/Viewport.js +96 -0
  165. package/lib/module/components/Viewport.js.map +1 -0
  166. package/lib/module/modules/location/locationManager.js +1 -2
  167. package/lib/module/modules/location/locationManager.js.map +1 -1
  168. package/lib/module/modules/snapshot/SnapshotOptions.js +1 -2
  169. package/lib/module/modules/snapshot/SnapshotOptions.js.map +1 -1
  170. package/lib/module/modules/snapshot/snapshotManager.js +1 -2
  171. package/lib/module/modules/snapshot/snapshotManager.js.map +1 -1
  172. package/lib/module/specs/NativeRNMBXViewportModule.js +6 -0
  173. package/lib/module/specs/NativeRNMBXViewportModule.js.map +1 -0
  174. package/lib/module/specs/RNMBXCustomLocationProviderNativeComponent.js +6 -0
  175. package/lib/module/specs/RNMBXCustomLocationProviderNativeComponent.js.map +1 -0
  176. package/lib/module/specs/RNMBXNativeUserLocationNativeComponent.js +3 -0
  177. package/lib/module/specs/RNMBXNativeUserLocationNativeComponent.js.map +1 -1
  178. package/lib/module/specs/RNMBXViewportNativeComponent.js +31 -0
  179. package/lib/module/specs/RNMBXViewportNativeComponent.js.map +1 -0
  180. package/lib/module/utils/deprecation.js +3 -4
  181. package/lib/module/utils/deprecation.js.map +1 -1
  182. package/lib/module/utils/geoUtils.js +1 -3
  183. package/lib/module/utils/geoUtils.js.map +1 -1
  184. package/lib/module/utils/index.js +2 -4
  185. package/lib/module/utils/index.js.map +1 -1
  186. package/lib/module/web/components/Camera.js +1 -3
  187. package/lib/module/web/components/Camera.js.map +1 -1
  188. package/lib/typescript/src/Mapbox.d.ts +3 -0
  189. package/lib/typescript/src/Mapbox.d.ts.map +1 -1
  190. package/lib/typescript/src/components/Camera.d.ts +1 -2
  191. package/lib/typescript/src/components/Camera.d.ts.map +1 -1
  192. package/lib/typescript/src/components/CustomLocationProvider.d.ts +8 -0
  193. package/lib/typescript/src/components/CustomLocationProvider.d.ts.map +1 -0
  194. package/lib/typescript/src/components/NativeUserLocation.d.ts +40 -0
  195. package/lib/typescript/src/components/NativeUserLocation.d.ts.map +1 -1
  196. package/lib/typescript/src/components/UserLocation.d.ts +1 -0
  197. package/lib/typescript/src/components/UserLocation.d.ts.map +1 -1
  198. package/lib/typescript/src/components/Viewport.d.ts +68 -0
  199. package/lib/typescript/src/components/Viewport.d.ts.map +1 -0
  200. package/lib/typescript/src/specs/NativeRNMBXViewportModule.d.ts +36 -0
  201. package/lib/typescript/src/specs/NativeRNMBXViewportModule.d.ts.map +1 -0
  202. package/lib/typescript/src/specs/RNMBXCustomLocationProviderNativeComponent.d.ts +10 -0
  203. package/lib/typescript/src/specs/RNMBXCustomLocationProviderNativeComponent.d.ts.map +1 -0
  204. package/lib/typescript/src/specs/RNMBXNativeUserLocationNativeComponent.d.ts +11 -2
  205. package/lib/typescript/src/specs/RNMBXNativeUserLocationNativeComponent.d.ts.map +1 -1
  206. package/lib/typescript/src/specs/RNMBXViewportNativeComponent.d.ts +47 -0
  207. package/lib/typescript/src/specs/RNMBXViewportNativeComponent.d.ts.map +1 -0
  208. package/lib/typescript/src/types/Position.d.ts +3 -0
  209. package/lib/typescript/src/types/Position.d.ts.map +1 -1
  210. package/package.json +1 -1
  211. package/rnmapbox-maps.podspec +1 -1
  212. package/setup-jest.js +6 -0
  213. package/src/Mapbox.ts +3 -0
  214. package/src/components/Camera.tsx +1 -2
  215. package/src/components/CustomLocationProvider.tsx +14 -0
  216. package/src/components/NativeUserLocation.tsx +69 -2
  217. package/src/components/UserLocation.tsx +1 -0
  218. package/src/components/Viewport.tsx +250 -0
  219. package/src/specs/NativeRNMBXViewportModule.ts +41 -0
  220. package/src/specs/RNMBXCustomLocationProviderNativeComponent.ts +17 -0
  221. package/src/specs/RNMBXNativeUserLocationNativeComponent.ts +15 -2
  222. package/src/specs/RNMBXViewportNativeComponent.ts +102 -0
  223. package/src/types/Position.ts +3 -0
  224. package/android/src/main/java/com/rnmapbox/rnmbx/components/AbstractEvent.java +0 -35
  225. package/android/src/main/java/com/rnmapbox/rnmbx/events/constants/EventKeys.java +0 -39
@@ -457,14 +457,9 @@ class RNMBXLocationModule: RCTEventEmitter, LocationProviderRNMBXDelegate {
457
457
 
458
458
  static weak var shared : RNMBXLocationModule? = nil
459
459
 
460
- var locationProviderRNMBX : LocationProviderRNMBX
461
460
  var hasListener = false
462
461
 
463
- var locationProvider : LocationProvider {
464
- get {
465
- return locationProviderRNMBX
466
- }
467
- }
462
+ var locationProvider : LocationProvider
468
463
 
469
464
  var locationEventThrottle : (
470
465
  waitBetweenEvents: Double?,
@@ -475,9 +470,11 @@ class RNMBXLocationModule: RCTEventEmitter, LocationProviderRNMBXDelegate {
475
470
  )
476
471
 
477
472
  override init() {
478
- locationProviderRNMBX = LocationProviderRNMBX()
473
+ locationProvider = LocationProviderRNMBX()
479
474
  super.init()
480
- locationProviderRNMBX.delegate = self
475
+ if let locationProvider = locationProvider as? LocationProviderRNMBX {
476
+ locationProvider.delegate = self
477
+ }
481
478
  RNMBXLocationModule.shared = self
482
479
  }
483
480
 
@@ -497,12 +494,20 @@ class RNMBXLocationModule: RCTEventEmitter, LocationProviderRNMBXDelegate {
497
494
  }
498
495
 
499
496
  @objc func start(_ minDisplacement: CLLocationDistance) {
500
- if minDisplacement >= 0.0 { locationProviderRNMBX.setDistanceFilter(minDisplacement) }
501
- locationProviderRNMBX.start()
497
+ if minDisplacement >= 0.0 {
498
+ if let locationProvider = locationProvider as? LocationProviderRNMBX {
499
+ locationProvider.setDistanceFilter(minDisplacement)
500
+ }
501
+ }
502
+ if let locationProvider = locationProvider as? LocationProviderRNMBX {
503
+ locationProvider.start()
504
+ }
502
505
  }
503
506
 
504
507
  @objc func stop() {
505
- locationProviderRNMBX.stop()
508
+ if let locationProvider = locationProvider as? LocationProviderRNMBX {
509
+ locationProvider.stop()
510
+ }
506
511
  }
507
512
 
508
513
  @objc func getLastKnownLocation() -> RNMBXLocation? {
@@ -510,15 +515,21 @@ class RNMBXLocationModule: RCTEventEmitter, LocationProviderRNMBXDelegate {
510
515
  }
511
516
 
512
517
  @objc func setMinDisplacement(_ minDisplacement: CLLocationDistance) {
513
- locationProviderRNMBX.setDistanceFilter(minDisplacement)
518
+ if let locationProvider = locationProvider as? LocationProviderRNMBX {
519
+ locationProvider.setDistanceFilter(minDisplacement)
520
+ }
514
521
  }
515
522
 
516
523
  @objc func setRequestsAlwaysUse(_ requestsAlwaysUse: Bool) {
517
- locationProviderRNMBX.setRequestsAlwaysUse(requestsAlwaysUse);
524
+ if let locationProvider = locationProvider as? LocationProviderRNMBX {
525
+ locationProvider.setRequestsAlwaysUse(requestsAlwaysUse)
526
+ }
518
527
  }
519
528
 
520
529
  @objc func simulateHeading(_ changesPerSecond: NSNumber, increment: NSNumber) {
521
- locationProviderRNMBX.simulateHeading(changesPerSecond: changesPerSecond.intValue, increment: increment.doubleValue)
530
+ if let locationProvider = locationProvider as? LocationProviderRNMBX {
531
+ locationProvider.simulateHeading(changesPerSecond: changesPerSecond.intValue, increment: increment.doubleValue)
532
+ }
522
533
  }
523
534
 
524
535
  @objc
@@ -133,10 +133,9 @@ extension RNMBXAppleLocationProviderProxy {
133
133
  class RNMBXLocationModule: RCTEventEmitter {
134
134
  static weak var shared : RNMBXLocationModule? = nil
135
135
 
136
- // var _locationProvider : RNMBXAppleLocationProviderProxy = RNMBXAppleLocationProviderProxy(provider: AppleLocationProvider())
137
- var _locationProvider : AppleLocationProvider = AppleLocationProvider()
138
- var locationUpdateObserver : AnyCancelable? = nil
139
- var locationHeadingObserver : AnyCancelable? = nil
136
+ var _locationProvider : LocationProvider & HeadingProvider = AppleLocationProvider()
137
+ var locationUpdateObserver : Cancelable? = nil
138
+ var locationHeadingObserver : Cancelable? = nil
140
139
 
141
140
  var actLocation : RNMBXLocation = RNMBXLocation()
142
141
 
@@ -164,12 +163,10 @@ class RNMBXLocationModule: RCTEventEmitter {
164
163
  }
165
164
 
166
165
  @objc func start(_ minDisplacement: CLLocationDistance) {
167
- var newOptions = _locationProvider.options
168
- newOptions.distanceFilter = minDisplacement
169
- if minDisplacement >= 0.0 { _locationProvider.options = newOptions }
166
+ setMinDisplacement(minDisplacement)
170
167
 
171
168
  locationUpdateObserver?.cancel()
172
- locationUpdateObserver = _locationProvider.onLocationUpdate.observe { location in
169
+ locationUpdateObserver = observeLocationUpdates(_locationProvider) { location in
173
170
  guard self.hasListener else { return }
174
171
 
175
172
  self.actLocation.location = location.last
@@ -178,7 +175,7 @@ class RNMBXLocationModule: RCTEventEmitter {
178
175
  }
179
176
  }
180
177
  locationHeadingObserver?.cancel()
181
- locationHeadingObserver = _locationProvider.onHeadingUpdate.observe { heading in
178
+ locationHeadingObserver = observeHeadingUpdates(_locationProvider) { heading in
182
179
  guard self.hasListener else { return }
183
180
 
184
181
  self.actLocation.heading = heading
@@ -188,6 +185,64 @@ class RNMBXLocationModule: RCTEventEmitter {
188
185
  }
189
186
  }
190
187
 
188
+ class _LocationObserver : Cancelable, LocationObserver {
189
+ weak var locationProvider: LocationProvider?
190
+ var callback: (([Location]) -> Void)?
191
+
192
+ init(_ locationProvider: LocationProvider) {
193
+ self.locationProvider = locationProvider
194
+ }
195
+
196
+ func onLocationUpdateReceived(for locations: [Location]) {
197
+ callback?(locations)
198
+ }
199
+
200
+ func cancel() {
201
+ locationProvider?.removeLocationObserver(for: self)
202
+ locationProvider = nil
203
+ }
204
+
205
+ deinit {
206
+ self.cancel()
207
+ }
208
+ }
209
+
210
+ class _HeadingObserver: Cancelable, HeadingObserver {
211
+ var headingProvider: HeadingProvider?
212
+ var callback: ((Heading) -> Void)?
213
+
214
+ init(_ headingProvider: HeadingProvider) {
215
+ self.headingProvider = headingProvider
216
+ }
217
+
218
+ func onHeadingUpdate(_ heading: MapboxMaps.Heading) {
219
+ callback?(heading)
220
+ }
221
+
222
+ func cancel() {
223
+ headingProvider?.remove(headingObserver: self)
224
+ headingProvider = nil
225
+ }
226
+
227
+ deinit {
228
+ self.cancel()
229
+ }
230
+ }
231
+
232
+ func observeLocationUpdates(_ locationProvider: LocationProvider, callback: @escaping ([Location]) -> Void) -> Cancelable {
233
+ let observer = _LocationObserver(locationProvider)
234
+ observer.callback = callback
235
+ locationProvider.addLocationObserver(for: observer)
236
+ return observer
237
+ }
238
+
239
+ func observeHeadingUpdates(_ headingProvider: HeadingProvider, callback: @escaping (Heading) -> Void) -> Cancelable {
240
+ let observer = _HeadingObserver(headingProvider)
241
+ observer.callback = callback
242
+ headingProvider.add(headingObserver: observer)
243
+ return observer
244
+ }
245
+
191
246
  @objc func stop() {
192
247
  locationUpdateObserver?.cancel()
193
248
  locationUpdateObserver = nil
@@ -199,14 +254,17 @@ class RNMBXLocationModule: RCTEventEmitter {
199
254
  @objc func getLastKnownLocation() -> RNMBXLocation? {
200
255
  let last = RNMBXLocation()
201
256
  last.heading = _locationProvider.latestHeading
202
- last.location = _locationProvider.latestLocation
257
+ last.location = _locationProvider.getLastObservedLocation()
203
258
  return last
204
259
  }
205
260
 
206
- @objc func setMinDisplacement(_ minDisplacement: CLLocationDistance) {
207
- var newOptions = _locationProvider.options
208
- newOptions.distanceFilter = minDisplacement
209
- _locationProvider.options = newOptions
261
+ @objc
262
+ func setMinDisplacement(_ minDisplacement: CLLocationDistance) {
263
+ if let appleLocationProvider = _locationProvider as? AppleLocationProvider {
264
+ var newOptions = appleLocationProvider.options
265
+ newOptions.distanceFilter = minDisplacement
266
+ if minDisplacement >= 0.0 { appleLocationProvider.options = newOptions }
267
+ }
210
268
  }
211
269
 
212
270
  @objc
@@ -236,7 +294,16 @@ class RNMBXLocationModule: RCTEventEmitter {
236
294
  get {
237
295
  return _locationProvider
238
296
  }
297
+ set(value) {
298
+ _locationProvider = value
299
+ }
239
300
  }
301
+
302
+ func overrideLocationProvider(newProvider: LocationProvider & HeadingProvider) {
303
+ _locationProvider = newProvider
304
+ }
305
+
306
+
240
307
  }
241
308
 
242
309
  class EventThrottler {
@@ -115,6 +115,14 @@ func logged<T>(_ msg: String, info: (() -> String)? = nil, errorResult: (Error)
115
115
  }
116
116
  }
117
117
 
118
+ @objc(RNMBXLogger)
119
+ public class RNMBXLogger : NSObject {
120
+ @objc
121
+ static public func error(_ message: String) {
122
+ Logger.error(message)
123
+ }
124
+ }
125
+
118
126
  @objc(RNMBXLogging)
119
127
  class RNMBXLogging: RCTEventEmitter {
120
128
  static var shared : RNMBXLogging? = nil
@@ -14,7 +14,6 @@ class FeatureEntry {
14
14
  }
15
15
  }
16
16
 
17
-
18
17
  #if RNMBX_11
19
18
  extension QueriedRenderedFeature {
20
19
  var feature : Feature { return queriedFeature.feature }
@@ -99,6 +98,8 @@ class RNMBXCameraChanged : RNMBXEvent, RCTEvent {
99
98
 
100
99
  @objc(RNMBXMapView)
101
100
  open class RNMBXMapView: UIView {
101
+ var imageManager: ImageManager = ImageManager()
102
+
102
103
  var tapDelegate: IgnoreRNMBXMakerViewGestureDelegate? = nil
103
104
 
104
105
  var eventDispatcher: RCTEventDispatcherProtocol
@@ -164,7 +165,7 @@ open class RNMBXMapView: UIView {
164
165
  var mapboxMap: MapboxMap! {
165
166
  get { _mapView.mapboxMap }
166
167
  }
167
-
168
+
168
169
  @objc public func addToMap(_ subview: UIView) {
169
170
  withMapView {
170
171
  if let mapComponent = subview as? RNMBXMapComponent {
@@ -575,7 +576,7 @@ open class RNMBXMapView: UIView {
575
576
  mapView.ornaments.options.scaleBar.margins = margins
576
577
  }
577
578
  }
578
-
579
+
579
580
  @objc override public func didSetProps(_ props: [String]) {
580
581
  if (_mapView == nil) {
581
582
  createMapView()
@@ -223,6 +223,8 @@ using namespace facebook::react;
223
223
  }
224
224
 
225
225
  [super updateProps:props oldProps:oldProps];
226
+
227
+ [_view didSetProps:@[]];
226
228
  }
227
229
 
228
230
  - (void)prepareForRecycle
@@ -246,5 +246,4 @@ extension RNMBXMapViewManager {
246
246
  }
247
247
  }
248
248
  }
249
-
250
249
  }
@@ -139,7 +139,6 @@ RCT_EXPORT_METHOD(querySourceFeatures:(nonnull NSNumber*)viewRef sourceId:(NSStr
139
139
  } reject:reject methodName:@"querySourceFeatures"];
140
140
  }
141
141
 
142
-
143
142
  // Thanks to this guard, we won't compile this code when we build for the old architecture.
144
143
  #ifdef RCT_NEW_ARCH_ENABLED
145
144
  - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
@@ -22,7 +22,6 @@ class RNMBXMarkerViewParentViewAnnotation : UIView {
22
22
  if actSize.width != size.width || actSize.height != size.height {
23
23
  let dx = ((size.width/2.0) - newOffset.dx) - ((actSize.width/2.0) - oldOffset.dx)
24
24
  let dy = ((size.height/2.0) + newOffset.dy) - ((actSize.height/2.0) + oldOffset.dy)
25
- print(" => size=\(size) actSize=\(actSize) newOffset=\(newOffset) oldOffset=\(oldOffset) dx=\(dx) dy=\(dy)")
26
25
  var frame = self.frame
27
26
  frame = frame.offsetBy(dx: -dx, dy: -dy)
28
27
  frame.size = size
@@ -1,8 +1,9 @@
1
1
  import MapboxMaps
2
2
 
3
3
  @objc
4
- public class RNMBXNativeUserLocation : UIView, RNMBXMapComponent {
4
+ public class RNMBXNativeUserLocation: UIView, RNMBXMapComponent {
5
5
  weak var map : RNMBXMapView! = nil
6
+ var imageManager: ImageManager? = nil
6
7
 
7
8
  let locationLayerId = "location-layer"
8
9
 
@@ -10,39 +11,193 @@ public class RNMBXNativeUserLocation : UIView, RNMBXMapComponent {
10
11
 
11
12
  @objc
12
13
  public var iosShowsUserHeadingIndicator : Bool = false {
13
- didSet {
14
- if let map = self.map { _applySettings(map) }
14
+ didSet { _apply() }
15
+ }
16
+
17
+ enum PuckImagePart: String {
18
+ case top
19
+ case bearing
20
+ case shadow
21
+ }
22
+
23
+ var imageNames: [PuckImagePart: String] = [:]
24
+ var subscriptions: [PuckImagePart: ImageManager.Subscription] = [:]
25
+ var images: [PuckImagePart: UIImage] = [:]
26
+
27
+ @objc
28
+ public var topImage : String? = nil {
29
+ didSet { imageNameUpdated(.top, topImage) }
30
+ }
31
+
32
+ @objc
33
+ public var bearingImage : String? = nil {
34
+ didSet { imageNameUpdated(.bearing, bearingImage) }
35
+ }
36
+
37
+ @objc
38
+ public var shadowImage : String? = nil {
39
+ didSet { imageNameUpdated(.shadow, shadowImage) }
40
+ }
41
+
42
+ @objc
43
+ public var scale : Any? = nil
44
+
45
+ @objc
46
+ public var visible: Bool = false
47
+
48
+ var _puckBearing: PuckBearing? = nil
49
+
50
+ @objc
51
+ public var puckBearing: String? {
52
+ get {
53
+ switch (_puckBearing) {
54
+ case .heading:
55
+ return "heading"
56
+ case .course:
57
+ return "course"
58
+ case nil:
59
+ return nil
60
+ }
61
+ }
62
+ set(value) {
63
+ switch(value) {
64
+ case "heading":
65
+ _puckBearing = .heading
66
+ case "coures":
67
+ _puckBearing = .course
68
+ case nil:
69
+ _puckBearing = nil
70
+ default:
71
+ Logger.error("RNMBXNativeUserLocation puckBearing is uncrecognized: \(value)")
72
+ _puckBearing = nil
73
+ }
74
+ }
75
+ }
76
+
77
+ @objc
78
+ public var puckBearingEnabled: Bool = false
79
+
80
+ @objc
81
+ override public func didSetProps(_ props: [String]) {
82
+ _apply()
83
+ }
84
+
85
+ func imageNameUpdated(_ image: PuckImagePart, _ name: String?) {
86
+ imageNames[image] = name
87
+ if let subscription = subscriptions[image] {
88
+ subscription.cancel()
89
+ subscriptions.removeValue(forKey: image)
90
+ }
91
+
92
+ guard let name = name else {
93
+ imageUpdated(image, nil)
94
+ return
95
+ }
96
+
97
+ if let imageManager = imageManager {
98
+ subscribe(imageManager, image, name)
15
99
  }
16
100
  }
17
101
 
18
- func _applySettings(_ map: RNMBXMapView) {
19
- let location = map.mapView.location!
20
- location.options.puckType = .puck2D(.makeDefault(showBearing: iosShowsUserHeadingIndicator))
21
- if (iosShowsUserHeadingIndicator) {
22
- #if RNMBX_11
23
- location.options.puckBearing = .heading
24
- #else
25
- location.options.puckBearingSource = .heading
26
- #endif
27
- location.options.puckBearingEnabled = true
102
+ func imageUpdated(_ image: PuckImagePart, _ uiImage: UIImage?) {
103
+ if let uiImage = uiImage {
104
+ images[image] = uiImage
28
105
  } else {
29
- location.options.puckBearingEnabled = false
106
+ images.removeValue(forKey: image)
107
+ }
108
+ _apply()
109
+ }
110
+
111
+ func toDoubleValue(value: Any?, name: String) -> Value<Double>? {
112
+ if value == nil {
113
+ return nil
114
+ }
115
+ switch value {
116
+ case let value as NSNumber:
117
+ return .constant(value.doubleValue)
118
+ case let value as Int:
119
+ return .constant(Double(value))
120
+ case let value as Double:
121
+ return .constant(value)
122
+ case let value as Array<Any>:
123
+ do {
124
+ let data = try JSONSerialization.data(withJSONObject: value, options: .prettyPrinted)
125
+ let decodedExpression = try JSONDecoder().decode(Expression.self, from: data)
126
+ return Value.expression(decodedExpression)
127
+ } catch {
128
+ Logger.error("toDoubleValue: \(name): unable to parse as expression \(value) with type: \(type(of:value))")
129
+ return Value.constant(0.0)
130
+ }
131
+ default:
132
+ Logger.error("toDoubleValue: \(name): has unknown type: \(type(of:value)) \(value) ")
133
+ return .constant(1.0)
134
+ }
135
+ }
136
+
137
+ func _apply() {
138
+ guard let map = self.map else {
139
+ return
140
+ }
141
+ guard let mapView = map.mapView else {
142
+ Logger.error("RNMBXNativeUserLocation mapView was nil")
143
+ return
144
+ }
145
+ _apply(mapView)
146
+ }
147
+
148
+ func _apply(_ mapView: MapView) {
149
+ guard let location = mapView.location else {
150
+ Logger.error("RNMBXNativeUserLocation location was nil")
151
+ return
152
+ }
153
+
154
+ if (visible) {
155
+ if images.isEmpty {
156
+ location.options.puckType = .puck2D(.makeDefault(showBearing: puckBearingEnabled))
157
+ } else {
158
+ location.options.puckType = .puck2D(
159
+ Puck2DConfiguration(
160
+ topImage: self.images[.top],
161
+ bearingImage: self.images[.bearing],
162
+ shadowImage: self.images[.shadow],
163
+ scale: toDoubleValue(value: scale, name: "scale")
164
+ )
165
+ )
166
+ }
167
+ } else {
168
+ let emptyImage = UIGraphicsImageRenderer(size: CGSize(width: 1, height: 1)).image { _ in }
169
+ location.options.puckType = .puck2D(
170
+ Puck2DConfiguration(
171
+ topImage: emptyImage,
172
+ bearingImage: emptyImage,
173
+ shadowImage: emptyImage,
174
+ scale: Value.constant(1.0)
175
+ )
176
+ )
177
+ }
178
+
179
+
180
+ location.options.puckBearingEnabled = puckBearingEnabled
181
+ if let puckBearing = _puckBearing {
182
+ location.options.puckBearing = puckBearing
30
183
  }
31
184
  }
32
185
 
33
186
  func addToMap(_ map: RNMBXMapView, style: Style) {
34
187
  self.map = map
35
- _applySettings(map)
188
+
189
+ _fetchImages(map)
190
+ _apply()
36
191
  }
37
192
 
38
193
  func removeFromMap(_ map: RNMBXMapView, reason: RemovalReason) -> Bool {
39
- let location = map.mapView.location!
40
- location.options.puckType = nil
41
- guard let mapboxMap = map.mapboxMap else {
42
- return true
194
+ if let location = map.mapView.location {
195
+ location.options.puckType = nil
196
+ location.options.puckType = .none
197
+ } else {
198
+ Logger.error("RNMBXNativeUserLocation.removeFromMap: location is nil")
43
199
  }
44
- let style = mapboxMap.style
45
- location.options.puckType = .none
200
+ removeSubscriptions()
46
201
  self.map = nil
47
202
 
48
203
  return true
@@ -52,3 +207,44 @@ public class RNMBXNativeUserLocation : UIView, RNMBXMapComponent {
52
207
  return true
53
208
  }
54
209
  }
210
+
211
+ // MARK: fetch images and subscribe on updates
212
+
213
+ extension RNMBXNativeUserLocation {
214
+ func subscribe(_ imageManager: ImageManager, _ image: PuckImagePart, _ name: String) {
215
+ if let subscription = subscriptions[image] {
216
+ subscription.cancel()
217
+ subscriptions[image] = nil
218
+ Logger.error("RNMBXNativeUserLocation.subscribe: there is already a subscription for image: \(image)")
219
+ }
220
+
221
+ subscriptions[image] = imageManager.subscribe(name: name) { name, uiImage in
222
+ self.imageUpdated(image, uiImage)
223
+ }
224
+ }
225
+
226
+ func removeSubscriptions() {
227
+ self.subscriptions.forEach { (part,subscription) in
228
+ subscription.cancel()
229
+ }
230
+ self.subscriptions.removeAll()
231
+ }
232
+
233
+ func _fetchImages(_ map: RNMBXMapView) {
234
+ if let style = map.mapView?.mapboxMap?.style {
235
+ imageNames.forEach { (part, name) in
236
+ if style.imageExists(withId: name), let image = style.image(withId: name) {
237
+ images[part] = image
238
+ }
239
+ }
240
+ }
241
+
242
+ let imageManager = map.imageManager
243
+ removeSubscriptions()
244
+ self.imageManager = imageManager
245
+ imageNames.forEach { (part,name) in
246
+ subscribe(imageManager, part, name)
247
+ }
248
+ }
249
+
250
+ }
@@ -2,6 +2,7 @@
2
2
 
3
3
  #import "RNMBXNativeUserLocationComponentView.h"
4
4
  #import "RNMBXFabricHelpers.h"
5
+ #import "RNMBXFabricPropConvert.h"
5
6
 
6
7
  #import <React/RCTConversions.h>
7
8
  #import <React/RCTFabricComponentsPlugins.h>
@@ -53,13 +54,20 @@ using namespace facebook::react;
53
54
 
54
55
  - (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared &)oldProps
55
56
  {
56
- const auto &newProps = static_cast<const RNMBXNativeUserLocationProps &>(*props);
57
- id iosShowsUserHeadingIndicator = RNMBXConvertFollyDynamicToId(newProps.iosShowsUserHeadingIndicator);
58
- if (iosShowsUserHeadingIndicator != nil) {
59
- _view.iosShowsUserHeadingIndicator = iosShowsUserHeadingIndicator;
60
- }
61
-
57
+ const auto &oldViewProps = static_cast<const RNMBXNativeUserLocationProps &>(*oldProps);
58
+ const auto &newViewProps = static_cast<const RNMBXNativeUserLocationProps &>(*props);
59
+
60
+ RNMBX_OPTIONAL_RPOP_NSString(puckBearing)
61
+ RNMBX_OPTIONAL_RPOP_BOOL(puckBearingEnabled)
62
+ RNMBX_OPTIONAL_RPOP_NSString(bearingImage)
63
+ RNMBX_OPTIONAL_RPOP_NSString(shadowImage)
64
+ RNMBX_OPTIONAL_RPOP_NSString(topImage)
65
+ RNMBX_OPTIONAL_RPOP_ExpressionDouble(scale)
66
+ RNMBX_RPOP_BOOL(visible)
67
+
62
68
  [super updateProps:props oldProps:oldProps];
69
+
70
+ [_view didSetProps:@[]];
63
71
  }
64
72
 
65
73
  @end
@@ -4,6 +4,13 @@
4
4
  @interface RCT_EXTERN_REMAP_MODULE(RNMBXNativeUserLocation, RNMBXNativeUserLocationViewManager, RCTViewManager)
5
5
 
6
6
  RCT_EXPORT_VIEW_PROPERTY(iosShowsUserHeadingIndicator, BOOL);
7
+ RCT_EXPORT_VIEW_PROPERTY(topImage, NSString);
8
+ RCT_EXPORT_VIEW_PROPERTY(bearingImage, NSString);
9
+ RCT_EXPORT_VIEW_PROPERTY(shadowImage, NSString);
10
+ RCT_EXPORT_VIEW_PROPERTY(scale, NSArray);
11
+ RCT_EXPORT_VIEW_PROPERTY(visible, BOOL);
12
+ RCT_EXPORT_VIEW_PROPERTY(puckBearing, NSString);
13
+ RCT_EXPORT_VIEW_PROPERTY(puckBearingEnabled, BOOL);
7
14
 
8
15
  @end
9
16
 
@@ -25,7 +25,7 @@ RCT_EXPORT_MODULE();
25
25
  return RCTGetUIManagerQueue();
26
26
  }
27
27
 
28
- - (void)withPointAnnotation:(NSNumber*)viewRef block:(void (^)(RNMBXPointAnnotation *))block reject:(RCTPromiseRejectBlock)reject methodName:(NSString *)methodName
28
+ - (void)withPointAnnotation:(nonnull NSNumber*)viewRef block:(void (^)(RNMBXPointAnnotation *))block reject:(RCTPromiseRejectBlock)reject methodName:(NSString *)methodName
29
29
  {
30
30
  #ifdef RCT_NEW_ARCH_ENABLED
31
31
  [self.viewRegistry_DEPRECATED addUIBlock:^(RCTViewRegistry *viewRegistry) {
@@ -46,7 +46,7 @@ RCT_EXPORT_MODULE();
46
46
  }
47
47
 
48
48
 
49
- RCT_EXPORT_METHOD(refresh:(NSNumber*)viewRef resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
49
+ RCT_EXPORT_METHOD(refresh:(nonnull NSNumber*)viewRef resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
50
50
  {
51
51
  [self withPointAnnotation:viewRef block:^(RNMBXPointAnnotation *view) {
52
52
  [view refresh];
@@ -8,9 +8,8 @@ class RNMBXUtils {
8
8
  RNMBXImageQueue.sharedInstance.addImage(url, scale: scale, bridge: bridge, handler: callback)
9
9
  }
10
10
 
11
- static func fetchImages(_ bridge: RCTBridge, style: Style, objects: [String:Any], forceUpdate: Bool, loaded: @escaping (_ name:String) -> Void, callback: @escaping ()->Void) {
11
+ static func fetchImages(_ bridge: RCTBridge, style: Style, objects: [String:Any], forceUpdate: Bool, loaded: @escaping (String, UIImage) -> Void) {
12
12
  guard !objects.isEmpty else {
13
- callback()
14
13
  return
15
14
  }
16
15
 
@@ -19,9 +18,6 @@ class RNMBXUtils {
19
18
 
20
19
  let imageLoadedBlock = { () in
21
20
  imagesToLoad = imagesToLoad - 1;
22
- if imagesToLoad == 0 {
23
- callback()
24
- }
25
21
  }
26
22
 
27
23
  for imageName in imageNames {
@@ -55,8 +51,7 @@ class RNMBXUtils {
55
51
  if let image = image {
56
52
  logged("RNMBXUtils.fetchImage-\(imageName)") {
57
53
  try style.addImage(image, id: imageName, sdf:sdf, stretchX: stretchX, stretchY: stretchY, content: content)
58
- loaded(imageName)
59
- imageLoadedBlock()
54
+ loaded(imageName, image)
60
55
  }
61
56
  }
62
57
  }