Merge "Allow forcing status bar state changes and do so when the screen turns off." into qt-dev

This commit is contained in:
TreeHugger Robot
2021-11-04 02:51:52 +00:00
committed by Android (Google) Code Review
4 changed files with 29 additions and 10 deletions

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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

View File

@@ -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