From 7fe17b6b441e145e7e4c46f0aed83b86a00d4e57 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Sun, 12 Jan 2014 16:15:29 +0100 Subject: 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. --- main/src/cgeo/geocaching/utils/CancellableHandler.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'main/src/cgeo/geocaching/utils/CancellableHandler.java') 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.
* Subclasses must implement this to handle messages. * -- cgit v1.1