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

Commit 921d9558 authored by Jeff DeCew's avatar Jeff DeCew
Browse files

Allow forcing status bar state changes and do so when the screen turns off.

This adds a force flag, which we will use when turning the screen off to make sure that all UI components are reset to the SHADE state regardless.

Bug: 189575031
Test: make a call; lock screen; pull down shade
Merged-In: I79baeb71ac5d1ed45602ac55cdca996b3bed0ac3
Change-Id: I79baeb71ac5d1ed45602ac55cdca996b3bed0ac3
parent e55bc915
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -114,11 +114,11 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll
    }

    @Override
    public boolean setState(int state) {
    public boolean setState(int state, boolean force) {
        if (state > MAX_STATE || state < MIN_STATE) {
            throw new IllegalArgumentException("Invalid state " + state);
        }
        if (state == mState) {
        if (!force && state == mState) {
            return false;
        }

+13 −1
Original line number Diff line number Diff line
@@ -58,7 +58,19 @@ public interface SysuiStatusBarStateController extends StatusBarStateController
     * @param state see {@link StatusBarState} for valid options
     * @return {@code true} if the state changed, else {@code false}
     */
    boolean setState(int state);
    default boolean setState(int state) {
        return setState(state, false /* force */);
    }

    /**
     * Update the status bar state
     * @param state see {@link StatusBarState} for valid options
     * @param force whether to set the state even if it's the same as the current state. This will
     *              dispatch the state to all StatusBarStateListeners, ensuring that all listening
     *              components are reset to this state.
     * @return {@code true} if the state was changed or set forcefully
     */
    boolean setState(int state, boolean force);

    /**
     * Update the dozing state from {@link StatusBar}'s perspective
+10 −5
Original line number Diff line number Diff line
@@ -2959,7 +2959,11 @@ public class StatusBar extends SystemUI implements DemoMode,
        return mState == StatusBarState.FULLSCREEN_USER_SWITCHER;
    }

    private boolean updateIsKeyguard() {
    boolean updateIsKeyguard() {
        return updateIsKeyguard(false /* force */);
    }

    boolean updateIsKeyguard(boolean force) {
        boolean wakeAndUnlocking = mBiometricUnlockController.getMode()
                == BiometricUnlockController.MODE_WAKE_AND_UNLOCK;

@@ -2982,7 +2986,7 @@ public class StatusBar extends SystemUI implements DemoMode,
                showKeyguardImpl();
            }
        } else {
            return hideKeyguardImpl();
            return hideKeyguardImpl(force);
        }
        return false;
    }
@@ -3124,11 +3128,11 @@ public class StatusBar extends SystemUI implements DemoMode,
    /**
     * @return true if we would like to stay in the shade, false if it should go away entirely
     */
    public boolean hideKeyguardImpl() {
    public boolean hideKeyguardImpl(boolean force) {
        mIsKeyguard = false;
        Trace.beginSection("StatusBar#hideKeyguard");
        boolean staying = mStatusBarStateController.leaveOpenOnKeyguardHide();
        if (!(mStatusBarStateController.setState(StatusBarState.SHADE))) {
        if (!(mStatusBarStateController.setState(StatusBarState.SHADE, force))) {
            //TODO: StatusBarStateController should probably know about hiding the keyguard and
            // notify listeners.

@@ -3617,7 +3621,8 @@ public class StatusBar extends SystemUI implements DemoMode,
                // is correct.
                mHandler.post(() -> onCameraLaunchGestureDetected(mLastCameraLaunchSource));
            }
            updateIsKeyguard();
            // When finished going to sleep, force the status bar state to avoid stale state.
            updateIsKeyguard(true /* force */);
        }

        @Override
+4 −2
Original line number Diff line number Diff line
@@ -716,13 +716,15 @@ public class StatusBarTest extends SysuiTestCase {

        // By default, showKeyguardImpl sets state to KEYGUARD.
        mStatusBar.showKeyguardImpl();
        verify(mStatusBarStateController).setState(eq(StatusBarState.KEYGUARD));
        verify(mStatusBarStateController).setState(
                eq(StatusBarState.KEYGUARD), eq(false) /* force */);

        // If useFullscreenUserSwitcher is true, state is set to FULLSCREEN_USER_SWITCHER.
        mStatusBar.mUserSwitcherController = mock(UserSwitcherController.class);
        when(mStatusBar.mUserSwitcherController.useFullscreenUserSwitcher()).thenReturn(true);
        mStatusBar.showKeyguardImpl();
        verify(mStatusBarStateController).setState(eq(StatusBarState.FULLSCREEN_USER_SWITCHER));
        verify(mStatusBarStateController).setState(
                eq(StatusBarState.FULLSCREEN_USER_SWITCHER), eq(false) /* force */);
    }

    @Test