summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java54
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java32
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt1
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java6
5 files changed, 64 insertions, 33 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index e6e2ac980889..3412c18e3103 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -1428,32 +1428,42 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
final FaceManager.AuthenticationCallback mFaceAuthenticationCallback
= new FaceManager.AuthenticationCallback() {
- @Override
- public void onAuthenticationFailed() {
- handleFaceAuthFailed();
- }
+ @Override
+ public void onAuthenticationFailed() {
+ handleFaceAuthFailed();
+ if (mKeyguardBypassController != null) {
+ mKeyguardBypassController.setUserHasDeviceEntryIntent(false);
+ }
+ }
- @Override
- public void onAuthenticationSucceeded(FaceManager.AuthenticationResult result) {
- Trace.beginSection("KeyguardUpdateMonitor#onAuthenticationSucceeded");
- handleFaceAuthenticated(result.getUserId(), result.isStrongBiometric());
- Trace.endSection();
- }
+ @Override
+ public void onAuthenticationSucceeded(FaceManager.AuthenticationResult result) {
+ Trace.beginSection("KeyguardUpdateMonitor#onAuthenticationSucceeded");
+ handleFaceAuthenticated(result.getUserId(), result.isStrongBiometric());
+ Trace.endSection();
- @Override
- public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
- handleFaceHelp(helpMsgId, helpString.toString());
- }
+ if (mKeyguardBypassController != null) {
+ mKeyguardBypassController.setUserHasDeviceEntryIntent(false);
+ }
+ }
- @Override
- public void onAuthenticationError(int errMsgId, CharSequence errString) {
- handleFaceError(errMsgId, errString.toString());
- }
+ @Override
+ public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
+ handleFaceHelp(helpMsgId, helpString.toString());
+ }
- @Override
- public void onAuthenticationAcquired(int acquireInfo) {
- handleFaceAcquired(acquireInfo);
- }
+ @Override
+ public void onAuthenticationError(int errMsgId, CharSequence errString) {
+ handleFaceError(errMsgId, errString.toString());
+ if (mKeyguardBypassController != null) {
+ mKeyguardBypassController.setUserHasDeviceEntryIntent(false);
+ }
+ }
+
+ @Override
+ public void onAuthenticationAcquired(int acquireInfo) {
+ handleFaceAcquired(acquireInfo);
+ }
};
private CancellationSignal mFingerprintCancelSignal;
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
index 6ddf24875000..3c3dfec42b4b 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
@@ -68,6 +68,7 @@ import com.android.systemui.keyguard.ScreenLifecycle;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.LockscreenShadeTransitionController;
+import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -120,6 +121,7 @@ public class UdfpsController implements DozeReceiver {
@NonNull private final AccessibilityManager mAccessibilityManager;
@NonNull private final LockscreenShadeTransitionController mLockscreenShadeTransitionController;
@Nullable private final UdfpsHbmProvider mHbmProvider;
+ @NonNull private final KeyguardBypassController mKeyguardBypassController;
@VisibleForTesting @NonNull final BiometricOrientationEventListener mOrientationListener;
// Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple
// sensors, this, in addition to a lot of the code here, will be updated.
@@ -397,7 +399,10 @@ public class UdfpsController implements DozeReceiver {
handled = true;
}
if ((withinSensorArea || fromUdfpsView) && shouldTryToDismissKeyguard()) {
- Log.v(TAG, "onTouch | dismiss keyguard from ACTION_DOWN");
+ Log.v(TAG, "onTouch | dismiss keyguard ACTION_DOWN");
+ if (!mOnFingerDown) {
+ playStartHaptic();
+ }
mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */);
mAttemptedToDismissKeyguard = true;
}
@@ -414,6 +419,16 @@ public class UdfpsController implements DozeReceiver {
boolean actionMoveWithinSensorArea =
isWithinSensorArea(udfpsView, event.getX(idx), event.getY(idx),
fromUdfpsView);
+ if ((fromUdfpsView || actionMoveWithinSensorArea)
+ && shouldTryToDismissKeyguard()) {
+ Log.v(TAG, "onTouch | dismiss keyguard ACTION_MOVE");
+ if (!mOnFingerDown) {
+ playStartHaptic();
+ }
+ mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */);
+ mAttemptedToDismissKeyguard = true;
+ break;
+ }
if (actionMoveWithinSensorArea) {
if (mVelocityTracker == null) {
// touches could be injected, so the velocity tracker may not have
@@ -449,12 +464,6 @@ public class UdfpsController implements DozeReceiver {
Log.v(TAG, "onTouch | finger outside");
onFingerUp();
}
- if ((fromUdfpsView || actionMoveWithinSensorArea)
- && shouldTryToDismissKeyguard()) {
- Log.v(TAG, "onTouch | dismiss keyguard from ACTION_MOVE");
- mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */);
- mAttemptedToDismissKeyguard = true;
- }
}
Trace.endSection();
break;
@@ -509,7 +518,8 @@ public class UdfpsController implements DozeReceiver {
@Nullable Vibrator vibrator,
@NonNull UdfpsHapticsSimulator udfpsHapticsSimulator,
@NonNull Optional<UdfpsHbmProvider> hbmProvider,
- @NonNull KeyguardStateController keyguardStateController) {
+ @NonNull KeyguardStateController keyguardStateController,
+ @NonNull KeyguardBypassController keyguardBypassController) {
mContext = context;
mExecution = execution;
// TODO (b/185124905): inject main handler and vibrator once done prototyping
@@ -539,6 +549,7 @@ public class UdfpsController implements DozeReceiver {
onOrientationChanged();
return Unit.INSTANCE;
});
+ mKeyguardBypassController = keyguardBypassController;
mSensorProps = findFirstUdfps();
// At least one UDFPS sensor exists
@@ -863,12 +874,17 @@ public class UdfpsController implements DozeReceiver {
private void onFingerDown(int x, int y, float minor, float major) {
mExecution.assertIsMainThread();
+ mKeyguardBypassController.setUserHasDeviceEntryIntent(true);
if (mView == null) {
Log.w(TAG, "Null view in onFingerDown");
return;
}
if (!mOnFingerDown) {
playStartHaptic();
+
+ if (!mKeyguardUpdateMonitor.isFaceDetectionRunning()) {
+ mKeyguardUpdateMonitor.requestFaceAuth(/* userInitiatedRequest */ false);
+ }
}
mOnFingerDown = true;
mFingerprintManager.onPointerDown(mSensorProps.sensorId, x, y, minor, major);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
index 6d5c53609f81..6e201048abdb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
@@ -564,8 +564,8 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp
boolean unlockingAllowed =
mUpdateMonitor.isUnlockingWithBiometricAllowed(isStrongBiometric);
boolean deviceDreaming = mUpdateMonitor.isDreaming();
- boolean bypass = mKeyguardBypassController.getBypassEnabled();
-
+ boolean bypass = mKeyguardBypassController.getBypassEnabled()
+ || mKeyguardBypassController.getUserHasDeviceEntryIntent();
if (!mUpdateMonitor.isDeviceInteractive()) {
if (!mKeyguardViewController.isShowing()) {
return bypass ? MODE_WAKE_AND_UNLOCK : MODE_ONLY_WAKE;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt
index 2cb0a3a28901..ec669711e2db 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt
@@ -43,6 +43,7 @@ open class KeyguardBypassController : Dumpable, StackScrollAlgorithm.BypassContr
@BypassOverride private val bypassOverride: Int
private var hasFaceFeature: Boolean
private var pendingUnlock: PendingUnlock? = null
+ var userHasDeviceEntryIntent: Boolean = false // ie: attempted udfps auth
@IntDef(
FACE_UNLOCK_BYPASS_NO_OVERRIDE,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java
index 397341b197ee..36ca6642d9c0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java
@@ -59,6 +59,7 @@ import com.android.systemui.keyguard.ScreenLifecycle;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.LockscreenShadeTransitionController;
+import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -136,6 +137,8 @@ public class UdfpsControllerTest extends SysuiTestCase {
private UdfpsHapticsSimulator mUdfpsHapticsSimulator;
@Mock
private KeyguardStateController mKeyguardStateController;
+ @Mock
+ private KeyguardBypassController mKeyguardBypassController;
private FakeExecutor mFgExecutor;
@@ -204,7 +207,8 @@ public class UdfpsControllerTest extends SysuiTestCase {
mVibrator,
mUdfpsHapticsSimulator,
Optional.of(mHbmProvider),
- mKeyguardStateController);
+ mKeyguardStateController,
+ mKeyguardBypassController);
verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture());
mOverlayController = mOverlayCaptor.getValue();
verify(mScreenLifecycle).addObserver(mScreenObserverCaptor.capture());