diff --git a/library/src/androidTest/java/com/bumptech/glide/load/engine/EngineJobTest.java b/library/src/androidTest/java/com/bumptech/glide/load/engine/EngineJobTest.java index 44cdf4fbefff7d675ac87d76a3e2b77a43b1944c..96b5c6d1b06a0bccdf85fc9956589f4ff2034a1d 100644 --- a/library/src/androidTest/java/com/bumptech/glide/load/engine/EngineJobTest.java +++ b/library/src/androidTest/java/com/bumptech/glide/load/engine/EngineJobTest.java @@ -105,9 +105,10 @@ public class EngineJobTest { @Test public void testListenerNotifiedOfCancelOnCancel() { - harness.getJob().cancel(); + EngineJob job = harness.getJob(); + job.cancel(); - verify(harness.listener).onEngineJobCancelled(eq(harness.key)); + verify(harness.listener).onEngineJobCancelled(eq(job), eq(harness.key)); } @Test @@ -164,7 +165,7 @@ public class EngineJobTest { job.onResourceReady(harness.resource); job.cancel(); - verify(harness.listener, never()).onEngineJobCancelled(eq(harness.key)); + verify(harness.listener, never()).onEngineJobCancelled(eq(job), eq(harness.key)); } @Test @@ -173,7 +174,7 @@ public class EngineJobTest { job.cancel(); job.cancel(); - verify(harness.listener, times(1)).onEngineJobCancelled(eq(harness.key)); + verify(harness.listener, times(1)).onEngineJobCancelled(eq(job), eq(harness.key)); } @Test diff --git a/library/src/androidTest/java/com/bumptech/glide/load/engine/EngineTest.java b/library/src/androidTest/java/com/bumptech/glide/load/engine/EngineTest.java index d930401cd909028160c7747df9574ff9e513c385..7788e07682813c12a7dcdc097112b93214282316 100644 --- a/library/src/androidTest/java/com/bumptech/glide/load/engine/EngineTest.java +++ b/library/src/androidTest/java/com/bumptech/glide/load/engine/EngineTest.java @@ -290,7 +290,7 @@ public class EngineTest { public void testRunnerIsRemovedFromRunnersOnEngineNotifiedJobCancel() { harness.doLoad(); - harness.engine.onEngineJobCancelled(harness.cacheKey); + harness.engine.onEngineJobCancelled(harness.job, harness.cacheKey); assertFalse(harness.runners.containsKey(harness.cacheKey)); } @@ -299,11 +299,29 @@ public class EngineTest { public void testRunnerIsCancelledOnEngineNotifiedJobCanceled() { harness.doLoad(); - harness.engine.onEngineJobCancelled(harness.cacheKey); + harness.engine.onEngineJobCancelled(harness.job, harness.cacheKey); verify(harness.runner).cancel(); } + @Test + public void testRunnerIsNotRemovedFromRunnersIfOldJobIsCancelled() { + harness.doLoad(); + + harness.engine.onEngineJobCancelled(mock(EngineJob.class), harness.cacheKey); + + assertEquals(harness.runner, harness.runners.get(harness.cacheKey)); + } + + @Test + public void testRunnerIsNotCancelledIfOldJobIsCancelled() { + harness.doLoad(); + + harness.engine.onEngineJobCancelled(mock(EngineJob.class), harness.cacheKey); + + verify(harness.runner, never()).cancel(); + } + @Test public void testResourceIsAddedToCacheOnReleased() { harness.engine.onResourceReleased(harness.cacheKey, harness.resource); diff --git a/library/src/main/java/com/bumptech/glide/load/engine/Engine.java b/library/src/main/java/com/bumptech/glide/load/engine/Engine.java index aeb775afd0e1016a54c001402bc4dd95c2e2de12..26a1ae01b2f2cd8f70cb748b5028cd93f0078aaf 100644 --- a/library/src/main/java/com/bumptech/glide/load/engine/Engine.java +++ b/library/src/main/java/com/bumptech/glide/load/engine/Engine.java @@ -208,9 +208,12 @@ public class Engine implements EngineJobListener, MemoryCache.ResourceRemovedLis } @Override - public void onEngineJobCancelled(Key key) { - ResourceRunner runner = runners.remove(key); - runner.cancel(); + public void onEngineJobCancelled(EngineJob engineJob, Key key) { + ResourceRunner runner = runners.get(key); + if (runner.getJob() == engineJob) { + runners.remove(key); + runner.cancel(); + } } @Override diff --git a/library/src/main/java/com/bumptech/glide/load/engine/EngineJob.java b/library/src/main/java/com/bumptech/glide/load/engine/EngineJob.java index fc75605970006656cf7650418cb7d08b5904df1e..c1ffa6ff925230c9780843be887db616c76e64bf 100644 --- a/library/src/main/java/com/bumptech/glide/load/engine/EngineJob.java +++ b/library/src/main/java/com/bumptech/glide/load/engine/EngineJob.java @@ -13,7 +13,7 @@ import java.util.List; * A class that manages a load by adding and removing callbacks for for the load and notifying callbacks when the * load completes. */ -public class EngineJob implements ResourceCallback { +class EngineJob implements ResourceCallback { private static final String TAG = "EngineJob"; private boolean isCacheable; private final EngineJobListener listener; @@ -61,7 +61,7 @@ public class EngineJob implements ResourceCallback { return; } isCancelled = true; - listener.onEngineJobCancelled(key); + listener.onEngineJobCancelled(this, key); } // Exposed for testing. diff --git a/library/src/main/java/com/bumptech/glide/load/engine/EngineJobListener.java b/library/src/main/java/com/bumptech/glide/load/engine/EngineJobListener.java index 1e55d062c02c8cb4336c9c854f88398f79cb96ea..8047fdf728e1a56441ab99c274bbbff36f5ff535 100644 --- a/library/src/main/java/com/bumptech/glide/load/engine/EngineJobListener.java +++ b/library/src/main/java/com/bumptech/glide/load/engine/EngineJobListener.java @@ -6,5 +6,5 @@ interface EngineJobListener { public void onEngineJobComplete(Key key, Resource resource); - public void onEngineJobCancelled(Key key); + public void onEngineJobCancelled(EngineJob engineJob, Key key); }