package com.androidmapsextensions;
import android.content.Context;
import com.androidmapsextensions.impl.ExtendedMapFactory;
import java.lang.reflect.Method;
final class MapHolder {
public interface Delegate {
// This function no longer exist in new versions of Google Maps Android API v2,
// so we get access to it via reflection whenever possible
//com.google.android.gms.maps.GoogleMap getMap();
void getMapAsync(com.google.android.gms.maps.OnMapReadyCallback callback);
Context getContext();
}
private final Delegate delegate;
private GoogleMap map;
public MapHolder(Delegate delegate) {
this.delegate = delegate;
}
public GoogleMap getExtendedMap() {
if (map == null) {
try {
Method getMapMethod = delegate.getClass().getMethod("getMap");
Object obj = getMapMethod.invoke(delegate);
if (obj != null) {
com.google.android.gms.maps.GoogleMap realMap = (com.google.android.gms.maps.GoogleMap) obj;
map = ExtendedMapFactory.create(realMap, delegate.getContext());
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return map;
}
public void getExtendedMapAsync(final OnMapReadyCallback callback) {
if (map != null) {
callback.onMapReady(map);
} else {
delegate.getMapAsync(new com.google.android.gms.maps.OnMapReadyCallback() {
@Override
public void onMapReady(com.google.android.gms.maps.GoogleMap realMap) {
if (map == null) {
map = ExtendedMapFactory.create(realMap, delegate.getContext());
}
callback.onMapReady(map);
}
});
}
}
}