diff options
5 files changed, 46 insertions, 25 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java index f40a3c7186e6..3b22f2a86bfc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java @@ -102,6 +102,16 @@ public class AmbientState { /** Whether we are swiping up. */ private boolean mIsSwipingUp; + /** Whether we are flinging the shade open or closed. */ + private boolean mIsFlinging; + + /** + * Whether we need to do a fling down after swiping up on lockscreen. + * True right after we swipe up on lockscreen and have not finished the fling down that follows. + * False when we stop flinging or leave lockscreen. + */ + private boolean mNeedFlingAfterLockscreenSwipeUp = false; + /** * @return Height of the notifications panel without top padding when expansion completes. */ @@ -142,6 +152,10 @@ public class AmbientState { * @param isSwipingUp Whether we are swiping up. */ public void setSwipingUp(boolean isSwipingUp) { + if (!isSwipingUp && mIsSwipingUp) { + // Just stopped swiping up. + mNeedFlingAfterLockscreenSwipeUp = true; + } mIsSwipingUp = isSwipingUp; } @@ -153,6 +167,17 @@ public class AmbientState { } /** + * @param isFlinging Whether we are flinging the shade open or closed. + */ + public void setIsFlinging(boolean isFlinging) { + if (isOnKeyguard() && !isFlinging && mIsFlinging) { + // Just stopped flinging. + mNeedFlingAfterLockscreenSwipeUp = false; + } + mIsFlinging = isFlinging; + } + + /** * @return Fraction of shade expansion. */ public float getExpansionFraction() { @@ -459,6 +484,9 @@ public class AmbientState { } public void setStatusBarState(int statusBarState) { + if (mStatusBarState != StatusBarState.KEYGUARD) { + mNeedFlingAfterLockscreenSwipeUp = false; + } mStatusBarState = statusBarState; } @@ -522,6 +550,13 @@ public class AmbientState { } /** + * @return Whether we need to do a fling down after swiping up on lockscreen. + */ + public boolean isFlingingAfterSwipeUpOnLockscreen() { + return mIsFlinging && mNeedFlingAfterLockscreenSwipeUp; + } + + /** * @return whether a view is dozing and not pulsing right now */ public boolean isDozingAndNotPulsing(ExpandableView view) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index efe559a64cc4..24f44e6aa613 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -202,9 +202,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable private float mQsExpansionFraction; private final int mSplitShadeMinContentHeight; - /** Whether we are flinging the shade open or closed. */ - private boolean mIsFlinging; - /** * The algorithm which calculates the properties for our children */ @@ -1263,13 +1260,16 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable } /** - * @return Whether we should skip stack height update for lockscreen swipe-up or unlock hint. + * @return Whether we should skip stack height updates. + * True when + * 1) Unlock hint is running + * 2) Swiping up on lockscreen or flinging down after swipe up */ private boolean shouldSkipHeightUpdate() { - // After the user swipes up on lockscreen and lets go, - // {@link PanelViewController) flings the shade back down. - return mAmbientState.isOnKeyguard() && ( - mAmbientState.isUnlockHintRunning() || mAmbientState.isSwipingUp() || mIsFlinging); + return mAmbientState.isOnKeyguard() + && (mAmbientState.isUnlockHintRunning() + || mAmbientState.isSwipingUp() + || mAmbientState.isFlingingAfterSwipeUpOnLockscreen()); } /** @@ -5009,13 +5009,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable mAmbientState.setUnlockHintRunning(running); } - /** - * @param isFlinging Whether we are flinging the shade open or closed. - */ - public void setIsFlinging(boolean isFlinging) { - mIsFlinging = isFlinging; - } - @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) public void setHeadsUpGoingAwayAnimationsAllowed(boolean headsUpGoingAwayAnimationsAllowed) { mHeadsUpGoingAwayAnimationsAllowed = headsUpGoingAwayAnimationsAllowed; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java index df6b8f59fc36..e64a0d6220e1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java @@ -1181,13 +1181,6 @@ public class NotificationStackScrollLayoutController { mView.setUnlockHintRunning(running); } - /** - * @param isFlinging Whether we are flinging the shade open or close. - */ - public void setIsFlinging(boolean isFlinging) { - mView.setIsFlinging(isFlinging); - } - public boolean isFooterViewNotGone() { return mView.isFooterViewNotGone(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java index e5c88b571f32..9727f2470878 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -1860,14 +1860,14 @@ public class NotificationPanelViewController extends PanelViewController { mHeadsUpTouchHelper.notifyFling(!expand); mKeyguardStateController.notifyPanelFlingStart(!expand /* flingingToDismiss */); setClosingWithAlphaFadeout(!expand && !isOnKeyguard() && getFadeoutAlpha() == 1.0f); - mNotificationStackScrollLayoutController.setIsFlinging(true); + mAmbientState.setIsFlinging(true); super.flingToHeight(vel, expand, target, collapseSpeedUpFactor, expandBecauseOfFalsing); } @Override protected void onFlingEnd(boolean cancelled) { super.onFlingEnd(cancelled); - mNotificationStackScrollLayoutController.setIsFlinging(false); + mAmbientState.setIsFlinging(false); } private boolean onQsIntercept(MotionEvent event) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java index 7c1775ed2a5e..1d560c4592a6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java @@ -397,6 +397,7 @@ public abstract class PanelViewController { private void endMotionEvent(MotionEvent event, float x, float y, boolean forceCancel) { mTrackingPointer = -1; + mAmbientState.setSwipingUp(false); if ((mTracking && mTouchSlopExceeded) || Math.abs(x - mInitialTouchX) > mTouchSlop || Math.abs(y - mInitialTouchY) > mTouchSlop || event.getActionMasked() == MotionEvent.ACTION_CANCEL || forceCancel) { @@ -460,7 +461,6 @@ public abstract class PanelViewController { boolean expands = onEmptySpaceClick(mInitialTouchX); onTrackingStopped(expands); } - mAmbientState.setSwipingUp(false); mVelocityTracker.clear(); } |