aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2014-06-11 21:22:06 +0200
committerBananeweizen <bananeweizen@gmx.de>2014-06-11 21:22:06 +0200
commit210e8778ce82fb56e0fd683d04f69b6b7ee8a6ef (patch)
treef3a1a25bd96d0b75387920f607463b5512c27b92 /main
parent6cba3b0a9ec95436bd10259975112a8b17755e11 (diff)
downloadcgeo-210e8778ce82fb56e0fd683d04f69b6b7ee8a6ef.zip
cgeo-210e8778ce82fb56e0fd683d04f69b6b7ee8a6ef.tar.gz
cgeo-210e8778ce82fb56e0fd683d04f69b6b7ee8a6ef.tar.bz2
new: make import/export top level menu items
Diffstat (limited to 'main')
-rw-r--r--main/res/menu/cache_list_context.xml5
-rw-r--r--main/res/menu/cache_list_options.xml48
-rw-r--r--main/res/values/strings.xml1
-rw-r--r--main/src/cgeo/geocaching/CacheListActivity.java20
-rw-r--r--main/src/cgeo/geocaching/export/ExportFactory.java67
-rw-r--r--main/src/cgeo/geocaching/export/FieldnoteExport.java8
-rw-r--r--main/src/cgeo/geocaching/export/GpxExport.java10
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;