Skip to content

Commit 05c529d

Browse files
jrichardlaiAdel Grimm
authored and
Adel Grimm
committed
Use ReactActivity in AirMapView (react-native-maps#293)
Taken from react-native-maps#276
1 parent 339a6b3 commit 05c529d

File tree

5 files changed

+26
-11
lines changed

5 files changed

+26
-11
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
}
@@ -278,7 +282,6 @@ public void updateExtraData(AirMapView view, Object extraData) {
278282
}
279283

280284
public void pushEvent(View view, String name, WritableMap data) {
281-
ReactContext reactContext = (ReactContext) view.getContext();
282285
reactContext.getJSModule(RCTEventEmitter.class)
283286
.receiveEvent(view.getId(), name, data);
284287
}

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

+7-4
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.content.res.ColorStateList;
56
import android.graphics.Bitmap;
@@ -83,12 +84,14 @@ public class AirMapView extends MapView implements GoogleMap.InfoWindowAdapter,
8384
private LifecycleEventListener lifecycleListener;
8485
private OnLayoutChangeListener onLayoutChangeListener;
8586
private boolean paused = false;
87+
private ThemedReactContext context;
8688

8789
final EventDispatcher eventDispatcher;
8890

89-
public AirMapView(ThemedReactContext context, AirMapManager manager) {
90-
super(context);
91+
public AirMapView(ThemedReactContext context, Activity activity, AirMapManager manager) {
92+
super(activity);
9193
this.manager = manager;
94+
this.context = context;
9295

9396
super.onCreate(null);
9497
super.onResume();
@@ -264,7 +267,7 @@ public void onHostDestroy() {
264267
}
265268
};
266269

267-
((ThemedReactContext) getContext()).addLifecycleEventListener(lifecycleListener);
270+
context.addLifecycleEventListener(lifecycleListener);
268271
}
269272

270273
private boolean hasPermissions() {
@@ -277,7 +280,7 @@ private boolean hasPermissions() {
277280
*/
278281
public synchronized void doDestroy() {
279282
if (lifecycleListener != null) {
280-
((ThemedReactContext) getContext()).removeLifecycleEventListener(lifecycleListener);
283+
context.removeLifecycleEventListener(lifecycleListener);
281284
lifecycleListener = null;
282285
}
283286
if (!paused) {

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)