react-native-maps 1.21.0-alpha.8 → 1.21.0-alpha.80

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