Merge "Allow forcing status bar state changes and do so during a cancelled screen off." into sc-dev am: 87dc276313
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14968078 Change-Id: Iba0ac88c0cc116d10017ad3a1c46e2367214c55d
This commit is contained in:
@@ -145,11 +145,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;
|
||||
}
|
||||
|
||||
|
||||
@@ -59,7 +59,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
|
||||
|
||||
@@ -3428,6 +3428,10 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
}
|
||||
|
||||
boolean updateIsKeyguard() {
|
||||
return updateIsKeyguard(false /* force */);
|
||||
}
|
||||
|
||||
boolean updateIsKeyguard(boolean force) {
|
||||
boolean wakeAndUnlocking = mBiometricUnlockController.getMode()
|
||||
== BiometricUnlockController.MODE_WAKE_AND_UNLOCK;
|
||||
|
||||
@@ -3451,7 +3455,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
showKeyguardImpl();
|
||||
}
|
||||
} else {
|
||||
return hideKeyguardImpl();
|
||||
return hideKeyguardImpl(force);
|
||||
}
|
||||
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
|
||||
*/
|
||||
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.
|
||||
|
||||
|
||||
@@ -131,9 +131,14 @@ class UnlockedScreenOffAnimationController @Inject constructor(
|
||||
lightRevealAnimationPlaying = false
|
||||
aodUiAnimationPlaying = false
|
||||
|
||||
// Make sure the status bar is in the correct keyguard state, since we might have left it in
|
||||
// the KEYGUARD state if this wakeup cancelled the screen off animation.
|
||||
statusBar.updateIsKeyguard()
|
||||
// Make sure the status bar is in the correct keyguard state, forcing it if necessary. This
|
||||
// is required if the screen off animation is cancelled, since it might be incorrectly left
|
||||
// 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() {
|
||||
|
||||
@@ -843,12 +843,14 @@ 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.
|
||||
when(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
|
||||
|
||||
Reference in New Issue
Block a user