package org.imogene.map.provider.osm.app;
import org.imogene.map.provider.common.Constants.Extras;
import org.imogene.map.provider.osm.R;
import org.imogene.map.provider.osm.overlay.EditableBoundingBoxOverlay;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
public class BoundingBoxPicker extends MapActivity implements OnClickListener {
private static final int DIALOG_UNSAVED_ID = 1;
public EditableBoundingBoxOverlay mOverlay;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Intent intent = getIntent();
mOverlay = new EditableBoundingBoxOverlay(this);
mOverlay.setNorth((int) (intent.getDoubleExtra(Extras.EXTRA_NORTH, 51.508742) * 1E6));
mOverlay.setWest((int) (intent.getDoubleExtra(Extras.EXTRA_WEST, 2.021484) * 1E6));
mOverlay.setSouth((int) (intent.getDoubleExtra(Extras.EXTRA_SOUTH, 43.197167) * 1E6));
mOverlay.setEast((int) (intent.getDoubleExtra(Extras.EXTRA_EAST, 29.707031) * 1E6));
mMapView.getOverlays().add(mOverlay);
// autozoom();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(Extras.EXTRA_EAST, mOverlay.getEast());
outState.putInt(Extras.EXTRA_NORTH, mOverlay.getNorth());
outState.putInt(Extras.EXTRA_SOUTH, mOverlay.getSouth());
outState.putInt(Extras.EXTRA_WEST, mOverlay.getWest());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mOverlay.setEast(savedInstanceState.getInt(Extras.EXTRA_EAST));
mOverlay.setNorth(savedInstanceState.getInt(Extras.EXTRA_NORTH));
mOverlay.setSouth(savedInstanceState.getInt(Extras.EXTRA_SOUTH));
mOverlay.setWest(savedInstanceState.getInt(Extras.EXTRA_WEST));
}
@Override
protected boolean isAutozoomDisplayed() {
return true;
}
@Override
protected boolean isValidateDisplayed() {
return true;
}
@Override
protected void autozoom() {
mController.setCenter(mOverlay.getCenter());
int latSpan = (int) (mOverlay.getLatitudeSpan() * 1.25);
int lonSpan = (int) (mOverlay.getLongitudeSpan() * 1.25);
mController.zoomToSpan(latSpan, lonSpan);
}
@Override
protected void validate() {
Intent intent = new Intent();
intent.putExtra(Extras.EXTRA_NORTH, (double) (mOverlay.getNorth() / 1E6));
intent.putExtra(Extras.EXTRA_EAST, (double) (mOverlay.getEast() / 1E6));
intent.putExtra(Extras.EXTRA_SOUTH, (double) (mOverlay.getSouth() / 1E6));
intent.putExtra(Extras.EXTRA_WEST, (double) (mOverlay.getWest() / 1E6));
setResult(RESULT_OK, intent);
super.finish();
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_UNSAVED_ID:
return new AlertDialog.Builder(this)
.setTitle(android.R.string.dialog_alert_title)
.setIcon(android.R.drawable.ic_dialog_alert)
.setMessage(R.string.unsaved_dialog_msg)
.setPositiveButton(android.R.string.yes, this)
.setNegativeButton(R.string.no, this)
.setNeutralButton(android.R.string.cancel, null)
.setCancelable(false)
.create();
default:
return super.onCreateDialog(id);
}
}
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case Dialog.BUTTON_POSITIVE:
validate();
break;
case Dialog.BUTTON_NEGATIVE:
forceFinish();
break;
}
}
@Override
public void finish() {
showDialog(DIALOG_UNSAVED_ID);
}
private void forceFinish() {
setResult(RESULT_CANCELED);
super.finish();
}
}
|