Recycling bitmaps in TransitionAnimationView.

This reduces memory pressure, but does not actually fix
the leak.

Bug: 3226188

Change-Id: Ia305bfe0f7101d1da7355a7721a8519676fcf442
diff --git a/src/com/android/contacts/widget/TransitionAnimationView.java b/src/com/android/contacts/widget/TransitionAnimationView.java
index d0e81fe..4721c5f 100644
--- a/src/com/android/contacts/widget/TransitionAnimationView.java
+++ b/src/com/android/contacts/widget/TransitionAnimationView.java
@@ -105,7 +105,11 @@
     @Override
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
         super.onLayout(changed, left, top, right, bottom);
-        if (changed) {
+        if (changed || mPreviousStateBitmap == null) {
+            if (mPreviousStateBitmap != null) {
+                mPreviousStateBitmap.recycle();
+                mPreviousStateBitmap = null;
+            }
             int width = right - left;
             int height = bottom - top;
             if (width > 0 && height > 0) {
@@ -117,11 +121,21 @@
                         width - mClipMargins.right, height - mClipMargins.bottom);
             } else {
                 mPreviousStateBitmap = null;
-                mPreviousStateView = null;
+                mPreviousStateView.setBackgroundDrawable(null);
             }
         }
     }
 
+    @Override
+    protected void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        mPreviousStateView.setBackgroundDrawable(null);
+        if (mPreviousStateBitmap != null) {
+            mPreviousStateBitmap.recycle();
+            mPreviousStateBitmap = null;
+        }
+    }
+
     public static void startAnimation(View view, boolean closing) {
         TransitionAnimationView container = null;
         ViewParent parent = view.getParent();