diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java | 52 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java | 1 |
2 files changed, 48 insertions, 5 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index e1544622bf95..7c0aa0700d9c 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -52,7 +52,6 @@ import android.os.Handler; import android.os.IRemoteCallback; import android.os.Message; import android.os.RemoteException; -import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; @@ -62,7 +61,6 @@ import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener; import android.telephony.TelephonyManager; -import android.util.ArraySet; import android.util.Log; import android.util.SparseBooleanArray; import android.util.SparseIntArray; @@ -74,6 +72,8 @@ import com.android.internal.telephony.IccCardConstants.State; import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.TelephonyIntents; import com.android.internal.widget.LockPatternUtils; +import com.android.systemui.recents.misc.SystemServicesProxy; +import com.android.systemui.recents.misc.SystemServicesProxy.TaskStackListener; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -131,6 +131,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private static final int MSG_SCREEN_TURNED_OFF = 332; private static final int MSG_DREAMING_STATE_CHANGED = 333; private static final int MSG_USER_UNLOCKED = 334; + private static final int MSG_ASSISTANT_STACK_CHANGED = 335; /** Fingerprint state: Not listening to fingerprint. */ private static final int FINGERPRINT_STATE_STOPPED = 0; @@ -170,6 +171,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private boolean mBootCompleted; private boolean mNeedsSlowUnlockTransition; private boolean mHasLockscreenWallpaper; + private boolean mAssistantVisible; + private boolean mKeyguardOccluded; // Device provisioning state private boolean mDeviceProvisioned; @@ -287,6 +290,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { case MSG_USER_UNLOCKED: handleUserUnlocked(); break; + case MSG_ASSISTANT_STACK_CHANGED: + mAssistantVisible = (boolean)msg.obj; + updateFingerprintListeningState(); + break; } } }; @@ -414,6 +421,15 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { mKeyguardGoingAway = goingAway; } + /** + * Updates KeyguardUpdateMonitor's internal state to know if keyguard is occluded + * @param occluded + */ + public void setKeyguardOccluded(boolean occluded) { + mKeyguardOccluded = occluded; + updateFingerprintListeningState(); + } + private void onFingerprintAuthenticated(int userId) { Trace.beginSection("KeyGuardUpdateMonitor#onFingerPrintAuthenticated"); mUserFingerprintAuthenticated.put(userId, true); @@ -429,6 +445,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { cb.onFingerprintAuthenticated(userId); } } + + // Only authenticate fingerprint once when assistant is visible + mAssistantVisible = false; + updateFingerprintListeningState(); + Trace.endSection(); } @@ -1110,6 +1131,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { mFpm.addLockoutResetCallback(mLockoutResetCallback); } + SystemServicesProxy.getInstance(mContext).registerTaskStackListener(mTaskStackListener); mUserManager = context.getSystemService(UserManager.class); } @@ -1126,7 +1148,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private boolean shouldListenForFingerprint() { return (mKeyguardIsVisible || !mDeviceInteractive || - (mBouncer && !mKeyguardGoingAway) || mGoingToSleep) + (mBouncer && !mKeyguardGoingAway) || mGoingToSleep || + (mAssistantVisible && mKeyguardOccluded)) && !mSwitchingUser && !isFingerprintDisabled(getCurrentUser()); } @@ -1155,8 +1178,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private void stopListeningForFingerprint() { if (DEBUG) Log.v(TAG, "stopListeningForFingerprint()"); if (mFingerprintRunningState == FINGERPRINT_STATE_RUNNING) { - mFingerprintCancelSignal.cancel(); - mFingerprintCancelSignal = null; + if (mFingerprintCancelSignal != null) { + mFingerprintCancelSignal.cancel(); + mFingerprintCancelSignal = null; + } setFingerprintRunningState(FINGERPRINT_STATE_CANCELLING); } if (mFingerprintRunningState == FINGERPRINT_STATE_CANCELLING_RESTARTING) { @@ -1679,6 +1704,23 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } } + private final TaskStackListener mTaskStackListener = new TaskStackListener() { + @Override + public void onTaskStackChangedBackground() { + try { + ActivityManager.StackInfo info = ActivityManager.getService().getStackInfo( + ActivityManager.StackId.ASSISTANT_STACK_ID); + if (info == null) { + return; + } + mHandler.sendMessage(mHandler.obtainMessage(MSG_ASSISTANT_STACK_CHANGED, + info.visible)); + } catch (RemoteException e) { + Log.e(TAG, "unable to check task stack", e); + } + } + }; + /** * @return true if and only if the state has changed for the specified {@code slotId} */ diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index b977dd46d27e..a22d8994236a 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -1173,6 +1173,7 @@ public class KeyguardViewMediator extends SystemUI { if (mOccluded != isOccluded) { mOccluded = isOccluded; + mUpdateMonitor.setKeyguardOccluded(isOccluded); mStatusBarKeyguardViewManager.setOccluded(isOccluded, animate && mDeviceInteractive); adjustStatusBarLocked(); |