Merge "Fix sleep during launch animation resulting in a unlocked device." into tm-dev

This commit is contained in:
TreeHugger Robot
2022-02-28 19:21:54 +00:00
committed by Android (Google) Code Review

View File

@@ -1667,11 +1667,16 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable,
return; return;
} }
// if the keyguard is already showing, don't bother. check flags in both files // If the keyguard is already showing, don't bother unless it was in the process of going
// to account for the hiding animation which results in a delay and discrepancy // away. If it was going away, keyguard state may be out of sync and we should make sure to
// between flags // re-show it explicitly. Check flags in both files to account for the hiding animation
if (mShowing && mKeyguardViewControllerLazy.get().isShowing()) { // which results in a delay and discrepancy between flags.
if (DEBUG) Log.d(TAG, "doKeyguard: not showing because it is already showing"); if ((mShowing && mKeyguardViewControllerLazy.get().isShowing())
&& !mKeyguardStateController.isKeyguardGoingAway()) {
if (DEBUG) {
Log.d(TAG, "doKeyguard: not showing "
+ "because it is already showing and not going away");
}
resetStateLocked(); resetStateLocked();
return; return;
} }
@@ -2186,7 +2191,14 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable,
mKeyguardExitAnimationRunner = null; mKeyguardExitAnimationRunner = null;
mScreenOnCoordinator.setWakeAndUnlocking(false); mScreenOnCoordinator.setWakeAndUnlocking(false);
mPendingLock = false; mPendingLock = false;
setShowingLocked(true);
// If we're asked to re-show while the keyguard is going away, force callbacks to ensure
// that state is re-set correctly. Otherwise, we might short circuit since mShowing is
// true during the keyguard going away process, despite having partially set some state
// to unlocked.
setShowingLocked(
true, mKeyguardStateController.isKeyguardGoingAway() /* forceCallbacks */);
mKeyguardViewControllerLazy.get().show(options); mKeyguardViewControllerLazy.get().show(options);
resetKeyguardDonePendingLocked(); resetKeyguardDonePendingLocked();
mHideAnimationRun = false; mHideAnimationRun = false;
@@ -2356,14 +2368,28 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable,
@Override @Override
public void onAnimationFinished() throws RemoteException { public void onAnimationFinished() throws RemoteException {
try { try {
// WindowManager always needs to know that this animation
// finished so it does not wait the 10s until timeout.
finishedCallback.onAnimationFinished(); finishedCallback.onAnimationFinished();
} catch (RemoteException e) { } catch (RemoteException e) {
Slog.w(TAG, "Failed to call onAnimationFinished", e); Slog.w(TAG, "Failed to call onAnimationFinished", e);
} }
onKeyguardExitFinished();
mKeyguardViewControllerLazy.get().hide(0 /* startTime */, // If we're not interactive, it means the device is going back to
0 /* fadeoutDuration */); // sleep. This happens if the power button is pressed during the
mInteractionJankMonitor.end(CUJ_LOCKSCREEN_UNLOCK_ANIMATION); // activity launch. If we're going back to sleep, we should *not*
// run keyguard exit finished callbacks and hide the keyguard, since
// we are in the process of locking again and this might result in
// the device staying unlocked when it shouldn't.
// We need to directly query isInteractive rather than mGoingToSleep
// because mGoingToSleep is set in onStartedGoingToSleep, which is
// dispatched asynchronously.
if (mPM.isInteractive()) {
onKeyguardExitFinished();
mKeyguardViewControllerLazy.get().hide(0 /* startTime */,
0 /* fadeoutDuration */);
mInteractionJankMonitor.end(CUJ_LOCKSCREEN_UNLOCK_ANIMATION);
}
} }
@Override @Override