diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2014-01-12 16:15:29 +0100 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2014-01-12 23:21:55 +0100 |
| commit | 7fe17b6b441e145e7e4c46f0aed83b86a00d4e57 (patch) | |
| tree | 29136ac2e174221f8ab65bb4e7874e6a2de6f1f2 /main/src/cgeo/geocaching/utils/CancellableHandler.java | |
| parent | df177f0e15f4a8fa3dd378648477200596306be9 (diff) | |
| download | cgeo-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.java | 16 |
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. * |
