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);
+ }
}
/**