Push notifications down offscreen when QQS expands to fullscreen QS

And bring notifications back up when fullscreen QS closes to QQS

This updates UI to spec and fixes issues where the top of the
notifications background scrim and notification shelf icons still show
in fullscreen QS, which looks messy and blocks the media player.

Fixes: 187195324
Test: open shade, expand QS, close QS, close shade
Change-Id: Ic0a3238db16086ac272e80521c5e332d1a92744b
This commit is contained in:
Lyn Han
2021-05-11 13:23:39 -05:00
parent 16864cd9df
commit 0c9d558ae0
3 changed files with 20 additions and 11 deletions

View File

@@ -664,7 +664,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
mDebugPaint.setColor(Color.CYAN);
canvas.drawLine(0, y, getWidth(), y, mDebugPaint);
y = (int) (mAmbientState.getStackY() + mAmbientState.getStackHeight());
y = (int) (mAmbientState.getStackY() + mSidePaddings + mAmbientState.getStackHeight());
mDebugPaint.setColor(Color.BLUE);
canvas.drawLine(0, y, getWidth(), y, mDebugPaint);
}
@@ -1148,12 +1148,14 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
if (mOnStackYChanged != null) {
mOnStackYChanged.run();
}
final float stackEndHeight = getHeight() - getEmptyBottomMargin() - mTopPadding;
mAmbientState.setStackEndHeight(stackEndHeight);
mAmbientState.setStackHeight(
MathUtils.lerp(stackEndHeight * StackScrollAlgorithm.START_FRACTION,
stackEndHeight, fraction));
if (mQsExpansionFraction <= 0) {
final float stackEndHeight = Math.max(0f,
getHeight() - getEmptyBottomMargin() - stackY - mSidePaddings);
mAmbientState.setStackEndHeight(stackEndHeight);
mAmbientState.setStackHeight(
MathUtils.lerp(stackEndHeight * StackScrollAlgorithm.START_FRACTION,
stackEndHeight, fraction));
}
}
void setOnStackYChanged(Runnable onStackYChanged) {

View File

@@ -58,6 +58,7 @@ public class StackScrollAlgorithm {
private int mStatusBarHeight;
private float mHeadsUpInset;
private int mPinnedZTranslationExtra;
private float mNotificationScrimPadding;
public StackScrollAlgorithm(
Context context,
@@ -82,6 +83,7 @@ public class StackScrollAlgorithm {
mPinnedZTranslationExtra = res.getDimensionPixelSize(
R.dimen.heads_up_pinned_elevation);
mGapHeight = res.getDimensionPixelSize(R.dimen.notification_section_divider_height);
mNotificationScrimPadding = res.getDimensionPixelSize(R.dimen.notification_side_paddings);
}
/**
@@ -258,6 +260,9 @@ public class StackScrollAlgorithm {
// expanded. Consider updating these states in updateContentView instead so that we don't
// have to recalculate in every frame.
float currentY = -scrollY;
if (!ambientState.isOnKeyguard()) {
currentY += mNotificationScrimPadding;
}
float previousY = 0;
state.firstViewInShelf = null;
state.viewHeightBeforeShelf = -1;
@@ -318,6 +323,9 @@ public class StackScrollAlgorithm {
AmbientState ambientState) {
// The y coordinate of the current child.
float currentYPosition = -algorithmState.scrollY;
if (!ambientState.isOnKeyguard()) {
currentYPosition += mNotificationScrimPadding;
}
int childCount = algorithmState.visibleChildren.size();
for (int i = 0; i < childCount; i++) {
currentYPosition = updateChild(i, algorithmState, ambientState, currentYPosition);

View File

@@ -2067,14 +2067,13 @@ public class NotificationPanelViewController extends PanelViewController {
final int qsPanelBottomY = calculateQsBottomPosition(getQsExpansionFraction());
final boolean visible = (getQsExpansionFraction() > 0 || qsPanelBottomY > 0)
&& !mShouldUseSplitNotificationShade;
final float notificationTop = mAmbientState.getStackY()
- mNotificationScrimPadding
- mAmbientState.getScrollY();
final float notificationTop = mAmbientState.getStackY() - mAmbientState.getScrollY();
setQsExpansionEnabled(mAmbientState.getScrollY() == 0);
int radius = mScrimCornerRadius;
if (!mShouldUseSplitNotificationShade) {
top = (int) Math.min(qsPanelBottomY, notificationTop);
top = (int) (isOnKeyguard() ? Math.min(qsPanelBottomY, notificationTop)
: notificationTop);
bottom = getView().getBottom();
left = getView().getLeft();
right = getView().getRight();