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

Commit 8f95a348 authored by Matt Pietal's avatar Matt Pietal
Browse files

Scrim was flickering on FPS unlock

After inspecting traces, the scrim state was flickering between
UNLOCKED -> KEYGUARD -> UNLOCKED within a few hundred millis after
unlocking the device. This could produce an inconsistency in state,
where CentralSurfaces thinks keyguardShowing=true but
KeyguardStateController thinks keyguardShowing=false. When the
CentralSurfaces#updateScrimController(), the code was checking both
locations and getting a different answer. Remove mKeyguard from
CentralSurfaces and rely on KeyguardStateController

Fixes: 221732271
Test: atest CentralSurfacesTest and manual locks/unlocks
Change-Id: I6b2ce8e01ac9e61bd31c6928a20303347af79583
parent 3e2a850f
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -663,7 +663,6 @@ public class CentralSurfaces extends CoreStartable implements
    protected final BatteryController mBatteryController;
    protected boolean mPanelExpanded;
    private UiModeManager mUiModeManager;
    protected boolean mIsKeyguard;
    private LogMaker mStatusBarStateLog;
    protected final NotificationIconAreaController mNotificationIconAreaController;
    @Nullable private View mAmbientIndicationContainer;
@@ -1142,7 +1141,7 @@ public class CentralSurfaces extends CoreStartable implements
        }
        if (leaveOpen) {
            mStatusBarStateController.setLeaveOpenOnKeyguardHide(true);
            if (mIsKeyguard) {
            if (mKeyguardStateController.isShowing()) {
                // When device state changes on keyguard we don't want to keep the state of
                // the shade and instead we open clean state of keyguard with shade closed.
                // Normally some parts of QS state (like expanded/collapsed) are persisted and
@@ -2890,7 +2889,8 @@ public class CentralSurfaces extends CoreStartable implements
        // late in the transition, so we also allow the device to start dozing once the screen has
        // turned off fully.
        boolean keyguardForDozing = mDozeServiceHost.getDozingRequested()
                && (!mDeviceInteractive || isGoingToSleep() && (isScreenFullyOff() || mIsKeyguard));
                && (!mDeviceInteractive || (isGoingToSleep()
                    && (isScreenFullyOff() || mKeyguardStateController.isShowing())));
        boolean isWakingAndOccluded = isOccluded() && isWaking();
        boolean shouldBeKeyguard = (mStatusBarStateController.isKeyguardRequested()
                || keyguardForDozing) && !wakeAndUnlocking && !isWakingAndOccluded;
@@ -2923,7 +2923,6 @@ public class CentralSurfaces extends CoreStartable implements

    public void showKeyguardImpl() {
        Trace.beginSection("CentralSurfaces#showKeyguard");
        mIsKeyguard = true;
        // In case we're locking while a smartspace transition is in progress, reset it.
        mKeyguardUnlockAnimationController.resetSmartspaceTransition();
        if (mKeyguardStateController.isLaunchTransitionFadingAway()) {
@@ -3044,7 +3043,6 @@ public class CentralSurfaces extends CoreStartable implements
     * @return true if we would like to stay in the shade, false if it should go away entirely
     */
    public boolean hideKeyguardImpl(boolean forceStateChange) {
        mIsKeyguard = false;
        Trace.beginSection("CentralSurfaces#hideKeyguard");
        boolean staying = mStatusBarStateController.leaveOpenOnKeyguardHide();
        int previousState = mStatusBarStateController.getState();
@@ -3771,7 +3769,7 @@ public class CentralSurfaces extends CoreStartable implements
            });
        } else if (mDozing && !unlocking) {
            mScrimController.transitionTo(ScrimState.AOD);
        } else if (mIsKeyguard && !unlocking) {
        } else if (mKeyguardStateController.isShowing() && !unlocking) {
            mScrimController.transitionTo(ScrimState.KEYGUARD);
        } else {
            mScrimController.transitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback);
+2 −0
Original line number Diff line number Diff line
@@ -846,6 +846,7 @@ public class CentralSurfacesTest extends SysuiTestCase {
    @Test
    public void testTransitionLaunch_noPreview_doesntGoUnlocked() {
        mCentralSurfaces.setBarStateForTest(StatusBarState.KEYGUARD);
        when(mKeyguardStateController.isShowing()).thenReturn(true);
        mCentralSurfaces.showKeyguardImpl();

        // Starting a pulse should change the scrim controller to the pulsing state
@@ -868,6 +869,7 @@ public class CentralSurfacesTest extends SysuiTestCase {
    @Test
    public void testPulseWhileDozing_updatesScrimController() {
        mCentralSurfaces.setBarStateForTest(StatusBarState.KEYGUARD);
        when(mKeyguardStateController.isShowing()).thenReturn(true);
        mCentralSurfaces.showKeyguardImpl();

        // Starting a pulse should change the scrim controller to the pulsing state