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_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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user