Merge "Removing custom state definition from FastBitmapDrawable" into ub-launcher3-dorval
diff --git a/src/com/android/launcher3/notification/NotificationFooterLayout.java b/src/com/android/launcher3/notification/NotificationFooterLayout.java
index 57ec5d1..9686ae0 100644
--- a/src/com/android/launcher3/notification/NotificationFooterLayout.java
+++ b/src/com/android/launcher3/notification/NotificationFooterLayout.java
@@ -61,6 +61,7 @@
     private LinearLayout mIconRow;
     private int mBackgroundColor;
     private int mTextColor;
+    private TextView mOverflowView;
 
     public NotificationFooterLayout(Context context) {
         this(context, null, 0);
@@ -120,10 +121,10 @@
         }
 
         if (!mOverflowNotifications.isEmpty()) {
-            TextView overflowText = new TextView(getContext());
-            overflowText.setTextColor(mTextColor);
-            updateOverflowText(overflowText);
-            mIconRow.addView(overflowText, mIconLayoutParams);
+            mOverflowView = new TextView(getContext());
+            mOverflowView.setTextColor(mTextColor);
+            updateOverflowText();
+            mIconRow.addView(mOverflowView, mIconLayoutParams);
         }
     }
 
@@ -142,8 +143,8 @@
         mIconRow.addView(icon, addIndex, mIconLayoutParams);
     }
 
-    private void updateOverflowText(TextView overflowTextView) {
-        overflowTextView.setText(getResources().getString(R.string.deep_notifications_overflow,
+    private void updateOverflowText() {
+        mOverflowView.setText(getResources().getString(R.string.deep_notifications_overflow,
                 mOverflowNotifications.size()));
     }
 
@@ -162,6 +163,7 @@
             @Override
             public void onAnimationEnd(Animator animation) {
                 callback.onIconAnimationEnd((NotificationInfo) firstNotification.getTag());
+                removeViewFromIconRow(firstNotification);
             }
         });
         animation.play(moveAndScaleIcon);
@@ -178,7 +180,6 @@
                 public void onAnimationEnd(Animator animation) {
                     // We have to set the translation X to 0 when the new main notification
                     // is removed from the footer.
-                    // TODO: remove it here instead of expecting trimNotifications to do so.
                     child.setTranslationX(0);
                 }
             });
@@ -187,6 +188,38 @@
         animation.start();
     }
 
+    private void removeViewFromIconRow(View child) {
+        mIconRow.removeView(child);
+        mNotifications.remove((NotificationInfo) child.getTag());
+        if (!mOverflowNotifications.isEmpty()) {
+            NotificationInfo notification = mOverflowNotifications.remove(0);
+            mNotifications.add(notification);
+            addNotificationIconForInfo(notification, true /* fromOverflow */);
+        }
+        if (mOverflowView != null) {
+            if (mOverflowNotifications.isEmpty()) {
+                mIconRow.removeView(mOverflowView);
+                mOverflowView = null;
+            } else {
+                updateOverflowText();
+            }
+        }
+        if (mIconRow.getChildCount() == 0) {
+            // There are no more icons in the secondary view, so hide it.
+            PopupContainerWithArrow popup = PopupContainerWithArrow.getOpen(
+                    Launcher.getLauncher(getContext()));
+            int newHeight = getResources().getDimensionPixelSize(
+                    R.dimen.notification_footer_collapsed_height);
+            AnimatorSet collapseSecondary = LauncherAnimUtils.createAnimatorSet();
+            collapseSecondary.play(popup.animateTranslationYBy(getHeight() - newHeight, 0));
+            collapseSecondary.play(LauncherAnimUtils.animateViewHeight(
+                    this, getHeight(), newHeight));
+            collapseSecondary.setDuration(getResources().getInteger(
+                    R.integer.config_removeNotificationViewDuration));
+            collapseSecondary.start();
+        }
+    }
+
     public void trimNotifications(List<String> notifications) {
         if (!isAttachedToWindow() || mIconRow.getChildCount() == 0) {
             return;
@@ -205,35 +238,9 @@
             } else {
                 NotificationInfo childInfo = (NotificationInfo) child.getTag();
                 if (!notifications.contains(childInfo.notificationKey)) {
-                    mIconRow.removeView(child);
-                    mNotifications.remove(childInfo);
-                    if (!mOverflowNotifications.isEmpty()) {
-                        NotificationInfo notification = mOverflowNotifications.remove(0);
-                        mNotifications.add(notification);
-                        addNotificationIconForInfo(notification, true /* fromOverflow */);
-                    }
+                    removeViewFromIconRow(child);
                 }
             }
         }
-        if (overflowView != null) {
-            if (mOverflowNotifications.isEmpty()) {
-                mIconRow.removeView(overflowView);
-            } else {
-                updateOverflowText(overflowView);
-            }
-        }
-        if (mIconRow.getChildCount() == 0) {
-            // There are no more icons in the secondary view, so hide it.
-            PopupContainerWithArrow popup = PopupContainerWithArrow.getOpen(
-                    Launcher.getLauncher(getContext()));
-            int newHeight = getResources().getDimensionPixelSize(
-                    R.dimen.notification_footer_collapsed_height);
-            AnimatorSet collapseSecondary = LauncherAnimUtils.createAnimatorSet();
-            collapseSecondary.play(popup.animateTranslationYBy(getHeight() - newHeight,
-                    getResources().getInteger(R.integer.config_removeNotificationViewDuration)));
-            collapseSecondary.play(LauncherAnimUtils.animateViewHeight(
-                    this, getHeight(), newHeight));
-            collapseSecondary.start();
-        }
     }
 }
diff --git a/src/com/android/launcher3/notification/NotificationItemView.java b/src/com/android/launcher3/notification/NotificationItemView.java
index c9b3940..d58bef6 100644
--- a/src/com/android/launcher3/notification/NotificationItemView.java
+++ b/src/com/android/launcher3/notification/NotificationItemView.java
@@ -37,7 +37,6 @@
 import com.android.launcher3.popup.PopupItemView;
 import com.android.launcher3.userevent.nano.LauncherLogProto;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import static com.android.launcher3.LauncherAnimUtils.animateViewHeight;
@@ -145,12 +144,6 @@
                 public void onIconAnimationEnd(NotificationInfo newMainNotification) {
                     if (newMainNotification != null) {
                         mMainView.applyNotificationInfo(newMainNotification, mIconView, true);
-                        // Remove the animated notification from the footer by calling trim
-                        // TODO: Remove the notification in NotificationFooterLayout directly
-                        // instead of relying on this hack.
-                        List<String> footerNotificationKeys = new ArrayList<>(notificationKeys);
-                        footerNotificationKeys.remove(newMainNotification.notificationKey);
-                        mFooter.trimNotifications(footerNotificationKeys);
                         mMainView.setVisibility(VISIBLE);
                     }
                     mAnimatingNextIcon = false;