aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/res/values/preference_keys.xml1
-rw-r--r--main/res/values/strings.xml3
-rw-r--r--main/res/xml/preferences.xml3
-rw-r--r--main/src/cgeo/geocaching/CgeoApplication.java5
-rw-r--r--main/src/cgeo/geocaching/export/GpxExport.java10
-rw-r--r--main/src/cgeo/geocaching/settings/SettingsActivity.java10
-rw-r--r--main/src/cgeo/geocaching/utils/DebugUtils.java45
-rw-r--r--main/src/cgeo/geocaching/utils/ShareUtils.java30
8 files changed, 99 insertions, 8 deletions
diff --git a/main/res/values/preference_keys.xml b/main/res/values/preference_keys.xml
index c26f5b3..4423e33 100644
--- a/main/res/values/preference_keys.xml
+++ b/main/res/values/preference_keys.xml
@@ -168,4 +168,5 @@
<string name="pref_twitter_cache_message">twitter_cache_message</string>
<string name="pref_twitter_trackable_message">twitter_trackable_message</string>
<string name="pref_ec_icons">ec_icons</string>
+ <string name="pref_memory_dump">memory_dump</string>
</resources> \ No newline at end of file
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml
index a9d92d0..72a25c1 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -541,6 +541,9 @@
<string name="init_maintenance">Maintenance</string>
<string name="init_maintenance_directories_note">c:geo stores images, log images and other files related to a cache in a separate directory. In some cases (like importing/exporting the database) this directory may contain outdated files, which can be deleted here.</string>
<string name="init_maintenance_directories">Delete orphaned files</string>
+ <string name="init_create_memory_dump">Create memory dump</string>
+ <string name="init_memory_dump">Memory dump</string>
+ <string name="init_memory_dumped">Memory dumped to %s</string>
<string name="settings_open_website">Open website</string>
<string name="settings_settings">Settings</string>
<string name="settings_information">Information</string>
diff --git a/main/res/xml/preferences.xml b/main/res/xml/preferences.xml
index 76a6407..3e32b72 100644
--- a/main/res/xml/preferences.xml
+++ b/main/res/xml/preferences.xml
@@ -733,6 +733,9 @@
android:defaultValue="false"
android:key="@string/pref_debug"
android:title="@string/init_debug" />
+ <Preference
+ android:key="@string/pref_memory_dump"
+ android:title="@string/init_create_memory_dump" />
</PreferenceCategory>
</PreferenceScreen>
diff --git a/main/src/cgeo/geocaching/CgeoApplication.java b/main/src/cgeo/geocaching/CgeoApplication.java
index d503969..f390913 100644
--- a/main/src/cgeo/geocaching/CgeoApplication.java
+++ b/main/src/cgeo/geocaching/CgeoApplication.java
@@ -10,6 +10,7 @@ import rx.functions.Action1;
import rx.observables.ConnectableObservable;
import android.app.Application;
+import android.os.Environment;
import java.io.IOException;
import java.lang.Thread.UncaughtExceptionHandler;
@@ -43,7 +44,9 @@ public class CgeoApplication extends Application {
{
try {
Log.e("OutOfMemory");
- android.os.Debug.dumpHprofData("/sdcard/dump.hprof");
+ android.os.Debug.dumpHprofData(Environment
+ .getExternalStorageDirectory().getPath()
+ + "/dump.hprof");
} catch (IOException e) {
Log.e("Error writing dump", e);
}
diff --git a/main/src/cgeo/geocaching/export/GpxExport.java b/main/src/cgeo/geocaching/export/GpxExport.java
index 08fca0b..bb0127a 100644
--- a/main/src/cgeo/geocaching/export/GpxExport.java
+++ b/main/src/cgeo/geocaching/export/GpxExport.java
@@ -8,6 +8,7 @@ import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.AsyncTaskWithProgress;
import cgeo.geocaching.utils.FileUtils;
import cgeo.geocaching.utils.Log;
+import cgeo.geocaching.utils.ShareUtils;
import org.apache.commons.lang3.CharEncoding;
@@ -15,8 +16,6 @@ import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
-import android.content.Intent;
-import android.net.Uri;
import android.os.Environment;
import android.view.ContextThemeWrapper;
import android.view.View;
@@ -168,11 +167,8 @@ class GpxExport extends AbstractExport {
if (exportFile != null) {
ActivityMixin.showToast(activity, getName() + ' ' + getString(R.string.export_exportedto) + ": " + exportFile.toString());
if (Settings.getShareAfterExport()) {
- final 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)));
+ ShareUtils.share(activity, exportFile,
+ "application/xml", R.string.export_gpx_to);
}
} else {
ActivityMixin.showToast(activity, getString(R.string.export_failed));
diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java
index 74a9b32..8f9aad4 100644
--- a/main/src/cgeo/geocaching/settings/SettingsActivity.java
+++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java
@@ -14,6 +14,7 @@ import cgeo.geocaching.files.SimpleDirChooser;
import cgeo.geocaching.maps.MapProviderFactory;
import cgeo.geocaching.maps.interfaces.MapSource;
import cgeo.geocaching.utils.DatabaseBackupUtils;
+import cgeo.geocaching.utils.DebugUtils;
import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.StringUtils;
@@ -380,6 +381,15 @@ public class SettingsActivity extends PreferenceActivity {
return true;
}
});
+ Preference memoryDumpPref = getPreference(R.string.pref_memory_dump);
+ memoryDumpPref
+ .setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override public boolean onPreferenceClick(
+ Preference preference) {
+ DebugUtils.createMemoryDump(SettingsActivity.this);
+ return true;
+ }
+ });
}
private void initDbLocationPreference() {
diff --git a/main/src/cgeo/geocaching/utils/DebugUtils.java b/main/src/cgeo/geocaching/utils/DebugUtils.java
new file mode 100644
index 0000000..4bbc74f
--- /dev/null
+++ b/main/src/cgeo/geocaching/utils/DebugUtils.java
@@ -0,0 +1,45 @@
+package cgeo.geocaching.utils;
+
+import cgeo.geocaching.CgeoApplication;
+import cgeo.geocaching.R;
+
+import org.eclipse.jdt.annotation.NonNull;
+
+import android.content.Context;
+import android.os.Environment;
+import android.widget.Toast;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+public class DebugUtils {
+
+ private DebugUtils() {
+ // utility class
+ }
+
+ public static void createMemoryDump(final @NonNull Context context) {
+ try {
+ final Date now = new Date();
+ final SimpleDateFormat fileNameDateFormat = new SimpleDateFormat(
+ "yyyy-MM-dd_hh-mm", Locale.US);
+ File file = FileUtils.getUniqueNamedFile(Environment
+ .getExternalStorageDirectory().getPath()
+ + File.separatorChar
+ + "cgeo_dump_"
+ + fileNameDateFormat.format(now) + ".hprof");
+ android.os.Debug.dumpHprofData(file.getPath());
+ Toast.makeText(CgeoApplication.getInstance()
+ .getApplicationContext(),
+ context.getString(R.string.init_memory_dumped,
+ file.getAbsolutePath()),
+ Toast.LENGTH_LONG).show();
+ ShareUtils.share(context, file, R.string.init_memory_dump);
+ } catch (IOException e) {
+ Log.e("createMemoryDump", e);
+ }
+ }
+}
diff --git a/main/src/cgeo/geocaching/utils/ShareUtils.java b/main/src/cgeo/geocaching/utils/ShareUtils.java
new file mode 100644
index 0000000..b587547
--- /dev/null
+++ b/main/src/cgeo/geocaching/utils/ShareUtils.java
@@ -0,0 +1,30 @@
+package cgeo.geocaching.utils;
+
+import org.eclipse.jdt.annotation.NonNull;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+
+import java.io.File;
+
+public class ShareUtils {
+ private ShareUtils() {
+ // utility class
+ }
+
+ public static void share(final Context context, final @NonNull File file,
+ final @NonNull String mimeType, final int titleResourceId) {
+ final Intent shareIntent = new Intent();
+ shareIntent.setAction(Intent.ACTION_SEND);
+ shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
+ shareIntent.setType(mimeType);
+ context.startActivity(Intent.createChooser(shareIntent,
+ context.getString(titleResourceId)));
+ }
+
+ public static void share(final Context context, final @NonNull File file,
+ final int titleResourceId) {
+ share(context, file, "*/*", titleResourceId);
+ }
+}