react-native-maps 0.31.0 → 1.0.0-alpha.1

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 (301) hide show
  1. package/android/build.gradle +89 -33
  2. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  3. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  4. package/android/gradlew +251 -0
  5. package/android/gradlew.bat +94 -0
  6. package/android/src/main/AndroidManifest.xml +1 -5
  7. package/android/src/main/RCTAppDependencyProvider.h +25 -0
  8. package/android/src/main/RCTAppDependencyProvider.mm +55 -0
  9. package/android/src/main/RCTModulesConformingToProtocolsProvider.h +18 -0
  10. package/android/src/main/RCTModulesConformingToProtocolsProvider.mm +33 -0
  11. package/android/src/main/RCTThirdPartyComponentsProvider.h +16 -0
  12. package/android/src/main/RCTThirdPartyComponentsProvider.mm +28 -0
  13. package/android/src/main/ReactAppDependencyProvider.podspec +34 -0
  14. package/android/src/main/java/com/facebook/fbreact/specs/NativeAirMapsModuleSpec.java +63 -0
  15. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerDelegate.java +35 -0
  16. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerInterface.java +17 -0
  17. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCircleManagerDelegate.java +49 -0
  18. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCircleManagerInterface.java +23 -0
  19. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsGooglePolygonManagerDelegate.java +49 -0
  20. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsGooglePolygonManagerInterface.java +23 -0
  21. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerDelegate.java +209 -0
  22. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerInterface.java +74 -0
  23. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerDelegate.java +104 -0
  24. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerInterface.java +39 -0
  25. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsOverlayManagerDelegate.java +45 -0
  26. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsOverlayManagerInterface.java +22 -0
  27. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsPolylineManagerDelegate.java +58 -0
  28. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsPolylineManagerInterface.java +26 -0
  29. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsUrlTileManagerDelegate.java +62 -0
  30. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsUrlTileManagerInterface.java +27 -0
  31. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsWMSTileManagerDelegate.java +56 -0
  32. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsWMSTileManagerInterface.java +25 -0
  33. package/android/src/main/java/com/rnmaps/fabric/CalloutManager.java +77 -0
  34. package/android/src/main/java/com/rnmaps/fabric/CircleManager.java +94 -0
  35. package/android/src/main/java/com/rnmaps/fabric/JSONUtil.java +86 -0
  36. package/android/src/main/java/com/rnmaps/fabric/MapViewManager.java +623 -0
  37. package/android/src/main/java/com/rnmaps/fabric/MarkerManager.java +258 -0
  38. package/android/src/main/java/com/rnmaps/fabric/NativeAirMapsModule.java +284 -0
  39. package/android/src/main/java/com/rnmaps/fabric/OverlayManager.java +101 -0
  40. package/android/src/main/java/com/rnmaps/fabric/PolygonManager.java +89 -0
  41. package/android/src/main/java/com/rnmaps/fabric/PolylineManager.java +121 -0
  42. package/android/src/main/java/com/rnmaps/fabric/UrlTileManager.java +124 -0
  43. package/android/src/main/java/com/rnmaps/fabric/WMSTileManager.java +114 -0
  44. package/android/src/main/java/com/rnmaps/fabric/event/OnCalloutPressEvent.java +25 -0
  45. package/android/src/main/java/com/rnmaps/fabric/event/OnDeselectEvent.java +28 -0
  46. package/android/src/main/java/com/rnmaps/fabric/event/OnDoublePressEvent.java +27 -0
  47. package/android/src/main/java/com/rnmaps/fabric/event/OnDragEndEvent.java +28 -0
  48. package/android/src/main/java/com/rnmaps/fabric/event/OnDragEvent.java +28 -0
  49. package/android/src/main/java/com/rnmaps/fabric/event/OnDragStartEvent.java +28 -0
  50. package/android/src/main/java/com/rnmaps/fabric/event/OnIndoorBuildingFocusedEvent.java +28 -0
  51. package/android/src/main/java/com/rnmaps/fabric/event/OnIndoorLevelActivatedEvent.java +28 -0
  52. package/android/src/main/java/com/rnmaps/fabric/event/OnKmlReadyEvent.java +28 -0
  53. package/android/src/main/java/com/rnmaps/fabric/event/OnLongPressEvent.java +28 -0
  54. package/android/src/main/java/com/rnmaps/fabric/event/OnMapLoadedEvent.java +29 -0
  55. package/android/src/main/java/com/rnmaps/fabric/event/OnMapReadyEvent.java +29 -0
  56. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDeselectEvent.java +28 -0
  57. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEndEvent.java +28 -0
  58. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEvent.java +28 -0
  59. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragStartEvent.java +28 -0
  60. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerPressEvent.java +28 -0
  61. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerSelectEvent.java +28 -0
  62. package/android/src/main/java/com/rnmaps/fabric/event/OnPanDragEvent.java +28 -0
  63. package/android/src/main/java/com/rnmaps/fabric/event/OnPoiClickEvent.java +27 -0
  64. package/android/src/main/java/com/rnmaps/fabric/event/OnPressEvent.java +27 -0
  65. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeCompleteEvent.java +30 -0
  66. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeEvent.java +48 -0
  67. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeStartEvent.java +33 -0
  68. package/android/src/main/java/com/rnmaps/fabric/event/OnSelectEvent.java +28 -0
  69. package/android/src/main/java/com/rnmaps/fabric/event/OnUserLocationChangeEvent.java +28 -0
  70. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/FileUtil.java +3 -6
  71. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/FusedLocationSource.java +5 -2
  72. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageReadable.java +1 -1
  73. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageReader.java +5 -7
  74. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageUtil.java +1 -2
  75. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/LatLngBoundsUtils.java +1 -1
  76. package/android/src/main/java/com/rnmaps/maps/MapAirModulePackage.java +98 -0
  77. package/android/src/main/java/com/rnmaps/maps/MapCallout.java +41 -0
  78. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCalloutManager.java → rnmaps/maps/MapCalloutManager.java} +6 -6
  79. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCircle.java → rnmaps/maps/MapCircle.java} +34 -8
  80. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCircleManager.java → rnmaps/maps/MapCircleManager.java} +15 -20
  81. package/android/src/main/java/com/rnmaps/maps/MapFeature.java +17 -0
  82. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapGradientPolyline.java → rnmaps/maps/MapGradientPolyline.java} +9 -12
  83. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapGradientPolylineManager.java → rnmaps/maps/MapGradientPolylineManager.java} +13 -18
  84. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapHeatmap.java → rnmaps/maps/MapHeatmap.java} +8 -9
  85. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapHeatmapManager.java → rnmaps/maps/MapHeatmapManager.java} +8 -8
  86. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapLocalTile.java → rnmaps/maps/MapLocalTile.java} +19 -16
  87. package/android/src/main/java/com/rnmaps/maps/MapLocalTileManager.java +54 -0
  88. package/android/src/main/java/com/rnmaps/maps/MapManager.java +504 -0
  89. package/android/src/main/java/com/rnmaps/maps/MapMarker.java +706 -0
  90. package/android/src/main/java/com/rnmaps/maps/MapMarkerManager.java +368 -0
  91. package/android/src/main/java/com/rnmaps/maps/MapModule.java +283 -0
  92. package/android/src/main/java/com/rnmaps/maps/MapOverlay.java +262 -0
  93. package/android/src/main/java/com/rnmaps/maps/MapOverlayManager.java +97 -0
  94. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolygon.java → rnmaps/maps/MapPolygon.java} +73 -9
  95. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolygonManager.java → rnmaps/maps/MapPolygonManager.java} +22 -22
  96. package/android/src/main/java/com/rnmaps/maps/MapPolyline.java +230 -0
  97. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolylineManager.java → rnmaps/maps/MapPolylineManager.java} +18 -38
  98. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapTileProvider.java → rnmaps/maps/MapTileProvider.java} +55 -76
  99. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapTileWorker.java → rnmaps/maps/MapTileWorker.java} +7 -14
  100. package/android/src/main/java/com/rnmaps/maps/MapUIBlock.java +64 -0
  101. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapUrlTile.java → rnmaps/maps/MapUrlTile.java} +29 -29
  102. package/android/src/main/java/com/rnmaps/maps/MapUrlTileManager.java +87 -0
  103. package/android/src/main/java/com/rnmaps/maps/MapView.java +1844 -0
  104. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapWMSTile.java → rnmaps/maps/MapWMSTile.java} +11 -17
  105. package/android/src/main/java/com/rnmaps/maps/MapWMSTileManager.java +81 -0
  106. package/android/src/main/java/com/rnmaps/maps/MapsPackage.java +45 -0
  107. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/RegionChangeEvent.java +1 -1
  108. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/SizeReportingShadowNode.java +1 -1
  109. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ViewAttacherGroup.java +2 -7
  110. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ViewChangesTracker.java +12 -11
  111. package/android/src/main/jni/CMakeLists.txt +36 -0
  112. package/android/src/main/jni/RNMapsSpecs-generated.cpp +68 -0
  113. package/android/src/main/jni/RNMapsSpecs.h +31 -0
  114. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.cpp +31 -0
  115. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.h +33 -0
  116. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/EventEmitters.cpp +979 -0
  117. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/EventEmitters.h +860 -0
  118. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/Props.cpp +227 -0
  119. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/Props.h +1297 -0
  120. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI-generated.cpp +74 -0
  121. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI.h +268 -0
  122. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.cpp +26 -0
  123. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.h +131 -0
  124. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/States.cpp +16 -0
  125. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/States.h +137 -0
  126. package/app.plugin.js +1 -0
  127. package/ios/AirGoogleMaps/AIRGMSMarker.h +2 -0
  128. package/ios/AirGoogleMaps/AIRGoogleMap.h +22 -12
  129. package/ios/AirGoogleMaps/{AIRGoogleMap.m → AIRGoogleMap.mm} +407 -130
  130. package/ios/AirGoogleMaps/AIRGoogleMapCircle.h +2 -3
  131. package/ios/AirGoogleMaps/AIRGoogleMapCircle.m +42 -3
  132. package/ios/AirGoogleMaps/AIRGoogleMapCoordinate.h +13 -0
  133. package/ios/AirGoogleMaps/AIRGoogleMapCoordinate.m +10 -0
  134. package/ios/AirGoogleMaps/AIRGoogleMapHeatmap.h +1 -1
  135. package/ios/AirGoogleMaps/AIRGoogleMapManager.h +11 -0
  136. package/ios/AirGoogleMaps/AIRGoogleMapManager.mm +543 -0
  137. package/ios/AirGoogleMaps/AIRGoogleMapMarker.h +4 -0
  138. package/ios/AirGoogleMaps/AIRGoogleMapMarker.m +369 -237
  139. package/ios/AirGoogleMaps/AIRGoogleMapMarkerManager.m +3 -2
  140. package/ios/AirGoogleMaps/AIRGoogleMapOverlay.h +0 -1
  141. package/ios/AirGoogleMaps/AIRGoogleMapPolygon.h +7 -6
  142. package/ios/AirGoogleMaps/AIRGoogleMapPolygon.m +62 -5
  143. package/ios/AirGoogleMaps/AIRGoogleMapPolygonManager.m +3 -3
  144. package/ios/AirGoogleMaps/AIRGoogleMapPolyline.h +4 -3
  145. package/ios/AirGoogleMaps/AIRGoogleMapPolyline.m +9 -9
  146. package/ios/AirGoogleMaps/AIRGoogleMapPolylineManager.m +2 -2
  147. package/ios/AirGoogleMaps/AIRGoogleMapUrlTile.m +2 -2
  148. package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.h +1 -1
  149. package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.m +4 -4
  150. package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.h +3 -0
  151. package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.m +18 -0
  152. package/ios/AirGoogleMaps/RNMapsGoogleMapView.h +29 -0
  153. package/ios/AirGoogleMaps/RNMapsGoogleMapView.mm +678 -0
  154. package/ios/AirGoogleMaps/RNMapsGoogleMapViewManager.mm +40 -0
  155. package/ios/AirGoogleMaps/RNMapsGooglePolygonView.h +26 -0
  156. package/ios/AirGoogleMaps/RNMapsGooglePolygonView.mm +226 -0
  157. package/ios/AirGoogleMaps/RNMapsGooglePolygonViewManager.mm +26 -0
  158. package/ios/AirGoogleMaps/Resources/GoogleMapsPrivacy.bundle/PrivacyInfo.xcprivacy +110 -0
  159. package/ios/AirMaps/AIRMap.h +19 -14
  160. package/ios/AirMaps/{AIRMap.m → AIRMap.mm} +333 -120
  161. package/ios/AirMaps/AIRMapCircle.m +1 -53
  162. package/ios/AirMaps/AIRMapCoordinate.m +2 -4
  163. package/ios/AirMaps/AIRMapManager.m +64 -218
  164. package/ios/AirMaps/AIRMapMarker.h +5 -0
  165. package/ios/AirMaps/AIRMapMarker.m +180 -69
  166. package/ios/AirMaps/AIRMapMarkerManager.m +3 -0
  167. package/ios/AirMaps/AIRMapOverlay.m +2 -2
  168. package/ios/AirMaps/AIRMapPolygon.m +0 -52
  169. package/ios/AirMaps/AIRMapPolyline.m +3 -2
  170. package/ios/AirMaps/AIRMapWMSTile.m +8 -8
  171. package/ios/AirMaps/Callout/SMCalloutView.m +1 -1
  172. package/ios/AirMaps/FabricPlaceholders/PlaceHolderGoogleMapView.h +25 -0
  173. package/ios/AirMaps/FabricPlaceholders/PlaceHolderGoogleMapView.mm +77 -0
  174. package/ios/AirMaps/FabricPlaceholders/PlaceHolderPolygonView.h +25 -0
  175. package/ios/AirMaps/FabricPlaceholders/PlaceHolderPolygonView.mm +52 -0
  176. package/ios/AirMaps/RCTComponentData+Maps.h +13 -0
  177. package/ios/AirMaps/RCTComponentData+Maps.m +55 -0
  178. package/ios/AirMaps/RCTConvert+AirMap.h +6 -1
  179. package/ios/AirMaps/RCTConvert+AirMap.m +18 -0
  180. package/ios/AirMaps/RNMapsAirModule.h +15 -0
  181. package/ios/AirMaps/RNMapsAirModule.mm +164 -0
  182. package/ios/AirMaps/RNMapsDefines.h +1 -0
  183. package/ios/AirMaps/RNMapsMapView.h +27 -0
  184. package/ios/AirMaps/RNMapsMapView.mm +577 -0
  185. package/ios/AirMaps/RNMapsMapViewManager.mm +42 -0
  186. package/ios/AirMaps/RNMapsMarkerView.h +24 -0
  187. package/ios/AirMaps/RNMapsMarkerView.mm +439 -0
  188. package/ios/AirMaps/RNMapsMarkerViewManager.mm +28 -0
  189. package/ios/AirMaps/UIView+AirMap.h +11 -0
  190. package/ios/AirMaps/UIView+AirMap.m +20 -0
  191. package/ios/AirMaps/module.modulemap +6 -0
  192. package/ios/AirMaps.xcodeproj/project.pbxproj +44 -4
  193. package/ios/PrivacyInfo.xcprivacy +37 -0
  194. package/ios/generated/RCTAppDependencyProvider.h +25 -0
  195. package/ios/generated/RCTAppDependencyProvider.mm +55 -0
  196. package/ios/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
  197. package/ios/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
  198. package/ios/generated/RCTThirdPartyComponentsProvider.h +16 -0
  199. package/ios/generated/RCTThirdPartyComponentsProvider.mm +26 -0
  200. package/ios/generated/RNMapsAirModuleDelegate.h +24 -0
  201. package/ios/generated/RNMapsHostVewDelegate.h +17 -0
  202. package/ios/generated/RNMapsSpecs/ComponentDescriptors.cpp +29 -0
  203. package/ios/generated/RNMapsSpecs/ComponentDescriptors.h +31 -0
  204. package/ios/generated/RNMapsSpecs/EventEmitters.cpp +977 -0
  205. package/ios/generated/RNMapsSpecs/EventEmitters.h +846 -0
  206. package/ios/generated/RNMapsSpecs/Props.cpp +194 -0
  207. package/ios/generated/RNMapsSpecs/Props.h +1224 -0
  208. package/ios/generated/RNMapsSpecs/RCTComponentViewHelpers.h +591 -0
  209. package/ios/generated/RNMapsSpecs/RNMapsSpecs-generated.mm +92 -0
  210. package/ios/generated/RNMapsSpecs/RNMapsSpecs.h +137 -0
  211. package/ios/generated/RNMapsSpecs/ShadowNodes.cpp +24 -0
  212. package/ios/generated/RNMapsSpecs/ShadowNodes.h +109 -0
  213. package/ios/generated/RNMapsSpecs/States.cpp +16 -0
  214. package/ios/generated/RNMapsSpecs/States.h +113 -0
  215. package/ios/generated/RNMapsSpecsJSI-generated.cpp +74 -0
  216. package/ios/generated/RNMapsSpecsJSI.h +268 -0
  217. package/ios/generated/ReactAppDependencyProvider.podspec +34 -0
  218. package/ios/generated/module.modulemap +15 -0
  219. package/package.json +57 -34
  220. package/plugin/build/android.js +58 -0
  221. package/plugin/build/index.js +10 -0
  222. package/plugin/build/ios.js +176 -0
  223. package/plugin/build/types.js +2 -0
  224. package/react-native-maps.podspec +114 -11
  225. package/react-native.config.js +15 -0
  226. package/src/{AnimatedRegion.js → AnimatedRegion.ts} +26 -21
  227. package/src/Geojson.tsx +541 -0
  228. package/src/MapCallout.tsx +77 -0
  229. package/src/MapCalloutSubview.tsx +64 -0
  230. package/src/MapCircle.tsx +162 -0
  231. package/src/MapHeatmap.tsx +125 -0
  232. package/src/MapLocalTile.tsx +60 -0
  233. package/src/MapMarker.tsx +531 -0
  234. package/src/MapMarkerNativeComponent.ts +51 -0
  235. package/src/MapOverlay.tsx +178 -0
  236. package/src/MapPolygon.tsx +188 -0
  237. package/src/MapPolygon.types.ts +25 -0
  238. package/src/MapPolyline.tsx +215 -0
  239. package/src/MapUrlTile.tsx +169 -0
  240. package/src/MapView.tsx +1235 -0
  241. package/src/MapView.types.ts +212 -0
  242. package/src/MapView.web.ts +2 -0
  243. package/src/MapViewNativeComponent.ts +86 -0
  244. package/src/MapWMSTile.tsx +148 -0
  245. package/src/ProviderConstants.ts +2 -0
  246. package/src/createFabricMap.tsx +253 -0
  247. package/src/decorateMapComponent.ts +230 -0
  248. package/src/fixImageProp.ts +17 -0
  249. package/src/index.ts +52 -0
  250. package/src/sharedTypes.ts +101 -0
  251. package/src/sharedTypesInternal.ts +1 -0
  252. package/src/specs/NativeAirMapsModule.ts +36 -0
  253. package/src/specs/NativeComponentCallout.ts +63 -0
  254. package/src/specs/NativeComponentCircle.ts +93 -0
  255. package/src/specs/NativeComponentGoogleMapView.ts +922 -0
  256. package/src/specs/NativeComponentGooglePolygon.ts +94 -0
  257. package/src/specs/NativeComponentMapView.ts +1100 -0
  258. package/src/specs/NativeComponentMarker.ts +326 -0
  259. package/src/specs/NativeComponentOverlay.ts +98 -0
  260. package/src/specs/NativeComponentPolyline.ts +124 -0
  261. package/src/specs/NativeComponentUrlTile.ts +128 -0
  262. package/src/specs/NativeComponentWMSTile.ts +107 -0
  263. package/LICENSE +0 -21
  264. package/README.md +0 -652
  265. package/android/src/main/assets/ula.kml +0 -1214
  266. package/android/src/main/java/com/airbnb/android/react/maps/AirMapCallout.java +0 -23
  267. package/android/src/main/java/com/airbnb/android/react/maps/AirMapFeature.java +0 -18
  268. package/android/src/main/java/com/airbnb/android/react/maps/AirMapLiteManager.java +0 -20
  269. package/android/src/main/java/com/airbnb/android/react/maps/AirMapLocalTileManager.java +0 -56
  270. package/android/src/main/java/com/airbnb/android/react/maps/AirMapManager.java +0 -500
  271. package/android/src/main/java/com/airbnb/android/react/maps/AirMapMarker.java +0 -630
  272. package/android/src/main/java/com/airbnb/android/react/maps/AirMapMarkerManager.java +0 -370
  273. package/android/src/main/java/com/airbnb/android/react/maps/AirMapModule.java +0 -380
  274. package/android/src/main/java/com/airbnb/android/react/maps/AirMapOverlay.java +0 -169
  275. package/android/src/main/java/com/airbnb/android/react/maps/AirMapOverlayManager.java +0 -81
  276. package/android/src/main/java/com/airbnb/android/react/maps/AirMapPolyline.java +0 -162
  277. package/android/src/main/java/com/airbnb/android/react/maps/AirMapUrlTileManager.java +0 -97
  278. package/android/src/main/java/com/airbnb/android/react/maps/AirMapView.java +0 -1384
  279. package/android/src/main/java/com/airbnb/android/react/maps/AirMapWMSTileManager.java +0 -87
  280. package/android/src/main/java/com/airbnb/android/react/maps/MapsPackage.java +0 -65
  281. package/index.d.ts +0 -637
  282. package/ios/AirGoogleMaps/AIRGoogleMapManager.m +0 -690
  283. package/ios/User.xcconfig +0 -0
  284. package/react-native-google-maps.podspec +0 -22
  285. package/src/Geojson.js +0 -334
  286. package/src/MapCallout.js +0 -51
  287. package/src/MapCalloutSubview.js +0 -44
  288. package/src/MapCircle.js +0 -150
  289. package/src/MapHeatmap.js +0 -99
  290. package/src/MapLocalTile.js +0 -52
  291. package/src/MapMarker.js +0 -377
  292. package/src/MapOverlay.js +0 -86
  293. package/src/MapPolygon.js +0 -202
  294. package/src/MapPolyline.js +0 -168
  295. package/src/MapUrlTile.js +0 -131
  296. package/src/MapView.js +0 -1160
  297. package/src/MapView.web.js +0 -1
  298. package/src/MapWMSTile.js +0 -122
  299. package/src/ProviderConstants.js +0 -2
  300. package/src/decorateMapComponent.js +0 -112
  301. package/src/index.js +0 -31
@@ -0,0 +1,368 @@
1
+ package com.rnmaps.maps;
2
+
3
+ import android.graphics.Bitmap;
4
+ import android.graphics.Color;
5
+ import android.view.View;
6
+
7
+ import androidx.annotation.NonNull;
8
+ import androidx.annotation.Nullable;
9
+
10
+ import com.facebook.react.R;
11
+ import com.facebook.react.bridge.ReadableArray;
12
+ import com.facebook.react.bridge.ReadableMap;
13
+ import com.facebook.react.common.MapBuilder;
14
+ import com.facebook.react.uimanager.LayoutShadowNode;
15
+ import com.facebook.react.uimanager.ThemedReactContext;
16
+ import com.facebook.react.uimanager.ViewGroupManager;
17
+ import com.facebook.react.uimanager.annotations.ReactProp;
18
+ import com.google.android.gms.maps.model.Marker;
19
+ import com.google.android.gms.maps.model.BitmapDescriptor;
20
+ import com.google.android.gms.maps.model.LatLng;
21
+
22
+ import java.util.HashMap;
23
+ import java.util.Map;
24
+ import java.util.WeakHashMap;
25
+ import java.util.concurrent.ConcurrentHashMap;
26
+
27
+ public class MapMarkerManager extends ViewGroupManager<MapMarker> {
28
+
29
+ public static class AirMapMarkerSharedIcon {
30
+ private BitmapDescriptor iconBitmapDescriptor;
31
+ private Bitmap bitmap;
32
+ private final Map<MapMarker, Boolean> markers;
33
+ private boolean loadImageStarted;
34
+
35
+ public AirMapMarkerSharedIcon() {
36
+ this.markers = new WeakHashMap<>();
37
+ this.loadImageStarted = false;
38
+ }
39
+
40
+ /**
41
+ * check whether the load image process started.
42
+ * caller AirMapMarker will only need to load it when this returns true.
43
+ *
44
+ * @return true if it is not started, false otherwise.
45
+ */
46
+ public synchronized boolean shouldLoadImage() {
47
+ if (!this.loadImageStarted) {
48
+ this.loadImageStarted = true;
49
+ return true;
50
+ }
51
+ return false;
52
+ }
53
+
54
+ /**
55
+ * subscribe icon update for given marker.
56
+ * <p>
57
+ * The marker is wrapped in weakReference, so no need to remove it explicitly.
58
+ *
59
+ * @param marker
60
+ */
61
+ public synchronized void addMarker(MapMarker marker) {
62
+ this.markers.put(marker, true);
63
+ if (this.iconBitmapDescriptor != null) {
64
+ marker.setIconBitmapDescriptor(this.iconBitmapDescriptor, this.bitmap);
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Remove marker from this shared icon.
70
+ * <p>
71
+ * Marker will only need to call it when the marker receives a different marker image uri.
72
+ *
73
+ * @param marker
74
+ */
75
+ public synchronized void removeMarker(MapMarker marker) {
76
+ this.markers.remove(marker);
77
+ }
78
+
79
+ /**
80
+ * check if there is markers still listening on this icon.
81
+ * when there are not markers listen on it, we can remove it.
82
+ *
83
+ * @return true if there is, false otherwise
84
+ */
85
+ public synchronized boolean hasMarker() {
86
+ return this.markers.isEmpty();
87
+ }
88
+
89
+ /**
90
+ * Update the bitmap descriptor and bitmap for the image uri.
91
+ * And notify all subscribers about the update.
92
+ *
93
+ * @param bitmapDescriptor
94
+ * @param bitmap
95
+ */
96
+ public synchronized void updateIcon(BitmapDescriptor bitmapDescriptor, Bitmap bitmap) {
97
+
98
+ this.iconBitmapDescriptor = bitmapDescriptor;
99
+ this.bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
100
+
101
+ if (this.markers.isEmpty()) {
102
+ return;
103
+ }
104
+
105
+ for (Map.Entry<MapMarker, Boolean> markerEntry : markers.entrySet()) {
106
+ if (markerEntry.getKey() != null) {
107
+ markerEntry.getKey().setIconBitmapDescriptor(bitmapDescriptor, bitmap);
108
+ }
109
+ }
110
+ }
111
+ }
112
+
113
+ private final Map<String, AirMapMarkerSharedIcon> sharedIcons = new ConcurrentHashMap<>();
114
+
115
+ /**
116
+ * get the shared icon object, if not existed, create a new one and store it.
117
+ *
118
+ * @param uri
119
+ * @return the icon object for the given uri.
120
+ */
121
+ public AirMapMarkerSharedIcon getSharedIcon(String uri) {
122
+ AirMapMarkerSharedIcon icon = this.sharedIcons.get(uri);
123
+ if (icon == null) {
124
+ synchronized (this) {
125
+ if ((icon = this.sharedIcons.get(uri)) == null) {
126
+ icon = new AirMapMarkerSharedIcon();
127
+ this.sharedIcons.put(uri, icon);
128
+ }
129
+ }
130
+ }
131
+ return icon;
132
+ }
133
+
134
+ /**
135
+ * Remove the share icon object from our sharedIcons map when no markers are listening for it.
136
+ *
137
+ * @param uri
138
+ */
139
+ public void removeSharedIconIfEmpty(String uri) {
140
+ AirMapMarkerSharedIcon icon = this.sharedIcons.get(uri);
141
+ if (icon == null) {
142
+ return;
143
+ }
144
+ if (!icon.hasMarker()) {
145
+ synchronized (this) {
146
+ if ((icon = this.sharedIcons.get(uri)) != null && !icon.hasMarker()) {
147
+ this.sharedIcons.remove(uri);
148
+ }
149
+ }
150
+ }
151
+ }
152
+
153
+ public MapMarkerManager() {
154
+ }
155
+
156
+ @Override
157
+ public String getName() {
158
+ return "AIRMapMarker";
159
+ }
160
+
161
+ @Override
162
+ public MapMarker createViewInstance(ThemedReactContext context) {
163
+ return new MapMarker(context, this);
164
+ }
165
+
166
+ @ReactProp(name = "coordinate")
167
+ public void setCoordinate(MapMarker view, ReadableMap map) {
168
+ view.setCoordinate(map);
169
+ }
170
+
171
+ @ReactProp(name = "title")
172
+ public void setTitle(MapMarker view, String title) {
173
+ view.setTitle(title);
174
+ }
175
+
176
+ @ReactProp(name = "identifier")
177
+ public void setIdentifier(MapMarker view, String identifier) {
178
+ view.setIdentifier(identifier);
179
+ }
180
+
181
+ @ReactProp(name = "description")
182
+ public void setDescription(MapMarker view, String description) {
183
+ view.setSnippet(description);
184
+ }
185
+
186
+ // NOTE(lmr):
187
+ // android uses normalized coordinate systems for this, and is provided through the
188
+ // `anchor` property and `calloutAnchor` instead. Perhaps some work could be done
189
+ // to normalize iOS and android to use just one of the systems.
190
+ // @ReactProp(name = "centerOffset")
191
+ // public void setCenterOffset(AirMapMarker view, ReadableMap map) {
192
+ //
193
+ // }
194
+ //
195
+ // @ReactProp(name = "calloutOffset")
196
+ // public void setCalloutOffset(AirMapMarker view, ReadableMap map) {
197
+ //
198
+ // }
199
+
200
+ @ReactProp(name = "anchor")
201
+ public void setAnchor(MapMarker view, ReadableMap map) {
202
+ // should default to (0.5, 1) (bottom middle)
203
+ double x = map != null && map.hasKey("x") ? map.getDouble("x") : 0.5;
204
+ double y = map != null && map.hasKey("y") ? map.getDouble("y") : 1.0;
205
+ view.setAnchor(x, y);
206
+ }
207
+
208
+ @ReactProp(name = "calloutAnchor")
209
+ public void setCalloutAnchor(MapMarker view, ReadableMap map) {
210
+ // should default to (0.5, 0) (top middle)
211
+ double x = map != null && map.hasKey("x") ? map.getDouble("x") : 0.5;
212
+ double y = map != null && map.hasKey("y") ? map.getDouble("y") : 0.0;
213
+ view.setCalloutAnchor(x, y);
214
+ }
215
+
216
+ @ReactProp(name = "image")
217
+ public void setImage(MapMarker view, @Nullable String source) {
218
+ view.setImage(source);
219
+ }
220
+ // public void setImage(AirMapMarker view, ReadableMap image) {
221
+ // view.setImage(image);
222
+ // }
223
+
224
+ @ReactProp(name = "icon")
225
+ public void setIcon(MapMarker view, @Nullable String source) {
226
+ view.setImage(source);
227
+ }
228
+
229
+ @ReactProp(name = "pinColor", defaultInt = Color.RED, customType = "Color")
230
+ public void setPinColor(MapMarker view, int pinColor) {
231
+ float[] hsv = new float[3];
232
+ Color.colorToHSV(pinColor, hsv);
233
+ // NOTE: android only supports a hue
234
+ view.setMarkerHue(hsv[0]);
235
+ }
236
+
237
+ @ReactProp(name = "rotation", defaultFloat = 0.0f)
238
+ public void setMarkerRotation(MapMarker view, float rotation) {
239
+ view.setRotation(rotation);
240
+ }
241
+
242
+ @ReactProp(name = "flat", defaultBoolean = false)
243
+ public void setFlat(MapMarker view, boolean flat) {
244
+ view.setFlat(flat);
245
+ }
246
+
247
+ @ReactProp(name = "draggable", defaultBoolean = false)
248
+ public void setDraggable(MapMarker view, boolean draggable) {
249
+ view.setDraggable(draggable);
250
+ }
251
+
252
+ @Override
253
+ @ReactProp(name = "zIndex", defaultFloat = 0.0f)
254
+ public void setZIndex(MapMarker view, float zIndex) {
255
+ super.setZIndex(view, zIndex);
256
+ int integerZIndex = Math.round(zIndex);
257
+ view.setZIndex(integerZIndex);
258
+ }
259
+
260
+ @Override
261
+ @ReactProp(name = "opacity", defaultFloat = 1.0f)
262
+ public void setOpacity(MapMarker view, float opacity) {
263
+ super.setOpacity(view, opacity);
264
+ view.setOpacity(opacity);
265
+ }
266
+
267
+ @ReactProp(name = "tracksViewChanges", defaultBoolean = true)
268
+ public void setTracksViewChanges(MapMarker view, boolean tracksViewChanges) {
269
+ view.setTracksViewChanges(tracksViewChanges);
270
+ }
271
+
272
+ @ReactProp(name = "accessibilityLabel")
273
+ public void setAccessibilityLabel(MapMarker view, @Nullable String accessibilityLabel) {
274
+ view.setTag(R.id.accessibility_label, accessibilityLabel);
275
+ }
276
+
277
+ @Override
278
+ public void addView(MapMarker parent, View child, int index) {
279
+ // if an <Callout /> component is a child, then it is a callout view, NOT part of the
280
+ // marker.
281
+ if (child instanceof MapCallout) {
282
+ parent.setCalloutView((MapCallout) child);
283
+ } else {
284
+ super.addView(parent, child, index);
285
+ parent.update(true);
286
+ }
287
+ }
288
+
289
+ @Override
290
+ public void removeViewAt(MapMarker parent, int index) {
291
+ super.removeViewAt(parent, index);
292
+ parent.update(true);
293
+ }
294
+
295
+ @Override
296
+ public void receiveCommand(@NonNull MapMarker view, String commandId, @Nullable ReadableArray args) {
297
+ int duration;
298
+ double lat;
299
+ double lng;
300
+ ReadableMap region;
301
+
302
+ switch (commandId) {
303
+ case "showCallout":
304
+ ((Marker) view.getFeature()).showInfoWindow();
305
+ break;
306
+
307
+ case "hideCallout":
308
+ ((Marker) view.getFeature()).hideInfoWindow();
309
+ break;
310
+
311
+ case "animateMarkerToCoordinate":
312
+ if (args == null) {
313
+ break;
314
+ }
315
+ region = args.getMap(0);
316
+ duration = args.getInt(1);
317
+
318
+ lng = region.getDouble("longitude");
319
+ lat = region.getDouble("latitude");
320
+ view.animateToCoodinate(new LatLng(lat, lng), duration);
321
+ break;
322
+
323
+ case "redraw":
324
+ view.updateMarkerIcon();
325
+ break;
326
+ }
327
+ }
328
+
329
+ @Override
330
+ @Nullable
331
+ public Map getExportedCustomDirectEventTypeConstants() {
332
+ return MapBuilder.<String, Map<String, String>>builder()
333
+ .put("onCalloutPress", MapBuilder.of("registrationName", "onCalloutPress"))
334
+ .put("onDragStart", MapBuilder.of("registrationName", "onDragStart"))
335
+ .put("onDrag", MapBuilder.of("registrationName", "onDrag"))
336
+ .put("onDragEnd", MapBuilder.of("registrationName", "onDragEnd"))
337
+ .put("onSelect", MapBuilder.of("registrationName", "onSelect"))
338
+ .put("onDeselect", MapBuilder.of("registrationName", "onDeselect"))
339
+ .build();
340
+ }
341
+
342
+ @Override
343
+ @Nullable
344
+ public Map getExportedCustomBubblingEventTypeConstants() {
345
+ return MapBuilder.<String, Map<String, Object>>builder()
346
+ .put("onPress", MapBuilder.of("phasedRegistrationNames", MapBuilder.of("bubbled", "onPress")))
347
+ .build();
348
+ }
349
+
350
+
351
+ @Override
352
+ public LayoutShadowNode createShadowNodeInstance() {
353
+ // we use a custom shadow node that emits the width/height of the view
354
+ // after layout with the updateExtraData method. Without this, we can't generate
355
+ // a bitmap of the appropriate width/height of the rendered view.
356
+ return new SizeReportingShadowNode();
357
+ }
358
+
359
+ @Override
360
+ public void updateExtraData(MapMarker view, Object extraData) {
361
+ // This method is called from the shadow node with the width/height of the rendered
362
+ // marker view.
363
+ HashMap<String, Float> data = (HashMap<String, Float>) extraData;
364
+ float width = data.get("width");
365
+ float height = data.get("height");
366
+ view.update((int) width, (int) height);
367
+ }
368
+ }
@@ -0,0 +1,283 @@
1
+ package com.rnmaps.maps;
2
+
3
+ import android.app.Activity;
4
+ import android.graphics.Bitmap;
5
+ import android.graphics.Point;
6
+ import android.location.Address;
7
+ import android.location.Geocoder;
8
+ import android.net.Uri;
9
+ import android.util.Base64;
10
+ import android.util.DisplayMetrics;
11
+
12
+ import androidx.annotation.Nullable;
13
+
14
+ import com.facebook.react.bridge.Promise;
15
+ import com.facebook.react.bridge.ReactApplicationContext;
16
+ import com.facebook.react.bridge.ReactContextBaseJavaModule;
17
+ import com.facebook.react.bridge.ReactMethod;
18
+ import com.facebook.react.bridge.ReadableMap;
19
+ import com.facebook.react.bridge.WritableMap;
20
+ import com.facebook.react.bridge.WritableNativeMap;
21
+ import com.facebook.react.module.annotations.ReactModule;
22
+ import com.google.android.gms.maps.GoogleMap;
23
+ import com.google.android.gms.maps.model.CameraPosition;
24
+ import com.google.android.gms.maps.model.LatLng;
25
+
26
+ import java.io.ByteArrayOutputStream;
27
+ import java.io.Closeable;
28
+ import java.io.File;
29
+ import java.io.FileOutputStream;
30
+ import java.io.IOException;
31
+ import java.util.HashMap;
32
+ import java.util.List;
33
+ import java.util.Map;
34
+
35
+ @ReactModule(name = MapModule.NAME)
36
+ public class MapModule extends ReactContextBaseJavaModule {
37
+
38
+ public static final String NAME = "AirMapModule";
39
+ public static final String SNAPSHOT_RESULT_FILE = "file";
40
+ public static final String SNAPSHOT_RESULT_BASE64 = "base64";
41
+ public static final String SNAPSHOT_FORMAT_PNG = "png";
42
+ public static final String SNAPSHOT_FORMAT_JPG = "jpg";
43
+
44
+ public MapModule(ReactApplicationContext reactContext) {
45
+ super(reactContext);
46
+ }
47
+
48
+ @Override
49
+ public String getName() {
50
+ return NAME;
51
+ }
52
+
53
+ @Override
54
+ public Map<String, Object> getConstants() {
55
+ final Map<String, Object> constants = new HashMap<>();
56
+ constants.put("legalNotice", "This license information is displayed in Settings > Google > Open Source on any device running Google Play services.");
57
+ return constants;
58
+ }
59
+
60
+ public Activity getActivity() {
61
+ return getCurrentActivity();
62
+ }
63
+
64
+ public static void closeQuietly(Closeable closeable) {
65
+ if (closeable == null) return;
66
+ try {
67
+ closeable.close();
68
+ } catch (IOException ignored) {
69
+ }
70
+ }
71
+
72
+ @ReactMethod
73
+ public void takeSnapshot(final int tag, final ReadableMap options, final Promise promise) {
74
+
75
+ // Parse and verity options
76
+ final ReactApplicationContext context = getReactApplicationContext();
77
+ final String format = options.hasKey("format") ? options.getString("format") : "png";
78
+ final Bitmap.CompressFormat compressFormat =
79
+ format.equals(SNAPSHOT_FORMAT_PNG) ? Bitmap.CompressFormat.PNG :
80
+ format.equals(SNAPSHOT_FORMAT_JPG) ? Bitmap.CompressFormat.JPEG : null;
81
+ final double quality = options.hasKey("quality") ? options.getDouble("quality") : 1.0;
82
+ final DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
83
+ final Integer width =
84
+ options.hasKey("width") ? (int) (displayMetrics.density * options.getDouble("width")) : 0;
85
+ final Integer height =
86
+ options.hasKey("height") ? (int) (displayMetrics.density * options.getDouble("height")) : 0;
87
+ final String result = options.hasKey("result") ? options.getString("result") : "file";
88
+
89
+ MapUIBlock uiBlock = new MapUIBlock(tag, promise, context, view -> {
90
+ view.map.snapshot(new GoogleMap.SnapshotReadyCallback() {
91
+ public void onSnapshotReady(@Nullable Bitmap snapshot) {
92
+
93
+ // Convert image to requested width/height if necessary
94
+ if (snapshot == null) {
95
+ promise.reject("Failed to generate bitmap, snapshot = null");
96
+ return;
97
+ }
98
+ if ((width != 0) && (height != 0) &&
99
+ (width != snapshot.getWidth() || height != snapshot.getHeight())) {
100
+ snapshot = Bitmap.createScaledBitmap(snapshot, width, height, true);
101
+ }
102
+
103
+ // Save the snapshot to disk
104
+ if (result.equals(SNAPSHOT_RESULT_FILE)) {
105
+ File tempFile;
106
+ FileOutputStream outputStream;
107
+ try {
108
+ tempFile =
109
+ File.createTempFile("AirMapSnapshot", "." + format, context.getCacheDir());
110
+ outputStream = new FileOutputStream(tempFile);
111
+ } catch (Exception e) {
112
+ promise.reject(e);
113
+ return;
114
+ }
115
+ snapshot.compress(compressFormat, (int) (100.0 * quality), outputStream);
116
+ closeQuietly(outputStream);
117
+ String uri = Uri.fromFile(tempFile).toString();
118
+ promise.resolve(uri);
119
+ } else if (result.equals(SNAPSHOT_RESULT_BASE64)) {
120
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
121
+ snapshot.compress(compressFormat, (int) (100.0 * quality), outputStream);
122
+ closeQuietly(outputStream);
123
+ byte[] bytes = outputStream.toByteArray();
124
+ String data = Base64.encodeToString(bytes, Base64.NO_WRAP);
125
+ promise.resolve(data);
126
+ }
127
+ }
128
+ });
129
+
130
+ return null;
131
+ });
132
+
133
+ // Add UI-block so we can get a valid reference to the map-view
134
+
135
+ uiBlock.addToUIManager();
136
+ }
137
+
138
+ @ReactMethod
139
+ public void getCamera(final int tag, final Promise promise) {
140
+ final ReactApplicationContext context = getReactApplicationContext();
141
+
142
+ MapUIBlock uiBlock = new MapUIBlock(tag, promise, context, view -> {
143
+ CameraPosition position = view.map.getCameraPosition();
144
+
145
+ WritableMap centerJson = new WritableNativeMap();
146
+ centerJson.putDouble("latitude", position.target.latitude);
147
+ centerJson.putDouble("longitude", position.target.longitude);
148
+
149
+ WritableMap cameraJson = new WritableNativeMap();
150
+ cameraJson.putMap("center", centerJson);
151
+ cameraJson.putDouble("heading", (double) position.bearing);
152
+ cameraJson.putDouble("zoom", (double) position.zoom);
153
+ cameraJson.putDouble("pitch", (double) position.tilt);
154
+
155
+ promise.resolve(cameraJson);
156
+
157
+ return null;
158
+ });
159
+
160
+ uiBlock.addToUIManager();
161
+ }
162
+
163
+ @ReactMethod
164
+ public void getAddressFromCoordinates(final int tag, final ReadableMap coordinate, final Promise promise) {
165
+ final ReactApplicationContext context = getReactApplicationContext();
166
+
167
+ MapUIBlock uiBlock = new MapUIBlock(tag, promise, context, mapView -> {
168
+ if (coordinate == null ||
169
+ !coordinate.hasKey("latitude") ||
170
+ !coordinate.hasKey("longitude")) {
171
+ promise.reject("Invalid coordinate format");
172
+ return null;
173
+ }
174
+ Geocoder geocoder = new Geocoder(context);
175
+ try {
176
+ List<Address> list =
177
+ geocoder.getFromLocation(coordinate.getDouble("latitude"), coordinate.getDouble("longitude"), 1);
178
+ if (list.isEmpty()) {
179
+ promise.reject("Can not get address location");
180
+ return null;
181
+ }
182
+ Address address = list.get(0);
183
+
184
+ WritableMap addressJson = new WritableNativeMap();
185
+ addressJson.putString("name", address.getFeatureName());
186
+ addressJson.putString("locality", address.getLocality());
187
+ addressJson.putString("thoroughfare", address.getThoroughfare());
188
+ addressJson.putString("subThoroughfare", address.getSubThoroughfare());
189
+ addressJson.putString("subLocality", address.getSubLocality());
190
+ addressJson.putString("administrativeArea", address.getAdminArea());
191
+ addressJson.putString("subAdministrativeArea", address.getSubAdminArea());
192
+ addressJson.putString("postalCode", address.getPostalCode());
193
+ addressJson.putString("countryCode", address.getCountryCode());
194
+ addressJson.putString("country", address.getCountryName());
195
+
196
+ promise.resolve(addressJson);
197
+ } catch (IOException e) {
198
+ promise.reject("Can not get address location");
199
+ }
200
+
201
+ return null;
202
+ });
203
+
204
+ uiBlock.addToUIManager();
205
+ }
206
+
207
+ @ReactMethod
208
+ public void pointForCoordinate(final int tag, ReadableMap coordinate, final Promise promise) {
209
+ final ReactApplicationContext context = getReactApplicationContext();
210
+ final double density = (double) context.getResources().getDisplayMetrics().density;
211
+
212
+ final LatLng coord = new LatLng(
213
+ coordinate.hasKey("latitude") ? coordinate.getDouble("latitude") : 0.0,
214
+ coordinate.hasKey("longitude") ? coordinate.getDouble("longitude") : 0.0
215
+ );
216
+
217
+ MapUIBlock uiBlock = new MapUIBlock(tag, promise, context, view -> {
218
+ Point pt = view.map.getProjection().toScreenLocation(coord);
219
+
220
+ WritableMap ptJson = new WritableNativeMap();
221
+ ptJson.putDouble("x", (double) pt.x / density);
222
+ ptJson.putDouble("y", (double) pt.y / density);
223
+
224
+ promise.resolve(ptJson);
225
+
226
+ return null;
227
+ });
228
+
229
+ uiBlock.addToUIManager();
230
+ }
231
+
232
+ @ReactMethod
233
+ public void coordinateForPoint(final int tag, ReadableMap point, final Promise promise) {
234
+ final ReactApplicationContext context = getReactApplicationContext();
235
+ final double density = (double) context.getResources().getDisplayMetrics().density;
236
+
237
+ final Point pt = new Point(
238
+ point.hasKey("x") ? (int) (point.getDouble("x") * density) : 0,
239
+ point.hasKey("y") ? (int) (point.getDouble("y") * density) : 0
240
+ );
241
+
242
+ MapUIBlock uiBlock = new MapUIBlock(tag, promise, context, view -> {
243
+ LatLng coord = view.map.getProjection().fromScreenLocation(pt);
244
+
245
+ WritableMap coordJson = new WritableNativeMap();
246
+ coordJson.putDouble("latitude", coord.latitude);
247
+ coordJson.putDouble("longitude", coord.longitude);
248
+
249
+ promise.resolve(coordJson);
250
+
251
+ return null;
252
+ });
253
+
254
+ uiBlock.addToUIManager();
255
+ }
256
+
257
+ @ReactMethod
258
+ public void getMapBoundaries(final int tag, final Promise promise) {
259
+ final ReactApplicationContext context = getReactApplicationContext();
260
+
261
+ MapUIBlock uiBlock = new MapUIBlock(tag, promise, context, view -> {
262
+ double[][] boundaries = view.getMapBoundaries();
263
+
264
+ WritableMap coordinates = new WritableNativeMap();
265
+ WritableMap northEastHash = new WritableNativeMap();
266
+ WritableMap southWestHash = new WritableNativeMap();
267
+
268
+ northEastHash.putDouble("longitude", boundaries[0][0]);
269
+ northEastHash.putDouble("latitude", boundaries[0][1]);
270
+ southWestHash.putDouble("longitude", boundaries[1][0]);
271
+ southWestHash.putDouble("latitude", boundaries[1][1]);
272
+
273
+ coordinates.putMap("northEast", northEastHash);
274
+ coordinates.putMap("southWest", southWestHash);
275
+
276
+ promise.resolve(coordinates);
277
+
278
+ return null;
279
+ });
280
+
281
+ uiBlock.addToUIManager();
282
+ }
283
+ }