react-native-maps 0.31.1 → 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.
- package/android/build.gradle +89 -33
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/android/gradlew +251 -0
- package/android/gradlew.bat +94 -0
- package/android/src/main/AndroidManifest.xml +1 -5
- package/android/src/main/RCTAppDependencyProvider.h +25 -0
- package/android/src/main/RCTAppDependencyProvider.mm +55 -0
- package/android/src/main/RCTModulesConformingToProtocolsProvider.h +18 -0
- package/android/src/main/RCTModulesConformingToProtocolsProvider.mm +33 -0
- package/android/src/main/RCTThirdPartyComponentsProvider.h +16 -0
- package/android/src/main/RCTThirdPartyComponentsProvider.mm +28 -0
- package/android/src/main/ReactAppDependencyProvider.podspec +34 -0
- package/android/src/main/java/com/facebook/fbreact/specs/NativeAirMapsModuleSpec.java +63 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerDelegate.java +35 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerInterface.java +17 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCircleManagerDelegate.java +49 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCircleManagerInterface.java +23 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsGooglePolygonManagerDelegate.java +49 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsGooglePolygonManagerInterface.java +23 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerDelegate.java +209 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerInterface.java +74 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerDelegate.java +104 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerInterface.java +39 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsOverlayManagerDelegate.java +45 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsOverlayManagerInterface.java +22 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsPolylineManagerDelegate.java +58 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsPolylineManagerInterface.java +26 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsUrlTileManagerDelegate.java +62 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsUrlTileManagerInterface.java +27 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsWMSTileManagerDelegate.java +56 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsWMSTileManagerInterface.java +25 -0
- package/android/src/main/java/com/rnmaps/fabric/CalloutManager.java +77 -0
- package/android/src/main/java/com/rnmaps/fabric/CircleManager.java +94 -0
- package/android/src/main/java/com/rnmaps/fabric/JSONUtil.java +86 -0
- package/android/src/main/java/com/rnmaps/fabric/MapViewManager.java +623 -0
- package/android/src/main/java/com/rnmaps/fabric/MarkerManager.java +258 -0
- package/android/src/main/java/com/rnmaps/fabric/NativeAirMapsModule.java +284 -0
- package/android/src/main/java/com/rnmaps/fabric/OverlayManager.java +101 -0
- package/android/src/main/java/com/rnmaps/fabric/PolygonManager.java +89 -0
- package/android/src/main/java/com/rnmaps/fabric/PolylineManager.java +121 -0
- package/android/src/main/java/com/rnmaps/fabric/UrlTileManager.java +124 -0
- package/android/src/main/java/com/rnmaps/fabric/WMSTileManager.java +114 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnCalloutPressEvent.java +25 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnDeselectEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnDoublePressEvent.java +27 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnDragEndEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnDragEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnDragStartEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnIndoorBuildingFocusedEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnIndoorLevelActivatedEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnKmlReadyEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnLongPressEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMapLoadedEvent.java +29 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMapReadyEvent.java +29 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDeselectEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEndEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragStartEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerPressEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerSelectEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnPanDragEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnPoiClickEvent.java +27 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnPressEvent.java +27 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeCompleteEvent.java +30 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeEvent.java +48 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeStartEvent.java +33 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnSelectEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnUserLocationChangeEvent.java +28 -0
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/FileUtil.java +3 -6
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/FusedLocationSource.java +5 -2
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageReadable.java +1 -1
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageReader.java +5 -7
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageUtil.java +1 -2
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/LatLngBoundsUtils.java +1 -1
- package/android/src/main/java/com/rnmaps/maps/MapAirModulePackage.java +98 -0
- package/android/src/main/java/com/rnmaps/maps/MapCallout.java +41 -0
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCalloutManager.java → rnmaps/maps/MapCalloutManager.java} +6 -6
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCircle.java → rnmaps/maps/MapCircle.java} +34 -8
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCircleManager.java → rnmaps/maps/MapCircleManager.java} +15 -20
- package/android/src/main/java/com/rnmaps/maps/MapFeature.java +17 -0
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapGradientPolyline.java → rnmaps/maps/MapGradientPolyline.java} +9 -12
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapGradientPolylineManager.java → rnmaps/maps/MapGradientPolylineManager.java} +13 -18
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapHeatmap.java → rnmaps/maps/MapHeatmap.java} +8 -9
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapHeatmapManager.java → rnmaps/maps/MapHeatmapManager.java} +8 -8
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapLocalTile.java → rnmaps/maps/MapLocalTile.java} +19 -16
- package/android/src/main/java/com/rnmaps/maps/MapLocalTileManager.java +54 -0
- package/android/src/main/java/com/rnmaps/maps/MapManager.java +504 -0
- package/android/src/main/java/com/rnmaps/maps/MapMarker.java +706 -0
- package/android/src/main/java/com/rnmaps/maps/MapMarkerManager.java +368 -0
- package/android/src/main/java/com/rnmaps/maps/MapModule.java +283 -0
- package/android/src/main/java/com/rnmaps/maps/MapOverlay.java +262 -0
- package/android/src/main/java/com/rnmaps/maps/MapOverlayManager.java +97 -0
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolygon.java → rnmaps/maps/MapPolygon.java} +73 -9
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolygonManager.java → rnmaps/maps/MapPolygonManager.java} +22 -22
- package/android/src/main/java/com/rnmaps/maps/MapPolyline.java +230 -0
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolylineManager.java → rnmaps/maps/MapPolylineManager.java} +18 -38
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapTileProvider.java → rnmaps/maps/MapTileProvider.java} +55 -76
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapTileWorker.java → rnmaps/maps/MapTileWorker.java} +7 -14
- package/android/src/main/java/com/rnmaps/maps/MapUIBlock.java +64 -0
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapUrlTile.java → rnmaps/maps/MapUrlTile.java} +29 -29
- package/android/src/main/java/com/rnmaps/maps/MapUrlTileManager.java +87 -0
- package/android/src/main/java/com/rnmaps/maps/MapView.java +1844 -0
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapWMSTile.java → rnmaps/maps/MapWMSTile.java} +11 -17
- package/android/src/main/java/com/rnmaps/maps/MapWMSTileManager.java +81 -0
- package/android/src/main/java/com/rnmaps/maps/MapsPackage.java +45 -0
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/RegionChangeEvent.java +1 -1
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/SizeReportingShadowNode.java +1 -1
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ViewAttacherGroup.java +2 -7
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ViewChangesTracker.java +12 -11
- package/android/src/main/jni/CMakeLists.txt +36 -0
- package/android/src/main/jni/RNMapsSpecs-generated.cpp +68 -0
- package/android/src/main/jni/RNMapsSpecs.h +31 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.cpp +31 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.h +33 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/EventEmitters.cpp +979 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/EventEmitters.h +860 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/Props.cpp +227 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/Props.h +1297 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI-generated.cpp +74 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI.h +268 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.cpp +26 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.h +131 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/States.cpp +16 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/States.h +137 -0
- package/app.plugin.js +1 -0
- package/ios/AirGoogleMaps/AIRGMSMarker.h +2 -0
- package/ios/AirGoogleMaps/AIRGoogleMap.h +22 -12
- package/ios/AirGoogleMaps/{AIRGoogleMap.m → AIRGoogleMap.mm} +407 -130
- package/ios/AirGoogleMaps/AIRGoogleMapCircle.h +2 -3
- package/ios/AirGoogleMaps/AIRGoogleMapCircle.m +42 -3
- package/ios/AirGoogleMaps/AIRGoogleMapCoordinate.h +13 -0
- package/ios/AirGoogleMaps/AIRGoogleMapCoordinate.m +10 -0
- package/ios/AirGoogleMaps/AIRGoogleMapHeatmap.h +1 -1
- package/ios/AirGoogleMaps/AIRGoogleMapManager.h +11 -0
- package/ios/AirGoogleMaps/AIRGoogleMapManager.mm +543 -0
- package/ios/AirGoogleMaps/AIRGoogleMapMarker.h +4 -0
- package/ios/AirGoogleMaps/AIRGoogleMapMarker.m +369 -237
- package/ios/AirGoogleMaps/AIRGoogleMapMarkerManager.m +3 -2
- package/ios/AirGoogleMaps/AIRGoogleMapOverlay.h +0 -1
- package/ios/AirGoogleMaps/AIRGoogleMapPolygon.h +7 -6
- package/ios/AirGoogleMaps/AIRGoogleMapPolygon.m +62 -5
- package/ios/AirGoogleMaps/AIRGoogleMapPolygonManager.m +3 -3
- package/ios/AirGoogleMaps/AIRGoogleMapPolyline.h +4 -3
- package/ios/AirGoogleMaps/AIRGoogleMapPolyline.m +9 -9
- package/ios/AirGoogleMaps/AIRGoogleMapPolylineManager.m +2 -2
- package/ios/AirGoogleMaps/AIRGoogleMapUrlTile.m +2 -2
- package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.h +1 -1
- package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.m +4 -4
- package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.h +3 -0
- package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.m +18 -0
- package/ios/AirGoogleMaps/RNMapsGoogleMapView.h +29 -0
- package/ios/AirGoogleMaps/RNMapsGoogleMapView.mm +678 -0
- package/ios/AirGoogleMaps/RNMapsGoogleMapViewManager.mm +40 -0
- package/ios/AirGoogleMaps/RNMapsGooglePolygonView.h +26 -0
- package/ios/AirGoogleMaps/RNMapsGooglePolygonView.mm +226 -0
- package/ios/AirGoogleMaps/RNMapsGooglePolygonViewManager.mm +26 -0
- package/ios/AirGoogleMaps/Resources/GoogleMapsPrivacy.bundle/PrivacyInfo.xcprivacy +110 -0
- package/ios/AirMaps/AIRMap.h +19 -14
- package/ios/AirMaps/{AIRMap.m → AIRMap.mm} +333 -120
- package/ios/AirMaps/AIRMapCircle.m +1 -53
- package/ios/AirMaps/AIRMapCoordinate.m +2 -4
- package/ios/AirMaps/AIRMapManager.m +64 -218
- package/ios/AirMaps/AIRMapMarker.h +5 -0
- package/ios/AirMaps/AIRMapMarker.m +180 -69
- package/ios/AirMaps/AIRMapMarkerManager.m +3 -0
- package/ios/AirMaps/AIRMapOverlay.m +2 -2
- package/ios/AirMaps/AIRMapPolygon.m +0 -52
- package/ios/AirMaps/AIRMapPolyline.m +3 -2
- package/ios/AirMaps/AIRMapWMSTile.m +8 -8
- package/ios/AirMaps/Callout/SMCalloutView.m +1 -1
- package/ios/AirMaps/FabricPlaceholders/PlaceHolderGoogleMapView.h +25 -0
- package/ios/AirMaps/FabricPlaceholders/PlaceHolderGoogleMapView.mm +77 -0
- package/ios/AirMaps/FabricPlaceholders/PlaceHolderPolygonView.h +25 -0
- package/ios/AirMaps/FabricPlaceholders/PlaceHolderPolygonView.mm +52 -0
- package/ios/AirMaps/RCTComponentData+Maps.h +13 -0
- package/ios/AirMaps/RCTComponentData+Maps.m +55 -0
- package/ios/AirMaps/RCTConvert+AirMap.h +6 -1
- package/ios/AirMaps/RCTConvert+AirMap.m +18 -0
- package/ios/AirMaps/RNMapsAirModule.h +15 -0
- package/ios/AirMaps/RNMapsAirModule.mm +164 -0
- package/ios/AirMaps/RNMapsDefines.h +1 -0
- package/ios/AirMaps/RNMapsMapView.h +27 -0
- package/ios/AirMaps/RNMapsMapView.mm +577 -0
- package/ios/AirMaps/RNMapsMapViewManager.mm +42 -0
- package/ios/AirMaps/RNMapsMarkerView.h +24 -0
- package/ios/AirMaps/RNMapsMarkerView.mm +439 -0
- package/ios/AirMaps/RNMapsMarkerViewManager.mm +28 -0
- package/ios/AirMaps/UIView+AirMap.h +11 -0
- package/ios/AirMaps/UIView+AirMap.m +20 -0
- package/ios/AirMaps/module.modulemap +6 -0
- package/ios/AirMaps.xcodeproj/project.pbxproj +44 -4
- package/ios/PrivacyInfo.xcprivacy +37 -0
- package/ios/generated/RCTAppDependencyProvider.h +25 -0
- package/ios/generated/RCTAppDependencyProvider.mm +55 -0
- package/ios/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
- package/ios/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
- package/ios/generated/RCTThirdPartyComponentsProvider.h +16 -0
- package/ios/generated/RCTThirdPartyComponentsProvider.mm +26 -0
- package/ios/generated/RNMapsAirModuleDelegate.h +24 -0
- package/ios/generated/RNMapsHostVewDelegate.h +17 -0
- package/ios/generated/RNMapsSpecs/ComponentDescriptors.cpp +29 -0
- package/ios/generated/RNMapsSpecs/ComponentDescriptors.h +31 -0
- package/ios/generated/RNMapsSpecs/EventEmitters.cpp +977 -0
- package/ios/generated/RNMapsSpecs/EventEmitters.h +846 -0
- package/ios/generated/RNMapsSpecs/Props.cpp +194 -0
- package/ios/generated/RNMapsSpecs/Props.h +1224 -0
- package/ios/generated/RNMapsSpecs/RCTComponentViewHelpers.h +591 -0
- package/ios/generated/RNMapsSpecs/RNMapsSpecs-generated.mm +92 -0
- package/ios/generated/RNMapsSpecs/RNMapsSpecs.h +137 -0
- package/ios/generated/RNMapsSpecs/ShadowNodes.cpp +24 -0
- package/ios/generated/RNMapsSpecs/ShadowNodes.h +109 -0
- package/ios/generated/RNMapsSpecs/States.cpp +16 -0
- package/ios/generated/RNMapsSpecs/States.h +113 -0
- package/ios/generated/RNMapsSpecsJSI-generated.cpp +74 -0
- package/ios/generated/RNMapsSpecsJSI.h +268 -0
- package/ios/generated/ReactAppDependencyProvider.podspec +34 -0
- package/ios/generated/module.modulemap +15 -0
- package/package.json +57 -34
- package/plugin/build/android.js +58 -0
- package/plugin/build/index.js +10 -0
- package/plugin/build/ios.js +176 -0
- package/plugin/build/types.js +2 -0
- package/react-native-maps.podspec +114 -11
- package/react-native.config.js +15 -0
- package/src/{AnimatedRegion.js → AnimatedRegion.ts} +26 -21
- package/src/Geojson.tsx +541 -0
- package/src/MapCallout.tsx +77 -0
- package/src/MapCalloutSubview.tsx +64 -0
- package/src/MapCircle.tsx +162 -0
- package/src/MapHeatmap.tsx +125 -0
- package/src/MapLocalTile.tsx +60 -0
- package/src/MapMarker.tsx +531 -0
- package/src/MapMarkerNativeComponent.ts +51 -0
- package/src/MapOverlay.tsx +178 -0
- package/src/MapPolygon.tsx +188 -0
- package/src/MapPolygon.types.ts +25 -0
- package/src/MapPolyline.tsx +215 -0
- package/src/MapUrlTile.tsx +169 -0
- package/src/MapView.tsx +1235 -0
- package/src/MapView.types.ts +212 -0
- package/src/MapView.web.ts +2 -0
- package/src/MapViewNativeComponent.ts +86 -0
- package/src/MapWMSTile.tsx +148 -0
- package/src/ProviderConstants.ts +2 -0
- package/src/createFabricMap.tsx +253 -0
- package/src/decorateMapComponent.ts +230 -0
- package/src/fixImageProp.ts +17 -0
- package/src/index.ts +52 -0
- package/src/sharedTypes.ts +101 -0
- package/src/sharedTypesInternal.ts +1 -0
- package/src/specs/NativeAirMapsModule.ts +36 -0
- package/src/specs/NativeComponentCallout.ts +63 -0
- package/src/specs/NativeComponentCircle.ts +93 -0
- package/src/specs/NativeComponentGoogleMapView.ts +922 -0
- package/src/specs/NativeComponentGooglePolygon.ts +94 -0
- package/src/specs/NativeComponentMapView.ts +1100 -0
- package/src/specs/NativeComponentMarker.ts +326 -0
- package/src/specs/NativeComponentOverlay.ts +98 -0
- package/src/specs/NativeComponentPolyline.ts +124 -0
- package/src/specs/NativeComponentUrlTile.ts +128 -0
- package/src/specs/NativeComponentWMSTile.ts +107 -0
- package/LICENSE +0 -21
- package/README.md +0 -652
- package/android/src/main/assets/ula.kml +0 -1214
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapCallout.java +0 -23
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapFeature.java +0 -18
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapLiteManager.java +0 -20
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapLocalTileManager.java +0 -56
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapManager.java +0 -500
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapMarker.java +0 -630
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapMarkerManager.java +0 -370
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapModule.java +0 -380
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapOverlay.java +0 -169
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapOverlayManager.java +0 -81
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapPolyline.java +0 -162
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapUrlTileManager.java +0 -97
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapView.java +0 -1384
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapWMSTileManager.java +0 -87
- package/android/src/main/java/com/airbnb/android/react/maps/MapsPackage.java +0 -65
- package/index.d.ts +0 -637
- package/ios/AirGoogleMaps/AIRGoogleMapManager.m +0 -690
- package/ios/User.xcconfig +0 -0
- package/react-native-google-maps.podspec +0 -22
- package/src/Geojson.js +0 -334
- package/src/MapCallout.js +0 -51
- package/src/MapCalloutSubview.js +0 -44
- package/src/MapCircle.js +0 -150
- package/src/MapHeatmap.js +0 -99
- package/src/MapLocalTile.js +0 -52
- package/src/MapMarker.js +0 -377
- package/src/MapOverlay.js +0 -86
- package/src/MapPolygon.js +0 -202
- package/src/MapPolyline.js +0 -168
- package/src/MapUrlTile.js +0 -131
- package/src/MapView.js +0 -1160
- package/src/MapView.web.js +0 -1
- package/src/MapWMSTile.js +0 -122
- package/src/ProviderConstants.js +0 -2
- package/src/decorateMapComponent.js +0 -112
- 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
|
+
}
|