Fix bug when Keyguard gets hidden.

We make sure in Keyguard that we only hide ourselves in
startKeyguardExitAnimation ourselves when we requested a hide.

In addition, this change also fixes a bug in WindowAnimator that
it should only call startKeyguardExitAnimation when Keyguard actually
requested a hide.

Bug: 15676717
Change-Id: I2279cccb9916985b7e9a2f41137878be5782cb9c
This commit is contained in:
Jorim Jaggi
2014-06-17 15:04:47 -07:00
parent 1f681448c6
commit 53c68a44ac
2 changed files with 14 additions and 2 deletions

View File

@ -238,6 +238,12 @@ public class KeyguardViewMediator extends SystemUI {
// last known state of the cellular connection
private String mPhoneState = TelephonyManager.EXTRA_STATE_IDLE;
/**
* Whether a hide is pending an we are just waiting for #startKeyguardExitAnimation to be
* called.
* */
private boolean mHiding;
/**
* we send this intent when the keyguard is dismissed.
*/
@ -1169,6 +1175,7 @@ public class KeyguardViewMediator extends SystemUI {
}
mStatusBarKeyguardViewManager.show(options);
mHiding = false;
mShowing = true;
mKeyguardDonePending = false;
updateActivityLockScreenState();
@ -1191,7 +1198,7 @@ public class KeyguardViewMediator extends SystemUI {
synchronized (KeyguardViewMediator.this) {
if (DEBUG) Log.d(TAG, "handleHide");
try {
mHiding = true;
if (mShowing) {
// Don't actually hide the Keyguard at the moment, wait for window manager until
@ -1212,6 +1219,11 @@ public class KeyguardViewMediator extends SystemUI {
private void handleStartKeyguardExitAnimation(long startTime, long fadeoutDuration) {
synchronized (KeyguardViewMediator.this) {
if (!mHiding) {
return;
}
mHiding = false;
// only play "unlock" noises if not on a call (since the incall UI
// disables the keyguard)
if (TelephonyManager.EXTRA_STATE_IDLE.equals(mPhoneState)) {

View File

@ -391,7 +391,7 @@ public class WindowAnimator {
final WindowStateAnimator winAnimator = unForceHiding.get(i);
winAnimator.setAnimation(a);
winAnimator.mAnimationIsEntrance = true;
if (startKeyguardExit) {
if (startKeyguardExit && mKeyguardGoingAway) {
// Do one time only.
mPolicy.startKeyguardExitAnimation(mCurrentTime + a.getStartOffset(),
a.getDuration());