Do not go over handler to dispatch keyguard visibility

When going over the handler, it could happen with a bad interleaving
we thought that Keyguard was not showing when getting the
onFinishedGoingToSleep message, so we stopped fingerprint
authentication. For some reason our state machine for canceling
/restarting authentication didn't work correctly so the fingerprint
listening state was not correct.

Bug: 24178814
Change-Id: I2a4731f195982395244c12e4d33b2b7d561c5671
This commit is contained in:
Jorim Jaggi
2015-09-22 15:55:33 -07:00
parent 739bb7c694
commit 6a15d528c0
2 changed files with 9 additions and 19 deletions

View File

@@ -121,7 +121,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
private static final int MSG_DEVICE_PROVISIONED = 308; private static final int MSG_DEVICE_PROVISIONED = 308;
private static final int MSG_DPM_STATE_CHANGED = 309; private static final int MSG_DPM_STATE_CHANGED = 309;
private static final int MSG_USER_SWITCHING = 310; private static final int MSG_USER_SWITCHING = 310;
private static final int MSG_KEYGUARD_VISIBILITY_CHANGED = 311;
private static final int MSG_KEYGUARD_RESET = 312; private static final int MSG_KEYGUARD_RESET = 312;
private static final int MSG_BOOT_COMPLETED = 313; private static final int MSG_BOOT_COMPLETED = 313;
private static final int MSG_USER_SWITCH_COMPLETE = 314; private static final int MSG_USER_SWITCH_COMPLETE = 314;
@@ -233,9 +232,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
case MSG_USER_SWITCH_COMPLETE: case MSG_USER_SWITCH_COMPLETE:
handleUserSwitchComplete(msg.arg1); handleUserSwitchComplete(msg.arg1);
break; break;
case MSG_KEYGUARD_VISIBILITY_CHANGED:
handleKeyguardVisibilityChanged(msg.arg1);
break;
case MSG_KEYGUARD_RESET: case MSG_KEYGUARD_RESET:
handleKeyguardReset(); handleKeyguardReset();
break; break;
@@ -1344,19 +1340,20 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
} }
/** /**
* Handle {@link #MSG_KEYGUARD_VISIBILITY_CHANGED} * Notifies that the visibility state of Keyguard has changed.
*
* <p>Needs to be called from the main thread.
*/ */
private void handleKeyguardVisibilityChanged(int showing) { public void onKeyguardVisibilityChanged(boolean showing) {
if (DEBUG) Log.d(TAG, "handleKeyguardVisibilityChanged(" + showing + ")"); if (DEBUG) Log.d(TAG, "onKeyguardVisibilityChanged(" + showing + ")");
boolean isShowing = (showing == 1); mKeyguardIsVisible = showing;
mKeyguardIsVisible = isShowing;
for (int i = 0; i < mCallbacks.size(); i++) { for (int i = 0; i < mCallbacks.size(); i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) { if (cb != null) {
cb.onKeyguardVisibilityChangedRaw(isShowing); cb.onKeyguardVisibilityChangedRaw(showing);
} }
} }
if (!isShowing) { if (!showing) {
mFingerprintAlreadyAuthenticated = false; mFingerprintAlreadyAuthenticated = false;
} }
updateFingerprintListeningState(); updateFingerprintListeningState();
@@ -1477,13 +1474,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
} }
} }
public void sendKeyguardVisibilityChanged(boolean showing) {
if (DEBUG) Log.d(TAG, "sendKeyguardVisibilityChanged(" + showing + ")");
Message message = mHandler.obtainMessage(MSG_KEYGUARD_VISIBILITY_CHANGED);
message.arg1 = showing ? 1 : 0;
message.sendToTarget();
}
public void sendKeyguardReset() { public void sendKeyguardReset() {
mHandler.obtainMessage(MSG_KEYGUARD_RESET).sendToTarget(); mHandler.obtainMessage(MSG_KEYGUARD_RESET).sendToTarget();
} }

View File

@@ -466,7 +466,7 @@ public class StatusBarKeyguardViewManager {
KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext); KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext);
if ((showing && !occluded) != (mLastShowing && !mLastOccluded) || mFirstUpdate) { if ((showing && !occluded) != (mLastShowing && !mLastOccluded) || mFirstUpdate) {
updateMonitor.sendKeyguardVisibilityChanged(showing && !occluded); updateMonitor.onKeyguardVisibilityChanged(showing && !occluded);
} }
if (bouncerShowing != mLastBouncerShowing || mFirstUpdate) { if (bouncerShowing != mLastBouncerShowing || mFirstUpdate) {
updateMonitor.sendKeyguardBouncerChanged(bouncerShowing); updateMonitor.sendKeyguardBouncerChanged(bouncerShowing);