package cgeo.geocaching.maps.google.v1;
import cgeo.geocaching.maps.CachesOverlay;
import cgeo.geocaching.maps.interfaces.ItemizedOverlayImpl;
import cgeo.geocaching.maps.interfaces.MapProjectionImpl;
import cgeo.geocaching.maps.interfaces.MapViewImpl;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapView;
import android.support.annotation.Nullable;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* Google specific implementation of the itemized cache overlay
*/
public class GoogleCacheOverlay extends ItemizedOverlay<GoogleCacheOverlayItem> implements ItemizedOverlayImpl {
/**
* The super constructor already invokes methods accessing this member before it is initialized. Therefore it can be
* null, although it is assigned in the constructor. Don't trust static code analysis here.
*/
@Nullable private final CachesOverlay base;
private final Lock lock = new ReentrantLock();
public GoogleCacheOverlay(final Context contextIn, final Drawable markerIn) {
super(boundCenterBottom(markerIn));
base = new CachesOverlay(this, contextIn);
}
@Override
public CachesOverlay getBase() {
return base;
}
@Override
protected GoogleCacheOverlayItem createItem(final int i) {
if (base != null) {
return (GoogleCacheOverlayItem) base.createItem(i);
}
return null;
}
@Override
public int size() {
if (base != null) {
return base.size();
}
return 0;
}
@Override
protected boolean onTap(final int arg0) {
if (base != null) {
return base.onTap(arg0);
}
return false;
}
@Override
public void draw(final Canvas canvas, final MapView mapView, final boolean shadow) {
if (base != null) {
base.draw(canvas, castMapViewImpl(mapView), shadow);
}
}
private static MapViewImpl castMapViewImpl(final MapView mapView) {
return (MapViewImpl) mapView;
}
@Override
public void superPopulate() {
populate();
}
@Override
public Drawable superBoundCenterBottom(final Drawable marker) {
return ItemizedOverlay.boundCenterBottom(marker);
}
@Override
public void superSetLastFocusedItemIndex(final int i) {
super.setLastFocusedIndex(i);
}
@Override
public boolean superOnTap(final int index) {
return super.onTap(index);
}
@Override
public void superDraw(final Canvas canvas, final MapViewImpl mapView, final boolean shadow) {
super.draw(canvas, (MapView) mapView, shadow);
}
@Override
public void superDrawOverlayBitmap(final Canvas canvas, final Point drawPosition,
final MapProjectionImpl projection, final byte drawZoomLevel) {
// Nothing to do here...
}
@Override
public void lock() {
lock.lock();
}
@Override
public void unlock() {
lock.unlock();
}
@Override
public MapViewImpl getMapViewImpl() {
throw new UnsupportedOperationException();
}
}