aboutsummaryrefslogtreecommitdiff
path: root/library
diff options
context:
space:
mode:
authorSam Judd <judds@google.com>2014-10-20 09:31:42 -0700
committerSam Judd <judds@google.com>2014-10-20 09:31:42 -0700
commit3ea7f151576f197df4bd6c3cce46f229cc281698 (patch)
treea9c79aa5c0ba309a8aff8d97b117c8f55987fe0e /library
parent29fa7dda76bf92f8d106826ec2769c0ddaade551 (diff)
downloadglide-3ea7f151576f197df4bd6c3cce46f229cc281698.tar.gz
Handle null Config requests in LruBitmapPool.
Fixes #194.
Diffstat (limited to 'library')
-rw-r--r--library/src/androidTest/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPoolTest.java28
-rw-r--r--library/src/androidTest/java/com/bumptech/glide/load/resource/bitmap/CenterCropTest.java12
-rw-r--r--library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPool.java5
-rw-r--r--library/src/main/java/com/bumptech/glide/load/resource/bitmap/CenterCrop.java3
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();