提交 1bd66cb3 编写于 作者: S Sam Judd

Always return new copy in DrawableResource.

Fixes #276
上级 b6763aea
package com.bumptech.glide.load.resource.drawable;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
......@@ -38,18 +39,18 @@ public class DrawableResourceTest {
}
@Test
public void testReturnsDrawableOnFirstGet() {
assertEquals(drawable, resource.get());
public void testDoesNotReturnOriginalDrawableOnGet() {
when(drawable.getConstantState()).thenReturn(mock(Drawable.ConstantState.class));
assertNotEquals(drawable, resource.get());
}
@Test
public void testReturnsNewDrawableOnSecondGet() {
public void testReturnsNewDrawableOnGet() {
GifDrawable expected = mock(GifDrawable.class);
Drawable.ConstantState constantState = mock(Drawable.ConstantState.class);
when(constantState.newDrawable()).thenReturn(expected);
when(drawable.getConstantState()).thenReturn(constantState);
assertEquals(drawable, resource.get());
assertEquals(expected, resource.get());
verify(drawable).getConstantState();
......
......@@ -6,7 +6,6 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import com.bumptech.glide.util.Util;
......@@ -29,22 +28,6 @@ public class GifDrawableResourceTest {
resource = new GifDrawableResource(drawable);
}
@Test
public void testReturnsDrawableOnFirstGet() {
assertEquals(drawable, resource.get());
}
@Test
public void testReturnsNewDrawableOnSecondGet() {
GifDrawable expected = mock(GifDrawable.class);
Drawable.ConstantState constantState = mock(Drawable.ConstantState.class);
when(constantState.newDrawable()).thenReturn(expected);
when(drawable.getConstantState()).thenReturn(constantState);
resource.get();
assertEquals(expected, resource.get());
}
@Test
public void testReturnsDrawableSizePlusFirstFrameSize() {
final int size = 2134;
......
......@@ -15,7 +15,6 @@ import com.bumptech.glide.load.engine.Resource;
*/
public abstract class DrawableResource<T extends Drawable> implements Resource<T> {
protected final T drawable;
private boolean returnedOriginalDrawable;
public DrawableResource(T drawable) {
if (drawable == null) {
......@@ -25,14 +24,11 @@ public abstract class DrawableResource<T extends Drawable> implements Resource<T
}
@SuppressWarnings("unchecked")
// drawables should always return a copy of the same class
@Override
public final T get() {
if (!returnedOriginalDrawable) {
returnedOriginalDrawable = true;
return drawable;
} else {
return (T) drawable.getConstantState().newDrawable();
}
// Drawables contain temporary state related to how they're being displayed (alpha, color filter etc), so
// return a new copy each time. If we ever return the original drawable, it's temporary state may be changed
// and subsequent copies may end up with that temporary state. See #276.
return (T) drawable.getConstantState().newDrawable();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册