Merge "Allow forcing status bar state changes and do so during a cancelled screen off." into sc-dev

This commit is contained in:
Josh Tsuji
2021-06-16 17:46:04 +00:00
committed by Android (Google) Code Review
5 changed files with 34 additions and 11 deletions

View File

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

View File

@@ -59,7 +59,19 @@ public interface SysuiStatusBarStateController extends StatusBarStateController
* @param state see {@link StatusBarState} for valid options * @param state see {@link StatusBarState} for valid options
* @return {@code true} if the state changed, else {@code false} * @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 * Update the dozing state from {@link StatusBar}'s perspective

View File

@@ -3428,6 +3428,10 @@ public class StatusBar extends SystemUI implements DemoMode,
} }
boolean updateIsKeyguard() { boolean updateIsKeyguard() {
return updateIsKeyguard(false /* force */);
}
boolean updateIsKeyguard(boolean force) {
boolean wakeAndUnlocking = mBiometricUnlockController.getMode() boolean wakeAndUnlocking = mBiometricUnlockController.getMode()
== BiometricUnlockController.MODE_WAKE_AND_UNLOCK; == BiometricUnlockController.MODE_WAKE_AND_UNLOCK;
@@ -3451,7 +3455,7 @@ public class StatusBar extends SystemUI implements DemoMode,
showKeyguardImpl(); showKeyguardImpl();
} }
} else { } else {
return hideKeyguardImpl(); return hideKeyguardImpl(force);
} }
return false; return false;
} }
@@ -3580,11 +3584,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 * @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; mIsKeyguard = false;
Trace.beginSection("StatusBar#hideKeyguard"); Trace.beginSection("StatusBar#hideKeyguard");
boolean staying = mStatusBarStateController.leaveOpenOnKeyguardHide(); 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 //TODO: StatusBarStateController should probably know about hiding the keyguard and
// notify listeners. // notify listeners.

View File

@@ -131,9 +131,14 @@ class UnlockedScreenOffAnimationController @Inject constructor(
lightRevealAnimationPlaying = false lightRevealAnimationPlaying = false
aodUiAnimationPlaying = false aodUiAnimationPlaying = false
// Make sure the status bar is in the correct keyguard state, since we might have left it in // Make sure the status bar is in the correct keyguard state, forcing it if necessary. This
// the KEYGUARD state if this wakeup cancelled the screen off animation. // is required if the screen off animation is cancelled, since it might be incorrectly left
statusBar.updateIsKeyguard() // in the KEYGUARD or SHADE states depending on when it was cancelled and whether 'lock
// instantly' is enabled. We need to force it so that the state is set even if we're going
// from SHADE to SHADE or KEYGUARD to KEYGUARD, since we might have changed parts of the UI
// (such as showing AOD in the shade) without actually changing the StatusBarState. This
// ensures that the UI definitely reflects the desired state.
statusBar.updateIsKeyguard(true /* force */)
} }
override fun onStartedGoingToSleep() { override fun onStartedGoingToSleep() {

View File

@@ -843,12 +843,14 @@ public class StatusBarTest extends SysuiTestCase {
// By default, showKeyguardImpl sets state to KEYGUARD. // By default, showKeyguardImpl sets state to KEYGUARD.
mStatusBar.showKeyguardImpl(); 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. // If useFullscreenUserSwitcher is true, state is set to FULLSCREEN_USER_SWITCHER.
when(mUserSwitcherController.useFullscreenUserSwitcher()).thenReturn(true); when(mUserSwitcherController.useFullscreenUserSwitcher()).thenReturn(true);
mStatusBar.showKeyguardImpl(); mStatusBar.showKeyguardImpl();
verify(mStatusBarStateController).setState(eq(StatusBarState.FULLSCREEN_USER_SWITCHER)); verify(mStatusBarStateController).setState(
eq(StatusBarState.FULLSCREEN_USER_SWITCHER), eq(false) /* force */);
} }
@Test @Test