package carnero.cgeo.original.mapcommon;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.DialogInterface;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.Point;
import android.location.Location;
import android.text.Html;
import android.util.Log;
import carnero.cgeo.original.libs.Base;
import carnero.cgeo.original.models.Coord;
import carnero.cgeo.original.libs.Settings;
import carnero.cgeo.original.cacheDetail;
import carnero.cgeo.original.navigate;
import carnero.cgeo.original.mapPopup;
import carnero.cgeo.original.waypointDetail;
import carnero.cgeo.original.mapinterfaces.GeoPointImpl;
import carnero.cgeo.original.mapinterfaces.ItemizedOverlayImpl;
import carnero.cgeo.original.mapinterfaces.MapFactory;
import carnero.cgeo.original.mapinterfaces.MapProjectionImpl;
import carnero.cgeo.original.mapinterfaces.OverlayBase;
import carnero.cgeo.original.mapinterfaces.MapViewImpl;
import carnero.cgeo.original.mapinterfaces.CacheOverlayItemImpl;
import java.util.ArrayList;
public class MapOverlay extends ItemizedOverlayBase implements OverlayBase {
private ArrayList<CacheOverlayItemImpl> items = new ArrayList<CacheOverlayItemImpl>();
private Context context = null;
private Boolean fromDetail = false;
private ProgressDialog waitDialog = null;
private Point center = new Point();
private Point left = new Point();
private Paint blockedCircle = null;
private PaintFlagsDrawFilter setfil = null;
private PaintFlagsDrawFilter remfil = null;
private Settings settings;
public MapOverlay(Settings settingsIn, ItemizedOverlayImpl ovlImpl, Context contextIn, Boolean fromDetailIn) {
super(ovlImpl);
populate();
settings = settingsIn;
context = contextIn;
fromDetail = fromDetailIn;
}
public void updateItems(CacheOverlayItemImpl item) {
ArrayList<CacheOverlayItemImpl> itemsPre = new ArrayList<CacheOverlayItemImpl>();
itemsPre.add(item);
updateItems(itemsPre);
}
public void updateItems(ArrayList<CacheOverlayItemImpl> itemsPre) {
if (itemsPre == null) {
return;
}
for (CacheOverlayItemImpl item : itemsPre) {
item.setMarker(boundCenterBottom(item.getMarker(0)));
}
items = (ArrayList<CacheOverlayItemImpl>) itemsPre.clone();
setLastFocusedItemIndex(-1); // to reset tap during data change
populate();
}
@Override
public void draw(Canvas canvas, MapViewImpl mapView, boolean shadow) {
super.draw(canvas, mapView, false);
}
@Override
public boolean onTap(int index) {
try {
if (items.size() <= index) {
return false;
}
if (waitDialog == null) {
waitDialog = new ProgressDialog(context);
waitDialog.setMessage("loading details...");
waitDialog.setCancelable(false);
}
waitDialog.show();
CacheOverlayItemImpl item = items.get(index);
Coord coordinate = item.getCoord();
if (coordinate.type != null && coordinate.type.equalsIgnoreCase("cache") == true && coordinate.geocode != null && coordinate.geocode.length() > 0) {
Intent popupIntent = new Intent(context, mapPopup.class);
popupIntent.putExtra("fromdetail", fromDetail);
popupIntent.putExtra("geocode", coordinate.geocode);
context.startActivity(popupIntent);
} else if (coordinate.type != null && coordinate.type.equalsIgnoreCase("waypoint") == true && coordinate.id != null && coordinate.id > 0) {
Intent popupIntent = new Intent(context, waypointDetail.class);
popupIntent.putExtra("waypoint", coordinate.id);
popupIntent.putExtra("geocode", coordinate.geocode);
context.startActivity(popupIntent);
} else {
waitDialog.dismiss();
return false;
}
waitDialog.dismiss();
} catch (Exception e) {
Log.e(Settings.tag, "cgMapOverlay.onTap: " + e.toString());
}
return false;
}
@Override
public CacheOverlayItemImpl createItem(int index) {
try {
return items.get(index);
} catch (Exception e) {
Log.e(Settings.tag, "cgMapOverlay.createItem: " + e.toString());
}
return null;
}
@Override
public int size() {
try {
return items.size();
} catch (Exception e) {
Log.e(Settings.tag, "cgMapOverlay.size: " + e.toString());
}
return 0;
}
public void infoDialog(int index) {
final CacheOverlayItemImpl item = items.get(index);
final Coord coordinate = item.getCoord();
if (coordinate == null) {
Log.e(Settings.tag, "cgMapOverlay:infoDialog: No coordinates given");
return;
}
try {
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
dialog.setCancelable(true);
if (coordinate.type.equalsIgnoreCase("cache")) {
dialog.setTitle("cache");
String cacheType;
if (Base.cacheTypesInv.containsKey(coordinate.typeSpec) == true) {
cacheType = Base.cacheTypesInv.get(coordinate.typeSpec);
} else {
cacheType = Base.cacheTypesInv.get("mystery");
}
dialog.setMessage(Html.fromHtml(item.getTitle()) + "\n\ngeocode: " + coordinate.geocode.toUpperCase() + "\ntype: " + cacheType);
if (fromDetail == false) {
dialog.setPositiveButton("detail", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent cachesIntent = new Intent(context, cacheDetail.class);
cachesIntent.putExtra("geocode", coordinate.geocode.toUpperCase());
context.startActivity(cachesIntent);
dialog.cancel();
}
});
} else {
dialog.setPositiveButton("navigate", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
navigate navigateActivity = new navigate();
navigate.coordinates = new ArrayList<Coord>();
navigate.coordinates.add(coordinate);
Intent navigateIntent = new Intent(context, navigateActivity.getClass());
navigateIntent.putExtra("latitude", coordinate.latitude);
navigateIntent.putExtra("longitude", coordinate.longitude);
navigateIntent.putExtra("geocode", coordinate.geocode.toUpperCase());
context.startActivity(navigateIntent);
dialog.cancel();
}
});
}
} else {
dialog.setTitle("waypoint");
String waypointType;
if (Base.cacheTypesInv.containsKey(coordinate.typeSpec) == true) {
waypointType = Base.waypointTypes.get(coordinate.typeSpec);
} else {
waypointType = Base.waypointTypes.get("waypoint");
}
dialog.setMessage(Html.fromHtml(item.getTitle()) + "\n\ntype: " + waypointType);
dialog.setPositiveButton("navigate", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
navigate navigateActivity = new navigate();
navigate.coordinates = new ArrayList<Coord>();
navigate.coordinates.add(coordinate);
Intent navigateIntent = new Intent(context, navigateActivity.getClass());
navigateIntent.putExtra("latitude", coordinate.latitude);
navigateIntent.putExtra("longitude", coordinate.longitude);
navigateIntent.putExtra("geocode", coordinate.name);
context.startActivity(navigateIntent);
dialog.cancel();
}
});
}
dialog.setNegativeButton("dismiss", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = dialog.create();
alert.show();
} catch (Exception e) {
Log.e(Settings.tag, "cgMapOverlay.infoDialog: " + e.toString());
}
}
}