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:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user