Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c9d558a authored by Lyn Han's avatar Lyn Han
Browse files

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
parent 16864cd9
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -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,13 +1148,15 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
        if (mOnStackYChanged != null) {
            mOnStackYChanged.run();
        }

        final float stackEndHeight = getHeight() - getEmptyBottomMargin() - mTopPadding;
        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) {
        mOnStackYChanged = onStackYChanged;
+8 −0
Original line number Diff line number Diff line
@@ -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);
+3 −4
Original line number Diff line number Diff line
@@ -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();