@maplibre/maplibre-react-native 8.6.0-beta.0

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 (381) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc.js +158 -0
  3. package/.gitattributes +1 -0
  4. package/.nvmrc +1 -0
  5. package/.prettierrc.js +7 -0
  6. package/.sonarcloud.properties +15 -0
  7. package/CHANGELOG.md +367 -0
  8. package/CODE_OF_CONDUCT.md +2 -0
  9. package/CONTRIBUTING.md +34 -0
  10. package/LICENSE.md +9 -0
  11. package/README.md +224 -0
  12. package/RELEASE.md +30 -0
  13. package/android/build.gradle +34 -0
  14. package/android/install.md +16 -0
  15. package/android/rctmgl/.settings/org.eclipse.buildship.core.prefs +2 -0
  16. package/android/rctmgl/build.gradle +61 -0
  17. package/android/rctmgl/proguard-rules.pro +25 -0
  18. package/android/rctmgl/src/main/AndroidManifest.xml +4 -0
  19. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/RCTMGLPackage.java +99 -0
  20. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/AbstractEvent.java +35 -0
  21. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/AbstractEventEmitter.java +80 -0
  22. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/AbstractMapFeature.java +19 -0
  23. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/MarkerView.java +23 -0
  24. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/MarkerViewManager.java +67 -0
  25. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLCallout.java +15 -0
  26. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLCalloutManager.java +22 -0
  27. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLMarkerView.java +112 -0
  28. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLMarkerViewManager.java +45 -0
  29. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLPointAnnotation.java +360 -0
  30. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLPointAnnotationManager.java +88 -0
  31. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/CameraStop.java +249 -0
  32. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/CameraUpdateItem.java +125 -0
  33. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/CameraUpdateQueue.java +73 -0
  34. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/RCTMGLCamera.java +530 -0
  35. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/RCTMGLCameraManager.java +101 -0
  36. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/constants/CameraMode.java +22 -0
  37. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/images/RCTMGLImages.java +234 -0
  38. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/images/RCTMGLImagesManager.java +103 -0
  39. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/location/LocationComponentManager.java +149 -0
  40. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/location/RCTMGLNativeUserLocation.java +66 -0
  41. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/location/RCTMGLNativeUserLocationManager.java +35 -0
  42. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/LayerSourceInfo.java +59 -0
  43. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLAndroidTextureMapView.java +16 -0
  44. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLAndroidTextureMapViewManager.java +31 -0
  45. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.java +1527 -0
  46. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLMapViewManager.java +353 -0
  47. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/helpers/CameraChangeTracker.java +41 -0
  48. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyle.java +83 -0
  49. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyleFactory.java +2242 -0
  50. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyleFunctionParser.java +108 -0
  51. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyleValue.java +212 -0
  52. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTLayer.java +287 -0
  53. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLBackgroundLayer.java +27 -0
  54. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLBackgroundLayerManager.java +64 -0
  55. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLCircleLayer.java +55 -0
  56. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLCircleLayerManager.java +77 -0
  57. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLFillExtrusionLayer.java +55 -0
  58. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLFillExtrusionLayerManager.java +80 -0
  59. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLFillLayer.java +55 -0
  60. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLFillLayerManager.java +80 -0
  61. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLHeatmapLayer.java +55 -0
  62. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLHeatmapLayerManager.java +77 -0
  63. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLLineLayer.java +55 -0
  64. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLLineLayerManager.java +79 -0
  65. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLRasterLayer.java +27 -0
  66. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLRasterLayerManager.java +64 -0
  67. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLSymbolLayer.java +55 -0
  68. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLSymbolLayerManager.java +75 -0
  69. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/light/RCTMGLLight.java +65 -0
  70. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/light/RCTMGLLightManager.java +29 -0
  71. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLImageSource.java +81 -0
  72. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLImageSourceManager.java +72 -0
  73. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLRasterSource.java +45 -0
  74. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLRasterSourceManager.java +44 -0
  75. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLShapeSource.java +302 -0
  76. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLShapeSourceManager.java +227 -0
  77. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLTileSource.java +97 -0
  78. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLTileSourceManager.java +80 -0
  79. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLVectorSource.java +64 -0
  80. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLVectorSourceManager.java +84 -0
  81. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTSource.java +244 -0
  82. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/AbstractEvent.java +66 -0
  83. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/AndroidCallbackEvent.java +38 -0
  84. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/EventEmitter.java +45 -0
  85. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/FeatureClickEvent.java +79 -0
  86. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/IEvent.java +18 -0
  87. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/ImageMissingEvent.java +42 -0
  88. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/LocationEvent.java +100 -0
  89. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/MapChangeEvent.java +47 -0
  90. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/MapClickEvent.java +51 -0
  91. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/MapUserTrackingModeEvent.java +36 -0
  92. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/OfflineEvent.java +29 -0
  93. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/PointAnnotationClickEvent.java +46 -0
  94. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/PointAnnotationDragEvent.java +51 -0
  95. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/constants/EventKeys.java +39 -0
  96. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/constants/EventTypes.java +51 -0
  97. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/http/CustomHeadersInterceptor.java +38 -0
  98. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/LocationManager.java +168 -0
  99. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/UserLocation.java +63 -0
  100. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/UserLocationVerticalAlignment.java +11 -0
  101. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/UserTrackingMode.java +63 -0
  102. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/UserTrackingState.java +19 -0
  103. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLLocationModule.java +158 -0
  104. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLLogging.java +140 -0
  105. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLModule.java +348 -0
  106. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLOfflineModule.java +597 -0
  107. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLSnapshotModule.java +139 -0
  108. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/BitmapUtils.java +129 -0
  109. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/ConvertUtils.java +257 -0
  110. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/DownloadMapImageTask.java +159 -0
  111. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/ExpressionParser.java +74 -0
  112. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/GeoJSONUtils.java +209 -0
  113. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/GeoViewport.java +38 -0
  114. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/ImageEntry.java +25 -0
  115. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/ResourceUtils.java +30 -0
  116. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/SimpleEventCallback.java +30 -0
  117. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/SphericalMercator.java +69 -0
  118. package/android/rctmgl/src/main/res/drawable/empty.xml +5 -0
  119. package/android/rctmgl/src/main/res/drawable/empty_drawable.png +0 -0
  120. package/android/rctmgl/src/main/res/drawable-xxhdpi/red_marker.png +0 -0
  121. package/android/rctmgl/src/main/res/layout/annotation.xml +17 -0
  122. package/android/rctmgl/src/main/res/values/strings.xml +3 -0
  123. package/android/settings.gradle +1 -0
  124. package/app.plugin.js +1 -0
  125. package/assets/heading.png +0 -0
  126. package/assets/heading@2x.png +0 -0
  127. package/assets/heading@3x.png +0 -0
  128. package/assets/indoor_building_map_android.png +0 -0
  129. package/assets/indoor_building_map_ios.png +0 -0
  130. package/assets/mapbox_logo.png +0 -0
  131. package/babel.config.js +9 -0
  132. package/docs/Annotation.md +39 -0
  133. package/docs/Annotations.md +17 -0
  134. package/docs/BackgroundLayer.md +166 -0
  135. package/docs/Callout.md +15 -0
  136. package/docs/Camera.md +162 -0
  137. package/docs/CircleLayer.md +453 -0
  138. package/docs/CustomHttpHeaders.md +87 -0
  139. package/docs/FillExtrusionLayer.md +327 -0
  140. package/docs/FillLayer.md +293 -0
  141. package/docs/GettingStarted.md +72 -0
  142. package/docs/HeadingIndicator.md +10 -0
  143. package/docs/HeatmapLayer.md +215 -0
  144. package/docs/ImageSource.md +12 -0
  145. package/docs/Images.md +12 -0
  146. package/docs/Light.md +159 -0
  147. package/docs/LineLayer.md +567 -0
  148. package/docs/Logger.md +23 -0
  149. package/docs/MapView.md +211 -0
  150. package/docs/MapboxGL.md +65 -0
  151. package/docs/MarkerView.md +14 -0
  152. package/docs/NativeUserLocation.md +11 -0
  153. package/docs/OfflineManager.md +246 -0
  154. package/docs/PointAnnotation.md +34 -0
  155. package/docs/RasterLayer.md +357 -0
  156. package/docs/RasterSource.md +17 -0
  157. package/docs/ShapeSource.md +100 -0
  158. package/docs/Style.md +10 -0
  159. package/docs/StyleSheet.md +430 -0
  160. package/docs/SymbolLayer.md +1658 -0
  161. package/docs/UserLocation.md +39 -0
  162. package/docs/VectorSource.md +48 -0
  163. package/docs/docs.json +6093 -0
  164. package/docs/snapshotManager.md +53 -0
  165. package/index.d.ts +953 -0
  166. package/ios/RCTMGL/CameraMode.h +18 -0
  167. package/ios/RCTMGL/CameraMode.m +18 -0
  168. package/ios/RCTMGL/CameraStop.h +26 -0
  169. package/ios/RCTMGL/CameraStop.m +83 -0
  170. package/ios/RCTMGL/CameraUpdateItem.h +18 -0
  171. package/ios/RCTMGL/CameraUpdateItem.m +178 -0
  172. package/ios/RCTMGL/CameraUpdateQueue.h +21 -0
  173. package/ios/RCTMGL/CameraUpdateQueue.m +74 -0
  174. package/ios/RCTMGL/FilterParser.h +14 -0
  175. package/ios/RCTMGL/FilterParser.m +22 -0
  176. package/ios/RCTMGL/MGLCustomHeaders.h +20 -0
  177. package/ios/RCTMGL/MGLCustomHeaders.m +98 -0
  178. package/ios/RCTMGL/MGLFaux3DUserLocationAnnotationView.h +23 -0
  179. package/ios/RCTMGL/MGLFaux3DUserLocationAnnotationView.m +474 -0
  180. package/ios/RCTMGL/MGLModule.h +13 -0
  181. package/ios/RCTMGL/MGLModule.m +269 -0
  182. package/ios/RCTMGL/MGLOfflineModule.h +19 -0
  183. package/ios/RCTMGL/MGLOfflineModule.m +516 -0
  184. package/ios/RCTMGL/MGLSnapshotModule.h +13 -0
  185. package/ios/RCTMGL/MGLSnapshotModule.m +80 -0
  186. package/ios/RCTMGL/MGLUserLocationHeadingArrowLayer.h +11 -0
  187. package/ios/RCTMGL/MGLUserLocationHeadingArrowLayer.m +57 -0
  188. package/ios/RCTMGL/MGLUserLocationHeadingBeamLayer.h +11 -0
  189. package/ios/RCTMGL/MGLUserLocationHeadingBeamLayer.m +102 -0
  190. package/ios/RCTMGL/MGLUserLocationHeadingIndicator.h +10 -0
  191. package/ios/RCTMGL/RCTConvert+Mapbox.h +16 -0
  192. package/ios/RCTMGL/RCTConvert+Mapbox.m +32 -0
  193. package/ios/RCTMGL/RCTMGL.h +13 -0
  194. package/ios/RCTMGL/RCTMGL.m +13 -0
  195. package/ios/RCTMGL/RCTMGLBackgroundLayer.h +14 -0
  196. package/ios/RCTMGL/RCTMGLBackgroundLayer.m +27 -0
  197. package/ios/RCTMGL/RCTMGLBackgroundLayerManager.h +13 -0
  198. package/ios/RCTMGL/RCTMGLBackgroundLayerManager.m +35 -0
  199. package/ios/RCTMGL/RCTMGLCallout.h +15 -0
  200. package/ios/RCTMGL/RCTMGLCallout.m +74 -0
  201. package/ios/RCTMGL/RCTMGLCalloutManager.h +13 -0
  202. package/ios/RCTMGL/RCTMGLCalloutManager.m +21 -0
  203. package/ios/RCTMGL/RCTMGLCamera.h +39 -0
  204. package/ios/RCTMGL/RCTMGLCamera.m +258 -0
  205. package/ios/RCTMGL/RCTMGLCameraManager.h +13 -0
  206. package/ios/RCTMGL/RCTMGLCameraManager.m +52 -0
  207. package/ios/RCTMGL/RCTMGLCircleLayer.h +13 -0
  208. package/ios/RCTMGL/RCTMGLCircleLayer.m +34 -0
  209. package/ios/RCTMGL/RCTMGLCircleLayerManager.h +13 -0
  210. package/ios/RCTMGL/RCTMGLCircleLayerManager.m +39 -0
  211. package/ios/RCTMGL/RCTMGLEvent.h +21 -0
  212. package/ios/RCTMGL/RCTMGLEvent.m +47 -0
  213. package/ios/RCTMGL/RCTMGLEventProtocol.h +16 -0
  214. package/ios/RCTMGL/RCTMGLEventTypes.h +50 -0
  215. package/ios/RCTMGL/RCTMGLEventTypes.m +49 -0
  216. package/ios/RCTMGL/RCTMGLFillExtrusionLayer.h +14 -0
  217. package/ios/RCTMGL/RCTMGLFillExtrusionLayer.m +32 -0
  218. package/ios/RCTMGL/RCTMGLFillExtrusionLayerManager.h +13 -0
  219. package/ios/RCTMGL/RCTMGLFillExtrusionLayerManager.m +39 -0
  220. package/ios/RCTMGL/RCTMGLFillLayer.h +14 -0
  221. package/ios/RCTMGL/RCTMGLFillLayer.m +33 -0
  222. package/ios/RCTMGL/RCTMGLFillLayerManager.h +13 -0
  223. package/ios/RCTMGL/RCTMGLFillLayerManager.m +37 -0
  224. package/ios/RCTMGL/RCTMGLHeatmapLayer.h +12 -0
  225. package/ios/RCTMGL/RCTMGLHeatmapLayer.m +30 -0
  226. package/ios/RCTMGL/RCTMGLHeatmapLayerManager.h +12 -0
  227. package/ios/RCTMGL/RCTMGLHeatmapLayerManager.m +38 -0
  228. package/ios/RCTMGL/RCTMGLImageQueue.h +19 -0
  229. package/ios/RCTMGL/RCTMGLImageQueue.m +57 -0
  230. package/ios/RCTMGL/RCTMGLImageQueueOperation.h +17 -0
  231. package/ios/RCTMGL/RCTMGLImageQueueOperation.m +138 -0
  232. package/ios/RCTMGL/RCTMGLImageSource.h +16 -0
  233. package/ios/RCTMGL/RCTMGLImageSource.m +60 -0
  234. package/ios/RCTMGL/RCTMGLImageSourceManager.h +13 -0
  235. package/ios/RCTMGL/RCTMGLImageSourceManager.m +25 -0
  236. package/ios/RCTMGL/RCTMGLImages.h +25 -0
  237. package/ios/RCTMGL/RCTMGLImages.m +126 -0
  238. package/ios/RCTMGL/RCTMGLImagesManager.h +5 -0
  239. package/ios/RCTMGL/RCTMGLImagesManager.m +21 -0
  240. package/ios/RCTMGL/RCTMGLLayer.h +52 -0
  241. package/ios/RCTMGL/RCTMGLLayer.m +236 -0
  242. package/ios/RCTMGL/RCTMGLLight.h +17 -0
  243. package/ios/RCTMGL/RCTMGLLight.m +46 -0
  244. package/ios/RCTMGL/RCTMGLLightManager.h +13 -0
  245. package/ios/RCTMGL/RCTMGLLightManager.m +23 -0
  246. package/ios/RCTMGL/RCTMGLLineLayer.h +14 -0
  247. package/ios/RCTMGL/RCTMGLLineLayer.m +33 -0
  248. package/ios/RCTMGL/RCTMGLLineLayerManager.h +13 -0
  249. package/ios/RCTMGL/RCTMGLLineLayerManager.m +40 -0
  250. package/ios/RCTMGL/RCTMGLLocation.h +19 -0
  251. package/ios/RCTMGL/RCTMGLLocation.m +32 -0
  252. package/ios/RCTMGL/RCTMGLLocationManager.h +30 -0
  253. package/ios/RCTMGL/RCTMGLLocationManager.m +180 -0
  254. package/ios/RCTMGL/RCTMGLLocationManagerDelegate.h +20 -0
  255. package/ios/RCTMGL/RCTMGLLocationModule.h +15 -0
  256. package/ios/RCTMGL/RCTMGLLocationModule.m +99 -0
  257. package/ios/RCTMGL/RCTMGLLogging.h +18 -0
  258. package/ios/RCTMGL/RCTMGLLogging.m +132 -0
  259. package/ios/RCTMGL/RCTMGLMapTouchEvent.h +25 -0
  260. package/ios/RCTMGL/RCTMGLMapTouchEvent.m +77 -0
  261. package/ios/RCTMGL/RCTMGLMapView.h +91 -0
  262. package/ios/RCTMGL/RCTMGLMapView.m +536 -0
  263. package/ios/RCTMGL/RCTMGLMapViewManager.h +17 -0
  264. package/ios/RCTMGL/RCTMGLMapViewManager.m +625 -0
  265. package/ios/RCTMGL/RCTMGLNativeUserLocation.h +18 -0
  266. package/ios/RCTMGL/RCTMGLNativeUserLocation.m +49 -0
  267. package/ios/RCTMGL/RCTMGLNativeUserLocationManager.h +5 -0
  268. package/ios/RCTMGL/RCTMGLNativeUserLocationManager.m +25 -0
  269. package/ios/RCTMGL/RCTMGLPointAnnotation.h +41 -0
  270. package/ios/RCTMGL/RCTMGLPointAnnotation.m +251 -0
  271. package/ios/RCTMGL/RCTMGLPointAnnotationManager.h +13 -0
  272. package/ios/RCTMGL/RCTMGLPointAnnotationManager.m +36 -0
  273. package/ios/RCTMGL/RCTMGLRasterLayer.h +14 -0
  274. package/ios/RCTMGL/RCTMGLRasterLayer.m +30 -0
  275. package/ios/RCTMGL/RCTMGLRasterLayerManager.h +13 -0
  276. package/ios/RCTMGL/RCTMGLRasterLayerManager.m +35 -0
  277. package/ios/RCTMGL/RCTMGLRasterSource.h +16 -0
  278. package/ios/RCTMGL/RCTMGLRasterSource.m +35 -0
  279. package/ios/RCTMGL/RCTMGLRasterSourceManager.h +13 -0
  280. package/ios/RCTMGL/RCTMGLRasterSourceManager.m +32 -0
  281. package/ios/RCTMGL/RCTMGLShapeSource.h +52 -0
  282. package/ios/RCTMGL/RCTMGLShapeSource.m +180 -0
  283. package/ios/RCTMGL/RCTMGLShapeSourceManager.h +14 -0
  284. package/ios/RCTMGL/RCTMGLShapeSourceManager.m +205 -0
  285. package/ios/RCTMGL/RCTMGLSource.h +35 -0
  286. package/ios/RCTMGL/RCTMGLSource.m +143 -0
  287. package/ios/RCTMGL/RCTMGLStyle.h +219 -0
  288. package/ios/RCTMGL/RCTMGLStyle.m +1654 -0
  289. package/ios/RCTMGL/RCTMGLStyleValue.h +27 -0
  290. package/ios/RCTMGL/RCTMGLStyleValue.m +167 -0
  291. package/ios/RCTMGL/RCTMGLSymbolLayer.h +19 -0
  292. package/ios/RCTMGL/RCTMGLSymbolLayer.m +121 -0
  293. package/ios/RCTMGL/RCTMGLSymbolLayerManager.h +13 -0
  294. package/ios/RCTMGL/RCTMGLSymbolLayerManager.m +40 -0
  295. package/ios/RCTMGL/RCTMGLTileSource.h +22 -0
  296. package/ios/RCTMGL/RCTMGLTileSource.m +31 -0
  297. package/ios/RCTMGL/RCTMGLUserLocation.h +15 -0
  298. package/ios/RCTMGL/RCTMGLUserLocation.m +38 -0
  299. package/ios/RCTMGL/RCTMGLUtils.h +31 -0
  300. package/ios/RCTMGL/RCTMGLUtils.m +218 -0
  301. package/ios/RCTMGL/RCTMGLVectorLayer.h +15 -0
  302. package/ios/RCTMGL/RCTMGLVectorLayer.m +59 -0
  303. package/ios/RCTMGL/RCTMGLVectorSource.h +16 -0
  304. package/ios/RCTMGL/RCTMGLVectorSource.m +28 -0
  305. package/ios/RCTMGL/RCTMGLVectorSourceManager.h +14 -0
  306. package/ios/RCTMGL/RCTMGLVectorSourceManager.m +79 -0
  307. package/ios/RCTMGL/RNMBImageUtils.h +17 -0
  308. package/ios/RCTMGL/RNMBImageUtils.m +31 -0
  309. package/ios/RCTMGL/ViewManager.h +16 -0
  310. package/ios/RCTMGL/ViewManager.m +63 -0
  311. package/ios/RCTMGL/index.d.ts +1164 -0
  312. package/ios/RCTMGL.xcodeproj/project.pbxproj +774 -0
  313. package/ios/install.md +44 -0
  314. package/javascript/components/AbstractLayer.js +75 -0
  315. package/javascript/components/AbstractSource.js +15 -0
  316. package/javascript/components/BackgroundLayer.js +97 -0
  317. package/javascript/components/Callout.js +139 -0
  318. package/javascript/components/Camera.js +665 -0
  319. package/javascript/components/CircleLayer.js +101 -0
  320. package/javascript/components/FillExtrusionLayer.js +98 -0
  321. package/javascript/components/FillLayer.js +94 -0
  322. package/javascript/components/HeadingIndicator.js +31 -0
  323. package/javascript/components/HeatmapLayer.js +99 -0
  324. package/javascript/components/ImageSource.js +82 -0
  325. package/javascript/components/Images.js +119 -0
  326. package/javascript/components/Light.js +47 -0
  327. package/javascript/components/LineLayer.js +94 -0
  328. package/javascript/components/MapView.js +817 -0
  329. package/javascript/components/MarkerView.js +87 -0
  330. package/javascript/components/NativeBridgeComponent.js +86 -0
  331. package/javascript/components/NativeUserLocation.js +41 -0
  332. package/javascript/components/PointAnnotation.js +216 -0
  333. package/javascript/components/RasterLayer.js +95 -0
  334. package/javascript/components/RasterSource.js +124 -0
  335. package/javascript/components/ShapeSource.js +357 -0
  336. package/javascript/components/Style.js +264 -0
  337. package/javascript/components/SymbolLayer.js +120 -0
  338. package/javascript/components/UserLocation.js +273 -0
  339. package/javascript/components/VectorSource.js +200 -0
  340. package/javascript/components/annotations/Annotation.js +122 -0
  341. package/javascript/index.js +153 -0
  342. package/javascript/modules/location/locationManager.js +101 -0
  343. package/javascript/modules/offline/OfflineCreatePackOptions.js +46 -0
  344. package/javascript/modules/offline/OfflinePack.js +40 -0
  345. package/javascript/modules/offline/offlineManager.js +378 -0
  346. package/javascript/modules/snapshot/SnapshotOptions.js +67 -0
  347. package/javascript/modules/snapshot/snapshotManager.js +62 -0
  348. package/javascript/utils/BridgeValue.js +81 -0
  349. package/javascript/utils/Logger.js +114 -0
  350. package/javascript/utils/animated/Animated.js +39 -0
  351. package/javascript/utils/animated/AnimatedCoordinatesArray.js +191 -0
  352. package/javascript/utils/animated/AnimatedExtractCoordinateFromArray.js +43 -0
  353. package/javascript/utils/animated/AnimatedPoint.js +126 -0
  354. package/javascript/utils/animated/AnimatedRouteCoordinatesArray.js +124 -0
  355. package/javascript/utils/animated/AnimatedShape.js +72 -0
  356. package/javascript/utils/deprecation.js +25 -0
  357. package/javascript/utils/filterUtils.js +7 -0
  358. package/javascript/utils/geoUtils.js +73 -0
  359. package/javascript/utils/index.js +113 -0
  360. package/javascript/utils/styleMap.js +1901 -0
  361. package/maplibre-react-native.podspec +79 -0
  362. package/package.json +120 -0
  363. package/plugin/build/withMapbox.d.ts +12 -0
  364. package/plugin/build/withMapbox.js +119 -0
  365. package/plugin/install.md +32 -0
  366. package/react-native.config.js +10 -0
  367. package/scripts/autogenHelpers/DocJSONBuilder.js +458 -0
  368. package/scripts/autogenHelpers/JSDocNodeTree.js +131 -0
  369. package/scripts/autogenHelpers/MarkdownBuilder.js +29 -0
  370. package/scripts/autogenHelpers/globals.js +507 -0
  371. package/scripts/autogenerate.js +374 -0
  372. package/scripts/download-style-spec.sh +15 -0
  373. package/scripts/templates/RCTMGLStyle.h.ejs +33 -0
  374. package/scripts/templates/RCTMGLStyle.m.ejs +97 -0
  375. package/scripts/templates/RCTMGLStyleFactory.java.ejs +107 -0
  376. package/scripts/templates/component.md.ejs +122 -0
  377. package/scripts/templates/index.d.ts.ejs +56 -0
  378. package/scripts/templates/styleMap.js.ejs +115 -0
  379. package/setup-jest.js +121 -0
  380. package/style-spec/v8.json +5798 -0
  381. package/tsconfig.json +65 -0
@@ -0,0 +1,139 @@
1
+ package com.mapbox.rctmgl.modules;
2
+
3
+ import android.content.Context;
4
+ import android.content.pm.PackageManager;
5
+ import android.graphics.Bitmap;
6
+ import android.net.Uri;
7
+ import android.os.AsyncTask;
8
+ import android.os.Handler;
9
+ import android.os.Looper;
10
+ import android.util.Base64;
11
+ import android.util.Log;
12
+
13
+ import com.facebook.react.bridge.Promise;
14
+ import com.facebook.react.bridge.ReactApplicationContext;
15
+ import com.facebook.react.bridge.ReactContextBaseJavaModule;
16
+ import com.facebook.react.bridge.ReactMethod;
17
+ import com.facebook.react.bridge.ReadableMap;
18
+ import com.facebook.react.module.annotations.ReactModule;
19
+ import com.mapbox.geojson.Feature;
20
+ import com.mapbox.geojson.FeatureCollection;
21
+ import com.mapbox.geojson.Point;
22
+ import com.mapbox.mapboxsdk.camera.CameraPosition;
23
+ import com.mapbox.mapboxsdk.snapshotter.MapSnapshot;
24
+ import com.mapbox.mapboxsdk.snapshotter.MapSnapshotter;
25
+ import com.mapbox.mapboxsdk.storage.FileSource;
26
+ import com.mapbox.rctmgl.utils.BitmapUtils;
27
+ import com.mapbox.rctmgl.utils.GeoJSONUtils;
28
+
29
+ import java.io.IOException;
30
+ import java.io.OutputStream;
31
+ import java.util.HashMap;
32
+ import java.util.Map;
33
+ import java.util.UUID;
34
+
35
+ import static android.content.Context.CONTEXT_IGNORE_SECURITY;
36
+
37
+ /**
38
+ * Created by nickitaliano on 11/30/17.
39
+ */
40
+
41
+ @ReactModule(name = RCTMGLSnapshotModule.REACT_CLASS)
42
+ public class RCTMGLSnapshotModule extends ReactContextBaseJavaModule {
43
+ public static final String REACT_CLASS = "RCTMGLSnapshotModule";
44
+
45
+ private ReactApplicationContext mContext;
46
+
47
+ // prevents snapshotter from being GC'ed
48
+ private Map<String, MapSnapshotter> mSnapshotterMap;
49
+
50
+ public RCTMGLSnapshotModule(ReactApplicationContext reactContext) {
51
+ super(reactContext);
52
+ mContext = reactContext;
53
+ mSnapshotterMap = new HashMap<>();
54
+ }
55
+
56
+ @Override
57
+ public String getName() {
58
+ return REACT_CLASS;
59
+ }
60
+
61
+ @ReactMethod
62
+ public void takeSnap(final ReadableMap jsOptions, final Promise promise) {
63
+ FileSource.getInstance(mContext).activate();
64
+
65
+ mContext.runOnUiQueueThread(new Runnable() {
66
+ @Override
67
+ public void run() {
68
+ final String snapshotterID = UUID.randomUUID().toString();
69
+ final MapSnapshotter snapshotter = new MapSnapshotter(mContext, getOptions(jsOptions));
70
+ mSnapshotterMap.put(snapshotterID, snapshotter);
71
+
72
+ snapshotter.start(new MapSnapshotter.SnapshotReadyCallback() {
73
+ @Override
74
+ public void onSnapshotReady(MapSnapshot snapshot) {
75
+ Bitmap bitmap = snapshot.getBitmap();
76
+
77
+ String result = null;
78
+ if (jsOptions.getBoolean("writeToDisk")) {
79
+ result = BitmapUtils.createTempFile(mContext, bitmap);
80
+ } else {
81
+ result = BitmapUtils.createBase64(bitmap);
82
+ }
83
+
84
+ if (result == null) {
85
+ promise.reject(REACT_CLASS, "Could not generate snapshot, please check Android logs for more info.");
86
+ return;
87
+ }
88
+
89
+ promise.resolve(result);
90
+ mSnapshotterMap.remove(snapshotterID);
91
+ }
92
+ }, new MapSnapshotter.ErrorHandler() {
93
+ @Override
94
+ public void onError(String error) {
95
+ Log.w(REACT_CLASS, error);
96
+ mSnapshotterMap.remove(snapshotterID);
97
+ }
98
+ });
99
+ }
100
+ });
101
+ }
102
+
103
+ private MapSnapshotter.Options getOptions(ReadableMap jsOptions) {
104
+ MapSnapshotter.Options options = new MapSnapshotter.Options(
105
+ (int) jsOptions.getDouble("width"),
106
+ (int) jsOptions.getDouble("height"));
107
+
108
+ options.withLogo(jsOptions.getBoolean("withLogo"));
109
+ options.withStyle(jsOptions.getString("styleURL"));
110
+ options.withPixelRatio(Float.valueOf(mContext.getResources().getDisplayMetrics().scaledDensity).intValue());
111
+
112
+ if (jsOptions.hasKey("bounds")) {
113
+ FeatureCollection bounds = FeatureCollection.fromJson(jsOptions.getString("bounds"));
114
+ options.withRegion(GeoJSONUtils.toLatLngBounds(bounds));
115
+ } else {
116
+ Feature centerPoint = Feature.fromJson(jsOptions.getString("centerCoordinate"));
117
+ CameraPosition cameraPosition = new CameraPosition.Builder()
118
+ .target(GeoJSONUtils.toLatLng((Point) centerPoint.geometry()))
119
+ .tilt(jsOptions.getDouble("pitch"))
120
+ .bearing(jsOptions.getDouble("heading"))
121
+ .zoom(jsOptions.getDouble("zoomLevel"))
122
+ .build();
123
+ options.withCameraPosition(cameraPosition);
124
+ }
125
+
126
+ return options;
127
+ }
128
+
129
+ private void closeSnapshotOutputStream(OutputStream outputStream) {
130
+ if (outputStream == null) {
131
+ return;
132
+ }
133
+ try {
134
+ outputStream.close();
135
+ } catch (IOException e) {
136
+ Log.w(REACT_CLASS, e.getLocalizedMessage());
137
+ }
138
+ }
139
+ }
@@ -0,0 +1,129 @@
1
+ package com.mapbox.rctmgl.utils;
2
+
3
+ import android.content.Context;
4
+ import android.content.res.Resources;
5
+ import android.graphics.Bitmap;
6
+ import android.graphics.BitmapFactory;
7
+ import android.graphics.Canvas;
8
+ import android.graphics.Color;
9
+ import android.net.Uri;
10
+ import android.util.Base64;
11
+ import android.util.Log;
12
+ import android.util.LruCache;
13
+ import android.view.View;
14
+
15
+ import java.io.ByteArrayOutputStream;
16
+ import java.io.File;
17
+ import java.io.FileOutputStream;
18
+ import java.io.IOException;
19
+ import java.io.InputStream;
20
+ import java.io.OutputStream;
21
+ import java.net.URL;
22
+
23
+ /**
24
+ * Created by nickitaliano on 10/9/17.
25
+ */
26
+
27
+ public class BitmapUtils {
28
+ public static final String LOG_TAG = "BitmapUtils";
29
+
30
+ private static int CACHE_SIZE = 1024 * 1024;
31
+ private static LruCache<String, Bitmap> mCache = new LruCache<String, Bitmap>(CACHE_SIZE) {
32
+ protected int sizeOf(String key, Bitmap bitmap) {
33
+ return bitmap.getByteCount();
34
+ }
35
+ };
36
+
37
+ public static Bitmap getBitmapFromURL(String url) {
38
+ return BitmapUtils.getBitmapFromURL(url, null);
39
+ }
40
+
41
+ public static Bitmap getBitmapFromURL(String url, BitmapFactory.Options options) {
42
+ Bitmap bitmap = getImage(url);
43
+
44
+ if (bitmap != null) {
45
+ return bitmap;
46
+ }
47
+
48
+ try {
49
+ InputStream bitmapStream = new URL(url).openStream();
50
+ bitmap = BitmapFactory.decodeStream(bitmapStream, null, options);
51
+ bitmapStream.close();
52
+ addImage(url, bitmap);
53
+ } catch (Exception e) {
54
+ Log.w(LOG_TAG, e.getLocalizedMessage());
55
+ bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ALPHA_8); // Returns a transparent bitmap
56
+ }
57
+
58
+ return bitmap;
59
+ }
60
+
61
+ public static Bitmap getBitmapFromResource(Context context, String resourceName, BitmapFactory.Options options) {
62
+ Resources resources = context.getResources();
63
+ int resID = resources.getIdentifier(resourceName, "drawable", context.getPackageName());
64
+ return BitmapFactory.decodeResource(resources, resID, options);
65
+ }
66
+
67
+ public static String createTempFile(Context context, Bitmap bitmap) {
68
+ File tempFile = null;
69
+ FileOutputStream outputStream = null;
70
+
71
+ try {
72
+ tempFile = File.createTempFile(LOG_TAG, ".png", context.getCacheDir());
73
+ outputStream = new FileOutputStream(tempFile);
74
+ } catch (IOException e) {
75
+ Log.w(LOG_TAG, e.getLocalizedMessage());
76
+ }
77
+
78
+ if (tempFile == null) {
79
+ return null;
80
+ }
81
+
82
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
83
+ closeSnapshotOutputStream(outputStream);
84
+ return Uri.fromFile(tempFile).toString();
85
+ }
86
+
87
+ public static String createBase64(Bitmap bitmap) {
88
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
89
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
90
+ byte[] bitmapBytes = outputStream.toByteArray();
91
+ closeSnapshotOutputStream(outputStream);
92
+ String base64Prefix = "data:image/png;base64,";
93
+ return base64Prefix + Base64.encodeToString(bitmapBytes, Base64.NO_WRAP);
94
+ }
95
+
96
+ public static Bitmap viewToBitmap(View v, int left, int top, int right, int bottom) {
97
+ Bitmap bitmap = null;
98
+ if (v != null) {
99
+ int w = right - left;
100
+ int h = bottom - top;
101
+ if (w > 0 && h > 0) {
102
+ bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
103
+ bitmap.eraseColor(Color.TRANSPARENT);
104
+ Canvas canvas = new Canvas(bitmap);
105
+ v.draw(canvas);
106
+ }
107
+ }
108
+ return bitmap;
109
+ }
110
+
111
+ private static void addImage(String imageURL, Bitmap bitmap) {
112
+ mCache.put(imageURL, bitmap);
113
+ }
114
+
115
+ private static Bitmap getImage(String imageURL) {
116
+ return mCache.get(imageURL);
117
+ }
118
+
119
+ private static void closeSnapshotOutputStream(OutputStream outputStream) {
120
+ if (outputStream == null) {
121
+ return;
122
+ }
123
+ try {
124
+ outputStream.close();
125
+ } catch (IOException e) {
126
+ Log.w(LOG_TAG, e.getLocalizedMessage());
127
+ }
128
+ }
129
+ }
@@ -0,0 +1,257 @@
1
+ package com.mapbox.rctmgl.utils;
2
+
3
+ import android.graphics.PointF;
4
+ import android.graphics.RectF;
5
+ import android.util.Log;
6
+
7
+ import com.facebook.react.bridge.Arguments;
8
+ import com.facebook.react.bridge.NoSuchKeyException;
9
+ import com.facebook.react.bridge.ReadableArray;
10
+ import com.facebook.react.bridge.ReadableMap;
11
+ import com.facebook.react.bridge.ReadableMapKeySetIterator;
12
+ import com.facebook.react.bridge.ReadableType;
13
+ import com.facebook.react.bridge.WritableArray;
14
+ import com.facebook.react.bridge.WritableMap;
15
+ import com.google.gson.JsonArray;
16
+ import com.google.gson.JsonElement;
17
+ import com.google.gson.JsonObject;
18
+ import com.google.gson.JsonPrimitive;
19
+
20
+ import java.text.NumberFormat;
21
+ import java.text.ParseException;
22
+ import java.util.ArrayList;
23
+ import java.util.List;
24
+ import java.util.Map;
25
+
26
+ /**
27
+ * Created by nickitaliano on 8/18/17.
28
+ */
29
+
30
+ public class ConvertUtils {
31
+ public static final String LOG_TAG = "ConvertUtils";
32
+
33
+ public static JsonObject toJsonObject(ReadableMap map) {
34
+ if (map == null) return null;
35
+ JsonObject result = new JsonObject();
36
+ ReadableMapKeySetIterator it = map.keySetIterator();
37
+
38
+ while (it.hasNextKey()) {
39
+ String key = it.nextKey();
40
+ switch (map.getType(key)) {
41
+ case Map:
42
+ result.add(key, toJsonObject(map.getMap(key)));
43
+ break;
44
+ case Array:
45
+ result.add(key, toJsonArray(map.getArray(key)));
46
+ break;
47
+ case Null:
48
+ result.add(key, null);
49
+ break;
50
+ case Number:
51
+ result.addProperty(key, map.getDouble(key));
52
+ break;
53
+ case String:
54
+ result.addProperty(key, map.getString(key));
55
+ break;
56
+ case Boolean:
57
+ result.addProperty(key, map.getBoolean(key));
58
+ break;
59
+ }
60
+ }
61
+ return result;
62
+ }
63
+
64
+ public static JsonArray toJsonArray(ReadableArray array) {
65
+ if (array == null) return null;
66
+ JsonArray result = new JsonArray(array.size());
67
+ for (int i = 0; i < array.size(); i++) {
68
+ switch (array.getType(i)) {
69
+ case Map:
70
+ result.add(toJsonObject(array.getMap(i)));
71
+ break;
72
+ case Array:
73
+ result.add(toJsonArray(array.getArray(i)));
74
+ break;
75
+ case Null:
76
+ result.add((JsonElement)null);
77
+ break;
78
+ case Number:
79
+ result.add(array.getDouble(i));
80
+ break;
81
+ case String:
82
+ result.add(array.getString(i));
83
+ break;
84
+ case Boolean:
85
+ result.add(array.getBoolean(i));
86
+ break;
87
+ }
88
+ }
89
+ return result;
90
+ }
91
+
92
+ public static JsonElement typedToJsonElement(ReadableMap map) {
93
+ if (map == null) return null;
94
+
95
+ String type = map.getString("type");
96
+
97
+ if (type.equals(ExpressionParser.TYPE_MAP)) {
98
+ JsonObject result = new JsonObject();
99
+
100
+ ReadableArray keyValues = map.getArray("value");
101
+ for (int i = 0; i < keyValues.size(); i++) {
102
+ ReadableArray keyValue = keyValues.getArray(i);
103
+ String key = keyValue.getMap(0).getString("value");
104
+
105
+ result.add(key, typedToJsonElement(keyValue.getMap(1)));
106
+ }
107
+ return result;
108
+ }
109
+ else if (type.equals(ExpressionParser.TYPE_ARRAY)) {
110
+ ReadableArray arrayValue = map.getArray("value");
111
+ JsonArray result = new JsonArray(arrayValue.size());
112
+ for (int i = 0; i < arrayValue.size(); i++) {
113
+ result.add(typedToJsonElement(arrayValue.getMap(i)));
114
+ }
115
+ return result;
116
+ }
117
+ else if (type.equals(ExpressionParser.TYPE_BOOL)) {
118
+ return new JsonPrimitive(map.getBoolean("value"));
119
+ }
120
+ else if (type.equals(ExpressionParser.TYPE_NUMBER)) {
121
+ return new JsonPrimitive(map.getDouble("value"));
122
+ }
123
+ else if (type.equals(ExpressionParser.TYPE_STRING)) {
124
+ return new JsonPrimitive(map.getString("value"));
125
+ }
126
+ else {
127
+ throw new RuntimeException(String.format("Unrecognized type {}", map.getString("type")));
128
+ }
129
+ }
130
+
131
+ public static WritableArray toWritableArray(JsonArray array) {
132
+ WritableArray writableArray = Arguments.createArray();
133
+
134
+ for (int i = 0; i < array.size(); i++) {
135
+ JsonElement element = array.get(i);
136
+
137
+ if (element.isJsonArray()) {
138
+ writableArray.pushArray(toWritableArray(element.getAsJsonArray()));
139
+ } else if (element.isJsonObject()) {
140
+ writableArray.pushMap(toWritableMap(element.getAsJsonObject()));
141
+ } else if (element.isJsonPrimitive()) {
142
+ JsonPrimitive primitive = element.getAsJsonPrimitive();
143
+
144
+ if (primitive.isBoolean()) {
145
+ writableArray.pushBoolean(primitive.getAsBoolean());
146
+ } else if (primitive.isNumber()) {
147
+ writableArray.pushDouble(primitive.getAsDouble());
148
+ } else {
149
+ writableArray.pushString(primitive.getAsString());
150
+ }
151
+ }
152
+ }
153
+
154
+ return writableArray;
155
+ }
156
+
157
+ public static WritableMap toWritableMap(JsonObject object) {
158
+ WritableMap map = Arguments.createMap();
159
+
160
+ for (Map.Entry<String, JsonElement> entry : object.entrySet()) {
161
+ String propName = entry.getKey();
162
+ JsonElement jsonElement = entry.getValue();
163
+
164
+ if (jsonElement.isJsonPrimitive()) {
165
+ JsonPrimitive primitive = jsonElement.getAsJsonPrimitive();
166
+
167
+ if (primitive.isBoolean()) {
168
+ map.putBoolean(propName, primitive.getAsBoolean());
169
+ } else if (primitive.isNumber()) {
170
+ map.putDouble(propName, primitive.getAsDouble());
171
+ } else {
172
+ map.putString(propName, primitive.getAsString());
173
+ }
174
+ } else if (jsonElement.isJsonArray()) {
175
+ map.putArray(propName, toWritableArray(jsonElement.getAsJsonArray()));
176
+ } else if (jsonElement.isJsonObject()) {
177
+ map.putMap(propName, toWritableMap(jsonElement.getAsJsonObject()));
178
+ }
179
+ }
180
+
181
+ return map;
182
+ }
183
+
184
+ public static Object getObjectFromString(String str) {
185
+ NumberFormat numberFormat = NumberFormat.getNumberInstance();
186
+
187
+ try {
188
+ return numberFormat.parse(str);
189
+ } catch (ParseException e) {
190
+ // ignore we're just figuring out what type this is
191
+ }
192
+
193
+ return str;
194
+ }
195
+
196
+ public static List<String> toStringList(ReadableArray array) {
197
+ List<String> list = new ArrayList<>();
198
+
199
+ if (array == null) {
200
+ return list;
201
+ }
202
+
203
+ for (int i = 0; i < array.size(); i++) {
204
+ list.add(array.getString(i));
205
+ }
206
+
207
+ return list;
208
+ }
209
+
210
+ public static PointF toPointF(ReadableArray array) {
211
+ PointF pointF = new PointF();
212
+
213
+ if (array == null) {
214
+ return pointF;
215
+ }
216
+
217
+ pointF.set((float)array.getDouble(0), (float)array.getDouble(1));
218
+ return pointF;
219
+ }
220
+
221
+ public static RectF toRectF(ReadableArray array) {
222
+ RectF rectF = new RectF();
223
+
224
+ if (array == null) {
225
+ return rectF;
226
+ }
227
+
228
+ rectF.set((float)array.getDouble(3), (float)array.getDouble(0), (float)array.getDouble(1), (float)array.getDouble(2));
229
+ return rectF;
230
+ }
231
+
232
+ public static double getDouble(String key, ReadableMap map, double defaultValue) {
233
+ double value = defaultValue;
234
+
235
+ try {
236
+ value = map.getDouble(key);
237
+ } catch (NoSuchKeyException e) {
238
+ // key not found use default value
239
+ Log.d(LOG_TAG, String.format("No key found for %s, using default value %f", key, defaultValue));
240
+ }
241
+
242
+ return value;
243
+ }
244
+
245
+ public static String getString(String key, ReadableMap map, String defaultValue) {
246
+ String value = defaultValue;
247
+
248
+ try {
249
+ value = map.getString(key);
250
+ } catch (NoSuchKeyException e) {
251
+ // key not found use default value
252
+ Log.d(LOG_TAG, String.format("No key found for %s, using default value %s", key, defaultValue));
253
+ }
254
+
255
+ return value;
256
+ }
257
+ }
@@ -0,0 +1,159 @@
1
+ package com.mapbox.rctmgl.utils;
2
+
3
+ import android.content.Context;
4
+ import android.content.res.Resources;
5
+ import android.graphics.Bitmap;
6
+ import android.graphics.BitmapFactory;
7
+ import android.net.Uri;
8
+ import android.os.AsyncTask;
9
+ import android.util.DisplayMetrics;
10
+ import android.util.Log;
11
+
12
+ import com.facebook.common.logging.FLog;
13
+ import com.facebook.common.references.CloseableReference;
14
+ import com.facebook.datasource.DataSource;
15
+ import com.facebook.datasource.DataSources;
16
+ import com.facebook.drawee.backends.pipeline.Fresco;
17
+ import com.facebook.imagepipeline.common.RotationOptions;
18
+ import com.facebook.imagepipeline.image.CloseableImage;
19
+ import com.facebook.imagepipeline.image.CloseableStaticBitmap;
20
+ import com.facebook.imagepipeline.request.ImageRequest;
21
+ import com.facebook.imagepipeline.request.ImageRequestBuilder;
22
+ import com.facebook.react.views.imagehelper.ImageSource;
23
+ import com.mapbox.mapboxsdk.maps.MapboxMap;
24
+ import com.mapbox.mapboxsdk.maps.Style;
25
+
26
+ import java.io.File;
27
+ import java.lang.ref.WeakReference;
28
+ import java.util.AbstractMap;
29
+ import java.util.ArrayList;
30
+ import java.util.HashMap;
31
+ import java.util.List;
32
+ import java.util.Map;
33
+
34
+ import javax.annotation.Nullable;
35
+
36
+ /**
37
+ * Created by nickitaliano on 9/13/17.
38
+ */
39
+
40
+ public class DownloadMapImageTask extends AsyncTask<Map.Entry<String, ImageEntry>, Void, List<Map.Entry<String, Bitmap>>> {
41
+ public static final String LOG_TAG = "DownloadMapImageTask";
42
+
43
+ private WeakReference<Context> mContext;
44
+ private WeakReference<MapboxMap> mMap;
45
+ @Nullable
46
+ private OnAllImagesLoaded mCallback;
47
+ private final Object mCallerContext;
48
+
49
+ public DownloadMapImageTask(Context context, MapboxMap map, @Nullable OnAllImagesLoaded callback) {
50
+ mContext = new WeakReference<>(context.getApplicationContext());
51
+ mMap = new WeakReference<>(map);
52
+ mCallback = callback;
53
+ mCallerContext = this;
54
+ }
55
+
56
+ public interface OnAllImagesLoaded {
57
+ void onAllImagesLoaded();
58
+ }
59
+
60
+ @SafeVarargs
61
+ @Override
62
+ protected final List<Map.Entry<String, Bitmap>> doInBackground(Map.Entry<String, ImageEntry>... objects) {
63
+ List<Map.Entry<String, Bitmap>> images = new ArrayList<>();
64
+
65
+ Context context = mContext.get();
66
+ if (context == null) return images;
67
+
68
+ Resources resources = context.getResources();
69
+ DisplayMetrics metrics = resources.getDisplayMetrics();
70
+
71
+ for (Map.Entry<String, ImageEntry> object : objects) {
72
+ ImageEntry imageEntry = object.getValue();
73
+
74
+ String uri = imageEntry.uri;
75
+
76
+ if (uri.startsWith("/")) {
77
+ uri = Uri.fromFile(new File(uri)).toString();
78
+ }
79
+
80
+ if (uri.startsWith("http://") || uri.startsWith("https://") ||
81
+ uri.startsWith("file://") || uri.startsWith("asset://") || uri.startsWith("data:")) {
82
+ ImageSource source = new ImageSource(context, uri);
83
+ ImageRequest request = ImageRequestBuilder.newBuilderWithSource(source.getUri())
84
+ .setRotationOptions(RotationOptions.autoRotate())
85
+ .build();
86
+
87
+ DataSource<CloseableReference<CloseableImage>> dataSource =
88
+ Fresco.getImagePipeline().fetchDecodedImage(request, mCallerContext);
89
+
90
+ CloseableReference<CloseableImage> result = null;
91
+ try {
92
+ result = DataSources.waitForFinalResult(dataSource);
93
+ if (result != null) {
94
+ CloseableImage image = result.get();
95
+ if (image instanceof CloseableStaticBitmap) {
96
+ CloseableStaticBitmap closeableStaticBitmap = (CloseableStaticBitmap) image;
97
+ Bitmap bitmap = closeableStaticBitmap.getUnderlyingBitmap()
98
+ // Copy the bitmap to make sure it doesn't get recycled when we release
99
+ // the fresco reference.
100
+ .copy(Bitmap.Config.ARGB_8888, true);
101
+ bitmap.setDensity((int) ((double) DisplayMetrics.DENSITY_DEFAULT * imageEntry.getScaleOr(1.0)));
102
+ images.add(new AbstractMap.SimpleEntry<>(object.getKey(), bitmap));
103
+ } else {
104
+ FLog.e(LOG_TAG, "Failed to load bitmap from: " + uri);
105
+ }
106
+ } else {
107
+ FLog.e(LOG_TAG, "Failed to load bitmap from: " + uri);
108
+ }
109
+ } catch (Throwable e) {
110
+ Log.w(LOG_TAG, e.getLocalizedMessage());
111
+ } finally {
112
+ dataSource.close();
113
+ if (result != null) {
114
+ CloseableReference.closeSafely(result);
115
+ }
116
+ }
117
+ } else {
118
+ // local asset required from JS require('image.png') or import icon from 'image.png' while in release mode
119
+ Bitmap bitmap = BitmapUtils.getBitmapFromResource(context, uri, getBitmapOptions(metrics, imageEntry.scale));
120
+ if (bitmap != null) {
121
+ images.add(new AbstractMap.SimpleEntry<>(object.getKey(), bitmap));
122
+ } else {
123
+ FLog.e(LOG_TAG, "Failed to load bitmap from: " + uri);
124
+ }
125
+ }
126
+ }
127
+
128
+ return images;
129
+ }
130
+
131
+ @Override
132
+ protected void onPostExecute(List<Map.Entry<String, Bitmap>> images) {
133
+ MapboxMap map = mMap.get();
134
+ if (map != null && images != null && images.size() > 0) {
135
+ Style style = map.getStyle();
136
+ if (style != null) {
137
+ HashMap<String, Bitmap> bitmapImages = new HashMap<>();
138
+ for (Map.Entry<String, Bitmap> image : images) {
139
+ bitmapImages.put(image.getKey(), image.getValue());
140
+ }
141
+ style.addImages(bitmapImages);
142
+ }
143
+ }
144
+
145
+ if (mCallback != null) {
146
+ mCallback.onAllImagesLoaded();
147
+ }
148
+ }
149
+
150
+ private BitmapFactory.Options getBitmapOptions(DisplayMetrics metrics, Double scale) {
151
+ BitmapFactory.Options options = new BitmapFactory.Options();
152
+ options.inScreenDensity = metrics.densityDpi;
153
+ options.inTargetDensity = metrics.densityDpi;
154
+ if (scale != ImageEntry.defaultScale) {
155
+ options.inDensity = (int) ((double) DisplayMetrics.DENSITY_DEFAULT * scale);
156
+ }
157
+ return options;
158
+ }
159
+ }