OSDN Git Service

Fixed the clear all animation on the locked shade
authorSelim Cinek <cinek@google.com>
Tue, 4 Jul 2017 10:07:55 +0000 (12:07 +0200)
committerSelim Cinek <cinek@google.com>
Tue, 4 Jul 2017 13:28:55 +0000 (15:28 +0200)
The notifications were also performing a removal animation
even though they were swiped out, which is not needed at all.
Also notifications that were clipped off on the top performed
an animation even though they shouldn't have.

Test: manual, on the shade locked clear all, observe smooth animations
Change-Id: I26c99a1fb48ea7b22e3710a744702af70db32b42
Fixes: 36590278

packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java

index cbd315b..e520d19 100644 (file)
@@ -2587,9 +2587,6 @@ public class NotificationStackScrollLayout extends ViewGroup
         }
         updateAnimationState(false, child);
 
-        // Make sure the clipRect we might have set is removed
-        expandableView.setClipTopAmount(0);
-
         focusNextViewIfFocused(child);
     }
 
@@ -3036,10 +3033,6 @@ public class NotificationStackScrollLayout extends ViewGroup
     private void generateChildRemovalEvents() {
         for (View child : mChildrenToRemoveAnimated) {
             boolean childWasSwipedOut = mSwipedOutViews.contains(child);
-            int animationType = childWasSwipedOut
-                    ? AnimationEvent.ANIMATION_TYPE_REMOVE_SWIPED_OUT
-                    : AnimationEvent.ANIMATION_TYPE_REMOVE;
-            AnimationEvent event = new AnimationEvent(child, animationType);
 
             // we need to know the view after this one
             float removedTranslation = child.getTranslationY();
@@ -3050,7 +3043,16 @@ public class NotificationStackScrollLayout extends ViewGroup
                     removedTranslation = row.getTranslationWhenRemoved();
                     ignoreChildren = false;
                 }
+                childWasSwipedOut |= Math.abs(row.getTranslation()) == row.getWidth();
             }
+            if (!childWasSwipedOut) {
+                Rect clipBounds = child.getClipBounds();
+                childWasSwipedOut = clipBounds.height() == 0;
+            }
+            int animationType = childWasSwipedOut
+                    ? AnimationEvent.ANIMATION_TYPE_REMOVE_SWIPED_OUT
+                    : AnimationEvent.ANIMATION_TYPE_REMOVE;
+            AnimationEvent event = new AnimationEvent(child, animationType);
             event.viewAfterChangingView = getFirstChildBelowTranlsationY(removedTranslation,
                     ignoreChildren);
             mAnimationEvents.add(event);