am e3326143: am 2c76016c: Merge "Fix error where clips/matrices are incorrectly transferred." into jb-mr2-dev

* commit 'e3326143c63e791863c1fd95599fb9db74fb4eed':
  Fix error where clips/matrices are incorrectly transferred.
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index 58e7525..aa8d150 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -146,11 +146,13 @@
      * Replace existing canvas while ensuring that the swap has occurred before
      * the previous native canvas is unreferenced.
      */
-    private void safeCanvasSwap(int nativeCanvas) {
+    private void safeCanvasSwap(int nativeCanvas, boolean copyState) {
         final int oldCanvas = mNativeCanvas;
         mNativeCanvas = nativeCanvas;
         mFinalizer.mNativeCanvas = nativeCanvas;
-        copyNativeCanvasState(oldCanvas, mNativeCanvas);
+        if (copyState) {
+            copyNativeCanvasState(oldCanvas, mNativeCanvas);
+        }
         finalizer(oldCanvas);
     }
     
@@ -180,9 +182,10 @@
     }
 
     /**
-     * Specify a bitmap for the canvas to draw into. As a side-effect, the
-     * canvas' target density is updated to match that of the bitmap while all
-     * other state such as the layers, filters, matrix, and clip are reset.
+     * Specify a bitmap for the canvas to draw into. All canvas state such as 
+     * layers, filters, and the save/restore stack are reset with the exception
+     * of the current matrix and clip stack. Additionally, as a side-effect
+     * the canvas' target density is updated to match that of the bitmap.
      *
      * @param bitmap Specifies a mutable bitmap for the canvas to draw into.
      * @see #setDensity(int)
@@ -194,7 +197,7 @@
         }
 
         if (bitmap == null) {
-            safeCanvasSwap(initRaster(0));
+            safeCanvasSwap(initRaster(0), false);
             mDensity = Bitmap.DENSITY_NONE;
         } else {
             if (!bitmap.isMutable()) {
@@ -202,7 +205,7 @@
             }
             throwIfRecycled(bitmap);
 
-            safeCanvasSwap(initRaster(bitmap.ni()));
+            safeCanvasSwap(initRaster(bitmap.ni()), true);
             mDensity = bitmap.mDensity;
         }