From ab30e51c36bba291b68cb055d6a426220d51879e Mon Sep 17 00:00:00 2001 From: Beverly Date: Wed, 10 Nov 2021 10:34:31 -0500 Subject: [PATCH] Check whether udfps is supported instead of enrolled In case there are delays in onEnrollmentChanged, let's make sure that KeyguardUpdateMonitor uses the correct logic for whether to run UDFPS or not. Test: atest LockIconViewControllerTest Bug: 205670174 Change-Id: Ia2b4fd290b4d78819fabf7bea744faed62fa0d3b --- .../android/keyguard/KeyguardUpdateMonitor.java | 14 +++++++------- .../android/keyguard/LockIconViewController.java | 2 +- .../statusbar/KeyguardIndicationController.java | 2 +- .../keyguard/LockIconViewControllerTest.java | 10 ++++++---- .../KeyguardIndicationControllerTest.java | 2 +- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 85bc8f7c70a2b..14bf800d261e3 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -2044,17 +2044,17 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } /** - * @return true if there's at least one udfps enrolled + * @return true if there's at least one udfps enrolled for the current user. */ public boolean isUdfpsEnrolled() { return mIsUdfpsEnrolled; } /** - * @return if udfps is available on this device. will return true even if the user hasn't - * enrolled udfps. This may be false if called before onAllAuthenticatorsRegistered. + * @return true if udfps HW is supported on this device. Can return true even if the user has + * not enrolled udfps. This may be false if called before onAllAuthenticatorsRegistered. */ - public boolean isUdfpsAvailable() { + public boolean isUdfpsSupported() { return mAuthController.getUdfpsProps() != null && !mAuthController.getUdfpsProps().isEmpty(); } @@ -2102,7 +2102,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } updateUdfpsEnrolled(getCurrentUser()); - final boolean shouldListenForFingerprint = shouldListenForFingerprint(isUdfpsEnrolled()); + final boolean shouldListenForFingerprint = shouldListenForFingerprint(isUdfpsSupported()); final boolean runningOrRestarting = mFingerprintRunningState == BIOMETRIC_STATE_RUNNING || mFingerprintRunningState == BIOMETRIC_STATE_CANCELLING_RESTARTING; if (runningOrRestarting && !shouldListenForFingerprint) { @@ -3388,11 +3388,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab + " expected=" + (shouldListenForFingerprint(isUdfpsEnrolled()) ? 1 : 0)); pw.println(" strongAuthFlags=" + Integer.toHexString(strongAuthFlags)); pw.println(" trustManaged=" + getUserTrustIsManaged(userId)); - pw.println(" udfpsEnrolled=" + isUdfpsEnrolled()); pw.println(" mFingerprintLockedOut=" + mFingerprintLockedOut); pw.println(" mFingerprintLockedOutPermanent=" + mFingerprintLockedOutPermanent); pw.println(" enabledByUser=" + mBiometricEnabledForUser.get(userId)); - if (isUdfpsEnrolled()) { + if (isUdfpsSupported()) { + pw.println(" udfpsEnrolled=" + isUdfpsEnrolled()); pw.println(" shouldListenForUdfps=" + shouldListenForFingerprint(true)); pw.println(" bouncerVisible=" + mBouncer); pw.println(" mStatusBarState=" diff --git a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java index 8a0b5b8704e6a..c7be3ce01c54e 100644 --- a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java @@ -435,7 +435,7 @@ public class LockIconViewController extends ViewController impleme boolean wasUdfpsSupported = mUdfpsSupported; boolean wasUdfpsEnrolled = mUdfpsEnrolled; - mUdfpsSupported = mAuthController.getUdfpsSensorLocation() != null; + mUdfpsSupported = mKeyguardUpdateMonitor.isUdfpsSupported(); mView.setUseBackground(mUdfpsSupported); mUdfpsEnrolled = mKeyguardUpdateMonitor.isUdfpsEnrolled(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index 74ebfe5ad5e41..1c0088709f14a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -818,7 +818,7 @@ public class KeyguardIndicationController { } private void showTryFingerprintMsg(int msgId, String a11yString) { - if (mKeyguardUpdateMonitor.isUdfpsAvailable()) { + if (mKeyguardUpdateMonitor.isUdfpsSupported()) { // if udfps available, there will always be a tappable affordance to unlock // For example, the lock icon if (mKeyguardBypassController.getUserHasDeviceEntryIntent()) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/LockIconViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/LockIconViewControllerTest.java index 5e73dbcbc95d4..d64319b278b44 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/LockIconViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/LockIconViewControllerTest.java @@ -212,6 +212,7 @@ public class LockIconViewControllerTest extends SysuiTestCase { @Test public void testUpdateFingerprintLocationOnAuthenticatorsRegistered() { // GIVEN fp sensor location is not available pre-init + when(mKeyguardUpdateMonitor.isUdfpsSupported()).thenReturn(false); when(mAuthController.getFingerprintSensorLocation()).thenReturn(null); when(mAuthController.getUdfpsProps()).thenReturn(null); mLockIconViewController.init(); @@ -232,7 +233,7 @@ public class LockIconViewControllerTest extends SysuiTestCase { } @Test - public void testLockIconViewBackgroundEnabledWhenUdfpsIsAvailable() { + public void testLockIconViewBackgroundEnabledWhenUdfpsIsSupported() { // GIVEN Udpfs sensor location is available setupUdfps(); @@ -247,9 +248,9 @@ public class LockIconViewControllerTest extends SysuiTestCase { } @Test - public void testLockIconViewBackgroundDisabledWhenUdfpsIsUnavailable() { - // GIVEN Udfps sensor location is not available - when(mAuthController.getUdfpsSensorLocation()).thenReturn(null); + public void testLockIconViewBackgroundDisabledWhenUdfpsIsNotSupported() { + // GIVEN Udfps sensor location is not supported + when(mKeyguardUpdateMonitor.isUdfpsSupported()).thenReturn(false); mLockIconViewController.init(); captureAttachListener(); @@ -365,6 +366,7 @@ public class LockIconViewControllerTest extends SysuiTestCase { } private Pair setupUdfps() { + when(mKeyguardUpdateMonitor.isUdfpsSupported()).thenReturn(true); final PointF udfpsLocation = new PointF(50, 75); final int radius = 33; final FingerprintSensorPropertiesInternal fpProps = diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java index 01f7fae05f766..cb0d87a20f894 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java @@ -701,7 +701,7 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { // GIVEN fingerprint is also running (not udfps) when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true); - when(mKeyguardUpdateMonitor.isUdfpsAvailable()).thenReturn(false); + when(mKeyguardUpdateMonitor.isUdfpsSupported()).thenReturn(false); mController.setVisible(true);