Merge "Fixed an issue where the top edge flickered" into sc-dev

This commit is contained in:
Selim Cinek
2021-06-18 09:39:55 +00:00
committed by Android (Google) Code Review
4 changed files with 12 additions and 14 deletions

View File

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

View File

@@ -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();
}
}

View File

@@ -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);
}

View File

@@ -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;
}