@Override
  public void finish() {
    ListActivity.info("finish mapping.");
    finishing.set(true);

    super.finish();
  }
  @Override
  public void onResume() {
    ListActivity.info("resume mapping.");
    myLocationOverlay.enableCompass();
    enableLocation();

    super.onResume();
  }
  @Override
  public void onPause() {
    ListActivity.info("pause mapping.");
    myLocationOverlay.disableCompass();
    disableLocation();

    super.onPause();
  }
 @Override
 public Object onRetainNonConfigurationInstance() {
   ListActivity.info("MappingActivity: onRetainNonConfigurationInstance");
   // save the map info
   state.oldCenter = mapView.getMapCenter();
   state.oldZoom = mapView.getZoomLevel();
   // return state class to copy data from
   return state;
 }
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
   if (keyCode == KeyEvent.KEYCODE_BACK) {
     ListActivity.info("onKeyDown: not quitting app on back");
     MainActivity.switchTab(this, MainActivity.TAB_LIST);
     return true;
   }
   return super.onKeyDown(keyCode, event);
 }
 private static Location safelyGetLast(final Context context, final String provider) {
   Location retval = null;
   try {
     final LocationManager locationManager =
         (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
     retval = locationManager.getLastKnownLocation(provider);
   } catch (IllegalArgumentException ex) {
     ListActivity.info("exception getting last known location: " + ex);
   }
   return retval;
 }
  @Override
  public void onDestroy() {
    ListActivity.info("destroy mapping.");
    finishing.set(true);

    // save zoom
    final SharedPreferences prefs = this.getSharedPreferences(ListActivity.SHARED_PREFS, 0);
    final Editor edit = prefs.edit();
    edit.putInt(ListActivity.PREF_PREV_ZOOM, mapView.getZoomLevel());
    edit.commit();

    super.onDestroy();
  }
  private void setupMapView(final IGeoPoint oldCenter, final int oldZoom) {
    // view
    final RelativeLayout rlView = (RelativeLayout) this.findViewById(R.id.map_rl);

    // tryEvil();

    // possibly choose goog maps here
    mapView = new MapView(this, 256);

    if (mapView instanceof View) {
      ViewGroup.LayoutParams params =
          new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
      ((View) mapView).setLayoutParams(params);
    }

    if (mapView instanceof MapView) {
      final MapView osmMapView = (MapView) mapView;
      rlView.addView(osmMapView);
      osmMapView.setBuiltInZoomControls(true);
      osmMapView.setMultiTouchControls(true);

      // my location overlay
      myLocationOverlay = new MyLocationOverlay(getApplicationContext(), osmMapView);
      myLocationOverlay.setLocationUpdateMinTime(ListActivity.LOCATION_UPDATE_INTERVAL);
      myLocationOverlay.setDrawAccuracyEnabled(false);
      osmMapView.getOverlays().add(myLocationOverlay);

      final OpenStreetMapViewWrapper overlay = new OpenStreetMapViewWrapper(this);
      osmMapView.getOverlays().add(overlay);
    }

    // controller
    mapControl = mapView.getController();
    final IGeoPoint centerPoint = getCenter(this, oldCenter, previousLocation);
    int zoom = DEFAULT_ZOOM;
    if (oldZoom >= 0) {
      zoom = oldZoom;
    } else {
      final SharedPreferences prefs = getSharedPreferences(ListActivity.SHARED_PREFS, 0);
      zoom = prefs.getInt(ListActivity.PREF_PREV_ZOOM, zoom);
    }
    mapControl.setCenter(centerPoint);
    mapControl.setZoom(zoom);
    mapControl.setCenter(centerPoint);

    ListActivity.info("done setupMapView. zoom: " + zoom);
  }
  public static Dialog createSsidFilterDialog(final Activity activity, final String prefix) {
    final Dialog dialog = new Dialog(activity);

    dialog.setContentView(R.layout.filterdialog);
    dialog.setTitle("SSID Filter");

    ListActivity.info("make new dialog");
    final SharedPreferences prefs = activity.getSharedPreferences(ListActivity.SHARED_PREFS, 0);
    final EditText regex = (EditText) dialog.findViewById(R.id.edit_regex);
    regex.setText(prefs.getString(prefix + ListActivity.PREF_MAPF_REGEX, ""));

    final CheckBox invert =
        MainActivity.prefSetCheckBox(
            activity, dialog, R.id.showinvert, prefix + ListActivity.PREF_MAPF_INVERT, false);
    final CheckBox open =
        MainActivity.prefSetCheckBox(
            activity, dialog, R.id.showopen, prefix + ListActivity.PREF_MAPF_OPEN, true);
    final CheckBox wep =
        MainActivity.prefSetCheckBox(
            activity, dialog, R.id.showwep, prefix + ListActivity.PREF_MAPF_WEP, true);
    final CheckBox wpa =
        MainActivity.prefSetCheckBox(
            activity, dialog, R.id.showwpa, prefix + ListActivity.PREF_MAPF_WPA, true);
    final CheckBox cell =
        MainActivity.prefSetCheckBox(
            activity, dialog, R.id.showcell, prefix + ListActivity.PREF_MAPF_CELL, true);
    final CheckBox enabled =
        MainActivity.prefSetCheckBox(
            activity, dialog, R.id.enabled, prefix + ListActivity.PREF_MAPF_ENABLED, true);

    Button ok = (Button) dialog.findViewById(R.id.ok_button);
    ok.setOnClickListener(
        new OnClickListener() {
          public void onClick(final View buttonView) {
            try {
              final Editor editor = prefs.edit();
              editor.putString(prefix + ListActivity.PREF_MAPF_REGEX, regex.getText().toString());
              editor.putBoolean(prefix + ListActivity.PREF_MAPF_INVERT, invert.isChecked());
              editor.putBoolean(prefix + ListActivity.PREF_MAPF_OPEN, open.isChecked());
              editor.putBoolean(prefix + ListActivity.PREF_MAPF_WEP, wep.isChecked());
              editor.putBoolean(prefix + ListActivity.PREF_MAPF_WPA, wpa.isChecked());
              editor.putBoolean(prefix + ListActivity.PREF_MAPF_CELL, cell.isChecked());
              editor.putBoolean(prefix + ListActivity.PREF_MAPF_ENABLED, enabled.isChecked());
              editor.commit();
              dialog.dismiss();
            } catch (Exception ex) {
              // guess it wasn't there anyways
              ListActivity.info("exception dismissing filter dialog: " + ex);
            }
          }
        });

    Button cancel = (Button) dialog.findViewById(R.id.cancel_button);
    cancel.setOnClickListener(
        new OnClickListener() {
          public void onClick(final View buttonView) {
            try {
              regex.setText(prefs.getString(prefix + ListActivity.PREF_MAPF_REGEX, ""));
              MainActivity.prefSetCheckBox(
                  activity, dialog, R.id.showinvert, prefix + ListActivity.PREF_MAPF_INVERT, false);
              MainActivity.prefSetCheckBox(
                  activity, dialog, R.id.showopen, prefix + ListActivity.PREF_MAPF_OPEN, true);
              MainActivity.prefSetCheckBox(
                  activity, dialog, R.id.showwep, prefix + ListActivity.PREF_MAPF_WEP, true);
              MainActivity.prefSetCheckBox(
                  activity, dialog, R.id.showwpa, prefix + ListActivity.PREF_MAPF_WPA, true);
              MainActivity.prefSetCheckBox(
                  activity, dialog, R.id.showcell, prefix + ListActivity.PREF_MAPF_CELL, true);
              MainActivity.prefSetCheckBox(
                  activity, dialog, R.id.enabled, prefix + ListActivity.PREF_MAPF_ENABLED, true);

              dialog.dismiss();
            } catch (Exception ex) {
              // guess it wasn't there anyways
              ListActivity.info("exception dismissing filter dialog: " + ex);
            }
          }
        });

    return dialog;
  }