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 6822d24947c3c..26606cda5582c 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 @@ -224,8 +224,14 @@ public class AmbientState { return mScrollY; } + /** + * Set the new Scroll Y position. + */ public void setScrollY(int scrollY) { - this.mScrollY = scrollY; + // Because we're dealing with an overscroller, scrollY could sometimes become smaller than + // 0. However this is only for internal purposes and the scroll position when read + // should never be smaller than 0, otherwise it can lead to flickers. + this.mScrollY = Math.max(scrollY, 0); } /** 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 b72ac74211766..f0201cb3482d7 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 @@ -1185,7 +1185,8 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable private void updateStackPosition(boolean listenerNeedsAnimation) { // Consider interpolating from an mExpansionStartY for use on lockscreen and AOD float endTopPosition = mTopPadding + mExtraTopInsetForFullShadeTransition - + mAmbientState.getOverExpansion(); + + mAmbientState.getOverExpansion() + - getCurrentOverScrollAmount(false /* top */); final float fraction = mAmbientState.getExpansionFraction(); final float stackY = MathUtils.lerp(0, endTopPosition, fraction); mAmbientState.setStackY(stackY); @@ -1907,6 +1908,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable if (onTop) { notifyOverscrollTopListener(amount, isRubberbanded); } + updateStackPosition(); requestChildrenUpdate(); } } 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 fb4f5592e97f0..495eda772219c 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 @@ -1071,10 +1071,6 @@ public class NotificationStackScrollLayoutController { mView.setAlpha(alpha); } - public float getCurrentOverScrollAmount(boolean top) { - return mView.getCurrentOverScrollAmount(top); - } - public float calculateAppearFraction(float height) { return mView.calculateAppearFraction(height); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java index 74e8de4c9d114..8f4a71cf25639 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java @@ -218,13 +218,7 @@ public class StackScrollAlgorithm { */ private void initAlgorithmState(ViewGroup hostView, StackScrollAlgorithmState state, AmbientState ambientState) { - float bottomOverScroll = ambientState.getOverScrollAmount(false /* onTop */); - int scrollY = ambientState.getScrollY(); - - // Due to the overScroller, the stackscroller can have negative scroll state. This is - // already accounted for by the top padding and doesn't need an additional adaption - scrollY = Math.max(0, scrollY); - state.scrollY = (int) (scrollY + bottomOverScroll); + state.scrollY = ambientState.getScrollY(); state.mCurrentYPosition = -state.scrollY; state.mCurrentExpandedYPosition = -state.scrollY; @@ -261,7 +255,7 @@ public class StackScrollAlgorithm { // Save the index of first view in shelf from when shade is fully // expanded. Consider updating these states in updateContentView instead so that we don't // have to recalculate in every frame. - float currentY = -scrollY; + float currentY = -ambientState.getScrollY(); if (!ambientState.isOnKeyguard()) { currentY += mNotificationScrimPadding; }