Fix ordering of notifying dismiss callback

Otherwise all unlocks will result in onDismissCancelled.

Also fixes a race condition bug where we call
reportKeyguardShowingChanged but we don't wait until the state is
updated. Then, we called onDismissSucceeded such that
KeyguardManager.isDeviceLocked would still return true. Fix this
by waiting for the message to be processed.

Note that delays shouldn't be a problem here as we are soon
calling reportKeyguardShowingChanged from the UiOffloadThread.

Test: KeyguardLockedTests
Change-Id: I0b312a5f02be3a3d1028d8bf0cd1b8e6a33476ce
Fixes: 38219395
This commit is contained in:
Jorim Jaggi
2017-05-18 02:05:29 +02:00
parent 43530c9985
commit 5277deaa59
2 changed files with 5 additions and 1 deletions

View File

@@ -1808,11 +1808,11 @@ public class KeyguardViewMediator extends SystemUI {
mWakeAndUnlocking = false;
setShowingLocked(false);
mDismissCallbackRegistry.notifyDismissSucceeded();
mStatusBarKeyguardViewManager.hide(startTime, fadeoutDuration);
resetKeyguardDonePendingLocked();
mHideAnimationRun = false;
adjustStatusBarLocked();
mDismissCallbackRegistry.notifyDismissSucceeded();
sendUserPresentBroadcast();
mUpdateMonitor.setKeyguardGoingAway(false /* goingAway */);
}

View File

@@ -795,6 +795,10 @@ public class TrustManagerService extends SystemService {
// coalesce refresh messages.
mHandler.removeMessages(MSG_KEYGUARD_SHOWING_CHANGED);
mHandler.sendEmptyMessage(MSG_KEYGUARD_SHOWING_CHANGED);
// Make sure handler processes the message before returning, such that isDeviceLocked
// after this call will retrieve the correct value.
mHandler.runWithScissors(() -> {}, 0);
}
@Override