aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/utils
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/utils')
-rw-r--r--main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java12
-rw-r--r--main/src/cgeo/geocaching/utils/DebugUtils.java37
-rw-r--r--main/src/cgeo/geocaching/utils/LogTemplateProvider.java62
-rw-r--r--main/src/cgeo/geocaching/utils/RxUtils.java17
-rw-r--r--main/src/cgeo/geocaching/utils/ShareUtils.java27
-rw-r--r--main/src/cgeo/geocaching/utils/TranslationUtils.java4
6 files changed, 127 insertions, 32 deletions
diff --git a/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java
index 4ce2e0c..14840b9 100644
--- a/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java
+++ b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java
@@ -10,7 +10,6 @@ import org.apache.commons.lang3.StringUtils;
import android.app.Activity;
import android.app.ProgressDialog;
-import android.content.Context;
import android.content.res.Resources;
import java.io.File;
@@ -53,7 +52,6 @@ public class DatabaseBackupUtils {
}
public static boolean createBackup(final Activity activity, final Runnable runAfterwards) {
- final Context context = activity;
// avoid overwriting an existing backup with an empty database
// (can happen directly after reinstalling the app)
if (DataStore.getAllCachesCount() == 0) {
@@ -61,9 +59,9 @@ public class DatabaseBackupUtils {
return false;
}
- final ProgressDialog dialog = ProgressDialog.show(context,
- context.getString(R.string.init_backup),
- context.getString(R.string.init_backup_running), true, false);
+ final ProgressDialog dialog = ProgressDialog.show(activity,
+ activity.getString(R.string.init_backup),
+ activity.getString(R.string.init_backup_running), true, false);
new Thread() {
@Override
public void run() {
@@ -75,9 +73,9 @@ public class DatabaseBackupUtils {
Dialogs.message(activity,
R.string.init_backup_backup,
backupFileName != null
- ? context.getString(R.string.init_backup_success)
+ ? activity.getString(R.string.init_backup_success)
+ "\n" + backupFileName
- : context.getString(R.string.init_backup_failed));
+ : activity.getString(R.string.init_backup_failed));
if (runAfterwards != null) {
runAfterwards.run();
}
diff --git a/main/src/cgeo/geocaching/utils/DebugUtils.java b/main/src/cgeo/geocaching/utils/DebugUtils.java
new file mode 100644
index 0000000..07aac64
--- /dev/null
+++ b/main/src/cgeo/geocaching/utils/DebugUtils.java
@@ -0,0 +1,37 @@
+package cgeo.geocaching.utils;
+
+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(context, 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/LogTemplateProvider.java b/main/src/cgeo/geocaching/utils/LogTemplateProvider.java
index 5fa0982..3507116 100644
--- a/main/src/cgeo/geocaching/utils/LogTemplateProvider.java
+++ b/main/src/cgeo/geocaching/utils/LogTemplateProvider.java
@@ -36,9 +36,9 @@ public final class LogTemplateProvider {
private Geocache cache;
private Trackable trackable;
private boolean offline = false;
- private LogEntry logEntry;
+ private final LogEntry logEntry;
- public LogContext(final Geocache cache, LogEntry logEntry) {
+ public LogContext(final Geocache cache, final LogEntry logEntry) {
this(cache, logEntry, false);
}
@@ -47,7 +47,7 @@ public final class LogTemplateProvider {
this.logEntry = logEntry;
}
- public LogContext(final Geocache cache, LogEntry logEntry, final boolean offline) {
+ public LogContext(final Geocache cache, final LogEntry logEntry, final boolean offline) {
this.cache = cache;
this.offline = offline;
this.logEntry = logEntry;
@@ -104,8 +104,11 @@ public final class LogTemplateProvider {
}
}
- public static ArrayList<LogTemplate> getTemplates() {
- ArrayList<LogTemplate> templates = new ArrayList<LogTemplateProvider.LogTemplate>();
+ /**
+ * @return all templates, but not the signature template itself
+ */
+ public static ArrayList<LogTemplate> getTemplatesWithoutSignature() {
+ final ArrayList<LogTemplate> templates = new ArrayList<LogTemplateProvider.LogTemplate>();
templates.add(new LogTemplate("DATE", R.string.init_signature_template_date) {
@Override
@@ -132,6 +135,13 @@ public final class LogTemplateProvider {
@Override
public String getValue(final LogContext context) {
+ final Geocache cache = context.getCache();
+ if (cache != null) {
+ final IConnector connector = ConnectorFactory.getConnector(cache);
+ if (connector instanceof ILogin) {
+ return ((ILogin) connector).getUserName();
+ }
+ }
return Settings.getUsername();
}
});
@@ -171,11 +181,11 @@ public final class LogTemplateProvider {
@Override
public String getValue(final LogContext context) {
- Trackable trackable = context.getTrackable();
+ final Trackable trackable = context.getTrackable();
if (trackable != null) {
return trackable.getOwner();
}
- Geocache cache = context.getCache();
+ final Geocache cache = context.getCache();
if (cache != null) {
return cache.getOwnerDisplayName();
}
@@ -184,12 +194,12 @@ public final class LogTemplateProvider {
});
templates.add(new LogTemplate("NAME", R.string.init_signature_template_name) {
@Override
- public String getValue(LogContext context) {
- Trackable trackable = context.getTrackable();
+ public String getValue(final LogContext context) {
+ final Trackable trackable = context.getTrackable();
if (trackable != null) {
return trackable.getName();
}
- Geocache cache = context.getCache();
+ final Geocache cache = context.getCache();
if (cache != null) {
return cache.getName();
}
@@ -199,12 +209,12 @@ public final class LogTemplateProvider {
templates.add(new LogTemplate("URL", R.string.init_signature_template_url) {
@Override
- public String getValue(LogContext context) {
- Trackable trackable = context.getTrackable();
+ public String getValue(final LogContext context) {
+ final Trackable trackable = context.getTrackable();
if (trackable != null) {
return trackable.getUrl();
}
- Geocache cache = context.getCache();
+ final Geocache cache = context.getCache();
if (cache != null) {
return cache.getUrl();
}
@@ -213,8 +223,8 @@ public final class LogTemplateProvider {
});
templates.add(new LogTemplate("LOG", R.string.init_signature_template_log) {
@Override
- public String getValue(LogContext context) {
- LogEntry logEntry = context.getLogEntry();
+ public String getValue(final LogContext context) {
+ final LogEntry logEntry = context.getLogEntry();
if (logEntry != null) {
return logEntry.getDisplayText();
}
@@ -224,8 +234,26 @@ public final class LogTemplateProvider {
return templates;
}
+ /**
+ * @return all templates, including the signature template
+ */
+ public static ArrayList<LogTemplate> getTemplatesWithSignature() {
+ final ArrayList<LogTemplate> templates = getTemplatesWithoutSignature();
+ templates.add(new LogTemplate("SIGNATURE", R.string.init_signature) {
+ @Override
+ public String getValue(final LogContext context) {
+ final String nestedTemplate = StringUtils.defaultString(Settings.getSignature());
+ if (StringUtils.contains(nestedTemplate, "SIGNATURE")) {
+ return "invalid signature template";
+ }
+ return LogTemplateProvider.applyTemplates(nestedTemplate, context);
+ }
+ });
+ return templates;
+ }
+
public static LogTemplate getTemplate(final int itemId) {
- for (LogTemplate template : getTemplates()) {
+ for (final LogTemplate template : getTemplatesWithSignature()) {
if (template.getItemId() == itemId) {
return template;
}
@@ -238,7 +266,7 @@ public final class LogTemplateProvider {
return StringUtils.EMPTY;
}
String result = signature;
- for (LogTemplate template : getTemplates()) {
+ for (final LogTemplate template : getTemplatesWithSignature()) {
result = template.apply(result, context);
}
return result;
diff --git a/main/src/cgeo/geocaching/utils/RxUtils.java b/main/src/cgeo/geocaching/utils/RxUtils.java
index 8e7864c..b865f0b 100644
--- a/main/src/cgeo/geocaching/utils/RxUtils.java
+++ b/main/src/cgeo/geocaching/utils/RxUtils.java
@@ -1,18 +1,23 @@
package cgeo.geocaching.utils;
+import rx.Observable;
import rx.Scheduler;
+import rx.observables.BlockingObservable;
import rx.schedulers.Schedulers;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
public class RxUtils {
// Utility class, not to be instanciated
private RxUtils() {}
- final static private int cores = Runtime.getRuntime().availableProcessors();
- public final static Scheduler computationScheduler = Schedulers.executor(new ThreadPoolExecutor(1, cores, 5, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()));
+ public final static Scheduler computationScheduler = Schedulers.computation();
+
+ public static <T> void waitForCompletion(final BlockingObservable<T> observable) {
+ observable.lastOrDefault(null);
+ return;
+ }
+ public static void waitForCompletion(final Observable<?>... observables) {
+ waitForCompletion(Observable.merge(observables).toBlocking());
+ }
}
diff --git a/main/src/cgeo/geocaching/utils/ShareUtils.java b/main/src/cgeo/geocaching/utils/ShareUtils.java
new file mode 100644
index 0000000..bfd6838
--- /dev/null
+++ b/main/src/cgeo/geocaching/utils/ShareUtils.java
@@ -0,0 +1,27 @@
+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);
+ }
+}
diff --git a/main/src/cgeo/geocaching/utils/TranslationUtils.java b/main/src/cgeo/geocaching/utils/TranslationUtils.java
index 619db08..ea3c395 100644
--- a/main/src/cgeo/geocaching/utils/TranslationUtils.java
+++ b/main/src/cgeo/geocaching/utils/TranslationUtils.java
@@ -1,10 +1,10 @@
package cgeo.geocaching.utils;
-import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.network.Network;
import org.apache.commons.lang3.StringUtils;
+import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
@@ -51,7 +51,7 @@ public final class TranslationUtils {
* @param text
* The text to be translated
*/
- public static void startActivityTranslate(final AbstractActivity context, final String toLang, final String text) {
+ public static void startActivityTranslate(final Activity context, final String toLang, final String text) {
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(buildTranslationURI(toLang, text))));
}
}