Skip to content

Commit 1ae9a2a

Browse files
committedMay 13, 2020
Avoid IllegalArgumentException in GifFrameLoader.
IllegalArgumentException is thrown when the target is invisible and startFromFirstFrame is called and the target subsequently becomes visible.
1 parent 1caeff4 commit 1ae9a2a

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed
 

‎library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrameLoader.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,11 @@ void onFrameReady(DelayTarget delayTarget) {
268268
// already incremented the frame pointer and can't decode the same frame again. Instead we'll
269269
// just hang on to this next frame until start() or clear() are called.
270270
if (!isRunning) {
271-
pendingTarget = delayTarget;
271+
if (startFromFirstFrame) {
272+
handler.obtainMessage(FrameLoaderCallback.MSG_CLEAR, delayTarget).sendToTarget();
273+
} else {
274+
pendingTarget = delayTarget;
275+
}
272276
return;
273277
}
274278

‎library/test/src/test/java/com/bumptech/glide/load/resource/gif/GifFrameLoaderTest.java

+12
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,18 @@ public void onFrameReady_whenNotRunning_callsFrameReadyWithNewFrameOnStart() {
338338
assertThat(loader.getCurrentFrame()).isEqualTo(expected);
339339
}
340340

341+
@Test
342+
public void onFrameReady_whenInvisible_setVisibleLater() {
343+
loader = createGifFrameLoader(/*handler=*/ null);
344+
// The target is invisible at this point.
345+
loader.unsubscribe(callback);
346+
loader.setNextStartFromFirstFrame();
347+
DelayTarget loaded = mock(DelayTarget.class);
348+
when(loaded.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888));
349+
loader.onFrameReady(loaded);
350+
loader.subscribe(callback);
351+
}
352+
341353
@Test
342354
public void startFromFirstFrame_withPendingFrame_clearsPendingFrame() {
343355
loader = createGifFrameLoader(/*handler=*/ null);

0 commit comments

Comments
 (0)
Please sign in to comment.