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:
@@ -121,7 +121,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
private static final int MSG_DEVICE_PROVISIONED = 308;
|
||||
private static final int MSG_DPM_STATE_CHANGED = 309;
|
||||
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_BOOT_COMPLETED = 313;
|
||||
private static final int MSG_USER_SWITCH_COMPLETE = 314;
|
||||
@@ -233,9 +232,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
case MSG_USER_SWITCH_COMPLETE:
|
||||
handleUserSwitchComplete(msg.arg1);
|
||||
break;
|
||||
case MSG_KEYGUARD_VISIBILITY_CHANGED:
|
||||
handleKeyguardVisibilityChanged(msg.arg1);
|
||||
break;
|
||||
case MSG_KEYGUARD_RESET:
|
||||
handleKeyguardReset();
|
||||
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) {
|
||||
if (DEBUG) Log.d(TAG, "handleKeyguardVisibilityChanged(" + showing + ")");
|
||||
boolean isShowing = (showing == 1);
|
||||
mKeyguardIsVisible = isShowing;
|
||||
public void onKeyguardVisibilityChanged(boolean showing) {
|
||||
if (DEBUG) Log.d(TAG, "onKeyguardVisibilityChanged(" + showing + ")");
|
||||
mKeyguardIsVisible = showing;
|
||||
for (int i = 0; i < mCallbacks.size(); i++) {
|
||||
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
|
||||
if (cb != null) {
|
||||
cb.onKeyguardVisibilityChangedRaw(isShowing);
|
||||
cb.onKeyguardVisibilityChangedRaw(showing);
|
||||
}
|
||||
}
|
||||
if (!isShowing) {
|
||||
if (!showing) {
|
||||
mFingerprintAlreadyAuthenticated = false;
|
||||
}
|
||||
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() {
|
||||
mHandler.obtainMessage(MSG_KEYGUARD_RESET).sendToTarget();
|
||||
}
|
||||
|
||||
@@ -466,7 +466,7 @@ public class StatusBarKeyguardViewManager {
|
||||
|
||||
KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext);
|
||||
if ((showing && !occluded) != (mLastShowing && !mLastOccluded) || mFirstUpdate) {
|
||||
updateMonitor.sendKeyguardVisibilityChanged(showing && !occluded);
|
||||
updateMonitor.onKeyguardVisibilityChanged(showing && !occluded);
|
||||
}
|
||||
if (bouncerShowing != mLastBouncerShowing || mFirstUpdate) {
|
||||
updateMonitor.sendKeyguardBouncerChanged(bouncerShowing);
|
||||
|
||||
Reference in New Issue
Block a user