Allow Canvas.setBitmap() to receive a null Bitmap.
Change-Id: I6096f0b44866e532ccd96a29c816bf34d48c1dc2
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index dd7eaa9..c270fd4 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -10287,6 +10287,7 @@
canvas.restoreToCount(restoreCount);
if (attachInfo != null) {
+ canvas.setBitmap(null);
// Restore the cached Canvas for our siblings
attachInfo.mCanvas = canvas;
}
diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp
index 682c3c4..f8be136 100644
--- a/core/jni/android/graphics/Canvas.cpp
+++ b/core/jni/android/graphics/Canvas.cpp
@@ -88,9 +88,12 @@
return canvas->getDevice()->accessBitmap(false).height();
}
- static void setBitmap(JNIEnv* env, jobject, SkCanvas* canvas,
- SkBitmap* bitmap) {
- canvas->setBitmapDevice(*bitmap);
+ static void setBitmap(JNIEnv* env, jobject, SkCanvas* canvas, SkBitmap* bitmap) {
+ if (bitmap) {
+ canvas->setBitmapDevice(*bitmap);
+ } else {
+ canvas->setDevice(NULL);
+ }
}
static int saveAll(JNIEnv* env, jobject jcanvas) {
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index 35ed4d2..6ae8c9b 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -178,17 +178,22 @@
* @see #getDensity()
*/
public void setBitmap(Bitmap bitmap) {
- if (!bitmap.isMutable()) {
- throw new IllegalStateException();
- }
if (isHardwareAccelerated()) {
throw new RuntimeException("Can't set a bitmap device on a GL canvas");
}
- throwIfRecycled(bitmap);
- native_setBitmap(mNativeCanvas, bitmap.ni());
+ int pointer = 0;
+ if (bitmap != null) {
+ if (!bitmap.isMutable()) {
+ throw new IllegalStateException();
+ }
+ throwIfRecycled(bitmap);
+ mDensity = bitmap.mDensity;
+ pointer = bitmap.ni();
+ }
+
+ native_setBitmap(mNativeCanvas, pointer);
mBitmap = bitmap;
- mDensity = bitmap.mDensity;
}
/**
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java
index 833b61c..c241a62 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java
@@ -101,6 +101,7 @@
Canvas canvas = new Canvas(mBitmap);
canvas.translate(-mPathBounds.left + mOffset * 1.5f, -mPathBounds.top + mOffset * 1.5f);
canvas.drawPath(mPath, mMediumPaint);
+ canvas.setBitmap(null);
}
@Override