diff options
| author | Ondřej Kunc <kunc88@gmail.com> | 2012-06-11 23:40:58 +0200 |
|---|---|---|
| committer | Ondřej Kunc <kunc88@gmail.com> | 2012-06-11 23:40:58 +0200 |
| commit | f8bdee1497fd7198d67a4666f4a377ae2f8e35a6 (patch) | |
| tree | 06dc6000b2b0240aa7065f352223119e3fefba7e /main | |
| parent | 0dd4bd74af1b1e2a871616ffd8b9416960656a46 (diff) | |
| download | cgeo-f8bdee1497fd7198d67a4666f4a377ae2f8e35a6.zip cgeo-f8bdee1497fd7198d67a4666f4a377ae2f8e35a6.tar.gz cgeo-f8bdee1497fd7198d67a4666f4a377ae2f8e35a6.tar.bz2 | |
GPX export sharing via bluetooth, gmail ...
Diffstat (limited to 'main')
| -rw-r--r-- | main/res/layout/gpx_export_dialog.xml | 26 | ||||
| -rw-r--r-- | main/res/layout/init.xml | 21 | ||||
| -rw-r--r-- | main/res/values/strings.xml | 3 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/Settings.java | 21 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/SettingsActivity.java | 11 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/export/GpxExport.java | 58 |
6 files changed, 134 insertions, 6 deletions
diff --git a/main/res/layout/gpx_export_dialog.xml b/main/res/layout/gpx_export_dialog.xml new file mode 100644 index 0000000..86c0862 --- /dev/null +++ b/main/res/layout/gpx_export_dialog.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:padding="3dip" >
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/export_gpx_info" />
+
+ <CheckBox
+ android:id="@+id/share"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/init_share_after_export" />
+
+ <Button
+ android:id="@+id/export"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_margin="3dip"
+ android:text="@string/export" />
+
+</LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/init.xml b/main/res/layout/init.xml index f5dbd2d..e16e1bf 100644 --- a/main/res/layout/init.xml +++ b/main/res/layout/init.xml @@ -644,6 +644,27 @@ android:textColor="?text_color" android:text="@string/init_maptrail" /> </LinearLayout> + + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" > + <CheckBox android:id="@+id/share_after_export" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="left" + android:padding="1px" + android:gravity="center" /> + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:gravity="left" + android:paddingRight="3dip" + android:textSize="14dip" + android:textColor="?text_color" + android:text="@string/init_share_after_export" /> + </LinearLayout> </LinearLayout> <!-- ** --> <RelativeLayout style="@style/separator_horizontal_layout" > diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index f029970..5e3db93 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -427,6 +427,7 @@ <string name="init_mapsource_select">Select Map Source</string> <string name="init_select_mapfile">…</string> <string name="init_maptrail">Show trail on Map</string> + <string name="init_share_after_export">Open share menu after GPX export</string> <string name="init_trackautovisit">Set trackables to \"Visited\" as a default</string> <string name="init_sigautoinsert">Insert signature automatically</string> <string name="init_loaddirectionimg">Load direction-image if necessary (only Basic Member)</string> @@ -826,6 +827,8 @@ <string name="export_fieldnotes_onlynew">Only since last export</string> <string name="export_fieldnotes_creating">Creating Field Notes…</string> <string name="export_gpx">GPX</string> + <string name="export_gpx_info">Field Notes will be exported into /sdcard/gpx with current date and time as file name.</string> + <string name="export_gpx_to">Send exported GPX to</string> <!-- attribute unknown --> <string name="attribute_unknown_yes">Unknown attribute present</string> diff --git a/main/src/cgeo/geocaching/Settings.java b/main/src/cgeo/geocaching/Settings.java index 70d6851..e610844 100644 --- a/main/src/cgeo/geocaching/Settings.java +++ b/main/src/cgeo/geocaching/Settings.java @@ -91,6 +91,7 @@ public final class Settings { private static final String KEY_SETTINGS_VERSION = "settingsversion"; private static final String KEY_DB_ON_SDCARD = "dbonsdcard"; private static final String KEY_LAST_TRACKABLE_ACTION = "trackableaction"; + private static final String KEY_SHARE_AFTER_EXPORT = "shareafterexport"; private final static int unitsMetric = 1; @@ -199,7 +200,7 @@ public final class Settings { e.putBoolean(KEY_HIDE_LIVE_MAP_HINT, old.getInt(KEY_HIDE_LIVE_MAP_HINT, 0) != 0); e.putInt(KEY_LIVE_MAP_HINT_SHOW_COUNT, old.getInt(KEY_LIVE_MAP_HINT_SHOW_COUNT, 0)); - e.putInt(KEY_SETTINGS_VERSION, 1) ; // mark migrated + e.putInt(KEY_SETTINGS_VERSION, 1); // mark migrated e.commit(); } } @@ -1089,7 +1090,6 @@ public final class Settings { }); } - public static boolean isDebug() { return Log.isDebug(); } @@ -1097,7 +1097,8 @@ public final class Settings { public static void setDebug(final boolean debug) { editSharedSettings(new PrefRunnable() { - @Override public void edit(Editor edit) { + @Override + public void edit(Editor edit) { edit.putBoolean(KEY_DEBUG, debug); } }); @@ -1138,7 +1139,6 @@ public final class Settings { public static void setDbOnSDCard(final boolean dbOnSDCard) { editSharedSettings(new PrefRunnable() { - @Override public void edit(Editor edit) { edit.putBoolean(KEY_DB_ON_SDCARD, dbOnSDCard); @@ -1146,6 +1146,15 @@ public final class Settings { }); } + public static void setShareAfterExport(final boolean shareAfterExport) { + editSharedSettings(new PrefRunnable() { + @Override + public void edit(Editor edit) { + edit.putBoolean(KEY_SHARE_AFTER_EXPORT, shareAfterExport); + } + }); + } + public static int getTrackableAction() { return sharedPrefs.getInt(KEY_LAST_TRACKABLE_ACTION, LogType.RETRIEVED_IT.id); } @@ -1158,6 +1167,10 @@ public final class Settings { edit.putInt(KEY_LAST_TRACKABLE_ACTION, trackableAction); } }); + } + + public static boolean getShareAfterExport() { + return sharedPrefs.getBoolean(KEY_SHARE_AFTER_EXPORT, true); } public static String getPreferencesName() { diff --git a/main/src/cgeo/geocaching/SettingsActivity.java b/main/src/cgeo/geocaching/SettingsActivity.java index cf4a358..e68f541 100644 --- a/main/src/cgeo/geocaching/SettingsActivity.java +++ b/main/src/cgeo/geocaching/SettingsActivity.java @@ -593,6 +593,16 @@ public class SettingsActivity extends AbstractActivity { } }); + final CheckBox shareAfterExportButton = (CheckBox) findViewById(R.id.share_after_export); + shareAfterExportButton.setChecked(Settings.getShareAfterExport()); + shareAfterExportButton.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + Settings.setShareAfterExport(shareAfterExportButton.isChecked()); + } + }); + // Default navigation tool settings Spinner defaultNavigationToolSelector = (Spinner) findViewById(R.id.default_navigation_tool); final List<NavigationAppsEnum> apps = NavigationAppFactory.getInstalledDefaultNavigationApps(); @@ -603,6 +613,7 @@ public class SettingsActivity extends AbstractActivity { textView.setText(getItem(position).app.getName()); return textView; } + @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { TextView textView = (TextView) super.getDropDownView(position, convertView, parent); diff --git a/main/src/cgeo/geocaching/export/GpxExport.java b/main/src/cgeo/geocaching/export/GpxExport.java index afae7ae..ef3fdd3 100644 --- a/main/src/cgeo/geocaching/export/GpxExport.java +++ b/main/src/cgeo/geocaching/export/GpxExport.java @@ -2,6 +2,7 @@ package cgeo.geocaching.export; import cgeo.geocaching.LogEntry; import cgeo.geocaching.R; +import cgeo.geocaching.Settings; import cgeo.geocaching.cgCache; import cgeo.geocaching.cgWaypoint; import cgeo.geocaching.cgeoapplication; @@ -16,9 +17,15 @@ import cgeo.geocaching.utils.Log; import org.apache.commons.lang3.StringEscapeUtils; import android.app.Activity; +import android.app.AlertDialog; import android.app.ProgressDialog; +import android.content.Intent; +import android.net.Uri; import android.os.AsyncTask; import android.os.Environment; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; import java.io.BufferedWriter; import java.io.File; @@ -39,7 +46,48 @@ class GpxExport extends AbstractExport { @Override public void export(final List<cgCache> caches, final Activity activity) { - new ExportTask(caches, activity).execute((Void) null); + if (null == activity) { + // No activity given, so no user interaction possible. + // Start export with default parameters. + new ExportTask(caches, activity).execute((Void) null); + + } else { + // Show configuration dialog + new ExportOptionsDialog(caches, activity).show(); + } + } + + /** + * A dialog to allow the user to set options for the export. + * + * Currently available options are: upload field notes, only new logs since last export/upload + */ + private class ExportOptionsDialog extends AlertDialog { + public ExportOptionsDialog(final List<cgCache> caches, final Activity activity) { + super(activity); + + View layout = activity.getLayoutInflater().inflate(R.layout.gpx_export_dialog, null); + setView(layout); + + final CheckBox shareOption = (CheckBox) layout.findViewById(R.id.share); + + shareOption.setChecked(Settings.getShareAfterExport()); + + shareOption.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Settings.setShareAfterExport(shareOption.isChecked()); + } + }); + + ((Button) layout.findViewById(R.id.export)).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + new ExportTask(caches, activity).execute((Void) null); + } + }); + } } private class ExportTask extends AsyncTask<Void, Integer, Boolean> { @@ -88,7 +136,6 @@ class GpxExport extends AbstractExport { gpx.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); gpx.write("<gpx version=\"1.0\" creator=\"c:geo - http://www.cgeo.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://www.topografix.com/GPX/1/0\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.groundspeak.com/cache/1/0/1 http://www.groundspeak.com/cache/1/0/1/cache.xsd\">"); - for (int i = 0; i < caches.size(); i++) { // reload the cache. otherwise logs, attributes and other detailed information is not available final cgCache cache = cgeoapplication.getInstance().loadCache(caches.get(i).getGeocode(), LoadFlags.LOAD_ALL_DB_ONLY); @@ -322,6 +369,13 @@ class GpxExport extends AbstractExport { progress.dismiss(); if (result) { ActivityMixin.showToast(activity, getName() + ' ' + getString(R.string.export_exportedto) + ": " + exportFile.toString()); + if (Settings.getShareAfterExport()) { + Intent shareIntent = new Intent(); + shareIntent.setAction(Intent.ACTION_SEND); + shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(exportFile)); + shareIntent.setType("application/xml"); + activity.startActivity(Intent.createChooser(shareIntent, getString(R.string.export_gpx_to))); + } } else { ActivityMixin.showToast(activity, getString(R.string.export_failed)); } |
