package co.mwater.clientapp.ui.map;
import java.util.HashMap;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import co.mwater.clientapp.R;
import co.mwater.clientapp.db.SourcesTable;
import co.mwater.clientapp.db.testresults.Risk;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapView;
import com.google.android.maps.OverlayItem;
public class SourceItemizedOverlay extends ItemizedOverlay<OverlayItem> {
Cursor sourceCursor;
int columnCode, columnName, columnLat, columnLong, columnRisk;
SourceTapped sourceTapped;
HashMap<Risk, Drawable> markers = new HashMap<Risk, Drawable>();
public SourceItemizedOverlay(Context context, Drawable marker, Cursor sourceCursor,
SourceTapped sourceTapped) {
super(boundCenterBottom(marker));
this.sourceCursor = sourceCursor;
this.sourceTapped = sourceTapped;
markers.put(Risk.UNSPECIFIED, boundCenterBottom(context.getResources().getDrawable(R.drawable.marker_0)));
markers.put(Risk.BLUE, boundCenterBottom(context.getResources().getDrawable(R.drawable.marker_1)));
markers.put(Risk.GREEN, boundCenterBottom(context.getResources().getDrawable(R.drawable.marker_2)));
markers.put(Risk.YELLOW, boundCenterBottom(context.getResources().getDrawable(R.drawable.marker_3)));
markers.put(Risk.ORANGE, boundCenterBottom(context.getResources().getDrawable(R.drawable.marker_4)));
markers.put(Risk.RED, boundCenterBottom(context.getResources().getDrawable(R.drawable.marker_5)));
columnCode = sourceCursor.getColumnIndex(SourcesTable.COLUMN_CODE);
columnName = sourceCursor.getColumnIndex(SourcesTable.COLUMN_NAME);
columnLat = sourceCursor.getColumnIndex(SourcesTable.COLUMN_LAT);
columnLong = sourceCursor.getColumnIndex(SourcesTable.COLUMN_LONG);
columnRisk = sourceCursor.getColumnIndex(SourcesTable.COLUMN_RISK);
populate();
}
@Override
protected OverlayItem createItem(int i) {
sourceCursor.moveToPosition(i);
double latitude = sourceCursor.getDouble(columnLat);
double longitude = sourceCursor.getDouble(columnLong);
String code = sourceCursor.getString(columnCode);
String name = sourceCursor.getString(columnName);
OverlayItem newItem = new OverlayItem(new GeoPoint((int) (latitude * 1000000), (int) (longitude * 1000000)),
code, name != null ? name : "");
// Get risk
Risk risk = null;
if (sourceCursor.isNull(columnRisk))
risk = Risk.UNSPECIFIED;
else
risk = Risk.fromInt(sourceCursor.getInt(columnRisk));
newItem.setMarker(markers.get(risk));
return newItem;
}
@Override
protected boolean onTap(int index)
{
if (sourceTapped != null) {
sourceCursor.moveToPosition(index);
long id = sourceCursor.getLong(sourceCursor.getColumnIndex(SourcesTable.COLUMN_ID));
sourceTapped.onSourceTapped(id);
// return true to indicate we've taken care of it
return true;
}
return false;
}
@Override
public int size() {
return sourceCursor.getCount();
}
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
if (!shadow)
super.draw(canvas, mapView, shadow);
}
public interface SourceTapped {
void onSourceTapped(long id);
}
}