aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/utils/CancellableHandler.java
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2014-01-12 16:15:29 +0100
committerSamuel Tardieu <sam@rfc1149.net>2014-01-12 23:21:55 +0100
commit7fe17b6b441e145e7e4c46f0aed83b86a00d4e57 (patch)
tree29136ac2e174221f8ab65bb4e7874e6a2de6f1f2 /main/src/cgeo/geocaching/utils/CancellableHandler.java
parentdf177f0e15f4a8fa3dd378648477200596306be9 (diff)
downloadcgeo-7fe17b6b441e145e7e4c46f0aed83b86a00d4e57.zip
cgeo-7fe17b6b441e145e7e4c46f0aed83b86a00d4e57.tar.gz
cgeo-7fe17b6b441e145e7e4c46f0aed83b86a00d4e57.tar.bz2
When storing a cache, download images concurrently
Up to 5 downloads can happen simultaneously. Also, those downloads are executed concurrently to static map requests if any.
Diffstat (limited to 'main/src/cgeo/geocaching/utils/CancellableHandler.java')
-rw-r--r--main/src/cgeo/geocaching/utils/CancellableHandler.java16
1 files changed, 16 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/utils/CancellableHandler.java b/main/src/cgeo/geocaching/utils/CancellableHandler.java
index cb4b9db..01fb568 100644
--- a/main/src/cgeo/geocaching/utils/CancellableHandler.java
+++ b/main/src/cgeo/geocaching/utils/CancellableHandler.java
@@ -2,6 +2,9 @@ package cgeo.geocaching.utils;
import cgeo.geocaching.CgeoApplication;
+import rx.Subscription;
+import rx.subscriptions.CompositeSubscription;
+
import android.os.Handler;
import android.os.Message;
@@ -13,6 +16,7 @@ public abstract class CancellableHandler extends Handler {
protected static final int UPDATE_LOAD_PROGRESS_DETAIL = 42186;
private volatile boolean cancelled = false;
+ private static CompositeSubscription subscriptions = new CompositeSubscription();
private static class CancelHolder {
final Object payload;
@@ -30,6 +34,7 @@ public abstract class CancellableHandler extends Handler {
if (message.obj instanceof CancelHolder) {
cancelled = true;
+ subscriptions.unsubscribe();
handleCancel(((CancelHolder) message.obj).payload);
} else {
handleRegularMessage(message);
@@ -37,6 +42,17 @@ public abstract class CancellableHandler extends Handler {
}
/**
+ * Add a subscription to the list of subscriptions to be subscribed at cancellation time.
+ */
+ final public void unsubscribeIfCancelled(final Subscription subscription) {
+ subscriptions.add(subscription);
+ if (cancelled) {
+ // Protect against race conditions
+ subscriptions.unsubscribe();
+ }
+ }
+
+ /**
* Handle a non-cancel message.<br>
* Subclasses must implement this to handle messages.
*