private void saveSettings(Context context) {
    if (mSaveLastUsedFilterToSharedPrefs || mSaveLastUsedGeoToSharedPrefs) {
      // save settings
      SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
      SharedPreferences.Editor edit = sharedPref.edit();

      if (mSaveLastUsedFilterToSharedPrefs && (mFilter != null)) {
        edit.putString(STATE_Filter, mFilter.toString());
      }

      if (mSaveLastUsedGeoToSharedPrefs) {
        String currentGeoUri = mMap.getCurrentGeoUri();
        edit.putString(STATE_LAST_GEO, currentGeoUri);
      }

      edit.commit();
    }
  }
 private void onFilterChanged(GalleryFilterParameter filter) {
   if (filter != null) {
     this.mFilter = filter;
     mMap.defineNavigation(this.mFilter, null, ZoomUtil.NO_ZOOM, null);
   }
 }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
    Intent intent = this.getIntent();

    GeoPointDto geoPointFromIntent = getGeoPointDtoFromIntent(intent);
    // no geo: from intent: use last used value
    mSaveLastUsedGeoToSharedPrefs = (geoPointFromIntent == null);

    String lastGeoUri = sharedPref.getString(STATE_LAST_GEO, "geo:53,8?z=6");
    IGeoPointInfo lastGeo = mGeoUriParser.fromUri(lastGeoUri);
    if ((geoPointFromIntent != null) && (lastGeo != null)) {
      // apply default values if part is missing
      if (Double.isNaN(geoPointFromIntent.getLongitude()))
        geoPointFromIntent.setLongitude(lastGeo.getLongitude());
      if (Double.isNaN(geoPointFromIntent.getLatitude()))
        geoPointFromIntent.setLatitude(lastGeo.getLatitude());
      if (geoPointFromIntent.getZoomMin() == IGeoPointInfo.NO_ZOOM)
        geoPointFromIntent.setZoomMin(lastGeo.getZoomMin());
    }

    IGeoPointInfo initalZoom = (mSaveLastUsedGeoToSharedPrefs) ? lastGeo : geoPointFromIntent;

    String extraTitle = intent.getStringExtra(EXTRA_TITLE);
    if (extraTitle == null && (geoPointFromIntent == null)) {
      extraTitle = getString(R.string.app_map_title);
    }

    if (extraTitle == null) {
      this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    }

    setContentView(R.layout.activity_map_geo_picker);

    if (extraTitle != null) {
      this.setTitle(extraTitle);
    } else {
      setNoTitle();
    }

    mMap = (PickerLocationMapFragment) getFragmentManager().findFragmentById(R.id.fragment_map);
    mMap.STATE_LAST_VIEWPORT = "ignore"; // do not use last viewport in settings

    GeoRectangle rectangle = null;
    int zoom = ZoomUtil.NO_ZOOM;
    if ((savedInstanceState == null) && (initalZoom != null)) {
      rectangle = new GeoRectangle();
      zoom = initalZoom.getZoomMin();
      rectangle.setLogituedMin(initalZoom.getLongitude()).setLatitudeMin(initalZoom.getLatitude());
      rectangle.setLogituedMax(initalZoom.getLongitude()).setLatitudeMax(initalZoom.getLatitude());
    } // else (savedInstanceState != null) restore after rotation. fragment takes care of restoring
    // map pos

    String selectedItemsString = intent.getStringExtra(EXTRA_SELECTED_ITEMS);
    SelectedItems selectedItems =
        (selectedItemsString != null) ? new SelectedItems().parse(selectedItemsString) : null;

    String filter = null;
    // for debugging: where does the filter come from
    String dbgFilter = null;
    if (intent != null) {
      filter = intent.getStringExtra(EXTRA_FILTER);
    }
    this.mSaveLastUsedFilterToSharedPrefs = (filter == null); // false if controlled via intent
    if (savedInstanceState != null) {
      filter = savedInstanceState.getString(STATE_Filter);
      if (filter != null) dbgFilter = "filter from savedInstanceState=" + filter;
    }

    if (this.mSaveLastUsedFilterToSharedPrefs) {
      filter = sharedPref.getString(STATE_Filter, null);
      if (filter != null) dbgFilter = "filter from sharedPref=" + filter;
    }

    this.mFilter = new GalleryFilterParameter();

    if (filter != null) {
      GalleryFilterParameter.parse(filter, this.mFilter);
    }

    if (Global.debugEnabled) {
      Log.i(Global.LOG_CONTEXT, debugPrefix + dbgFilter + " => " + this.mFilter);
    }

    mMap.defineNavigation(this.mFilter, geoPointFromIntent, rectangle, zoom, selectedItems);
  }