Fix invalidate code path (#2273209).

Cached views would, in some situations, not update if they contained an
animating child. This was caused by clearing the dirty cache flag too
early in View.buildDrawingCache().

Approved by Dr. No mcleron.

Change-Id: I8c5f2fc3e6605657e0da625d60d50b55bb133666
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 0b87536..1fc3678 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -4324,8 +4324,9 @@
             requestLayout();
             invalidate();
 
-            if (((mViewFlags & VISIBILITY_MASK) == GONE) && hasFocus()) {
-                clearFocus();
+            if (((mViewFlags & VISIBILITY_MASK) == GONE)) {
+                if (hasFocus()) clearFocus();
+                destroyDrawingCache();
             }
             if (mAttachInfo != null) {
                 mAttachInfo.mViewVisibilityChanged = true;
@@ -6283,6 +6284,7 @@
             canvas.translate(-mScrollX, -mScrollY);
 
             mPrivateFlags |= DRAWN;
+            mPrivateFlags |= DRAWING_CACHE_VALID;
 
             // Fast path for layouts with no backgrounds
             if ((mPrivateFlags & SKIP_DRAW) == SKIP_DRAW) {
@@ -6301,7 +6303,6 @@
                 // Restore the cached Canvas for our siblings
                 attachInfo.mCanvas = canvas;
             }
-            mPrivateFlags |= DRAWING_CACHE_VALID;
         }
     }