Merge "Fix sleep during launch animation resulting in a unlocked device." into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
fc94de6847
@@ -1667,11 +1667,16 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable,
|
||||
return;
|
||||
}
|
||||
|
||||
// if the keyguard is already showing, don't bother. check flags in both files
|
||||
// to account for the hiding animation which results in a delay and discrepancy
|
||||
// between flags
|
||||
if (mShowing && mKeyguardViewControllerLazy.get().isShowing()) {
|
||||
if (DEBUG) Log.d(TAG, "doKeyguard: not showing because it is already showing");
|
||||
// If the keyguard is already showing, don't bother unless it was in the process of going
|
||||
// away. If it was going away, keyguard state may be out of sync and we should make sure to
|
||||
// re-show it explicitly. Check flags in both files to account for the hiding animation
|
||||
// which results in a delay and discrepancy between flags.
|
||||
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();
|
||||
return;
|
||||
}
|
||||
@@ -2186,7 +2191,14 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable,
|
||||
mKeyguardExitAnimationRunner = null;
|
||||
mScreenOnCoordinator.setWakeAndUnlocking(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);
|
||||
resetKeyguardDonePendingLocked();
|
||||
mHideAnimationRun = false;
|
||||
@@ -2356,14 +2368,28 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable,
|
||||
@Override
|
||||
public void onAnimationFinished() throws RemoteException {
|
||||
try {
|
||||
// WindowManager always needs to know that this animation
|
||||
// finished so it does not wait the 10s until timeout.
|
||||
finishedCallback.onAnimationFinished();
|
||||
} catch (RemoteException e) {
|
||||
Slog.w(TAG, "Failed to call onAnimationFinished", e);
|
||||
}
|
||||
onKeyguardExitFinished();
|
||||
mKeyguardViewControllerLazy.get().hide(0 /* startTime */,
|
||||
0 /* fadeoutDuration */);
|
||||
mInteractionJankMonitor.end(CUJ_LOCKSCREEN_UNLOCK_ANIMATION);
|
||||
|
||||
// If we're not interactive, it means the device is going back to
|
||||
// sleep. This happens if the power button is pressed during the
|
||||
// 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
|
||||
|
||||
Reference in New Issue
Block a user