react-native-maps 1.21.0-alpha.9 → 1.21.0-alpha.91

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 (179) hide show
  1. package/android/build.gradle +45 -14
  2. package/android/generated/RCTAppDependencyProvider.h +25 -0
  3. package/android/generated/RCTAppDependencyProvider.mm +55 -0
  4. package/android/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
  5. package/android/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
  6. package/android/generated/RCTThirdPartyComponentsProvider.h +16 -0
  7. package/android/generated/RCTThirdPartyComponentsProvider.mm +26 -0
  8. package/android/generated/ReactAppDependencyProvider.podspec +34 -0
  9. package/android/generated/java/com/facebook/fbreact/specs/NativeAirMapsModuleSpec.java +63 -0
  10. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerDelegate.java +35 -0
  11. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerInterface.java +18 -0
  12. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsCircleManagerDelegate.java +49 -0
  13. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsCircleManagerInterface.java +24 -0
  14. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsGooglePolygonManagerDelegate.java +49 -0
  15. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsGooglePolygonManagerInterface.java +24 -0
  16. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerDelegate.java +206 -0
  17. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerInterface.java +74 -0
  18. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerDelegate.java +104 -0
  19. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerInterface.java +40 -0
  20. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsOverlayManagerDelegate.java +46 -0
  21. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsOverlayManagerInterface.java +24 -0
  22. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsPolylineManagerDelegate.java +58 -0
  23. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsPolylineManagerInterface.java +27 -0
  24. package/android/generated/jni/CMakeLists.txt +36 -0
  25. package/android/generated/jni/RNMapsSpecs-generated.cpp +68 -0
  26. package/android/generated/jni/RNMapsSpecs.h +31 -0
  27. package/android/generated/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.cpp +29 -0
  28. package/android/generated/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.h +31 -0
  29. package/android/generated/jni/react/renderer/components/RNMapsSpecs/EventEmitters.cpp +984 -0
  30. package/android/generated/jni/react/renderer/components/RNMapsSpecs/EventEmitters.h +853 -0
  31. package/android/generated/jni/react/renderer/components/RNMapsSpecs/Props.cpp +193 -0
  32. package/android/generated/jni/react/renderer/components/RNMapsSpecs/Props.h +1223 -0
  33. package/android/generated/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI-generated.cpp +74 -0
  34. package/android/generated/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI.h +268 -0
  35. package/android/generated/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.cpp +24 -0
  36. package/android/generated/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.h +109 -0
  37. package/android/generated/jni/react/renderer/components/RNMapsSpecs/States.cpp +16 -0
  38. package/android/generated/jni/react/renderer/components/RNMapsSpecs/States.h +113 -0
  39. package/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  40. package/android/gradlew +1 -2
  41. package/android/src/main/java/com/rnmaps/fabric/CalloutManager.java +77 -0
  42. package/android/src/main/java/com/rnmaps/fabric/CircleManager.java +94 -0
  43. package/android/src/main/java/com/rnmaps/fabric/JSONUtil.java +86 -0
  44. package/android/src/main/java/com/rnmaps/fabric/MapViewManager.java +619 -0
  45. package/android/src/main/java/com/rnmaps/fabric/MarkerManager.java +258 -0
  46. package/android/src/main/java/com/rnmaps/fabric/NativeAirMapsModule.java +235 -2
  47. package/android/src/main/java/com/rnmaps/fabric/OverlayManager.java +95 -0
  48. package/android/src/main/java/com/rnmaps/fabric/PolygonManager.java +89 -0
  49. package/android/src/main/java/com/rnmaps/fabric/PolylineManager.java +121 -0
  50. package/android/src/main/java/com/rnmaps/fabric/event/OnCalloutPressEvent.java +25 -0
  51. package/android/src/main/java/com/rnmaps/fabric/event/OnDeselectEvent.java +28 -0
  52. package/android/src/main/java/com/rnmaps/fabric/event/OnDoublePressEvent.java +27 -0
  53. package/android/src/main/java/com/rnmaps/fabric/event/OnDragEndEvent.java +28 -0
  54. package/android/src/main/java/com/rnmaps/fabric/event/OnDragEvent.java +28 -0
  55. package/android/src/main/java/com/rnmaps/fabric/event/OnDragStartEvent.java +28 -0
  56. package/android/src/main/java/com/rnmaps/fabric/event/OnIndoorBuildingFocusedEvent.java +28 -0
  57. package/android/src/main/java/com/rnmaps/fabric/event/OnIndoorLevelActivatedEvent.java +28 -0
  58. package/android/src/main/java/com/rnmaps/fabric/event/OnKmlReadyEvent.java +28 -0
  59. package/android/src/main/java/com/rnmaps/fabric/event/OnLongPressEvent.java +28 -0
  60. package/android/src/main/java/com/rnmaps/fabric/event/OnMapLoadedEvent.java +29 -0
  61. package/android/src/main/java/com/rnmaps/fabric/event/OnMapReadyEvent.java +29 -0
  62. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDeselectEvent.java +28 -0
  63. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEndEvent.java +28 -0
  64. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEvent.java +28 -0
  65. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragStartEvent.java +28 -0
  66. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerPressEvent.java +28 -0
  67. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerSelectEvent.java +28 -0
  68. package/android/src/main/java/com/rnmaps/fabric/event/OnPanDragEvent.java +28 -0
  69. package/android/src/main/java/com/rnmaps/fabric/event/OnPoiClickEvent.java +27 -0
  70. package/android/src/main/java/com/rnmaps/fabric/event/OnPressEvent.java +27 -0
  71. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeCompleteEvent.java +30 -0
  72. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeEvent.java +48 -0
  73. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeStartEvent.java +33 -0
  74. package/android/src/main/java/com/rnmaps/fabric/event/OnSelectEvent.java +28 -0
  75. package/android/src/main/java/com/rnmaps/fabric/event/OnUserLocationChangeEvent.java +28 -0
  76. package/android/src/main/java/com/rnmaps/maps/MapAirModulePackage.java +38 -2
  77. package/android/src/main/java/com/rnmaps/maps/MapCallout.java +18 -0
  78. package/android/src/main/java/com/rnmaps/maps/MapCircle.java +24 -0
  79. package/android/src/main/java/com/rnmaps/maps/MapManager.java +14 -14
  80. package/android/src/main/java/com/rnmaps/maps/MapMarker.java +79 -3
  81. package/android/src/main/java/com/rnmaps/maps/MapModule.java +206 -206
  82. package/android/src/main/java/com/rnmaps/maps/MapOverlay.java +267 -151
  83. package/android/src/main/java/com/rnmaps/maps/MapPolygon.java +31 -1
  84. package/android/src/main/java/com/rnmaps/maps/MapPolyline.java +207 -141
  85. package/android/src/main/java/com/rnmaps/maps/MapPolylineManager.java +1 -16
  86. package/android/src/main/java/com/rnmaps/maps/MapView.java +1653 -1337
  87. package/ios/AirGoogleMaps/AIRGoogleMap.h +1 -0
  88. package/ios/AirGoogleMaps/AIRGoogleMap.m +106 -58
  89. package/ios/AirGoogleMaps/AIRGoogleMapCircle.m +23 -11
  90. package/ios/AirGoogleMaps/AIRGoogleMapManager.m +3 -1
  91. package/ios/AirGoogleMaps/AIRGoogleMapMarker.h +2 -0
  92. package/ios/AirGoogleMaps/AIRGoogleMapMarker.m +347 -243
  93. package/ios/AirGoogleMaps/AIRGoogleMapPolygon.h +2 -1
  94. package/ios/AirGoogleMaps/AIRGoogleMapPolygon.m +30 -0
  95. package/ios/AirGoogleMaps/AIRGoogleMapPolyline.h +0 -1
  96. package/ios/AirGoogleMaps/AIRGoogleMapPolyline.m +0 -7
  97. package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.h +1 -1
  98. package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.m +2 -2
  99. package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.m +2 -0
  100. package/ios/AirGoogleMaps/RNMapsGoogleMapView.mm +197 -61
  101. package/ios/AirGoogleMaps/RNMapsGooglePolygonView.h +26 -0
  102. package/ios/AirGoogleMaps/RNMapsGooglePolygonView.mm +215 -0
  103. package/ios/AirGoogleMaps/RNMapsGooglePolygonViewManager.mm +25 -0
  104. package/ios/AirMaps/AIRMap.h +2 -1
  105. package/ios/AirMaps/AIRMap.m +227 -236
  106. package/ios/AirMaps/AIRMapManager.m +6 -0
  107. package/ios/AirMaps/AIRMapMarker.h +1 -0
  108. package/ios/AirMaps/AIRMapMarker.m +165 -103
  109. package/ios/AirMaps/Callout/SMCalloutView.m +1 -1
  110. package/ios/AirMaps/RNMapsAirModule.h +1 -1
  111. package/ios/AirMaps/RNMapsAirModule.mm +4 -3
  112. package/ios/AirMaps/RNMapsAirModuleDelegate.h +24 -0
  113. package/ios/AirMaps/RNMapsHostVewDelegate.h +17 -0
  114. package/ios/AirMaps/RNMapsMapView.mm +336 -307
  115. package/ios/AirMaps/RNMapsMarkerView.h +24 -0
  116. package/ios/AirMaps/RNMapsMarkerView.mm +427 -0
  117. package/ios/AirMaps/RNMapsMarkerViewManager.mm +21 -0
  118. package/ios/AirMaps/UIView +AirMap.m +20 -0
  119. package/ios/AirMaps/UIView+AirMap.h +11 -0
  120. package/ios/AirMaps.xcodeproj/project.pbxproj +60 -0
  121. package/ios/generated/RCTAppDependencyProvider.h +25 -0
  122. package/ios/generated/RCTAppDependencyProvider.mm +55 -0
  123. package/ios/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
  124. package/ios/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
  125. package/ios/generated/RCTThirdPartyComponentsProvider.h +16 -0
  126. package/ios/generated/RCTThirdPartyComponentsProvider.mm +26 -0
  127. package/ios/generated/RNMapsSpecs/ComponentDescriptors.cpp +29 -0
  128. package/ios/generated/RNMapsSpecs/ComponentDescriptors.h +31 -0
  129. package/ios/generated/RNMapsSpecs/EventEmitters.cpp +984 -0
  130. package/ios/generated/RNMapsSpecs/EventEmitters.h +853 -0
  131. package/ios/generated/RNMapsSpecs/Props.cpp +193 -0
  132. package/ios/generated/RNMapsSpecs/Props.h +1223 -0
  133. package/ios/generated/RNMapsSpecs/RCTComponentViewHelpers.h +603 -0
  134. package/ios/generated/RNMapsSpecs/RNMapsSpecs-generated.mm +92 -0
  135. package/ios/generated/RNMapsSpecs/RNMapsSpecs.h +137 -0
  136. package/ios/generated/RNMapsSpecs/ShadowNodes.cpp +24 -0
  137. package/ios/generated/RNMapsSpecs/ShadowNodes.h +109 -0
  138. package/ios/generated/RNMapsSpecs/States.cpp +16 -0
  139. package/ios/generated/RNMapsSpecs/States.h +113 -0
  140. package/ios/generated/RNMapsSpecsJSI-generated.cpp +74 -0
  141. package/ios/generated/RNMapsSpecsJSI.h +268 -0
  142. package/ios/generated/ReactAppDependencyProvider.podspec +34 -0
  143. package/ios/generated/module.modulemap +4 -0
  144. package/ios/generated/react-native-maps-generated-umbrella.h +14 -0
  145. package/lib/MapCircle.d.ts +1 -1
  146. package/lib/MapHeatmap.d.ts +2 -2
  147. package/lib/MapHeatmap.js +1 -1
  148. package/lib/MapMarker.d.ts +16 -3
  149. package/lib/MapMarker.js +58 -9
  150. package/lib/MapMarkerNativeComponent.js +0 -2
  151. package/lib/MapOverlay.d.ts +1 -0
  152. package/lib/MapOverlay.js +21 -9
  153. package/lib/MapPolygon.d.ts +1 -1
  154. package/lib/MapPolyline.d.ts +7 -7
  155. package/lib/MapView.d.ts +15 -27
  156. package/lib/MapView.js +109 -124
  157. package/lib/MapView.types.d.ts +1 -1
  158. package/lib/createFabricMap.d.ts +1 -0
  159. package/lib/createFabricMap.js +17 -4
  160. package/lib/decorateMapComponent.js +40 -0
  161. package/lib/specs/NativeAirMapsModule.d.ts +2 -2
  162. package/lib/specs/NativeComponentCallout.d.ts +46 -0
  163. package/lib/specs/NativeComponentCallout.js +9 -0
  164. package/lib/specs/NativeComponentCircle.d.ts +74 -0
  165. package/lib/specs/NativeComponentCircle.js +7 -0
  166. package/lib/specs/NativeComponentGoogleMapView.d.ts +15 -15
  167. package/lib/specs/NativeComponentGoogleMapView.js +1 -0
  168. package/lib/specs/NativeComponentGooglePolygon.d.ts +75 -0
  169. package/lib/specs/NativeComponentGooglePolygon.js +7 -0
  170. package/lib/specs/NativeComponentMapView.d.ts +28 -36
  171. package/lib/specs/NativeComponentMapView.js +2 -3
  172. package/lib/specs/NativeComponentMarker.d.ts +258 -0
  173. package/lib/specs/NativeComponentMarker.js +19 -0
  174. package/lib/specs/NativeComponentOverlay.d.ts +67 -0
  175. package/lib/specs/NativeComponentOverlay.js +7 -0
  176. package/lib/specs/NativeComponentPolyline.d.ts +101 -0
  177. package/lib/specs/NativeComponentPolyline.js +7 -0
  178. package/package.json +27 -21
  179. package/react-native-maps.podspec +61 -16
@@ -0,0 +1,258 @@
1
+ package com.rnmaps.fabric;
2
+
3
+
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.bridge.ReactApplicationContext;
11
+ import com.facebook.react.bridge.ReadableMap;
12
+ import com.facebook.react.module.annotations.ReactModule;
13
+ import com.facebook.react.uimanager.ReactStylesDiffMap;
14
+ import com.facebook.react.uimanager.StateWrapper;
15
+ import com.facebook.react.uimanager.ThemedReactContext;
16
+ import com.facebook.react.uimanager.ViewGroupManager;
17
+ import com.facebook.react.uimanager.ViewManagerDelegate;
18
+ import com.facebook.react.viewmanagers.RNMapsMarkerManagerDelegate;
19
+ import com.facebook.react.viewmanagers.RNMapsMarkerManagerInterface;
20
+ import com.google.android.gms.maps.model.LatLng;
21
+ import com.google.android.gms.maps.model.Marker;
22
+ import com.google.android.gms.maps.model.MarkerOptions;
23
+ import com.rnmaps.maps.MapCallout;
24
+ import com.rnmaps.maps.MapMarker;
25
+
26
+ import java.util.Map;
27
+
28
+ @ReactModule(name = MarkerManager.REACT_CLASS)
29
+ public class MarkerManager extends ViewGroupManager<MapMarker> implements RNMapsMarkerManagerInterface<MapMarker> {
30
+
31
+
32
+ public MarkerManager(ReactApplicationContext context){
33
+ super(context);
34
+ }
35
+ private final RNMapsMarkerManagerDelegate<MapMarker, MarkerManager> delegate =
36
+ new RNMapsMarkerManagerDelegate<>(this);
37
+
38
+ @Override
39
+ public ViewManagerDelegate<MapMarker> getDelegate() {
40
+ return delegate;
41
+ }
42
+
43
+ @Override
44
+ public String getName() {
45
+ return REACT_CLASS;
46
+ }
47
+
48
+ @Override
49
+ public MapMarker createViewInstance(ThemedReactContext context) {
50
+ return new MapMarker(context, null);
51
+ }
52
+ private MarkerOptions optionsForInitialProps(ReactStylesDiffMap initialProps){
53
+ MarkerOptions options = new MarkerOptions();
54
+ if (initialProps != null) {
55
+ if (initialProps.hasKey("opacity")) {
56
+ options.alpha(initialProps.getFloat("opacity", 1));
57
+ }
58
+ if (initialProps.hasKey("anchor")) {
59
+ ReadableMap map = initialProps.getMap("anchor");
60
+ float x = (float) (map != null && map.hasKey("x") ? map.getDouble("x") : 0.5);
61
+ float y = (float) (map != null && map.hasKey("y") ? map.getDouble("y") : 1.0);
62
+ options.anchor(x, y);
63
+ }
64
+
65
+ if (initialProps.hasKey("coordinate")) {
66
+ ReadableMap coordinate = initialProps.getMap("coordinate");
67
+ LatLng position = new LatLng(coordinate.getDouble("latitude"), coordinate.getDouble("longitude"));
68
+ options.position(position);
69
+ }
70
+ if (initialProps.hasKey("title")) {
71
+ options.title(initialProps.getString("title"));
72
+ }
73
+ if (initialProps.hasKey("description")) {
74
+ options.snippet(initialProps.getString("description"));
75
+ }
76
+ if (initialProps.hasKey("draggable")){
77
+ options.draggable(initialProps.getBoolean("draggable", false));
78
+ }
79
+ if (initialProps.hasKey("rotation")){
80
+ options.rotation(initialProps.getFloat("rotation", 0));
81
+ }
82
+ if (initialProps.hasKey("flat")) {
83
+ options.flat(initialProps.getBoolean("flat", false));
84
+ }
85
+ if (initialProps.hasKey("calloutAnchor")){
86
+ ReadableMap map = initialProps.getMap("calloutAnchor");
87
+ float x = (float) (map != null && map.hasKey("x") ? map.getDouble("x") : 0.5);
88
+ float y = (float) (map != null && map.hasKey("y") ? map.getDouble("y") : 1.0);
89
+ options.infoWindowAnchor(x, y);
90
+ }
91
+
92
+ if (initialProps.hasKey("zIndex")){
93
+ options.zIndex(initialProps.getFloat("zIndex", 0));
94
+ }
95
+ }
96
+ return options;
97
+ }
98
+
99
+ @Override
100
+ protected MapMarker createViewInstance(int reactTag, @NonNull ThemedReactContext reactContext, @Nullable ReactStylesDiffMap initialProps, @Nullable StateWrapper stateWrapper) {
101
+ MapMarker view = null;
102
+ view = new MapMarker(reactContext, optionsForInitialProps(initialProps), null);
103
+ view.setId(reactTag);
104
+ this.addEventEmitters(reactContext, view);
105
+ if (initialProps != null) {
106
+ this.updateProperties(view, initialProps);
107
+ }
108
+ if (stateWrapper != null) {
109
+ Object extraData = this.updateState(view, initialProps, stateWrapper);
110
+ if (extraData != null) {
111
+ this.updateExtraData(view, extraData);
112
+ }
113
+ }
114
+ return view;
115
+ }
116
+
117
+
118
+ public static final String REACT_CLASS = "RNMapsMarker";
119
+
120
+ @Nullable
121
+ @Override
122
+ public Map<String, Object> getExportedCustomBubblingEventTypeConstants() {
123
+ return MapMarker.getExportedCustomBubblingEventTypeConstants();
124
+ }
125
+
126
+ @Nullable
127
+ @Override
128
+ public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
129
+ return MapMarker.getExportedCustomDirectEventTypeConstants();
130
+ }
131
+
132
+ @Override
133
+ public void setAnchor(MapMarker view, @Nullable ReadableMap map) {
134
+ double x = map != null && map.hasKey("x") ? map.getDouble("x") : 0.5;
135
+ double y = map != null && map.hasKey("y") ? map.getDouble("y") : 1.0;
136
+ view.setAnchor(x, y);
137
+ }
138
+
139
+ @Override
140
+ public void setCalloutAnchor(MapMarker view, @Nullable ReadableMap value) {
141
+
142
+ }
143
+
144
+ @Override
145
+ public void setImage(MapMarker view, @Nullable ReadableMap value) {
146
+ view.setImage(value.getString("uri"));
147
+ }
148
+
149
+ @Override
150
+ public void setCalloutOffset(MapMarker view, @Nullable ReadableMap value) {
151
+
152
+ }
153
+
154
+ @Override
155
+ public void setDisplayPriority(MapMarker view, @Nullable String value) {
156
+
157
+ }
158
+
159
+ @Override
160
+ public void setCoordinate(MapMarker view, @Nullable ReadableMap value) {
161
+ view.setCoordinate(value);
162
+ }
163
+
164
+ @Override
165
+ public void setDescription(MapMarker view, @Nullable String value) {
166
+ view.setSnippet(value);
167
+ }
168
+
169
+ @Override
170
+ public void setDraggable(MapMarker view, boolean value) {
171
+ view.setDraggable(value);
172
+ }
173
+
174
+ @Override
175
+ public void setTitle(MapMarker view, @Nullable String value) {
176
+ view.setTitle(value);
177
+ }
178
+
179
+ @Override
180
+ public void setIdentifier(MapMarker view, @Nullable String value) {
181
+ view.setIdentifier(value);
182
+ }
183
+
184
+ @Override
185
+ public void setIsPreselected(MapMarker view, boolean value) {
186
+
187
+ }
188
+
189
+ @Override
190
+ public void setOpacity(MapMarker view, double value) {
191
+ view.setOpacity((float) value);
192
+ }
193
+
194
+ @Override
195
+ public void setPinColor(MapMarker view, @Nullable Integer value) {
196
+ float[] hsv = new float[3];
197
+ Color.colorToHSV(value, hsv);
198
+ // NOTE: android only supports a hue
199
+ view.setMarkerHue(hsv[0]);
200
+ }
201
+
202
+ @Override
203
+ public void setTitleVisibility(MapMarker view, @Nullable String value) {
204
+
205
+ }
206
+
207
+ @Override
208
+ public void setSubtitleVisibility(MapMarker view, @Nullable String value) {
209
+
210
+ }
211
+
212
+ @Override
213
+ public void setUseLegacyPinView(MapMarker view, boolean value) {
214
+
215
+ }
216
+
217
+ @Override
218
+ public void animateToCoordinates(MapMarker view, double latitude, double longitude, int duration) {
219
+ view.animateToCoodinate(new LatLng(latitude, longitude), duration);
220
+ }
221
+
222
+ @Override
223
+ public void setCoordinates(MapMarker view, double latitude, double longitude) {
224
+ view.setCoordinate(new LatLng(latitude, longitude));
225
+ }
226
+
227
+ @Override
228
+ public void showCallout(MapMarker view) {
229
+ ((Marker) view.getFeature()).showInfoWindow();
230
+
231
+ }
232
+
233
+ @Override
234
+ public void hideCallout(MapMarker view) {
235
+ ((Marker) view.getFeature()).hideInfoWindow();
236
+ }
237
+
238
+ @Override
239
+ public void redrawCallout(MapMarker view) {
240
+
241
+ }
242
+
243
+ @Override
244
+ public void redraw(MapMarker view) {
245
+
246
+ }
247
+ @Override
248
+ public void addView(MapMarker parent, View child, int index) {
249
+ // if an <Callout /> component is a child, then it is a callout view, NOT part of the
250
+ // marker.
251
+ if (child instanceof MapCallout) {
252
+ parent.setCalloutView((MapCallout) child);
253
+ } else {
254
+ super.addView(parent, child, index);
255
+ parent.update(true);
256
+ }
257
+ }
258
+ }
@@ -1,8 +1,44 @@
1
1
  package com.rnmaps.fabric;
2
2
 
3
+ import static com.rnmaps.maps.MapModule.SNAPSHOT_FORMAT_JPG;
4
+ import static com.rnmaps.maps.MapModule.SNAPSHOT_FORMAT_PNG;
5
+ import static com.rnmaps.maps.MapModule.SNAPSHOT_RESULT_BASE64;
6
+ import static com.rnmaps.maps.MapModule.SNAPSHOT_RESULT_FILE;
7
+ import static com.rnmaps.maps.MapModule.closeQuietly;
8
+
9
+ import android.graphics.Bitmap;
10
+ import android.graphics.Point;
11
+ import android.location.Address;
12
+ import android.location.Geocoder;
13
+ import android.net.Uri;
14
+ import android.util.Base64;
15
+ import android.util.DisplayMetrics;
16
+
17
+ import androidx.annotation.Nullable;
18
+
19
+ import com.facebook.fbreact.specs.NativeAirMapsModuleSpec;
20
+ import com.facebook.react.bridge.Arguments;
3
21
  import com.facebook.react.bridge.Promise;
4
22
  import com.facebook.react.bridge.ReactApplicationContext;
5
23
  import com.facebook.react.bridge.ReadableMap;
24
+ import com.facebook.react.bridge.UIManager;
25
+ import com.facebook.react.bridge.WritableMap;
26
+ import com.facebook.react.bridge.WritableNativeMap;
27
+ import com.facebook.react.uimanager.UIManagerHelper;
28
+ import com.google.android.gms.maps.GoogleMap;
29
+ import com.google.android.gms.maps.model.CameraPosition;
30
+ import com.google.android.gms.maps.model.LatLng;
31
+ import com.rnmaps.maps.MapUIBlock;
32
+ import com.rnmaps.maps.MapView;
33
+
34
+ import org.json.JSONException;
35
+ import org.json.JSONObject;
36
+
37
+ import java.io.ByteArrayOutputStream;
38
+ import java.io.File;
39
+ import java.io.FileOutputStream;
40
+ import java.io.IOException;
41
+ import java.util.List;
6
42
 
7
43
  public class NativeAirMapsModule extends NativeAirMapsModuleSpec {
8
44
  public NativeAirMapsModule(ReactApplicationContext reactContext) {
@@ -16,36 +52,233 @@ public class NativeAirMapsModule extends NativeAirMapsModuleSpec {
16
52
 
17
53
  @Override
18
54
  public void getCamera(double tag, Promise promise) {
19
-
55
+ UIManager uiManager = UIManagerHelper.getUIManagerForReactTag(getReactApplicationContext(), (int) tag);
56
+ getReactApplicationContext().runOnUiQueueThread(new Runnable() {
57
+ @Override
58
+ public void run() {
59
+ MapView view = (MapView) uiManager.resolveView((int) tag);
60
+ CameraPosition position = view.map.getCameraPosition();
61
+ WritableMap map = Arguments.createMap();
62
+ WritableMap center = Arguments.createMap();
63
+ center.putDouble("latitude", position.target.latitude);
64
+ center.putDouble("longitude", position.target.longitude);
65
+ map.putMap("center", center);
66
+ map.putDouble("heading", position.bearing);
67
+ map.putDouble("pitch", position.tilt);
68
+ map.putDouble("zoom", position.zoom);
69
+ promise.resolve(map);
70
+ }
71
+ });
20
72
  }
21
73
 
22
74
  @Override
23
75
  public void getMarkersFrames(double tag, boolean onlyVisible, Promise promise) {
24
76
 
77
+ UIManager uiManager = UIManagerHelper.getUIManagerForReactTag(getReactApplicationContext(), (int) tag);
78
+ getReactApplicationContext().runOnUiQueueThread(() -> {
79
+ MapView view = (MapView) uiManager.resolveView((int) tag);
80
+ double[][] boundaries = view.getMarkersFrames(onlyVisible);
81
+ if (boundaries != null) {
82
+ WritableMap coordinates = new WritableNativeMap();
83
+ WritableMap northEastHash = new WritableNativeMap();
84
+ WritableMap southWestHash = new WritableNativeMap();
85
+
86
+ northEastHash.putDouble("longitude", boundaries[0][0]);
87
+ northEastHash.putDouble("latitude", boundaries[0][1]);
88
+ southWestHash.putDouble("longitude", boundaries[1][0]);
89
+ southWestHash.putDouble("latitude", boundaries[1][1]);
90
+
91
+ coordinates.putMap("northEast", northEastHash);
92
+ coordinates.putMap("southWest", southWestHash);
93
+
94
+ promise.resolve(coordinates);
95
+ } else {
96
+ promise.resolve(null);
97
+ }
98
+ });
25
99
  }
26
100
 
27
101
  @Override
28
102
  public void getMapBoundaries(double tag, Promise promise) {
103
+ UIManager uiManager = UIManagerHelper.getUIManagerForReactTag(getReactApplicationContext(), (int) tag);
104
+ getReactApplicationContext().runOnUiQueueThread(() -> {
105
+ MapView view = (MapView) uiManager.resolveView((int) tag);
106
+ double[][] boundaries = view.getMapBoundaries();
107
+ WritableMap coordinates = new WritableNativeMap();
108
+ WritableMap northEastHash = new WritableNativeMap();
109
+ WritableMap southWestHash = new WritableNativeMap();
110
+
111
+ northEastHash.putDouble("longitude", boundaries[0][0]);
112
+ northEastHash.putDouble("latitude", boundaries[0][1]);
113
+ southWestHash.putDouble("longitude", boundaries[1][0]);
114
+ southWestHash.putDouble("latitude", boundaries[1][1]);
115
+
116
+ coordinates.putMap("northEast", northEastHash);
117
+ coordinates.putMap("southWest", southWestHash);
29
118
 
119
+ promise.resolve(coordinates);
120
+ });
30
121
  }
31
122
 
32
123
  @Override
33
- public void takeSnapshot(double tag, ReadableMap config, Promise promise) {
124
+ public void takeSnapshot(double tag, String config, Promise promise) {
125
+ WritableMap options = null;
126
+ try {
127
+ if (config != null) {
128
+ JSONObject jsonObject = new JSONObject(config);
129
+ options = JSONUtil.convertJsonToWritable(jsonObject);
130
+ WritableMap finalOptions = options;
131
+
132
+ final ReactApplicationContext context = getReactApplicationContext();
133
+ final String format = finalOptions.hasKey("format") ? finalOptions.getString("format") : "png";
134
+ final Bitmap.CompressFormat compressFormat =
135
+ format.equals(SNAPSHOT_FORMAT_PNG) ? Bitmap.CompressFormat.PNG :
136
+ format.equals(SNAPSHOT_FORMAT_JPG) ? Bitmap.CompressFormat.JPEG : null;
137
+ final double quality = finalOptions.hasKey("quality") ? finalOptions.getDouble("quality") : 1.0;
138
+ final DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
139
+ final Integer width =
140
+ finalOptions.hasKey("width") ? (int) (displayMetrics.density * finalOptions.getDouble("width")) : 0;
141
+ final Integer height =
142
+ finalOptions.hasKey("height") ? (int) (displayMetrics.density * finalOptions.getDouble("height")) : 0;
143
+ final String result = finalOptions.hasKey("result") ? finalOptions.getString("result") : "file";
144
+
145
+ UIManager uiManager = UIManagerHelper.getUIManagerForReactTag(getReactApplicationContext(), (int) tag);
146
+ getReactApplicationContext().runOnUiQueueThread(new Runnable() {
147
+ @Override
148
+ public void run() {
149
+ MapView view = (MapView) uiManager.resolveView((int) tag);
150
+ view.map.snapshot(snapshot -> {
151
+
152
+ // Convert image to requested width/height if necessary
153
+ if (snapshot == null) {
154
+ promise.reject("Failed to generate bitmap, snapshot = null");
155
+ return;
156
+ }
157
+ if ((width != 0) && (height != 0) &&
158
+ (width != snapshot.getWidth() || height != snapshot.getHeight())) {
159
+ snapshot = Bitmap.createScaledBitmap(snapshot, width, height, true);
160
+ }
161
+ // Save the snapshot to disk
162
+ if (result.equals(SNAPSHOT_RESULT_FILE)) {
163
+ File tempFile;
164
+ FileOutputStream outputStream;
165
+ try {
166
+ tempFile =
167
+ File.createTempFile("AirMapSnapshot", "." + format, context.getCacheDir());
168
+ outputStream = new FileOutputStream(tempFile);
169
+ } catch (Exception e) {
170
+ promise.reject(e);
171
+ return;
172
+ }
173
+ snapshot.compress(compressFormat, (int) (100.0 * quality), outputStream);
174
+ closeQuietly(outputStream);
175
+ String uri = Uri.fromFile(tempFile).toString();
176
+ promise.resolve(uri);
177
+ } else if (result.equals(SNAPSHOT_RESULT_BASE64)) {
178
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
179
+ snapshot.compress(compressFormat, (int) (100.0 * quality), outputStream);
180
+ closeQuietly(outputStream);
181
+ byte[] bytes = outputStream.toByteArray();
182
+ String data = Base64.encodeToString(bytes, Base64.NO_WRAP);
183
+ promise.resolve(data);
184
+ }
185
+ });
186
+ }
187
+ });
188
+ }
189
+ } catch (JSONException e) {
190
+ promise.reject("Failed to parse config ", config);
34
191
 
192
+ }
35
193
  }
36
194
 
37
195
  @Override
38
196
  public void getAddressFromCoordinates(double tag, ReadableMap coordinate, Promise promise) {
197
+ final ReactApplicationContext context = getReactApplicationContext();
198
+
199
+ if (coordinate == null ||
200
+ !coordinate.hasKey("latitude") ||
201
+ !coordinate.hasKey("longitude")) {
202
+ promise.reject("Invalid coordinate format");
203
+ return;
204
+ }
205
+ Geocoder geocoder = new Geocoder(context);
206
+ try {
207
+ List<Address> list =
208
+ geocoder.getFromLocation(coordinate.getDouble("latitude"), coordinate.getDouble("longitude"), 1);
209
+ if (list.isEmpty()) {
210
+ promise.reject("Can not get address location");
211
+ return;
212
+ }
213
+ Address address = list.get(0);
214
+
215
+ WritableMap addressJson = new WritableNativeMap();
216
+ addressJson.putString("name", address.getFeatureName());
217
+ addressJson.putString("locality", address.getLocality());
218
+ addressJson.putString("thoroughfare", address.getThoroughfare());
219
+ addressJson.putString("subThoroughfare", address.getSubThoroughfare());
220
+ addressJson.putString("subLocality", address.getSubLocality());
221
+ addressJson.putString("administrativeArea", address.getAdminArea());
222
+ addressJson.putString("subAdministrativeArea", address.getSubAdminArea());
223
+ addressJson.putString("postalCode", address.getPostalCode());
224
+ addressJson.putString("countryCode", address.getCountryCode());
225
+ addressJson.putString("country", address.getCountryName());
226
+
227
+ promise.resolve(addressJson);
228
+ } catch (IOException e) {
229
+ promise.reject("Can not get address location");
230
+ }
231
+
39
232
 
40
233
  }
41
234
 
42
235
  @Override
43
236
  public void getPointForCoordinate(double tag, ReadableMap coordinate, Promise promise) {
237
+ final ReactApplicationContext context = getReactApplicationContext();
238
+ final double density = (double) context.getResources().getDisplayMetrics().density;
239
+
240
+ final LatLng coord = new LatLng(
241
+ coordinate.hasKey("latitude") ? coordinate.getDouble("latitude") : 0.0,
242
+ coordinate.hasKey("longitude") ? coordinate.getDouble("longitude") : 0.0
243
+ );
244
+
245
+ MapUIBlock uiBlock = new MapUIBlock((int) tag, promise, context, view -> {
246
+ Point pt = view.map.getProjection().toScreenLocation(coord);
247
+
248
+ WritableMap ptJson = new WritableNativeMap();
249
+ ptJson.putDouble("x", (double) pt.x / density);
250
+ ptJson.putDouble("y", (double) pt.y / density);
44
251
 
252
+ promise.resolve(ptJson);
253
+
254
+ return null;
255
+ });
256
+
257
+ uiBlock.addToUIManager();
45
258
  }
46
259
 
47
260
  @Override
48
261
  public void getCoordinateForPoint(double tag, ReadableMap point, Promise promise) {
262
+ final ReactApplicationContext context = getReactApplicationContext();
263
+ final double density = (double) context.getResources().getDisplayMetrics().density;
264
+
265
+ final Point pt = new Point(
266
+ point.hasKey("x") ? (int) (point.getDouble("x") * density) : 0,
267
+ point.hasKey("y") ? (int) (point.getDouble("y") * density) : 0
268
+ );
269
+
270
+ MapUIBlock uiBlock = new MapUIBlock((int)tag, promise, context, view -> {
271
+ LatLng coord = view.map.getProjection().fromScreenLocation(pt);
272
+
273
+ WritableMap coordJson = new WritableNativeMap();
274
+ coordJson.putDouble("latitude", coord.latitude);
275
+ coordJson.putDouble("longitude", coord.longitude);
276
+
277
+ promise.resolve(coordJson);
278
+
279
+ return null;
280
+ });
49
281
 
282
+ uiBlock.addToUIManager();
50
283
  }
51
284
  }
@@ -0,0 +1,95 @@
1
+ package com.rnmaps.fabric;
2
+
3
+
4
+ import androidx.annotation.Nullable;
5
+
6
+ import com.facebook.react.bridge.ReactApplicationContext;
7
+ import com.facebook.react.bridge.ReadableArray;
8
+ import com.facebook.react.bridge.ReadableMap;
9
+ import com.facebook.react.module.annotations.ReactModule;
10
+ import com.facebook.react.uimanager.ThemedReactContext;
11
+ import com.facebook.react.uimanager.ViewGroupManager;
12
+ import com.facebook.react.uimanager.ViewManagerDelegate;
13
+ import com.facebook.react.viewmanagers.RNMapsOverlayManagerDelegate;
14
+ import com.facebook.react.viewmanagers.RNMapsOverlayManagerInterface;
15
+ import com.rnmaps.maps.MapOverlay;
16
+
17
+ import java.util.HashMap;
18
+ import java.util.Map;
19
+
20
+ @ReactModule(name = OverlayManager.REACT_CLASS)
21
+ public class OverlayManager extends ViewGroupManager<MapOverlay> implements RNMapsOverlayManagerInterface<MapOverlay> {
22
+ public OverlayManager(ReactApplicationContext context) {
23
+ super(context);
24
+ }
25
+
26
+ private final RNMapsOverlayManagerDelegate<MapOverlay, OverlayManager> delegate =
27
+ new RNMapsOverlayManagerDelegate<>(this);
28
+
29
+ @Override
30
+ public ViewManagerDelegate<MapOverlay> getDelegate() {
31
+ return delegate;
32
+ }
33
+
34
+ @Override
35
+ public String getName() {
36
+ return REACT_CLASS;
37
+ }
38
+
39
+ @Override
40
+ public MapOverlay createViewInstance(ThemedReactContext context) {
41
+ return new MapOverlay(context);
42
+ }
43
+
44
+
45
+ public static final String REACT_CLASS = "RNMapsOverlay";
46
+
47
+ @Nullable
48
+ @Override
49
+ public Map<String, Object> getExportedCustomBubblingEventTypeConstants() {
50
+ return MapOverlay.getExportedCustomBubblingEventTypeConstants();
51
+ }
52
+
53
+ @Nullable
54
+ @Override
55
+ public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
56
+ return new HashMap<>();
57
+ }
58
+
59
+
60
+
61
+ @Override
62
+ public void setZIndex(MapOverlay view, float value) {
63
+ view.setZIndex(value);
64
+ }
65
+
66
+
67
+ @Override
68
+ public void setBearing(MapOverlay view, float value) {
69
+ view.setBearing(value);
70
+ }
71
+
72
+ @Override
73
+ public void setBounds(MapOverlay view, @Nullable ReadableArray value) {
74
+ view.setBounds(value);
75
+ }
76
+
77
+ @Override
78
+ public void setImage(MapOverlay view, @Nullable ReadableMap value) {
79
+ if (value != null) {
80
+ view.setImage(value.getString("uri"));
81
+ }
82
+ }
83
+
84
+
85
+ @Override
86
+ public void setOpacity(MapOverlay view, float value) {
87
+ // todo report to google that it's not working / fix it
88
+ // view.setTransparency(value);
89
+ }
90
+
91
+ @Override
92
+ public void setTappable(MapOverlay view, boolean value) {
93
+ view.setTappable(value);
94
+ }
95
+ }