Make sure we have the correct GL context when grabbing a bitmap
Bug #5427391

Change-Id: I4687a6a3e8968fc3ca8ef171833b2bb7afc16f89
diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java
index d57132a..1697382 100644
--- a/core/java/android/view/TextureView.java
+++ b/core/java/android/view/TextureView.java
@@ -502,9 +502,23 @@
      * @see #isAvailable() 
      * @see #getBitmap(int, int)  
      * @see #getBitmap() 
+     * 
+     * @throws IllegalStateException if the hardware rendering context cannot be
+     *         acquired to capture the bitmap
      */
     public Bitmap getBitmap(Bitmap bitmap) {
         if (bitmap != null && isAvailable()) {
+            AttachInfo info = mAttachInfo;
+            if (info != null && info.mHardwareRenderer != null &&
+                    info.mHardwareRenderer.isEnabled()) {
+                if (!info.mHardwareRenderer.validate()) {
+                    throw new IllegalStateException("Could not acquire hardware rendering context");
+                }
+            }
+
+            applyUpdate();
+            applyTransformMatrix();
+
             mLayer.copyInto(bitmap);
         }
         return bitmap;
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 15544cc..b972ebc 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -10125,6 +10125,14 @@
         return mHardwareLayer;
     }
 
+    /**
+     * Destroys this View's hardware layer if possible.
+     * 
+     * @return True if the layer was destroyed, false otherwise.
+     * 
+     * @see #setLayerType(int, android.graphics.Paint) 
+     * @see #LAYER_TYPE_HARDWARE
+     */
     boolean destroyLayer() {
         if (mHardwareLayer != null) {
             mHardwareLayer.destroy();