Merge "Don't recycle bitmaps we don't own" into oc-dr1-dev
am: bc907cf9a8
Change-Id: Ib5533fdbcfba36fc1ed82e0089cc681e73a02f05
This commit is contained in:
@@ -136,12 +136,12 @@ public final class WallpaperColors implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final int bitmapArea = bitmap.getWidth() * bitmap.getHeight();
|
final int bitmapArea = bitmap.getWidth() * bitmap.getHeight();
|
||||||
|
boolean shouldRecycle = false;
|
||||||
if (bitmapArea > MAX_WALLPAPER_EXTRACTION_AREA) {
|
if (bitmapArea > MAX_WALLPAPER_EXTRACTION_AREA) {
|
||||||
|
shouldRecycle = true;
|
||||||
Size optimalSize = calculateOptimalSize(bitmap.getWidth(), bitmap.getHeight());
|
Size optimalSize = calculateOptimalSize(bitmap.getWidth(), bitmap.getHeight());
|
||||||
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, optimalSize.getWidth(),
|
bitmap = Bitmap.createScaledBitmap(bitmap, optimalSize.getWidth(),
|
||||||
optimalSize.getHeight(), true /* filter */);
|
optimalSize.getHeight(), true /* filter */);
|
||||||
bitmap.recycle();
|
|
||||||
bitmap = scaledBitmap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final Palette palette = Palette
|
final Palette palette = Palette
|
||||||
@@ -181,6 +181,11 @@ public final class WallpaperColors implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int hints = calculateHints(bitmap);
|
int hints = calculateHints(bitmap);
|
||||||
|
|
||||||
|
if (shouldRecycle) {
|
||||||
|
bitmap.recycle();
|
||||||
|
}
|
||||||
|
|
||||||
return new WallpaperColors(primary, secondary, tertiary, hints);
|
return new WallpaperColors(primary, secondary, tertiary, hints);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -77,4 +77,16 @@ public class WallpaperColorsTest {
|
|||||||
Assert.assertFalse("Light surface shouldn't support dark text "
|
Assert.assertFalse("Light surface shouldn't support dark text "
|
||||||
+ "when it contains dark pixels", supportsDarkText);
|
+ "when it contains dark pixels", supportsDarkText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WallpaperColors should not recycle bitmaps that it didn't create.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void wallpaperRecycleBitmapTest() {
|
||||||
|
Bitmap image = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888);
|
||||||
|
WallpaperColors.fromBitmap(image);
|
||||||
|
Canvas canvas = new Canvas();
|
||||||
|
// This would crash:
|
||||||
|
canvas.drawBitmap(image, 0, 0, new Paint());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user