diff options
author | Sam Judd <judds@google.com> | 2014-10-20 09:31:42 -0700 |
---|---|---|
committer | Sam Judd <judds@google.com> | 2014-10-20 09:31:42 -0700 |
commit | 3ea7f151576f197df4bd6c3cce46f229cc281698 (patch) | |
tree | a9c79aa5c0ba309a8aff8d97b117c8f55987fe0e /library | |
parent | 29fa7dda76bf92f8d106826ec2769c0ddaade551 (diff) | |
download | glide-3ea7f151576f197df4bd6c3cce46f229cc281698.tar.gz |
Handle null Config requests in LruBitmapPool.
Fixes #194.
Diffstat (limited to 'library')
4 files changed, 46 insertions, 2 deletions
diff --git a/library/src/androidTest/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPoolTest.java b/library/src/androidTest/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPoolTest.java index aa8dd887..ac686591 100644 --- a/library/src/androidTest/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPoolTest.java +++ b/library/src/androidTest/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPoolTest.java @@ -20,6 +20,10 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; @RunWith(RobolectricTestRunner.class) public class LruBitmapPoolTest { @@ -108,6 +112,30 @@ public class LruBitmapPoolTest { } } + @Test + public void testPassesArgb888ToStrategyAsConfigForRequestsWithNullConfigsOnGet() { + LruPoolStrategy strategy = mock(LruPoolStrategy.class); + LruBitmapPool pool = new LruBitmapPool(100, strategy); + + Bitmap expected = createMutableBitmap(); + when(strategy.get(anyInt(), anyInt(), eq(Bitmap.Config.ARGB_8888))).thenReturn(expected); + Bitmap result = pool.get(100, 100, null); + + assertEquals(expected, result); + } + + @Test + public void testPassesArgb8888ToStrategyAsConfigForRequestsWithNullConfigsOnGetDirty() { + LruPoolStrategy strategy = mock(LruPoolStrategy.class); + LruBitmapPool pool = new LruBitmapPool(100, strategy); + + Bitmap expected = createMutableBitmap(); + when(strategy.get(anyInt(), anyInt(), eq(Bitmap.Config.ARGB_8888))).thenReturn(expected); + Bitmap result = pool.getDirty(100, 100, null); + + assertEquals(expected, result); + } + private void testTrimMemory(int fillSize, int trimLevel, int expectedSize) { MockStrategy strategy = new MockStrategy(); LruBitmapPool pool = new LruBitmapPool(MAX_SIZE, strategy); diff --git a/library/src/androidTest/java/com/bumptech/glide/load/resource/bitmap/CenterCropTest.java b/library/src/androidTest/java/com/bumptech/glide/load/resource/bitmap/CenterCropTest.java index 785da2ce..9e152969 100644 --- a/library/src/androidTest/java/com/bumptech/glide/load/resource/bitmap/CenterCropTest.java +++ b/library/src/androidTest/java/com/bumptech/glide/load/resource/bitmap/CenterCropTest.java @@ -7,12 +7,14 @@ import com.bumptech.glide.tests.Util; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.isNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -71,6 +73,16 @@ public class CenterCropTest { } @Test + public void testAsksBitmapPoolForArgb8888IfInConfigIsNull() { + Robolectric.shadowOf(harness.bitmap).setConfig(null); + + harness.centerCrop.transform(harness.resource, 10, 10); + + verify(harness.pool).get(anyInt(), anyInt(), eq(Bitmap.Config.ARGB_8888)); + verify(harness.pool, never()).get(anyInt(), anyInt(), (Bitmap.Config) isNull()); + } + + @Test public void testReturnsBitmapWithExactlyGivenDimensionsIfBitmapIsLargerThanTarget() { int expectedWidth = 75; int expectedHeight = 74; diff --git a/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPool.java b/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPool.java index c5767869..cc59abc1 100644 --- a/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPool.java +++ b/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPool.java @@ -19,6 +19,7 @@ import java.util.Set; */ public class LruBitmapPool implements BitmapPool { private static final String TAG = "LruBitmapPool"; + private static final Bitmap.Config DEFAULT_CONFIG = Bitmap.Config.ARGB_8888; private final LruPoolStrategy strategy; private final int initialMaxSize; @@ -101,7 +102,9 @@ public class LruBitmapPool implements BitmapPool { @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) @Override public synchronized Bitmap getDirty(int width, int height, Bitmap.Config config) { - final Bitmap result = strategy.get(width, height, config); + // Config will be null for non public config types, which can lead to transformations naively passing in + // null as the requested config here. See issue #194. + final Bitmap result = strategy.get(width, height, config != null ? config : DEFAULT_CONFIG); if (result == null) { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "Missing bitmap=" + strategy.logBitmap(width, height, config)); diff --git a/library/src/main/java/com/bumptech/glide/load/resource/bitmap/CenterCrop.java b/library/src/main/java/com/bumptech/glide/load/resource/bitmap/CenterCrop.java index d3633edd..62eda0fa 100644 --- a/library/src/main/java/com/bumptech/glide/load/resource/bitmap/CenterCrop.java +++ b/library/src/main/java/com/bumptech/glide/load/resource/bitmap/CenterCrop.java @@ -25,7 +25,8 @@ public class CenterCrop extends BitmapTransformation { @SuppressWarnings("PMD.CompareObjectsWithEquals") @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { - final Bitmap toReuse = pool.get(outWidth, outHeight, toTransform.getConfig()); + final Bitmap toReuse = pool.get(outWidth, outHeight, toTransform.getConfig() != null + ? toTransform.getConfig() : Bitmap.Config.ARGB_8888); Bitmap transformed = TransformationUtils.centerCrop(toReuse, toTransform, outWidth, outHeight); if (toReuse != null && toReuse != transformed && !pool.put(toReuse)) { toReuse.recycle(); |