summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java52
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java1
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();