Small cleanup for notifications

- Add null check when collapsing footer, as container could be null
  if the app is opened
- Remove redundant method that always passed mNotificationItemView
- Set mNotificationItemView to null when it is removed

Change-Id: Ia329815224b213fc688733eaaf6f29ee6888caaf
diff --git a/src/com/android/launcher3/notification/NotificationFooterLayout.java b/src/com/android/launcher3/notification/NotificationFooterLayout.java
index 2e80341..1eef743 100644
--- a/src/com/android/launcher3/notification/NotificationFooterLayout.java
+++ b/src/com/android/launcher3/notification/NotificationFooterLayout.java
@@ -198,15 +198,17 @@
             // There are no more icons in the footer, so hide it.
             PopupContainerWithArrow popup = PopupContainerWithArrow.getOpen(
                     Launcher.getLauncher(getContext()));
-            Animator collapseFooter = popup.reduceNotificationViewHeight(getHeight(),
-                    getResources().getInteger(R.integer.config_removeNotificationViewDuration));
-            collapseFooter.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    ((ViewGroup) getParent()).removeView(NotificationFooterLayout.this);
-                }
-            });
-            collapseFooter.start();
+            if (popup != null) {
+                Animator collapseFooter = popup.reduceNotificationViewHeight(getHeight(),
+                        getResources().getInteger(R.integer.config_removeNotificationViewDuration));
+                collapseFooter.addListener(new AnimatorListenerAdapter() {
+                    @Override
+                    public void onAnimationEnd(Animator animation) {
+                        ((ViewGroup) getParent()).removeView(NotificationFooterLayout.this);
+                    }
+                });
+                collapseFooter.start();
+            }
         }
     }
 
diff --git a/src/com/android/launcher3/notification/NotificationItemView.java b/src/com/android/launcher3/notification/NotificationItemView.java
index a340742..c6268e2 100644
--- a/src/com/android/launcher3/notification/NotificationItemView.java
+++ b/src/com/android/launcher3/notification/NotificationItemView.java
@@ -23,7 +23,6 @@
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewGroup;
 import android.widget.FrameLayout;
 
 import com.android.launcher3.ItemInfo;
@@ -85,8 +84,6 @@
                             MeasureSpec.makeMeasureSpec(newHeight, MeasureSpec.EXACTLY));
                     initializeBackgroundClipping(true /* force */);
                     invalidate();
-                } else {
-                    ((ViewGroup) getParent()).removeView(NotificationItemView.this);
                 }
             }
         });
diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java
index b8d38f5..1eac076 100644
--- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java
+++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java
@@ -568,7 +568,7 @@
                     R.integer.config_removeNotificationViewDuration);
             final int spacing = getResources().getDimensionPixelSize(R.dimen.popup_items_spacing);
             removeNotification.play(reduceNotificationViewHeight(
-                    mNotificationItemView.getHeight() + spacing, duration, mNotificationItemView));
+                    mNotificationItemView.getHeight() + spacing, duration));
             final View removeMarginView = mIsAboveIcon ? getItemViewAt(getItemCount() - 2)
                     : mNotificationItemView;
             if (removeMarginView != null) {
@@ -588,6 +588,7 @@
                 @Override
                 public void onAnimationEnd(Animator animation) {
                     removeView(mNotificationItemView);
+                    mNotificationItemView = null;
                     if (getItemCount() == 0) {
                         close(false);
                         return;
@@ -612,19 +613,19 @@
         return LauncherAnimUtils.ofPropertyValuesHolder(
                 mArrow, new PropertyListBuilder().scale(scale).build());
     }
+
     /**
      * Animates the height of the notification item and the translationY of other items accordingly.
      */
-    public Animator reduceNotificationViewHeight(int heightToRemove, int duration,
-            NotificationItemView notificationItem) {
+    public Animator reduceNotificationViewHeight(int heightToRemove, int duration) {
         final int translateYBy = mIsAboveIcon ? heightToRemove : -heightToRemove;
         AnimatorSet animatorSet = LauncherAnimUtils.createAnimatorSet();
-        animatorSet.play(notificationItem.animateHeightRemoval(heightToRemove));
+        animatorSet.play(mNotificationItemView.animateHeightRemoval(heightToRemove));
         PropertyResetListener<View, Float> resetTranslationYListener
                 = new PropertyResetListener<>(TRANSLATION_Y, 0f);
         for (int i = 0; i < getItemCount(); i++) {
             final PopupItemView itemView = getItemViewAt(i);
-            if (!mIsAboveIcon && itemView == notificationItem) {
+            if (!mIsAboveIcon && itemView == mNotificationItemView) {
                 // The notification view is already in the right place when container is below icon.
                 continue;
             }
@@ -647,10 +648,6 @@
         return animatorSet;
     }
 
-    public Animator reduceNotificationViewHeight(int heightToRemove, int duration) {
-        return reduceNotificationViewHeight(heightToRemove, duration, mNotificationItemView);
-    }
-
     @Override
     public boolean supportsAppInfoDropTarget() {
         return true;