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

Commit 34f9f581 authored by Lucas Dupin's avatar Lucas Dupin Committed by Automerger Merge Worker
Browse files

Merge "Fixes two bright flashes of the notification scrim" into sc-dev am: 54a66221

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

Change-Id: I32eee3bec00349fa6ebcec18020df9f7313dc711
parents 042d6450 54a66221
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -111,6 +111,20 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
     */
    private boolean mTransitioningToFullShade;

    /**
     * Is there currently an unocclusion animation running. Used to avoid bright flickers
     * of the notification scrim.
     */
    private boolean mUnOcclusionAnimationRunning;

    /**
     * Set whether an unocclusion animation is currently running on the notification panel. Used
     * to avoid bright flickers of the notification scrim.
     */
    public void setUnocclusionAnimationRunning(boolean unocclusionAnimationRunning) {
        mUnOcclusionAnimationRunning = unocclusionAnimationRunning;
    }

    @IntDef(prefix = {"VISIBILITY_"}, value = {
            TRANSPARENT,
            SEMI_TRANSPARENT,
@@ -466,6 +480,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump

    public void onExpandingFinished() {
        mTracking = false;
        setUnocclusionAnimationRunning(false);
    }

    @VisibleForTesting
@@ -694,6 +709,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
                mNotificationsTint = mState.getNotifTint();
                mBehindTint = behindTint;
            }
            if (mUnOcclusionAnimationRunning && mState == ScrimState.KEYGUARD) {
                // We're unoccluding the keyguard and don't want to have a bright flash.
                mNotificationsAlpha = 0f;
            }
        }
        if (isNaN(mBehindAlpha) || isNaN(mInFrontAlpha) || isNaN(mNotificationsAlpha)) {
            throw new IllegalStateException("Scrim opacity is NaN for state: " + mState
+3 −4
Original line number Diff line number Diff line
@@ -3590,6 +3590,7 @@ public class StatusBar extends SystemUI implements DemoMode,
    public void animateKeyguardUnoccluding() {
        mNotificationPanelViewController.setExpandedFraction(0f);
        animateExpandNotificationsPanel();
        mScrimController.setUnocclusionAnimationRunning(true);
    }

    /**
@@ -4476,10 +4477,8 @@ public class StatusBar extends SystemUI implements DemoMode,
            ScrimState state = mStatusBarKeyguardViewManager.bouncerNeedsScrimming()
                    ? ScrimState.BOUNCER_SCRIMMED : ScrimState.BOUNCER;
            mScrimController.transitionTo(state);
        } else if (isInLaunchTransition()
                || mLaunchCameraWhenFinishedWaking
                || launchingAffordanceWithPreview) {
            // TODO(b/170133395) Investigate whether Emergency Gesture flag should be included here.
        } else if (launchingAffordanceWithPreview) {
            // We want to avoid animating when launching with a preview.
            mScrimController.transitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback);
        } else if (mBrightnessMirrorVisible) {
            mScrimController.transitionTo(ScrimState.BRIGHTNESS_MIRROR);
+13 −0
Original line number Diff line number Diff line
@@ -1137,6 +1137,19 @@ public class ScrimControllerTest extends SysuiTestCase {
        assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.47f, /* expansion */ 0.2f);
    }

    @Test
    public void testNotificationTransparency_unnocclusion() {
        mScrimController.transitionTo(ScrimState.KEYGUARD);
        mScrimController.setUnocclusionAnimationRunning(true);

        assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.0f, /* expansion */ 0.0f);
        assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.0f, /* expansion */ 1.0f);

        // Verify normal behavior after
        mScrimController.setUnocclusionAnimationRunning(false);
        assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.2f, /* expansion */ 0.4f);
    }

    @Test
    public void testNotificationTransparency_inKeyguardState() {
        mScrimController.transitionTo(ScrimState.KEYGUARD);
+24 −0
Original line number Diff line number Diff line
@@ -811,6 +811,30 @@ public class StatusBarTest extends SysuiTestCase {
        verify(mScrimController).transitionTo(eq(ScrimState.UNLOCKED), any());
    }

    @Test
    public void testTransitionLaunch_goesToUnlocked() {
        mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD);
        mStatusBar.showKeyguardImpl();

        // Starting a pulse should change the scrim controller to the pulsing state
        when(mNotificationPanelViewController.isLaunchTransitionRunning()).thenReturn(true);
        when(mNotificationPanelViewController.isLaunchingAffordanceWithPreview()).thenReturn(true);
        mStatusBar.updateScrimController();
        verify(mScrimController).transitionTo(eq(ScrimState.UNLOCKED), any());
    }

    @Test
    public void testTransitionLaunch_noPreview_doesntGoUnlocked() {
        mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD);
        mStatusBar.showKeyguardImpl();

        // Starting a pulse should change the scrim controller to the pulsing state
        when(mNotificationPanelViewController.isLaunchTransitionRunning()).thenReturn(true);
        when(mNotificationPanelViewController.isLaunchingAffordanceWithPreview()).thenReturn(false);
        mStatusBar.updateScrimController();
        verify(mScrimController).transitionTo(eq(ScrimState.KEYGUARD));
    }

    @Test
    public void testSetOccluded_propagatesToScrimController() {
        mStatusBar.setOccluded(true);