Skip to content

Commit 40c004a

Browse files
committed
Use ReactActivity in AirMapView (#293)
Taken from react-native-maps/react-native-maps#276
1 parent 60378d0 commit 40c004a

File tree

5 files changed

+27
-12
lines changed

5 files changed

+27
-12
lines changed

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

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.airbnb.android.react.maps;
22

33
import android.view.View;
4+
import android.app.Activity;
45

56
import com.facebook.react.bridge.Arguments;
67
import com.facebook.react.bridge.ReactContext;
@@ -40,16 +41,19 @@ public class AirMapManager extends ViewGroupManager<AirMapView> {
4041

4142
private ReactContext reactContext;
4243

44+
private Activity reactActivity;
4345
private AirMapMarkerManager markerManager;
4446
private AirMapPolylineManager polylineManager;
4547
private AirMapPolygonManager polygonManager;
4648
private AirMapCircleManager circleManager;
4749

4850
public AirMapManager(
51+
Activity activity,
4952
AirMapMarkerManager markerManager,
5053
AirMapPolylineManager polylineManager,
5154
AirMapPolygonManager polygonManager,
5255
AirMapCircleManager circleManager) {
56+
this.reactActivity = activity;
5357
this.markerManager = markerManager;
5458
this.polylineManager = polylineManager;
5559
this.polygonManager = polygonManager;
@@ -64,14 +68,14 @@ public String getName() {
6468
@Override
6569
protected AirMapView createViewInstance(ThemedReactContext context) {
6670
reactContext = context;
67-
AirMapView view = new AirMapView(context, this);
6871

6972
try {
70-
MapsInitializer.initialize(context.getApplicationContext());
73+
MapsInitializer.initialize(reactActivity);
7174
} catch (Exception e) {
7275
e.printStackTrace();
7376
emitMapError("Map initialize error", "map_init_error");
7477
}
78+
AirMapView view = new AirMapView(context, reactActivity, this);
7579

7680
return view;
7781
}
@@ -258,7 +262,6 @@ public void updateExtraData(AirMapView view, Object extraData) {
258262
}
259263

260264
public void pushEvent(View view, String name, WritableMap data) {
261-
ReactContext reactContext = (ReactContext) view.getContext();
262265
reactContext.getJSModule(RCTEventEmitter.class)
263266
.receiveEvent(view.getId(), name, data);
264267
}

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

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.airbnb.android.react.maps;
22

3+
import android.app.Activity;
34
import android.content.pm.PackageManager;
45
import android.graphics.Point;
56
import android.os.Handler;
@@ -62,12 +63,14 @@ public class AirMapView extends MapView implements GoogleMap.InfoWindowAdapter,
6263
private final AirMapManager manager;
6364
private LifecycleEventListener lifecycleListener;
6465
private boolean paused = false;
66+
private ThemedReactContext context;
6567

6668
final EventDispatcher eventDispatcher;
6769

68-
public AirMapView(ThemedReactContext context, AirMapManager manager) {
69-
super(context);
70+
public AirMapView(ThemedReactContext context, Activity activity, AirMapManager manager) {
71+
super(activity);
7072
this.manager = manager;
73+
this.context = context;
7174

7275
super.onCreate(null);
7376
super.onResume();
@@ -226,7 +229,7 @@ public void onHostDestroy() {
226229
}
227230
};
228231

229-
((ThemedReactContext) getContext()).addLifecycleEventListener(lifecycleListener);
232+
context.addLifecycleEventListener(lifecycleListener);
230233
}
231234

232235
private boolean hasPermissions() {
@@ -239,7 +242,7 @@ private boolean hasPermissions() {
239242
*/
240243
public synchronized void doDestroy() {
241244
if (lifecycleListener != null) {
242-
((ThemedReactContext) getContext()).removeLifecycleEventListener(lifecycleListener);
245+
context.removeLifecycleEventListener(lifecycleListener);
243246
lifecycleListener = null;
244247
}
245248
if (!paused) {
@@ -326,7 +329,7 @@ public View getFeatureAt(int index) {
326329

327330
public void removeFeatureAt(int index) {
328331
AirMapFeature feature = features.remove(index);
329-
332+
330333

331334
if (feature instanceof AirMapMarker) {
332335
markerMap.remove(feature.getFeature());

android/lib/src/main/java/com/airbnb/android/react/maps/MapsPackage.java

+9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.airbnb.android.react.maps;
22

3+
import android.app.Activity;
4+
35
import com.facebook.react.ReactPackage;
46
import com.facebook.react.bridge.JavaScriptModule;
57
import com.facebook.react.bridge.NativeModule;
@@ -11,6 +13,12 @@
1113
import java.util.List;
1214

1315
public class MapsPackage implements ReactPackage {
16+
private Activity reactActivity = null;
17+
18+
public MapsPackage(Activity activity) {
19+
reactActivity = activity;
20+
}
21+
1422
@Override
1523
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
1624
return Collections.emptyList();
@@ -29,6 +37,7 @@ public List<ViewManager> createViewManagers(ReactApplicationContext reactContext
2937
AirMapPolygonManager polygonManager = new AirMapPolygonManager(reactContext);
3038
AirMapCircleManager circleManager = new AirMapCircleManager(reactContext);
3139
AirMapManager mapManager = new AirMapManager(
40+
reactActivity,
3241
annotationManager,
3342
polylineManager,
3443
polygonManager,

docs/installation.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,14 @@ project(':react-native-maps').projectDir = new File(rootProject.projectDir, '../
6363
...
6464
import com.airbnb.android.react.maps.MapsPackage; // <--- Add this!
6565
...
66-
66+
6767
public class MainActivity extends ReactActivity {
6868
...
6969
@Override
7070
protected List<ReactPackage> getPackages() {
7171
return Arrays.<ReactPackage>asList(
7272
new MainReactPackage(),
73-
new MapsPackage() // <-- Add this!
73+
new MapsPackage(this) // <-- Add this!
7474
);
7575
}
7676
}
@@ -88,7 +88,7 @@ project(':react-native-maps').projectDir = new File(rootProject.projectDir, '../
8888
.setBundleAssetName("index.android.bundle")
8989
.setJSMainModuleName("index.android")
9090
.addPackage(new MainReactPackage())
91-
.addPackage(new MapsPackage()) // <---- and This!
91+
.addPackage(new MapsPackage(this)) // <---- and This!
9292
.setUseDeveloperSupport(BuildConfig.DEBUG)
9393
.setInitialLifecycleState(LifecycleState.RESUMED)
9494
.build();

example/android/app/src/main/java/com/airbnb/android/react/maps/example/MainActivity.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,6 @@ protected boolean getUseDeveloperSupport() {
3636
protected List<ReactPackage> getPackages() {
3737
return Arrays.asList(
3838
new MainReactPackage(),
39-
new MapsPackage());
39+
new MapsPackage(this));
4040
}
4141
}

0 commit comments

Comments
 (0)