private void openFolderPicker() {
    mGalleryQueryParameter.mUseLatLon = false;

    int dirQueryID = this.mGalleryQueryParameter.getDirQueryID();

    /** if wrong datatype was saved: gallery is not allowed for dirPicker */
    if (FotoSql.QUERY_TYPE_GALLERY == dirQueryID) {
      dirQueryID = FotoSql.QUERY_TYPE_GROUP_ALBUM;
    }

    if (mDirectoryRoot == null) {
      // not loaded yet. load directoryRoot in background
      final QueryParameterParcelable currentDirContentQuery =
          new QueryParameterParcelable(FotoSql.getQuery(dirQueryID));
      FotoSql.setWhereFilter(currentDirContentQuery, this.mGalleryQueryParameter.mFilter);

      this.mGalleryQueryParameter.mDirQueryID =
          (currentDirContentQuery != null)
              ? currentDirContentQuery.getID()
              : FotoSql.QUERY_TYPE_UNDEFINED;

      if (currentDirContentQuery != null) {
        this.mMustShowNavigator = true;
        DirectoryLoaderTask loader =
            new DirectoryLoaderTask(this, debugPrefix) {
              @Override
              protected void onPostExecute(IDirectory directoryRoot) {
                onDirectoryDataLoadComplete(directoryRoot);
              }
            };
        loader.execute(currentDirContentQuery);
      } else {
        Log.e(
            Global.LOG_CONTEXT,
            debugPrefix + " this.mDirQueryID undefined " + this.mGalleryQueryParameter.mDirQueryID);
      }
    } else {
      this.mMustShowNavigator = false;
      final FragmentManager manager = getFragmentManager();
      DirectoryPickerFragment dirDialog =
          new DirectoryPickerFragment(); // (DirectoryPickerFragment)
                                         // manager.findFragmentByTag(DLG_NAVIGATOR_TAG);
      dirDialog.defineDirectoryNavigation(
          mDirectoryRoot, dirQueryID, this.mGalleryQueryParameter.mCurrentPath);

      dirDialog.show(manager, DLG_NAVIGATOR_TAG);
    }
  }
 private QueryParameter getAsQuery() {
   IGalleryFilter filter = new GalleryFilterParameter();
   fromGui(filter);
   QueryParameter query = new QueryParameter(mRootQuery);
   FotoSql.setWhereFilter(query, filter, true);
   return query;
 }
  public static void showActivity(Activity context, SelectedItems selectedItems) {
    Uri initalUri = null;
    final Intent intent = new Intent().setClass(context, MapGeoPickerActivity.class);

    if ((selectedItems != null) && (selectedItems.size() > 0)) {
      intent.putExtra(EXTRA_SELECTED_ITEMS, selectedItems.toString());

      IGeoPoint initialPoint = FotoSql.execGetPosition(context, selectedItems.first().intValue());
      if (initialPoint != null) {
        GeoUri PARSER = new GeoUri(GeoUri.OPT_PARSE_INFER_MISSING);

        initalUri =
            Uri.parse(
                PARSER.toUriString(
                    initialPoint.getLatitude(),
                    initialPoint.getLongitude(),
                    IGeoPointInfo.NO_ZOOM));
        intent.setData(initalUri);
      }
      GalleryFilterParameter filter = new GalleryFilterParameter();
      filter.setNonGeoOnly(true);
      intent.putExtra(EXTRA_FILTER, filter.toString());
    }

    intent.setAction(Intent.ACTION_VIEW);
    if (Global.debugEnabled) {
      Log.d(
          Global.LOG_CONTEXT,
          context.getClass().getSimpleName() + " > MapGeoPickerActivity.showActivity@" + initalUri);
    }

    context.startActivity(intent);
  }
    // load from settings/instanceState
    private void loadSettingsAndInstanceState(Activity context, Bundle savedInstanceState) {
      SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
      this.mCurrentPath = sharedPref.getString(STATE_CurrentPath, this.mCurrentPath);
      this.mDirQueryID = sharedPref.getInt(STATE_DirQueryID, this.getDirQueryID());
      this.mSortID = sharedPref.getInt(STATE_SortID, this.mSortID);
      this.mSortAscending = sharedPref.getBoolean(STATE_SortAscending, this.mSortAscending);
      this.mCurrentLatLon.get(
          DirectoryFormatter.parseLatLon(sharedPref.getString(STATE_LAT_LON, null)));

      // instance state overrides settings
      if (savedInstanceState != null) {
        this.mCurrentPath = savedInstanceState.getString(STATE_CurrentPath, this.mCurrentPath);
        this.mDirQueryID = savedInstanceState.getInt(STATE_DirQueryID, this.getDirQueryID());
        this.mSortID = savedInstanceState.getInt(STATE_SortID, this.mSortID);
        this.mSortAscending =
            savedInstanceState.getBoolean(STATE_SortAscending, this.mSortAscending);
        this.mFilter = savedInstanceState.getParcelable(STATE_Filter);
        this.mCurrentLatLon.get(
            DirectoryFormatter.parseLatLon(savedInstanceState.getString(STATE_LAT_LON)));

        this.mUseLatLon = savedInstanceState.getBoolean(STATE_LAT_LON_ACTIVE, this.mUseLatLon);
      }

      if (this.mFilter == null) {
        this.mFilter = new GalleryFilterParameterParcelable();
        mFilter.loadSettings(sharedPref);
      }
      // extra parameter
      this.mGalleryContentQuery = context.getIntent().getParcelableExtra(EXTRA_QUERY);
      if (this.mGalleryContentQuery == null)
        this.mGalleryContentQuery = FotoSql.getQuery(FotoSql.QUERY_TYPE_DEFAULT);
    }
    /** combine root-query plus current selected directoryRoot */
    private QueryParameterParcelable calculateEffectiveGalleryContentQuery() {
      if (this.mGalleryContentQuery == null) return null;
      QueryParameterParcelable result = new QueryParameterParcelable(this.mGalleryContentQuery);

      FotoSql.setWhereFilter(result, this.mFilter);
      if (result == null) return null;

      if (mUseLatLon) {
        FotoSql.addWhereFilteLatLon(result, mCurrentLatLon);
      } else if (this.mCurrentPath != null) {
        FotoSql.addPathWhere(result, this.mCurrentPath, this.getDirQueryID());
      }

      FotoSql.setSort(result, mSortID, mSortAscending);
      return result;
    }
  /** called when user picks a new directory */
  @Override
  public void onDirectoryPick(String selectedAbsolutePath, int queryTypeId) {
    DirInfo dirInfo = getOrCreateDirInfo(queryTypeId);
    dirInfo.currentPath = selectedAbsolutePath;

    FotoSql.set(mFilter, selectedAbsolutePath, queryTypeId);
    toGui(mFilter);
  }
  private void setTitle() {
    String title = getIntent().getStringExtra(EXTRA_TITLE);

    if (title == null) {
      if (mGalleryQueryParameter.mUseLatLon) {
        title = getString(R.string.gallery_foto);
      } else if (this.mGalleryQueryParameter.mCurrentPath != null) {
        title =
            FotoSql.getName(this, this.mGalleryQueryParameter.getDirQueryID())
                + " - "
                + this.mGalleryQueryParameter.mCurrentPath;
      }
    }
    if (title != null) {
      this.setTitle(title + mTitleResultCount);
    }
  }
  private void onDirectoryDataLoadComplete(IDirectory directoryRoot) {
    if (directoryRoot == null) {
      final String message =
          getString(
              R.string.err_load_folder_failed,
              FotoSql.getName(this, this.mGalleryQueryParameter.getDirQueryID()));
      Toast.makeText(this, message, Toast.LENGTH_LONG).show();
    } else {
      mDirectoryRoot = directoryRoot;
      if ((mDirGui != null) && (this.mGalleryQueryParameter.mCurrentPath != null)) {
        mDirGui.defineDirectoryNavigation(
            directoryRoot,
            this.mGalleryQueryParameter.getDirQueryID(),
            this.mGalleryQueryParameter.mCurrentPath);
      }
      Global.debugMemory(debugPrefix, "onDirectoryDataLoadComplete");

      if ((mDirectoryRoot != null) && (this.mMustShowNavigator)) {
        openFolderPicker();
      }
    }
  }
 public String getSortDisplayName(Context context) {
   return FotoSql.getName(context, this.mSortID) + ((mSortAscending) ? " ^" : " V");
 }