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;
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user