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

Commit eafa4b36 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Update scrims when changing quick settings clip, fix clipping bounds in...

Merge "Update scrims when changing quick settings clip, fix clipping bounds in split shade" into sc-v2-dev am: 6b484c26

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

Change-Id: Idf86dd17fbd2392a3c09a01991bd5d6f711b44dd
parents 188fe080 6b484c26
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -2213,10 +2213,16 @@ public class NotificationPanelViewController extends PanelViewController {
        int right = 0;

        final int qsPanelBottomY = calculateQsBottomPosition(computeQsExpansionFraction());
        final boolean visible = (computeQsExpansionFraction() > 0 || qsPanelBottomY > 0)
                && !mShouldUseSplitNotificationShade;
        final boolean quickSettingsVisible = computeQsExpansionFraction() > 0 || qsPanelBottomY > 0;

        if (!mShouldUseSplitNotificationShade) {
        if (mShouldUseSplitNotificationShade && quickSettingsVisible) {
            mAmbientState.setNotificationScrimTop(mSplitShadeNotificationsTopPadding);

            top = Math.max(0, Math.min(qsPanelBottomY, mSplitShadeNotificationsTopPadding));
            bottom = mNotificationStackScrollLayoutController.getHeight();
            left = mNotificationStackScrollLayoutController.getLeft();
            right = mNotificationStackScrollLayoutController.getRight();
        } else {
            if (mTransitioningToFullShadeProgress > 0.0f) {
                // If we're transitioning, let's use the actual value. The else case
                // can be wrong during transitions when waiting for the keyguard to unlock
@@ -2231,16 +2237,11 @@ public class NotificationPanelViewController extends PanelViewController {
            // notification bounds should take full screen width regardless of insets
            left = 0;
            right = getView().getRight() + mDisplayRightInset;
        } else if (qsPanelBottomY > 0) { // so bounds are empty on lockscreen
            mAmbientState.setNotificationScrimTop(mSplitShadeNotificationsTopPadding);
            top = Math.min(qsPanelBottomY, mSplitShadeNotificationsTopPadding);
            bottom = mNotificationStackScrollLayoutController.getHeight();
            left = mNotificationStackScrollLayoutController.getLeft();
            right = mNotificationStackScrollLayoutController.getRight();
        }
        // top should never be lower than bottom, otherwise it will be invisible.
        top = Math.min(top, bottom);
        applyQSClippingBounds(left, top, right, bottom, visible);
        applyQSClippingBounds(left, top, right, bottom,
                quickSettingsVisible && !mShouldUseSplitNotificationShade);
    }

    private void applyQSClippingBounds(int left, int top, int right, int bottom,
+21 −17
Original line number Diff line number Diff line
@@ -359,21 +359,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        mAnimateChange = state.getAnimateChange();
        mAnimationDuration = state.getAnimationDuration();

        mInFrontTint = state.getFrontTint();
        mBehindTint = state.getBehindTint();
        mNotificationsTint = state.getNotifTint();
        mBubbleTint = state.getBubbleTint();

        mInFrontAlpha = state.getFrontAlpha();
        mBehindAlpha = state.getBehindAlpha();
        mBubbleAlpha = state.getBubbleAlpha();
        mNotificationsAlpha = state.getNotifAlpha();
        if (isNaN(mBehindAlpha) || isNaN(mInFrontAlpha) || isNaN(mNotificationsAlpha)) {
            throw new IllegalStateException("Scrim opacity is NaN for state: " + state + ", front: "
                    + mInFrontAlpha + ", back: " + mBehindAlpha + ", notif: "
                    + mNotificationsAlpha);
        }
        applyStateToAlpha();
        applyState();

        // Scrim might acquire focus when user is navigating with a D-pad or a keyboard.
        // We need to disable focus otherwise AOD would end up with a gray overlay.
@@ -637,7 +623,19 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        }
    }

    private void applyStateToAlpha() {
    private void applyState() {
        mInFrontTint = mState.getFrontTint();
        mBehindTint = mState.getBehindTint();
        mNotificationsTint = mState.getNotifTint();
        mBubbleTint = mState.getBubbleTint();

        mInFrontAlpha = mState.getFrontAlpha();
        mBehindAlpha = mState.getBehindAlpha();
        mBubbleAlpha = mState.getBubbleAlpha();
        mNotificationsAlpha = mState.getNotifAlpha();

        assertAlphasValid();

        if (!mExpansionAffectsAlpha) {
            return;
        }
@@ -701,6 +699,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
                mBehindTint = behindTint;
            }
        }

        assertAlphasValid();
    }

    private void assertAlphasValid() {
        if (isNaN(mBehindAlpha) || isNaN(mInFrontAlpha) || isNaN(mNotificationsAlpha)) {
            throw new IllegalStateException("Scrim opacity is NaN for state: " + mState
                    + ", front: " + mInFrontAlpha + ", back: " + mBehindAlpha + ", notif: "
@@ -740,7 +743,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump


    private void applyAndDispatchState() {
        applyStateToAlpha();
        applyState();
        if (mUpdatePending) {
            return;
        }
@@ -1209,6 +1212,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        pw.println(" ScrimController: ");
        pw.print("  state: ");
        pw.println(mState);
        pw.println("    mClipQsScrim = " + mState.mClipQsScrim);

        pw.print("  frontScrim:");
        pw.print(" viewAlpha=");
+43 −0
Original line number Diff line number Diff line
@@ -555,6 +555,49 @@ public class ScrimControllerTest extends SysuiTestCase {
        ));
    }

    @Test
    public void disableClipQsScrimWithoutStateTransition_updatesTintAndAlpha() {
        mScrimController.setClipsQsScrim(true);
        mScrimController.transitionTo(ScrimState.BOUNCER);

        mScrimController.setClipsQsScrim(false);

        finishAnimationsImmediately();
        // Front scrim should be transparent
        // Back scrim should be visible without tint
        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mNotificationsScrim, TRANSPARENT,
                mScrimBehind, OPAQUE));
        assertScrimTinted(Map.of(
                mScrimInFront, false,
                mScrimBehind, false,
                mNotificationsScrim, false
        ));
    }

    @Test
    public void enableClipQsScrimWithoutStateTransition_updatesTintAndAlpha() {
        mScrimController.setClipsQsScrim(false);
        mScrimController.transitionTo(ScrimState.BOUNCER);

        mScrimController.setClipsQsScrim(true);

        finishAnimationsImmediately();
        // Front scrim should be transparent
        // Back scrim should be clipping QS
        // Notif scrim should be visible without tint
        assertScrimAlpha(Map.of(
                mScrimInFront, TRANSPARENT,
                mNotificationsScrim, OPAQUE,
                mScrimBehind, OPAQUE));
        assertScrimTinted(Map.of(
                mScrimInFront, false,
                mScrimBehind, true,
                mNotificationsScrim, false
        ));
    }

    @Test
    public void transitionToBouncer() {
        mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED);