@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
@@ -12,9 +12,13 @@ import com.rnmapbox.rnmbx.components.annotation.RNMBXMarkerViewManager
12
12
  import com.rnmapbox.rnmbx.components.annotation.RNMBXPointAnnotationManager
13
13
  import com.rnmapbox.rnmbx.components.annotation.RNMBXPointAnnotationModule
14
14
  import com.rnmapbox.rnmbx.components.camera.RNMBXCameraManager
15
+ import com.rnmapbox.rnmbx.components.camera.RNMBXViewport
16
+ import com.rnmapbox.rnmbx.components.camera.RNMBXViewportManager
17
+ import com.rnmapbox.rnmbx.components.camera.RNMBXViewportModule
15
18
  import com.rnmapbox.rnmbx.components.images.RNMBXImageManager
16
19
  import com.rnmapbox.rnmbx.components.images.RNMBXImageModule
17
20
  import com.rnmapbox.rnmbx.components.images.RNMBXImagesManager
21
+ import com.rnmapbox.rnmbx.components.location.RNMBXCustomLocationProviderManager
18
22
  import com.rnmapbox.rnmbx.components.location.RNMBXNativeUserLocationManager
19
23
  import com.rnmapbox.rnmbx.components.mapview.NativeMapViewModule
20
24
  import com.rnmapbox.rnmbx.components.mapview.RNMBXMapViewManager
@@ -50,9 +54,9 @@ class RNMBXPackage : TurboReactPackage() {
50
54
  fun getViewTagResolver(context: ReactApplicationContext) : ViewTagResolver {
51
55
  val viewTagResolver = viewTagResolver
52
56
  if (viewTagResolver == null) {
53
- val viewTagResolver = ViewTagResolver(context)
54
- this.viewTagResolver = viewTagResolver
55
- return viewTagResolver
57
+ val result = ViewTagResolver(context)
58
+ this.viewTagResolver = result
59
+ return result
56
60
  }
57
61
  return viewTagResolver
58
62
  }
@@ -68,6 +72,7 @@ class RNMBXPackage : TurboReactPackage() {
68
72
  RNMBXSnapshotModule.REACT_CLASS -> return RNMBXSnapshotModule(reactApplicationContext)
69
73
  RNMBXLogging.REACT_CLASS -> return RNMBXLogging(reactApplicationContext)
70
74
  NativeMapViewModule.NAME -> return NativeMapViewModule(reactApplicationContext, getViewTagResolver(reactApplicationContext))
75
+ RNMBXViewportModule.NAME -> return RNMBXViewportModule(reactApplicationContext, getViewTagResolver(reactApplicationContext))
71
76
  RNMBXShapeSourceModule.NAME -> return RNMBXShapeSourceModule(reactApplicationContext, getViewTagResolver(reactApplicationContext))
72
77
  RNMBXImageModule.NAME -> return RNMBXImageModule(reactApplicationContext, getViewTagResolver(reactApplicationContext))
73
78
  RNMBXPointAnnotationModule.NAME -> return RNMBXPointAnnotationModule(reactApplicationContext, getViewTagResolver(reactApplicationContext))
@@ -85,6 +90,7 @@ class RNMBXPackage : TurboReactPackage() {
85
90
 
86
91
  // components
87
92
  managers.add(RNMBXCameraManager(reactApplicationContext))
93
+ managers.add(RNMBXViewportManager(reactApplicationContext))
88
94
  managers.add(RNMBXMapViewManager(reactApplicationContext, getViewTagResolver(reactApplicationContext)))
89
95
  managers.add(RNMBXStyleImportManager(reactApplicationContext))
90
96
 
@@ -93,6 +99,7 @@ class RNMBXPackage : TurboReactPackage() {
93
99
  managers.add(RNMBXPointAnnotationManager(reactApplicationContext, getViewTagResolver(reactApplicationContext)))
94
100
  managers.add(RNMBXCalloutManager())
95
101
  managers.add(RNMBXNativeUserLocationManager())
102
+ managers.add(RNMBXCustomLocationProviderManager())
96
103
 
97
104
  // sources
98
105
  managers.add(RNMBXVectorSourceManager(reactApplicationContext))
@@ -179,6 +186,15 @@ class RNMBXPackage : TurboReactPackage() {
179
186
  false, // isCxxModule
180
187
  isTurboModule // isTurboModule
181
188
  )
189
+ moduleInfos[RNMBXViewportModule.NAME] = ReactModuleInfo(
190
+ RNMBXViewportModule.NAME,
191
+ RNMBXViewportModule.NAME,
192
+ false, // canOverrideExistingModule
193
+ false, // needsEagerInit
194
+ false, // hasConstants
195
+ false, // isCxxModule
196
+ isTurboModule // isTurboModule
197
+ )
182
198
  moduleInfos[RNMBXShapeSourceModule.NAME] = ReactModuleInfo(
183
199
  RNMBXShapeSourceModule.NAME,
184
200
  RNMBXShapeSourceModule.NAME,
@@ -0,0 +1,24 @@
1
+ package com.rnmapbox.rnmbx.components
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.events.Event
5
+ import com.facebook.react.uimanager.events.RCTEventEmitter
6
+
7
+ class AbstractEvent(
8
+ viewId: Int,
9
+ private val mEventName: String,
10
+ private val mCanCoalesce: Boolean,
11
+ private val mEvent: WritableMap?
12
+ ) : Event<AbstractEvent>(viewId) {
13
+ override fun getEventName(): String {
14
+ return mEventName
15
+ }
16
+
17
+ override fun dispatch(rctEventEmitter: RCTEventEmitter) {
18
+ rctEventEmitter.receiveEvent(viewTag, eventName, mEvent)
19
+ }
20
+
21
+ override fun canCoalesce(): Boolean {
22
+ return mCanCoalesce
23
+ }
24
+ }
@@ -7,6 +7,7 @@ import com.facebook.react.common.MapBuilder
7
7
  import com.facebook.react.uimanager.ThemedReactContext
8
8
  import com.facebook.react.uimanager.UIManagerHelper
9
9
  import com.facebook.react.uimanager.ViewGroupManager
10
+ import com.facebook.react.uimanager.events.Event
10
11
  import com.facebook.react.uimanager.events.EventDispatcher
11
12
  import com.rnmapbox.rnmbx.events.IEvent
12
13
 
@@ -27,6 +28,10 @@ abstract class AbstractEventEmitter<T : ViewGroup?>(reactApplicationContext: Rea
27
28
  val activity : Activity?
28
29
  get() = mRCTAppContext.currentActivity
29
30
 
31
+ fun <T : Event<T>>dispatchEvent(event: Event<T>) {
32
+ mEventDispatcher!!.dispatchEvent(event)
33
+ }
34
+
30
35
  fun handleEvent(event: IEvent) {
31
36
  val eventCacheKey = getEventCacheKey(event)
32
37
 
@@ -16,6 +16,7 @@ import com.rnmapbox.rnmbx.components.RemovalReason
16
16
  import com.rnmapbox.rnmbx.components.mapview.RNMBXMapView
17
17
  import com.rnmapbox.rnmbx.utils.Logger
18
18
  import java.util.Vector
19
+ import com.rnmapbox.rnmbx.v11compat.annotation.*
19
20
 
20
21
  private data class Vec2(val dx: Double, val dy: Double)
21
22
 
@@ -169,12 +170,11 @@ class RNMBXMarkerView(context: Context?, private val mManager: RNMBXMarkerViewMa
169
170
  val offset = getOffset()
170
171
 
171
172
  val options = viewAnnotationOptions {
172
- geometry(coordinate)
173
- width(width)
174
- height(height)
173
+ coordinate?.let { geometry(it) }
174
+ width(width.toDouble())
175
+ height(height.toDouble())
175
176
  allowOverlap(mAllowOverlap)
176
- offsetX(offset.dx.toInt())
177
- offsetY(offset.dy.toInt())
177
+ offsets(offset.dx, offset.dy)
178
178
  selected(mIsSelected)
179
179
  }
180
180
  return options
@@ -13,9 +13,9 @@ import com.facebook.react.uimanager.ViewManagerDelegate
13
13
  import com.facebook.react.viewmanagers.RNMBXMarkerViewManagerDelegate
14
14
  import com.facebook.react.viewmanagers.RNMBXMarkerViewManagerInterface
15
15
  import com.mapbox.maps.ScreenCoordinate
16
- import com.mapbox.maps.viewannotation.OnViewAnnotationUpdatedListener
17
16
  import com.mapbox.maps.viewannotation.ViewAnnotationManager
18
17
  import com.rnmapbox.rnmbx.components.mapview.RNMBXMapView
18
+ import com.rnmapbox.rnmbx.v11compat.annotation.*
19
19
 
20
20
  class RNMBXMarkerViewManager(reactApplicationContext: ReactApplicationContext) :
21
21
  AbstractEventEmitter<RNMBXMarkerView>(reactApplicationContext),
@@ -69,7 +69,7 @@ class RNMBXMarkerViewManager(reactApplicationContext: ReactApplicationContext) :
69
69
  fun markerViewContainerSizeFixer(mapView: RNMBXMapView, viewAnnotationManager: ViewAnnotationManager) {
70
70
  // see https://github.com/rnmapbox/maps/issues/2376
71
71
  viewAnnotationManager.addOnViewAnnotationUpdatedListener(object :
72
- OnViewAnnotationUpdatedListener {
72
+ OnViewAnnotationUpdatedListener() {
73
73
  override fun onViewAnnotationVisibilityUpdated(view: View, visible: Boolean) {
74
74
  val parent = view.parent
75
75
  if (parent is FrameLayout) {
@@ -79,13 +79,7 @@ class RNMBXMarkerViewManager(reactApplicationContext: ReactApplicationContext) :
79
79
  }
80
80
  }
81
81
 
82
- override fun onViewAnnotationPositionUpdated(
83
- view: View,
84
- leftTopCoordinate: ScreenCoordinate,
85
- width: Int,
86
- height: Int
87
- ) {
88
- }
82
+
89
83
  })
90
84
  }
91
85
  }
@@ -11,6 +11,7 @@ import com.facebook.react.viewmanagers.RNMBXPointAnnotationManagerInterface
11
11
  import com.rnmapbox.rnmbx.components.AbstractEventEmitter
12
12
  import com.rnmapbox.rnmbx.components.styles.sources.RNMBXShapeSource
13
13
  import com.rnmapbox.rnmbx.events.constants.EventKeys
14
+ import com.rnmapbox.rnmbx.events.constants.eventMapOf
14
15
  import com.rnmapbox.rnmbx.utils.GeoJSONUtils.toPointGeometry
15
16
  import com.rnmapbox.rnmbx.utils.ViewTagResolver
16
17
 
@@ -32,13 +33,13 @@ class RNMBXPointAnnotationManager(reactApplicationContext: ReactApplicationConte
32
33
  }
33
34
 
34
35
  override fun customEvents(): Map<String, String> {
35
- return MapBuilder.builder<String, String>()
36
- .put(EventKeys.POINT_ANNOTATION_SELECTED, "onMapboxPointAnnotationSelected")
37
- .put(EventKeys.POINT_ANNOTATION_DESELECTED, "onMapboxPointAnnotationDeselected")
38
- .put(EventKeys.POINT_ANNOTATION_DRAG_START, "onMapboxPointAnnotationDragStart")
39
- .put(EventKeys.POINT_ANNOTATION_DRAG, "onMapboxPointAnnotationDrag")
40
- .put(EventKeys.POINT_ANNOTATION_DRAG_END, "onMapboxPointAnnotationDragEnd")
41
- .build()
36
+ return eventMapOf(
37
+ EventKeys.POINT_ANNOTATION_SELECTED to "onMapboxPointAnnotationSelected",
38
+ EventKeys.POINT_ANNOTATION_DESELECTED to "onMapboxPointAnnotationDeselected",
39
+ EventKeys.POINT_ANNOTATION_DRAG_START to "onMapboxPointAnnotationDragStart",
40
+ EventKeys.POINT_ANNOTATION_DRAG to "onMapboxPointAnnotationDrag",
41
+ EventKeys.POINT_ANNOTATION_DRAG_END to "onMapboxPointAnnotationDragEnd"
42
+ )
42
43
  }
43
44
 
44
45
  // TODO: check why it does not work correctly
@@ -334,10 +334,10 @@ class RNMBXCamera(private val mContext: Context, private val mManager: RNMBXCame
334
334
  if (location?.puckBearingEnabled == true) {
335
335
  when (location.puckBearingSource) {
336
336
 
337
- PuckBearingSource.HEADING -> {
337
+ PuckBearing.HEADING -> {
338
338
  UserTrackingMode.FollowWithHeading
339
339
  }
340
- PuckBearingSource.COURSE -> {
340
+ PuckBearing.COURSE -> {
341
341
  UserTrackingMode.FollowWithCourse
342
342
  }
343
343
  else -> {
@@ -468,12 +468,12 @@ class RNMBXCamera(private val mContext: Context, private val mManager: RNMBXCame
468
468
  when (mFollowUserMode ?: "normal") {
469
469
  "compass" -> {
470
470
  location.puckBearingEnabled = true
471
- location.puckBearingSource = PuckBearingSource.HEADING
471
+ location.puckBearingSource = PuckBearing.HEADING
472
472
  followOptions.bearing(FollowPuckViewportStateBearing.SyncWithLocationPuck)
473
473
  }
474
474
  "course" -> {
475
475
  location.puckBearingEnabled = true
476
- location.puckBearingSource = PuckBearingSource.COURSE
476
+ location.puckBearingSource = PuckBearing.COURSE
477
477
  followOptions.bearing(FollowPuckViewportStateBearing.SyncWithLocationPuck)
478
478
  }
479
479
  "normal" -> {
@@ -0,0 +1,55 @@
1
+ package com.rnmapbox.rnmbx.components.camera
2
+
3
+ import com.facebook.react.bridge.Arguments
4
+ import com.facebook.react.bridge.Dynamic
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.bridge.WritableArray
7
+ import com.facebook.react.bridge.WritableMap
8
+ import com.facebook.react.common.MapBuilder
9
+ import com.facebook.react.uimanager.ThemedReactContext
10
+ import com.facebook.react.uimanager.annotations.ReactProp
11
+ import com.facebook.react.viewmanagers.RNMBXViewportManagerInterface
12
+ import com.rnmapbox.rnmbx.components.AbstractEventEmitter
13
+ import com.rnmapbox.rnmbx.events.constants.EventKeys
14
+ import com.rnmapbox.rnmbx.events.constants.eventMapOf
15
+
16
+ class RNMBXViewportManager(private val mContext: ReactApplicationContext) : AbstractEventEmitter<RNMBXViewport?>(
17
+ mContext
18
+ ), RNMBXViewportManagerInterface<RNMBXViewport> {
19
+
20
+ override fun getName(): String {
21
+ return REACT_CLASS
22
+ }
23
+
24
+ override fun createViewInstance(reactContext: ThemedReactContext): RNMBXViewport {
25
+ return RNMBXViewport(reactContext, this)
26
+ }
27
+
28
+ @ReactProp(name = "transitionsToIdleUponUserInteraction")
29
+ override fun setTransitionsToIdleUponUserInteraction(view: RNMBXViewport?, value: Dynamic?) {
30
+ view?.transitionsToIdleUponUserInteraction = value?.asBoolean()
31
+ }
32
+
33
+ @ReactProp(name = "hasStatusChanged")
34
+ override fun setHasStatusChanged(view: RNMBXViewport?, value: Boolean) {
35
+ view?.hasStatusChanged = value
36
+ }
37
+
38
+ //region Custom Events
39
+ override fun customEvents(): Map<String, String>? {
40
+ return eventMapOf(
41
+ EventKeys.VIEWPORT_STATUS_CHANGE to "onStatusChanged"
42
+ )
43
+ }
44
+
45
+ override fun getCommandsMap(): Map<String, Int>? {
46
+ return mapOf(
47
+ "_useCommandName" to 1
48
+ );
49
+ }
50
+ //endregion
51
+
52
+ companion object {
53
+ const val REACT_CLASS = "RNMBXViewport"
54
+ }
55
+ }
@@ -0,0 +1,259 @@
1
+ package com.rnmapbox.rnmbx.components.camera
2
+
3
+ import android.content.Context
4
+ import android.util.Log
5
+ import androidx.annotation.RequiresPermission.Read
6
+ import com.facebook.react.bridge.Arguments
7
+ import com.facebook.react.bridge.Callback
8
+ import com.facebook.react.bridge.Promise
9
+ import com.facebook.react.bridge.ReadableMap
10
+ import com.facebook.react.bridge.UIManager
11
+ import com.facebook.react.bridge.WritableMap
12
+ import com.facebook.react.uimanager.UIManagerHelper
13
+ import com.mapbox.maps.MapView
14
+ import com.mapbox.maps.plugin.viewport.CompletionListener
15
+ import com.mapbox.maps.plugin.viewport.ViewportPlugin
16
+ import com.mapbox.maps.plugin.viewport.ViewportStatus
17
+ import com.mapbox.maps.plugin.viewport.ViewportStatusObserver
18
+ import com.mapbox.maps.plugin.viewport.data.DefaultViewportTransitionOptions
19
+ import com.mapbox.maps.plugin.viewport.data.ViewportStatusChangeReason
20
+ import com.mapbox.maps.plugin.viewport.state.FollowPuckViewportState
21
+ import com.mapbox.maps.plugin.viewport.state.OverviewViewportState
22
+ import com.mapbox.maps.plugin.viewport.state.ViewportState
23
+ import com.mapbox.maps.plugin.viewport.transition.DefaultViewportTransition
24
+ import com.mapbox.maps.plugin.viewport.transition.ViewportTransition
25
+ import com.mapbox.maps.plugin.viewport.viewport
26
+ import com.rnmapbox.rnmbx.components.AbstractMapFeature
27
+ import com.rnmapbox.rnmbx.components.mapview.RNMBXMapView
28
+ import com.rnmapbox.rnmbx.modules.RNMBXLogging
29
+ import com.rnmapbox.rnmbx.utils.Logger
30
+ import com.rnmapbox.rnmbx.utils.extensions.getAndLogIfNotBoolean
31
+ import com.rnmapbox.rnmbx.utils.extensions.getAndLogIfNotDouble
32
+ import com.rnmapbox.rnmbx.utils.extensions.getAndLogIfNotString
33
+ import com.rnmapbox.rnmbx.utils.writableMapOf
34
+
35
+ import com.facebook.react.uimanager.events.Event
36
+ import com.rnmapbox.rnmbx.events.constants.EventKeys
37
+
38
+ class BaseEvent(
39
+ private val surfaceId: Int,
40
+ private val viewTag: Int,
41
+ private val eventName: String,
42
+ private val eventData: WritableMap,
43
+ private val canCoalesce: Boolean = false
44
+ ): Event<BaseEvent>(surfaceId, viewTag) {
45
+ override fun getEventName(): String {
46
+ return eventName
47
+ }
48
+
49
+ override fun canCoalesce(): Boolean {
50
+ return canCoalesce
51
+ }
52
+
53
+ override fun getEventData(): WritableMap? {
54
+ return eventData
55
+ }
56
+ }
57
+
58
+ class RNMBXViewport(private val mContext: Context, private val mManager: RNMBXViewportManager) :
59
+ AbstractMapFeature(
60
+ mContext
61
+ ) {
62
+ // region properties
63
+ var transitionsToIdleUponUserInteraction: Boolean? = null
64
+ set(value: Boolean?) {
65
+ field = value
66
+ if (value != null) {
67
+ mMapView?.let { applyTransitionsToIdleUponUserIntraction(it.mapView) }
68
+ }
69
+ }
70
+
71
+ fun applyTransitionsToIdleUponUserIntraction(mapView: MapView) {
72
+ this.transitionsToIdleUponUserInteraction?.let {
73
+ mapView.viewport.options = mapView.viewport.options.toBuilder().transitionsToIdleUponUserInteraction(it).build()
74
+ }
75
+ }
76
+
77
+ var hasStatusChanged: Boolean = false
78
+ set(value: Boolean) {
79
+ field = value
80
+ mMapView?.let { applyHasStatusChanged(it.mapView) }
81
+ }
82
+ private var statusObserver: ViewportStatusObserver? = null
83
+
84
+ private fun applyHasStatusChanged(mapView: MapView) {
85
+ val viewport = mapView.viewport
86
+ if (hasStatusChanged) {
87
+ if (statusObserver == null) {
88
+ val statusObserver = ViewportStatusObserver { from, to, reason ->
89
+ val payload = writableMapOf("from" to statusToMap(from), "to" to statusToMap(to), "reason" to reasonToSrting(reason))
90
+ mManager.dispatchEvent(
91
+ BaseEvent(
92
+ UIManagerHelper.getSurfaceId(mContext),
93
+ id,
94
+ EventKeys.VIEWPORT_STATUS_CHANGE.value,
95
+ writableMapOf(
96
+ "type" to "statuschanged",
97
+ "payload" to payload
98
+ )
99
+ )
100
+ )
101
+ }
102
+ this.statusObserver = statusObserver
103
+ viewport.addStatusObserver(statusObserver)
104
+ }
105
+ } else {
106
+ statusObserver?.let {
107
+ viewport.removeStatusObserver(it)
108
+ }
109
+ }
110
+ }
111
+ // endregion
112
+
113
+ override fun addToMap(mapView: RNMBXMapView) {
114
+ super.addToMap(mapView)
115
+ applyTransitionsToIdleUponUserIntraction(mapView.mapView)
116
+ applyHasStatusChanged(mapView.mapView)
117
+ }
118
+
119
+ fun toState(viewport: ViewportPlugin, state: ReadableMap): ViewportState? {
120
+ return when (val kind = state.getAndLogIfNotString("kind")) {
121
+ "followPuck" -> viewport.makeFollowPuckViewportState()
122
+ //"overview" -> return viewport.makeOverviewViewportState()
123
+ else -> {
124
+ Logger.e(LOG_TAG, "toState: unexpected state: $kind")
125
+ null
126
+ }
127
+ }
128
+ }
129
+
130
+ fun toDefaultViewportTransitionOptions(state: ReadableMap?): DefaultViewportTransitionOptions {
131
+ val builder = DefaultViewportTransitionOptions.Builder()
132
+ if (state?.hasKey("maxDurationMs") == true) {
133
+ val maxDurationMs = state.getAndLogIfNotDouble("maxDurationMs", LOG_TAG)
134
+ if (maxDurationMs != null) {
135
+ builder.maxDurationMs(maxDurationMs.toLong())
136
+ }
137
+ builder.build()
138
+ }
139
+ return builder.build()
140
+ }
141
+
142
+ fun toTransition(viewport: ViewportPlugin, state: ReadableMap?): ViewportTransition? {
143
+ viewport.idle()
144
+ return when (val kind = state?.getAndLogIfNotString("kind", LOG_TAG)) {
145
+ "default" -> viewport.makeDefaultViewportTransition(
146
+ toDefaultViewportTransitionOptions(state?.getMap("options"))
147
+ )
148
+ "immediate" -> viewport.makeImmediateViewportTransition()
149
+ null -> null
150
+ else -> {
151
+ Logger.e(LOG_TAG, "toTransition: unexpected transition to: $kind")
152
+ null
153
+ }
154
+ }
155
+ }
156
+
157
+ fun transitionTo(state: ReadableMap,
158
+ transition: ReadableMap?,
159
+ promise: Promise
160
+ ) {
161
+ val mapView = mMapView
162
+ if (mapView == null) {
163
+ Logger.e(LOG_TAG, "transitionTo: mapView is null")
164
+ return
165
+ }
166
+
167
+ val toState = toState(mapView.mapView.viewport, state)
168
+ if (toState == null) {
169
+ Logger.e(LOG_TAG, "transitionTo: no state to transition to: $state")
170
+ return;
171
+ }
172
+ val transition = toTransition(mapView.mapView.viewport, transition)
173
+
174
+ mapView.mapView.viewport.transitionTo(toState, transition, CompletionListener { promise.resolve(it) } )
175
+ }
176
+
177
+ fun idle() {
178
+ val mapView = mMapView
179
+ if (mapView == null) {
180
+ Logger.e(LOG_TAG, "transitionTo: mapView is null")
181
+ return
182
+ }
183
+
184
+ mapView.mapView.viewport.idle()
185
+ }
186
+
187
+ private fun transitionToMap(transition: ViewportTransition): WritableMap? {
188
+ return when (transition) {
189
+ is DefaultViewportTransition -> writableMapOf("kind" to "default", "maxDurationMs" to transition.options.maxDurationMs)
190
+ else ->
191
+ if (transition.javaClass.toString().indexOf("ImmediateViewportTransition") >= 0) {
192
+ writableMapOf("kind" to "immediate")
193
+ } else {
194
+ writableMapOf("kind" to "unknown")
195
+ }
196
+ }
197
+ }
198
+
199
+ private fun stateToMap(state: ViewportState): WritableMap? {
200
+ return when (state) {
201
+ is FollowPuckViewportState -> writableMapOf("kind" to "followPuck")
202
+ is OverviewViewportState -> writableMapOf("kind" to "overview")
203
+ else -> {
204
+ writableMapOf("kind" to "custom", "impl" to state.javaClass.toString())
205
+ }
206
+ }
207
+ }
208
+
209
+ private fun statusToMap(status: ViewportStatus): WritableMap? {
210
+ return when (status) {
211
+ is ViewportStatus.Idle -> {
212
+ writableMapOf(
213
+ "kind" to "idle"
214
+ )
215
+ }
216
+
217
+ is ViewportStatus.State -> {
218
+ writableMapOf(
219
+ "kind" to "state",
220
+ "state" to stateToMap(status.state)
221
+ )
222
+ }
223
+
224
+ is ViewportStatus.Transition -> {
225
+ writableMapOf(
226
+ "kind" to "transition",
227
+ "transition" to transitionToMap(status.transition),
228
+ "toState" to stateToMap(status.toState)
229
+ )
230
+ }
231
+ }
232
+ }
233
+
234
+ private fun reasonToSrting(reason: ViewportStatusChangeReason): String {
235
+ return when (reason) {
236
+ ViewportStatusChangeReason.IDLE_REQUESTED -> "IdleRequested"
237
+ ViewportStatusChangeReason.TRANSITION_FAILED -> "TransitionFailed"
238
+ ViewportStatusChangeReason.TRANSITION_STARTED -> "TransitionStarted"
239
+ ViewportStatusChangeReason.USER_INTERACTION -> "UserInteraction"
240
+ ViewportStatusChangeReason.TRANSITION_SUCCEEDED -> "TransitionSucceeded"
241
+ else -> {
242
+ "Unknown:${reason.toString()}"
243
+ }
244
+ }
245
+ }
246
+
247
+ fun getState(): WritableMap? {
248
+ val mapView = mMapView
249
+ if (mapView == null) {
250
+ Logger.e(LOG_TAG, "getState: mapView is null")
251
+ return null
252
+ }
253
+ return statusToMap(mapView.mapView.viewport.status)
254
+ }
255
+
256
+ companion object {
257
+ const val LOG_TAG = "RNMBXViewport"
258
+ }
259
+ }
@@ -0,0 +1,66 @@
1
+ package com.rnmapbox.rnmbx.components.camera
2
+
3
+ import com.facebook.react.bridge.Callback
4
+ import com.facebook.react.bridge.Promise
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.bridge.ReadableMap
7
+ import com.facebook.react.bridge.WritableMap
8
+ import com.facebook.react.bridge.WritableNativeMap
9
+ import com.rnmapbox.rnmbx.NativeRNMBXViewportModuleSpec
10
+ import com.rnmapbox.rnmbx.components.mapview.CommandResponse
11
+ import com.rnmapbox.rnmbx.utils.ViewTagResolver
12
+
13
+ class RNMBXViewportModule(context: ReactApplicationContext, val viewTagResolver: ViewTagResolver) : NativeRNMBXViewportModuleSpec(context) {
14
+ private fun withViewportOnUIThread(
15
+ viewRef: Double?,
16
+ reject: Promise,
17
+ fn: (RNMBXViewport) -> Unit
18
+ ) {
19
+ if (viewRef == null) {
20
+ reject.reject(Exception("viewRef is null"))
21
+ } else {
22
+ viewTagResolver.withViewResolved(viewRef.toInt(), reject, fn)
23
+ }
24
+ }
25
+
26
+ private fun createCommandResponse(promise: Promise): CommandResponse = object : CommandResponse {
27
+ override fun success(builder: (WritableMap) -> Unit) {
28
+ val payload: WritableMap = WritableNativeMap()
29
+ builder(payload)
30
+
31
+ promise.resolve(payload)
32
+ }
33
+
34
+ override fun error(message: String) {
35
+ promise.reject(Exception(message))
36
+ }
37
+ }
38
+
39
+ override fun getState(viewRef: Double?, promise: Promise) {
40
+ withViewportOnUIThread(viewRef, promise) {
41
+ promise.resolve(it.getState())
42
+ }
43
+ }
44
+
45
+ override fun transitionTo(
46
+ viewRef: Double?,
47
+ state: ReadableMap,
48
+ transition: ReadableMap?,
49
+ promise: Promise
50
+ ) {
51
+ withViewportOnUIThread(viewRef, promise) {
52
+ it.transitionTo(state, transition, promise)
53
+ }
54
+ }
55
+
56
+ override fun idle(viewRef: Double?, promise: Promise) {
57
+ withViewportOnUIThread(viewRef, promise) {
58
+ it.idle()
59
+ promise.resolve(true)
60
+ }
61
+ }
62
+
63
+ companion object {
64
+ const val NAME = "RNMBXViewportModule"
65
+ }
66
+ }
@@ -0,0 +1,53 @@
1
+ package com.rnmapbox.rnmbx.components.images
2
+
3
+ import android.graphics.Bitmap
4
+ import android.graphics.drawable.BitmapDrawable
5
+ import com.rnmapbox.rnmbx.v11compat.Cancelable
6
+ import com.mapbox.maps.Image
7
+ import com.rnmapbox.rnmbx.v11compat.image.toMapboxImage
8
+
9
+ /**
10
+ ImageManager helps to resolve images defined by any of RNMBXImages component.
11
+ */
12
+
13
+ fun interface Resolver {
14
+ fun resolved(name: String, image: Image)
15
+ }
16
+ class Subscription(val name:String, val resolver: Resolver, val manager: ImageManager): Cancelable {
17
+
18
+ fun resolved(name: String, image: Image) {
19
+ resolver.resolved(name, image)
20
+ }
21
+ override fun cancel() {
22
+ manager.unsubscribe(this)
23
+ }
24
+ }
25
+
26
+ class ImageManager {
27
+ var subscriptions: MutableMap<String, MutableList<Subscription>> = hashMapOf()
28
+
29
+ fun subscribe(name: String, resolved: Resolver) : Subscription {
30
+ val list = subscriptions.getOrPut(name) { mutableListOf() }
31
+ val result = Subscription(name, resolved, this)
32
+ list.add(result)
33
+ return result
34
+ }
35
+ fun unsubscribe(subscription: Subscription) {
36
+ var list = subscriptions[subscription.name]
37
+ list?.removeAll { it === subscription }
38
+ }
39
+
40
+ fun resolve(name: String, image: Image) {
41
+ subscriptions[name]?.forEach {
42
+ it.resolved(name, image)
43
+ }
44
+ }
45
+
46
+ fun resolve(name: String, image: Bitmap) {
47
+ resolve(name, image.toMapboxImage())
48
+ }
49
+
50
+ fun resolve(name: String, image: BitmapDrawable) {
51
+ resolve(name, image.bitmap)
52
+ }
53
+ }
@@ -212,6 +212,7 @@ class RNMBXImages(context: Context, private val mManager: RNMBXImagesManager) :
212
212
  val name = nativeImage.info.name
213
213
  if (!hasImage(name, map)) {
214
214
  val bitmap = nativeImage.drawable
215
+ mMapView!!.imageManager.resolve(name, nativeImage.drawable)
215
216
  style.addBitmapImage(nativeImage)
216
217
  mCurrentImages.add(name)
217
218
  }
@@ -264,7 +265,7 @@ class RNMBXImages(context: Context, private val mManager: RNMBXImagesManager) :
264
265
  }
265
266
  }
266
267
  if (missingImages.size > 0) {
267
- val task = DownloadMapImageTask(context, map, null)
268
+ val task = DownloadMapImageTask(context, map, mMapView!!.imageManager)
268
269
  val params = missingImages.toTypedArray()
269
270
  task.execute(*params)
270
271
  }