Merge "Fixed an issue where the top edge flickered" into sc-dev am: 4f0d02b4c8

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14964841

Change-Id: Ifc96bdbdbe4a441959d8cd817184562634aef299
This commit is contained in:
Selim Cinek
2021-06-18 09:54:40 +00:00
committed by Automerger Merge Worker
4 changed files with 12 additions and 14 deletions

View File

@@ -224,8 +224,14 @@ public class AmbientState {
return mScrollY; return mScrollY;
} }
/**
* Set the new Scroll Y position.
*/
public void setScrollY(int scrollY) { 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) { private void updateStackPosition(boolean listenerNeedsAnimation) {
// Consider interpolating from an mExpansionStartY for use on lockscreen and AOD // Consider interpolating from an mExpansionStartY for use on lockscreen and AOD
float endTopPosition = mTopPadding + mExtraTopInsetForFullShadeTransition float endTopPosition = mTopPadding + mExtraTopInsetForFullShadeTransition
+ mAmbientState.getOverExpansion(); + mAmbientState.getOverExpansion()
- getCurrentOverScrollAmount(false /* top */);
final float fraction = mAmbientState.getExpansionFraction(); final float fraction = mAmbientState.getExpansionFraction();
final float stackY = MathUtils.lerp(0, endTopPosition, fraction); final float stackY = MathUtils.lerp(0, endTopPosition, fraction);
mAmbientState.setStackY(stackY); mAmbientState.setStackY(stackY);
@@ -1907,6 +1908,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
if (onTop) { if (onTop) {
notifyOverscrollTopListener(amount, isRubberbanded); notifyOverscrollTopListener(amount, isRubberbanded);
} }
updateStackPosition();
requestChildrenUpdate(); requestChildrenUpdate();
} }
} }

View File

@@ -1071,10 +1071,6 @@ public class NotificationStackScrollLayoutController {
mView.setAlpha(alpha); mView.setAlpha(alpha);
} }
public float getCurrentOverScrollAmount(boolean top) {
return mView.getCurrentOverScrollAmount(top);
}
public float calculateAppearFraction(float height) { public float calculateAppearFraction(float height) {
return mView.calculateAppearFraction(height); return mView.calculateAppearFraction(height);
} }

View File

@@ -218,13 +218,7 @@ public class StackScrollAlgorithm {
*/ */
private void initAlgorithmState(ViewGroup hostView, StackScrollAlgorithmState state, private void initAlgorithmState(ViewGroup hostView, StackScrollAlgorithmState state,
AmbientState ambientState) { AmbientState ambientState) {
float bottomOverScroll = ambientState.getOverScrollAmount(false /* onTop */); state.scrollY = ambientState.getScrollY();
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.mCurrentYPosition = -state.scrollY; state.mCurrentYPosition = -state.scrollY;
state.mCurrentExpandedYPosition = -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 // 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 // expanded. Consider updating these states in updateContentView instead so that we don't
// have to recalculate in every frame. // have to recalculate in every frame.
float currentY = -scrollY; float currentY = -ambientState.getScrollY();
if (!ambientState.isOnKeyguard()) { if (!ambientState.isOnKeyguard()) {
currentY += mNotificationScrimPadding; currentY += mNotificationScrimPadding;
} }