Reducing calls to onCreateViewHolder due to animating children.

Bug 21133230

Change-Id: Ib5be0766d1ea56976195e33526d7595a16672eef
diff --git a/src/com/android/launcher3/widget/WidgetCell.java b/src/com/android/launcher3/widget/WidgetCell.java
index a34e716..e3eb76c 100644
--- a/src/com/android/launcher3/widget/WidgetCell.java
+++ b/src/com/android/launcher3/widget/WidgetCell.java
@@ -118,6 +118,7 @@
         if (DEBUG) {
             Log.d(TAG, "reset called on:" + mWidgetName.getText());
         }
+        mWidgetImage.animate().cancel();
         mWidgetImage.setImageDrawable(null);
         mWidgetName.setText(null);
         mWidgetDims.setText(null);
diff --git a/src/com/android/launcher3/widget/WidgetsListAdapter.java b/src/com/android/launcher3/widget/WidgetsListAdapter.java
index b8124d6..397d177 100644
--- a/src/com/android/launcher3/widget/WidgetsListAdapter.java
+++ b/src/com/android/launcher3/widget/WidgetsListAdapter.java
@@ -186,6 +186,15 @@
     }
 
     @Override
+    public boolean onFailedToRecycleView(WidgetsRowViewHolder holder) {
+        // If child views are animating, then the RecyclerView may choose not to recycle the view,
+        // causing extraneous onCreateViewHolder() calls.  It is safe in this case to continue
+        // recycling this view, and take care in onViewRecycled() to cancel any existing
+        // animations.
+        return true;
+    }
+
+    @Override
     public long getItemId(int pos) {
         return pos;
     }