diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2014-05-17 16:16:41 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2014-05-17 16:16:41 +0200 |
| commit | e2d03264f63d644d72c369120d542969723398a1 (patch) | |
| tree | 0f45d5c89e74928c42386c8dbf79b54030b39099 /main | |
| parent | a32ebb0d12e3501b57c043d0912230acd807b228 (diff) | |
| download | cgeo-e2d03264f63d644d72c369120d542969723398a1.zip cgeo-e2d03264f63d644d72c369120d542969723398a1.tar.gz cgeo-e2d03264f63d644d72c369120d542969723398a1.tar.bz2 | |
#3818: enable memory dumps on demand
Diffstat (limited to 'main')
| -rw-r--r-- | main/res/values/preference_keys.xml | 1 | ||||
| -rw-r--r-- | main/res/values/strings.xml | 3 | ||||
| -rw-r--r-- | main/res/xml/preferences.xml | 3 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/CgeoApplication.java | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/export/GpxExport.java | 10 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/settings/SettingsActivity.java | 10 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/utils/DebugUtils.java | 45 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/utils/ShareUtils.java | 30 |
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); + } +} |
