Fixed a bug when a notification was quickly added and removed.

Change-Id: Id9b1cb771a2b6d1f42b61ef40a637e15c8d8f3b7
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
index 0e75acd..18677b2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -265,11 +265,8 @@
         mStackScrollAlgorithm.getStackScrollState(mCurrentStackScrollState);
         if (!isCurrentlyAnimating() && !mChildHierarchyDirty) {
             applyCurrentState();
-            if (mListener != null) {
-                mListener.onChildLocationsChanged(this);
-            }
         } else {
-            startAnimationToState(mCurrentStackScrollState);
+            startAnimationToState();
         }
     }
 
@@ -831,9 +828,13 @@
         updateScrollStateForRemovedChild(child);
         if (mIsExpanded) {
 
-            // Generate Animations
-            mChildrenToRemoveAnimated.add(child);
-            mChildHierarchyDirty = true;
+            if (!mChildrenToAddAnimated.contains(child)) {
+                // Generate Animations
+                mChildrenToRemoveAnimated.add(child);
+                mChildHierarchyDirty = true;
+            } else {
+                mChildrenToAddAnimated.remove(child);
+            }
         }
     }
 
@@ -905,12 +906,16 @@
         }
     }
 
-    private void startAnimationToState(StackScrollState finalState) {
+    private void startAnimationToState() {
         if (mChildHierarchyDirty) {
             generateChildHierarchyEvents();
             mChildHierarchyDirty = false;
         }
-        mStateAnimator.startAnimationForEvents(mAnimationEvents, finalState);
+        if (!mAnimationEvents.isEmpty()) {
+            mStateAnimator.startAnimationForEvents(mAnimationEvents, mCurrentStackScrollState);
+        } else {
+            applyCurrentState();
+        }
     }
 
     private void generateChildHierarchyEvents() {
@@ -1128,6 +1133,9 @@
         mListenForHeightChanges = false;
         mCurrentStackScrollState.apply();
         mListenForHeightChanges = true;
+        if (mListener != null) {
+            mListener.onChildLocationsChanged(this);
+        }
     }
 
     /**