Skip to content

Commit 9f1d3e7

Browse files
Fix null activity crash
1 parent bb8359f commit 9f1d3e7

File tree

2 files changed

+26
-36
lines changed

2 files changed

+26
-36
lines changed

android/src/main/java/com/airbnb/android/react/maps/AirMapManager.java

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ public class AirMapManager extends ViewGroupManager<AirMapView> {
4343
"none", GoogleMap.MAP_TYPE_NONE
4444
);
4545

46-
private ReactContext reactContext;
47-
4846
private final ReactApplicationContext appContext;
4947

5048
protected GoogleMapOptions googleMapOptions;
@@ -61,24 +59,15 @@ public String getName() {
6159

6260
@Override
6361
protected AirMapView createViewInstance(ThemedReactContext context) {
64-
reactContext = context;
65-
66-
try {
67-
MapsInitializer.initialize(this.appContext);
68-
} catch (RuntimeException e) {
69-
e.printStackTrace();
70-
emitMapError("Map initialize error", "map_init_error");
71-
}
72-
73-
return new AirMapView(context, this.appContext.getCurrentActivity(), this, this.googleMapOptions);
62+
return new AirMapView(context, this, googleMapOptions);
7463
}
7564

76-
private void emitMapError(String message, String type) {
65+
private void emitMapError(ThemedReactContext context, String message, String type) {
7766
WritableMap error = Arguments.createMap();
7867
error.putString("message", message);
7968
error.putString("type", type);
8069

81-
reactContext
70+
context
8271
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
8372
.emit("onError", error);
8473
}
@@ -297,9 +286,9 @@ public void updateExtraData(AirMapView view, Object extraData) {
297286
view.updateExtraData(extraData);
298287
}
299288

300-
void pushEvent(View view, String name, WritableMap data) {
301-
reactContext.getJSModule(RCTEventEmitter.class)
302-
.receiveEvent(view.getId(), name, data);
289+
void pushEvent(ThemedReactContext context, View view, String name, WritableMap data) {
290+
context.getJSModule(RCTEventEmitter.class)
291+
.receiveEvent(view.getId(), name, data);
303292
}
304293

305294
}

android/src/main/java/com/airbnb/android/react/maps/AirMapView.java

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,15 @@ public class AirMapView extends MapView implements GoogleMap.InfoWindowAdapter,
8383
private final ThemedReactContext context;
8484
private final EventDispatcher eventDispatcher;
8585

86-
public AirMapView(ThemedReactContext reactContext, Context appContext, AirMapManager manager,
86+
public AirMapView(ThemedReactContext reactContext, AirMapManager manager,
8787
GoogleMapOptions googleMapOptions) {
88-
super(appContext, googleMapOptions);
88+
super(reactContext, googleMapOptions);
8989

9090
this.manager = manager;
9191
this.context = reactContext;
9292

9393
super.onCreate(null);
94+
// TODO(lmr): what about onStart????
9495
super.onResume();
9596
super.getMapAsync(this);
9697

@@ -141,7 +142,7 @@ public void onMapReady(final GoogleMap map) {
141142
this.map.setInfoWindowAdapter(this);
142143
this.map.setOnMarkerDragListener(this);
143144

144-
manager.pushEvent(this, "onMapReady", new WritableNativeMap());
145+
manager.pushEvent(context, this, "onMapReady", new WritableNativeMap());
145146

146147
final AirMapView view = this;
147148

@@ -154,12 +155,12 @@ public boolean onMarkerClick(Marker marker) {
154155
event = makeClickEventData(marker.getPosition());
155156
event.putString("action", "marker-press");
156157
event.putString("id", airMapMarker.getIdentifier());
157-
manager.pushEvent(view, "onMarkerPress", event);
158+
manager.pushEvent(context, view, "onMarkerPress", event);
158159

159160
event = makeClickEventData(marker.getPosition());
160161
event.putString("action", "marker-press");
161162
event.putString("id", airMapMarker.getIdentifier());
162-
manager.pushEvent(markerMap.get(marker), "onPress", event);
163+
manager.pushEvent(context, markerMap.get(marker), "onPress", event);
163164

164165
// Return false to open the callout info window and center on the marker
165166
// https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener
@@ -177,7 +178,7 @@ public boolean onMarkerClick(Marker marker) {
177178
public void onPolygonClick(Polygon polygon) {
178179
WritableMap event = makeClickEventData(polygon.getPoints().get(0));
179180
event.putString("action", "polygon-press");
180-
manager.pushEvent(polygonMap.get(polygon), "onPress", event);
181+
manager.pushEvent(context, polygonMap.get(polygon), "onPress", event);
181182
}
182183
});
183184

@@ -186,7 +187,7 @@ public void onPolygonClick(Polygon polygon) {
186187
public void onPolylineClick(Polyline polyline) {
187188
WritableMap event = makeClickEventData(polyline.getPoints().get(0));
188189
event.putString("action", "polyline-press");
189-
manager.pushEvent(polylineMap.get(polyline), "onPress", event);
190+
manager.pushEvent(context, polylineMap.get(polyline), "onPress", event);
190191
}
191192
});
192193

@@ -197,17 +198,17 @@ public void onInfoWindowClick(Marker marker) {
197198

198199
event = makeClickEventData(marker.getPosition());
199200
event.putString("action", "callout-press");
200-
manager.pushEvent(view, "onCalloutPress", event);
201+
manager.pushEvent(context, view, "onCalloutPress", event);
201202

202203
event = makeClickEventData(marker.getPosition());
203204
event.putString("action", "callout-press");
204205
AirMapMarker markerView = markerMap.get(marker);
205-
manager.pushEvent(markerView, "onCalloutPress", event);
206+
manager.pushEvent(context, markerView, "onCalloutPress", event);
206207

207208
event = makeClickEventData(marker.getPosition());
208209
event.putString("action", "callout-press");
209210
AirMapCallout infoWindow = markerView.getCalloutView();
210-
if (infoWindow != null) manager.pushEvent(infoWindow, "onPress", event);
211+
if (infoWindow != null) manager.pushEvent(context, infoWindow, "onPress", event);
211212
}
212213
});
213214

@@ -216,7 +217,7 @@ public void onInfoWindowClick(Marker marker) {
216217
public void onMapClick(LatLng point) {
217218
WritableMap event = makeClickEventData(point);
218219
event.putString("action", "press");
219-
manager.pushEvent(view, "onPress", event);
220+
manager.pushEvent(context, view, "onPress", event);
220221
}
221222
});
222223

@@ -225,7 +226,7 @@ public void onMapClick(LatLng point) {
225226
public void onMapLongClick(LatLng point) {
226227
WritableMap event = makeClickEventData(point);
227228
event.putString("action", "long-press");
228-
manager.pushEvent(view, "onLongPress", makeClickEventData(point));
229+
manager.pushEvent(context, view, "onLongPress", makeClickEventData(point));
229230
}
230231
});
231232

@@ -661,31 +662,31 @@ public void run() {
661662
@Override
662663
public void onMarkerDragStart(Marker marker) {
663664
WritableMap event = makeClickEventData(marker.getPosition());
664-
manager.pushEvent(this, "onMarkerDragStart", event);
665+
manager.pushEvent(context, this, "onMarkerDragStart", event);
665666

666667
AirMapMarker markerView = markerMap.get(marker);
667668
event = makeClickEventData(marker.getPosition());
668-
manager.pushEvent(markerView, "onDragStart", event);
669+
manager.pushEvent(context, markerView, "onDragStart", event);
669670
}
670671

671672
@Override
672673
public void onMarkerDrag(Marker marker) {
673674
WritableMap event = makeClickEventData(marker.getPosition());
674-
manager.pushEvent(this, "onMarkerDrag", event);
675+
manager.pushEvent(context, this, "onMarkerDrag", event);
675676

676677
AirMapMarker markerView = markerMap.get(marker);
677678
event = makeClickEventData(marker.getPosition());
678-
manager.pushEvent(markerView, "onDrag", event);
679+
manager.pushEvent(context, markerView, "onDrag", event);
679680
}
680681

681682
@Override
682683
public void onMarkerDragEnd(Marker marker) {
683684
WritableMap event = makeClickEventData(marker.getPosition());
684-
manager.pushEvent(this, "onMarkerDragEnd", event);
685+
manager.pushEvent(context, this, "onMarkerDragEnd", event);
685686

686687
AirMapMarker markerView = markerMap.get(marker);
687688
event = makeClickEventData(marker.getPosition());
688-
manager.pushEvent(markerView, "onDragEnd", event);
689+
manager.pushEvent(context, markerView, "onDragEnd", event);
689690
}
690691

691692
private ProgressBar getMapLoadingProgressBar() {
@@ -778,6 +779,6 @@ public void onPanDrag(MotionEvent ev) {
778779
Point point = new Point((int) ev.getX(), (int) ev.getY());
779780
LatLng coords = this.map.getProjection().fromScreenLocation(point);
780781
WritableMap event = makeClickEventData(coords);
781-
manager.pushEvent(this, "onPanDrag", event);
782+
manager.pushEvent(context, this, "onPanDrag", event);
782783
}
783784
}

0 commit comments

Comments
 (0)