aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorOndřej Kunc <kunc88@gmail.com>2012-06-11 23:40:58 +0200
committerOndřej Kunc <kunc88@gmail.com>2012-06-11 23:40:58 +0200
commitf8bdee1497fd7198d67a4666f4a377ae2f8e35a6 (patch)
tree06dc6000b2b0240aa7065f352223119e3fefba7e /main
parent0dd4bd74af1b1e2a871616ffd8b9416960656a46 (diff)
downloadcgeo-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.xml26
-rw-r--r--main/res/layout/init.xml21
-rw-r--r--main/res/values/strings.xml3
-rw-r--r--main/src/cgeo/geocaching/Settings.java21
-rw-r--r--main/src/cgeo/geocaching/SettingsActivity.java11
-rw-r--r--main/src/cgeo/geocaching/export/GpxExport.java58
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));
}