diff options
| -rw-r--r-- | main/res/menu/cache_list_context.xml | 5 | ||||
| -rw-r--r-- | main/res/menu/cache_list_options.xml | 48 | ||||
| -rw-r--r-- | main/res/values/strings.xml | 1 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/CacheListActivity.java | 20 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/export/ExportFactory.java | 67 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/export/FieldnoteExport.java | 8 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/export/GpxExport.java | 10 |
7 files changed, 51 insertions, 108 deletions
diff --git a/main/res/menu/cache_list_context.xml b/main/res/menu/cache_list_context.xml index 0c14241..68a0699 100644 --- a/main/res/menu/cache_list_context.xml +++ b/main/res/menu/cache_list_context.xml @@ -42,11 +42,6 @@ android:title="@string/cache_menu_move_list"> </item> <item - android:id="@+id/menu_export" - cgeo:showAsAction="ifRoom|withText" - android:title="@string/export"> - </item> - <item android:id="@+id/menu_refresh" cgeo:showAsAction="ifRoom|withText" android:icon="@drawable/ic_menu_refresh" diff --git a/main/res/menu/cache_list_options.xml b/main/res/menu/cache_list_options.xml index 8cf6f64..be45b54 100644 --- a/main/res/menu/cache_list_options.xml +++ b/main/res/menu/cache_list_options.xml @@ -60,22 +60,6 @@ android:title="@string/caches_clear_offlinelogs"> </item> <item - android:id="@+id/menu_import_gpx" - android:title="@string/gpx_import_title"> - </item> - <item - android:id="@+id/menu_import_web" - android:title="@string/web_import_title"> - </item> - <item - android:id="@+id/menu_import_android" - android:title="@string/gpx_import_android"> - </item> - <item - android:id="@+id/menu_export" - android:title="@string/export"> - </item> - <item android:id="@+id/menu_remove_from_history" android:title="@string/cache_clear_history"> </item> @@ -112,4 +96,36 @@ android:id="@+id/menu_rename_list" android:title="@string/list_menu_rename"> </item> + <item + cgeo:showAsAction="never|withText" + android:title="@string/list_menu_import"> + <menu> + <item + android:id="@+id/menu_import_gpx" + android:title="@string/gpx_import_title"> + </item> + <item + android:id="@+id/menu_import_web" + android:title="@string/web_import_title"> + </item> + <item + android:id="@+id/menu_import_android" + android:title="@string/gpx_import_android"> + </item> + </menu> + </item> + <item + cgeo:showAsAction="never|withText" + android:title="@string/export"> + <menu> + <item + android:id="@+id/menu_export_gpx" + android:title="@string/export_gpx"> + </item> + <item + android:id="@+id/menu_export_fieldnotes" + android:title="@string/export_fieldnotes"> + </item> + </menu> + </item> </menu>
\ No newline at end of file diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index deba809..51b25e2 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -335,6 +335,7 @@ <string name="list_menu_create">Create new list</string> <string name="list_menu_drop">Drop current list</string> <string name="list_menu_rename">Rename current list</string> + <string name="list_menu_import">Import</string> <string name="list_title">Pick a list</string> <string name="list_inbox">Stored</string> <string name="list_all_lists">All caches</string> diff --git a/main/src/cgeo/geocaching/CacheListActivity.java b/main/src/cgeo/geocaching/CacheListActivity.java index 92072b6..2dbb2c0 100644 --- a/main/src/cgeo/geocaching/CacheListActivity.java +++ b/main/src/cgeo/geocaching/CacheListActivity.java @@ -13,7 +13,8 @@ import cgeo.geocaching.enumerations.CacheListType; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.LoadFlags; import cgeo.geocaching.enumerations.StatusCode; -import cgeo.geocaching.export.ExportFactory; +import cgeo.geocaching.export.FieldnoteExport; +import cgeo.geocaching.export.GpxExport; import cgeo.geocaching.files.GPXImporter; import cgeo.geocaching.filter.FilterUserInterface; import cgeo.geocaching.filter.IFilter; @@ -581,7 +582,6 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA setVisible(menu, R.id.menu_drop_caches_and_list, isConcrete && !isEmpty && isOffline); setVisible(menu, R.id.menu_delete_events, isConcrete && !isEmpty && containsPastEvents()); setVisible(menu, R.id.menu_move_to_list, isOffline && !isEmpty); - setVisible(menu, R.id.menu_export, !isEmpty && (isHistory || isOffline)); setVisible(menu, R.id.menu_remove_from_history, !isEmpty && isHistory); setVisible(menu, R.id.menu_clear_offline_logs, !isEmpty && containsOfflineLogs() && (isHistory || isOffline)); setVisible(menu, R.id.menu_import_web, isOffline); @@ -612,7 +612,6 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA menu.findItem(R.id.menu_move_to_list).setVisible(!isEmpty); setMenuItemLabel(menu, R.id.menu_remove_from_history, R.string.cache_remove_from_history, R.string.cache_clear_history); - setMenuItemLabel(menu, R.id.menu_export, R.string.export, R.string.export); menu.findItem(R.id.menu_import_android).setVisible(Compatibility.isStorageAccessFrameworkAvailable() && isOffline); } catch (final RuntimeException e) { Log.e("CacheListActivity.onPrepareOptionsMenu", e); @@ -724,10 +723,13 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA return true; case R.id.menu_import_web: importWeb(); - return false; - case R.id.menu_export: - ExportFactory.showExportMenu(adapter.getCheckedOrAllCaches(), this); - return false; + return true; + case R.id.menu_export_gpx: + new GpxExport().export(adapter.getCheckedOrAllCaches(), this); + return true; + case R.id.menu_export_fieldnotes: + new FieldnoteExport().export(adapter.getCheckedOrAllCaches(), this); + return true; case R.id.menu_remove_from_history: removeFromHistoryCheck(); invalidateOptionsMenuCompatible(); @@ -832,7 +834,6 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA final boolean isOffline = cache.isOffline(); menu.findItem(R.id.menu_drop_cache).setVisible(isOffline); menu.findItem(R.id.menu_move_to_list).setVisible(isOffline); - menu.findItem(R.id.menu_export).setVisible(isOffline); menu.findItem(R.id.menu_refresh).setVisible(isOffline); menu.findItem(R.id.menu_store_cache).setVisible(!isOffline); @@ -911,9 +912,6 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA case R.id.menu_refresh: refreshStored(Collections.singletonList(cache)); break; - case R.id.menu_export: - ExportFactory.showExportMenu(Collections.singletonList(cache), this); - return false; default: // we must remember the menu info for the sub menu, there is a bug // in Android: diff --git a/main/src/cgeo/geocaching/export/ExportFactory.java b/main/src/cgeo/geocaching/export/ExportFactory.java deleted file mode 100644 index e743eb2..0000000 --- a/main/src/cgeo/geocaching/export/ExportFactory.java +++ /dev/null @@ -1,67 +0,0 @@ -package cgeo.geocaching.export; - -import cgeo.geocaching.Geocache; -import cgeo.geocaching.R; -import cgeo.geocaching.utils.Log; - -import android.app.Activity; -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.widget.ArrayAdapter; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * Factory to create a dialog with all available exporters. - */ -public abstract class ExportFactory { - - /** - * Contains instances of all available exporter classes. - */ - private static final List<Class<? extends Export>> exporterClasses; - - static { - final ArrayList<Class<? extends Export>> temp = new ArrayList<Class<? extends Export>>(); - temp.add(FieldnoteExport.class); - temp.add(GpxExport.class); - exporterClasses = Collections.unmodifiableList(temp); - } - - /** - * Creates a dialog so that the user can select an exporter. - * - * @param caches - * The {@link List} of {@link cgeo.geocaching.Geocache} to be exported - * @param activity - * The {@link Activity} in whose context the dialog should be shown - */ - public static void showExportMenu(final List<Geocache> caches, final Activity activity) { - final AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle(R.string.export).setIcon(R.drawable.ic_menu_share); - - final ArrayList<Export> export = new ArrayList<Export>(); - for (Class<? extends Export> exporterClass : exporterClasses) { - try { - export.add(exporterClass.newInstance()); - } catch (Exception ex) { - Log.e("showExportMenu", ex); - } - } - - final ArrayAdapter<Export> adapter = new ArrayAdapter<Export>(activity, android.R.layout.select_dialog_item, export); - - builder.setAdapter(adapter, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int item) { - dialog.dismiss(); - final Export selectedExport = adapter.getItem(item); - selectedExport.export(caches, activity); - } - }); - - builder.create().show(); - } -}
\ No newline at end of file diff --git a/main/src/cgeo/geocaching/export/FieldnoteExport.java b/main/src/cgeo/geocaching/export/FieldnoteExport.java index 7d3e07e..dd3c8a1 100644 --- a/main/src/cgeo/geocaching/export/FieldnoteExport.java +++ b/main/src/cgeo/geocaching/export/FieldnoteExport.java @@ -29,11 +29,11 @@ import java.util.List; * Exports offline logs in the Groundspeak Field Note format. * */ -class FieldnoteExport extends AbstractExport { +public class FieldnoteExport extends AbstractExport { private static final File exportLocation = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/field-notes"); private static int fieldNotesCount = 0; - protected FieldnoteExport() { + public FieldnoteExport() { super(getString(R.string.export_fieldnotes)); } @@ -110,7 +110,7 @@ class FieldnoteExport extends AbstractExport { @Override protected Boolean doInBackgroundInternal(final Geocache[] caches) { // export field notes separately for each connector, so the file can be uploaded to the respective site afterwards - for (IConnector connector : ConnectorFactory.getConnectors()) { + for (final IConnector connector : ConnectorFactory.getConnectors()) { if (connector instanceof FieldNotesCapability) { exportFieldNotes((FieldNotesCapability) connector, caches); } @@ -118,7 +118,7 @@ class FieldnoteExport extends AbstractExport { return true; } - private boolean exportFieldNotes(final FieldNotesCapability connector, Geocache[] caches) { + private boolean exportFieldNotes(final FieldNotesCapability connector, final Geocache[] caches) { final FieldNotes fieldNotes = new FieldNotes(); try { int i = 0; diff --git a/main/src/cgeo/geocaching/export/GpxExport.java b/main/src/cgeo/geocaching/export/GpxExport.java index 39f4bcf..5ca5179 100644 --- a/main/src/cgeo/geocaching/export/GpxExport.java +++ b/main/src/cgeo/geocaching/export/GpxExport.java @@ -34,9 +34,9 @@ import java.util.Date; import java.util.List; import java.util.Locale; -class GpxExport extends AbstractExport { +public class GpxExport extends AbstractExport { - protected GpxExport() { + public GpxExport() { super(getString(R.string.export_gpx)); } @@ -70,7 +70,7 @@ class GpxExport extends AbstractExport { shareOption.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View v) { + public void onClick(final View v) { Settings.setShareAfterExport(shareOption.isChecked()); } }); @@ -78,7 +78,7 @@ class GpxExport extends AbstractExport { builder.setPositiveButton(R.string.export, new DialogInterface.OnClickListener() { @Override - public void onClick(DialogInterface dialog, int which) { + public void onClick(final DialogInterface dialog, final int which) { dialog.dismiss(); new ExportTask(activity).execute(geocodes); } @@ -116,7 +116,7 @@ class GpxExport extends AbstractExport { } @Override - protected File doInBackgroundInternal(String[] geocodes) { + protected File doInBackgroundInternal(final String[] geocodes) { // quick check for being able to write the GPX file if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { return null; |
