Fix issue where AOD would not start

We shouldn't mix wakefulness with dream states, they come asynchronously
from different parts of the system. This means that the device might
not be GOING_TO_SLEEP when DozeService is started.
We also can't rely on wakefulness to drive Doze animations.

Test: unlock with fingerprint
Test: press power from launcher and lock screen multiple times
Fixes: 152835247
Change-Id: I3eaf2ae1801bbb999a6466c214234f33804ccf19
This commit is contained in:
Lucas Dupin
2020-04-01 12:32:54 -07:00
parent c9bdb4aa29
commit ea689c4972
4 changed files with 13 additions and 37 deletions

View File

@@ -57,27 +57,27 @@ public interface KeyguardViewController {
/**
* Called when the device started going to sleep.
*/
void onStartedGoingToSleep();
default void onStartedGoingToSleep() {};
/**
* Called when the device has finished going to sleep.
*/
void onFinishedGoingToSleep();
default void onFinishedGoingToSleep() {};
/**
* Called when the device started waking up.
*/
void onStartedWakingUp();
default void onStartedWakingUp() {};
/**
* Called when the device started turning on.
*/
void onScreenTurningOn();
default void onScreenTurningOn() {};
/**
* Called when the device has finished turning on.
*/
void onScreenTurnedOn();
default void onScreenTurnedOn() {};
/**
* Sets whether the Keyguard needs input.

View File

@@ -16,6 +16,9 @@
package com.android.systemui.doze;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_WAKING;
import android.annotation.MainThread;
import android.hardware.display.AmbientDisplayConfiguration;
import android.os.Trace;
@@ -368,8 +371,8 @@ public class DozeMachine {
case DOZE_PULSE_DONE:
final State nextState;
@Wakefulness int wakefulness = mWakefulnessLifecycle.getWakefulness();
if (wakefulness == WakefulnessLifecycle.WAKEFULNESS_AWAKE
|| wakefulness == WakefulnessLifecycle.WAKEFULNESS_WAKING) {
if (state != State.INITIALIZED && (wakefulness == WAKEFULNESS_AWAKE
|| wakefulness == WAKEFULNESS_WAKING)) {
nextState = State.FINISH;
} else if (mDockManager.isDocked()) {
nextState = mDockManager.isHidden() ? State.DOZE : State.DOZE_AOD_DOCKED;

View File

@@ -3333,12 +3333,12 @@ public class StatusBar extends SystemUI implements DemoMode,
Trace.traceCounter(Trace.TRACE_TAG_APP, "dozing", mDozing ? 1 : 0);
Trace.beginSection("StatusBar#updateDozingState");
boolean sleepingFromKeyguard =
mStatusBarKeyguardViewManager.isGoingToSleepVisibleNotOccluded();
boolean visibleNotOccluded = mStatusBarKeyguardViewManager.isShowing()
&& !mStatusBarKeyguardViewManager.isOccluded();
boolean wakeAndUnlock = mBiometricUnlockController.getMode()
== BiometricUnlockController.MODE_WAKE_AND_UNLOCK;
boolean animate = (!mDozing && mDozeServiceHost.shouldAnimateWakeup() && !wakeAndUnlock)
|| (mDozing && mDozeServiceHost.shouldAnimateScreenOff() && sleepingFromKeyguard);
|| (mDozing && mDozeServiceHost.shouldAnimateScreenOff() && visibleNotOccluded);
mNotificationPanelViewController.setDozing(mDozing, animate, mWakeUpTouchLocation);
updateQsExpansionEnabled();

View File

@@ -168,7 +168,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
private boolean mLastIsDocked;
private boolean mLastPulsing;
private int mLastBiometricMode;
private boolean mGoingToSleepVisibleNotOccluded;
private boolean mLastLockVisible;
private OnDismissAction mAfterKeyguardGoneAction;
@@ -450,36 +449,11 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
}
}
public boolean isGoingToSleepVisibleNotOccluded() {
return mGoingToSleepVisibleNotOccluded;
}
@Override
public void onStartedGoingToSleep() {
mGoingToSleepVisibleNotOccluded = isShowing() && !isOccluded();
}
@Override
public void onFinishedGoingToSleep() {
mGoingToSleepVisibleNotOccluded = false;
mBouncer.onScreenTurnedOff();
}
@Override
public void onStartedWakingUp() {
// TODO: remove
}
@Override
public void onScreenTurningOn() {
// TODO: remove
}
@Override
public void onScreenTurnedOn() {
// TODO: remove
}
@Override
public void onRemoteInputActive(boolean active) {
mRemoteInputActive = active;
@@ -999,7 +973,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
pw.println(" mOccluded: " + mOccluded);
pw.println(" mRemoteInputActive: " + mRemoteInputActive);
pw.println(" mDozing: " + mDozing);
pw.println(" mGoingToSleepVisibleNotOccluded: " + mGoingToSleepVisibleNotOccluded);
pw.println(" mAfterKeyguardGoneAction: " + mAfterKeyguardGoneAction);
pw.println(" mAfterKeyguardGoneRunnables: " + mAfterKeyguardGoneRunnables);
pw.println(" mPendingWakeupAction: " + mPendingWakeupAction);