diff options
| author | rsudev <rasch@munin-soft.de> | 2013-10-18 15:02:48 +0200 |
|---|---|---|
| committer | rsudev <rasch@munin-soft.de> | 2013-10-18 15:02:48 +0200 |
| commit | 2a74f5c1f3c11ba217d6b8cb732ddc3ce4610d4b (patch) | |
| tree | 1ab2c052bb0cf5178a98c57846f1f7cccb247ae9 | |
| parent | 65bb33e849dd0f101df801d5e1334fe30ea974b8 (diff) | |
| parent | e6606ad7690c84c9ee03c9195859382e9ae1de6b (diff) | |
| download | cgeo-2a74f5c1f3c11ba217d6b8cb732ddc3ce4610d4b.zip cgeo-2a74f5c1f3c11ba217d6b8cb732ddc3ce4610d4b.tar.gz cgeo-2a74f5c1f3c11ba217d6b8cb732ddc3ce4610d4b.tar.bz2 | |
Merge branch 'release' into master_dev
5 files changed, 95 insertions, 20 deletions
diff --git a/main/res/layout/gpx.xml b/main/res/layout/gpx.xml index c48c28f..948c265 100644 --- a/main/res/layout/gpx.xml +++ b/main/res/layout/gpx.xml @@ -6,6 +6,11 @@ <include layout="@layout/actionbar" /> + <Button + android:id="@+id/select_dir" + style="@style/button_full" + android:visibility="gone"/> + <ListView android:id="@android:id/list" android:layout_width="fill_parent" diff --git a/main/src/cgeo/geocaching/SelectMapfileActivity.java b/main/src/cgeo/geocaching/SelectMapfileActivity.java index 8b50c1f..9d86fa5 100644 --- a/main/src/cgeo/geocaching/SelectMapfileActivity.java +++ b/main/src/cgeo/geocaching/SelectMapfileActivity.java @@ -1,14 +1,23 @@ package cgeo.geocaching; +import butterknife.InjectView; +import butterknife.Views; + import cgeo.geocaching.files.AbstractFileListActivity; import cgeo.geocaching.files.IFileSelectionView; import cgeo.geocaching.files.LocalStorage; +import cgeo.geocaching.files.SimpleDirChooser; import cgeo.geocaching.settings.Settings; import cgeo.geocaching.ui.FileSelectionListAdapter; +import org.openintents.intents.FileManagerIntents; + import android.content.Context; import android.content.Intent; import android.os.Bundle; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; import java.io.File; import java.util.ArrayList; @@ -20,12 +29,40 @@ public class SelectMapfileActivity extends AbstractFileListActivity<FileSelectio super("map"); } + @InjectView(R.id.select_dir) protected Button selectDirectory; + private String mapFile; + private static int REQUEST_DIRECTORY = 1; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + Views.inject(this); + mapFile = Settings.getMapFile(); + + selectDirectory.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + try { + final Intent dirChooser = new Intent(FileManagerIntents.ACTION_PICK_DIRECTORY); + dirChooser.putExtra(FileManagerIntents.EXTRA_TITLE, + getString(R.string.simple_dir_chooser_title)); + dirChooser.putExtra(FileManagerIntents.EXTRA_BUTTON_TEXT, + getString(android.R.string.ok)); + startActivityForResult(dirChooser, REQUEST_DIRECTORY); + } catch (android.content.ActivityNotFoundException ex) { + // OI file manager not available + final Intent dirChooser = new Intent(SelectMapfileActivity.this, SimpleDirChooser.class); + dirChooser.putExtra(Intents.EXTRA_START_DIR, LocalStorage.getStorage().getAbsolutePath()); + startActivityForResult(dirChooser, REQUEST_DIRECTORY); + } + } + }); + selectDirectory.setText(getResources().getString(R.string.simple_dir_chooser_title)); + selectDirectory.setVisibility(View.VISIBLE); } @Override @@ -70,4 +107,22 @@ public class SelectMapfileActivity extends AbstractFileListActivity<FileSelectio return this; } + @Override + protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode != RESULT_OK) { + return; + } + + if (requestCode == REQUEST_DIRECTORY) { + final String directory = new File(data.getData().getPath()).getAbsolutePath(); + mapFile = directory; + close(); + } + } + + @Override + protected boolean requireFiles() { + return false; + } } diff --git a/main/src/cgeo/geocaching/files/AbstractFileListActivity.java b/main/src/cgeo/geocaching/files/AbstractFileListActivity.java index 78cb2df..35e6265 100644 --- a/main/src/cgeo/geocaching/files/AbstractFileListActivity.java +++ b/main/src/cgeo/geocaching/files/AbstractFileListActivity.java @@ -66,7 +66,7 @@ public abstract class AbstractFileListActivity<T extends ArrayAdapter<File>> ext if (waitDialog != null) { waitDialog.dismiss(); } - if (CollectionUtils.isEmpty(files)) { + if (CollectionUtils.isEmpty(files) && requireFiles()) { showToast(res.getString(R.string.file_list_no_files)); finish(); } else if (adapter != null) { @@ -104,7 +104,7 @@ public abstract class AbstractFileListActivity<T extends ArrayAdapter<File>> ext if (searchingThread != null && searchingThread.isAlive()) { searchingThread.notifyEnd(); } - if (files.isEmpty()) { + if (files.isEmpty() && requireFiles()) { finish(); } } @@ -121,6 +121,10 @@ public abstract class AbstractFileListActivity<T extends ArrayAdapter<File>> ext } + protected boolean requireFiles() { + return true; + } + protected abstract T getAdapter(List<File> files); private void setAdapter() { diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java index 50dc51d..801abe4 100644 --- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java +++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java @@ -50,25 +50,24 @@ public final class MapsforgeMapProvider extends AbstractMapProvider { } public static List<String> getOfflineMaps() { - final String mapFile = Settings.getMapFile(); - if (StringUtils.isEmpty(mapFile)) { - return Collections.emptyList(); - } - try { - File directory = new File(mapFile).getParentFile(); - ArrayList<String> mapFileList = new ArrayList<String>(); - for (File file : directory.listFiles()) { - if (file.getName().endsWith(".map")) { - if (MapsforgeMapProvider.isValidMapFile(file.getAbsolutePath())) { - mapFileList.add(file.getAbsolutePath()); + File directory = new File(Settings.getMapFileDirectory()); + + if (directory.isDirectory()) { + try { + ArrayList<String> mapFileList = new ArrayList<String>(); + for (File file : directory.listFiles()) { + if (file.getName().endsWith(".map")) { + if (MapsforgeMapProvider.isValidMapFile(file.getAbsolutePath())) { + mapFileList.add(file.getAbsolutePath()); + } } } + Collections.sort(mapFileList, String.CASE_INSENSITIVE_ORDER); + return mapFileList; + } catch (Exception e) { + Log.e("MapsforgeMapProvider.getOfflineMaps: ", e); } - Collections.sort(mapFileList, String.CASE_INSENSITIVE_ORDER); - return mapFileList; - } catch (Exception e) { - Log.e("MapsforgeMapProvider.getOfflineMaps: ", e); } return Collections.emptyList(); } diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java index 5afd817..629debd 100644 --- a/main/src/cgeo/geocaching/settings/SettingsActivity.java +++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java @@ -414,9 +414,21 @@ public class SettingsActivity extends PreferenceActivity { case R.string.pref_mapDirectory: if (data.hasExtra(Intents.EXTRA_MAP_FILE)) { final String mapFile = data.getStringExtra(Intents.EXTRA_MAP_FILE); - Settings.setMapFile(mapFile); - if (!Settings.isValidMapFile(Settings.getMapFile())) { - ActivityMixin.showToast(this, R.string.warn_invalid_mapfile); + File file = new File(mapFile); + if (!file.isDirectory()) { + Settings.setMapFile(mapFile); + if (!Settings.isValidMapFile(Settings.getMapFile())) { + ActivityMixin.showToast(this, R.string.warn_invalid_mapfile); + } else { + // Ensure map source preference is updated accordingly. + // TODO: There should be a better way to find and select the map source for a map file + Integer mapSourceId = mapFile.hashCode(); + ListPreference mapSource = (ListPreference) getPreference(R.string.pref_mapsource); + mapSource.setValue(mapSourceId.toString()); + VALUE_CHANGE_LISTENER.onPreferenceChange(mapSource, mapSourceId); + } + } else { + Settings.setMapFileDirectory(mapFile); } } initMapSourcePreference(); |
