diff options
5 files changed, 38 insertions, 49 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 9573913e5e2f..2c669bbb8fed 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -396,7 +396,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private int mFaceRunningState = BIOMETRIC_STATE_STOPPED; private boolean mIsDreaming; private boolean mLogoutEnabled; - private boolean mIsFaceEnrolled; private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private int mPostureState = DEVICE_POSTURE_UNKNOWN; private FingerprintInteractiveToAuthProvider mFingerprintInteractiveToAuthProvider; @@ -2573,16 +2572,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } } - private void updateFaceEnrolled(int userId) { - final Boolean isFaceEnrolled = isFaceSupported() - && mBiometricEnabledForUser.get(userId) - && mAuthController.isFaceAuthEnrolled(userId); - if (mIsFaceEnrolled != isFaceEnrolled) { - mLogger.logFaceEnrolledUpdated(mIsFaceEnrolled, isFaceEnrolled); - } - mIsFaceEnrolled = isFaceEnrolled; - } - private boolean isFaceSupported() { return mFaceManager != null && !mFaceSensorProperties.isEmpty(); } @@ -2622,10 +2611,17 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } /** - * @return true if there's at least one face enrolled + * @return true if there's at least one face enrolled for the given user + */ + private boolean isFaceEnrolled(int userId) { + return mAuthController.isFaceAuthEnrolled(userId); + } + + /** + * @return true if there's at least one face enrolled for the current user */ public boolean isFaceEnrolled() { - return mIsFaceEnrolled; + return isFaceEnrolled(getCurrentUser()); } private final UserTracker.Callback mUserChangedCallback = new UserTracker.Callback() { @@ -3284,14 +3280,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @SuppressLint("MissingPermission") @VisibleForTesting boolean isUnlockWithFingerprintPossible(int userId) { - // TODO (b/242022358), make this rely on onEnrollmentChanged event and update it only once. - boolean newFpEnrolled = isFingerprintSupported() - && !isFingerprintDisabled(userId) && mFpm.hasEnrolledTemplates(userId); - Boolean oldFpEnrolled = mIsUnlockWithFingerprintPossible.getOrDefault(userId, false); - if (oldFpEnrolled != newFpEnrolled) { - mLogger.logFpEnrolledUpdated(userId, oldFpEnrolled, newFpEnrolled); - } - mIsUnlockWithFingerprintPossible.put(userId, newFpEnrolled); + boolean newFpPossible = isFingerprintSupported() + && !isFingerprintDisabled(userId) && mAuthController.isFingerprintEnrolled(userId); + Boolean oldFpPossible = mIsUnlockWithFingerprintPossible.getOrDefault(userId, false); + if (oldFpPossible != newFpPossible) { + mLogger.logFpPossibleUpdated(userId, oldFpPossible, newFpPossible); + } + mIsUnlockWithFingerprintPossible.put(userId, newFpPossible); return mIsUnlockWithFingerprintPossible.get(userId); } @@ -3306,24 +3301,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab /** * @deprecated This is being migrated to use modern architecture. */ + @VisibleForTesting @Deprecated - private boolean isUnlockWithFacePossible(int userId) { + public boolean isUnlockWithFacePossible(int userId) { if (isFaceAuthInteractorEnabled()) { return getFaceAuthInteractor().canFaceAuthRun(); } - return isFaceAuthEnabledForUser(userId) && !isFaceDisabled(userId); - } - - /** - * If face hardware is available, user has enrolled and enabled auth via setting. - * - * @deprecated This is being migrated to use modern architecture. - */ - @Deprecated - public boolean isFaceAuthEnabledForUser(int userId) { - // TODO (b/242022358), make this rely on onEnrollmentChanged event and update it only once. - updateFaceEnrolled(userId); - return mIsFaceEnrolled; + return isFaceSupported() && isFaceEnrolled(userId) && !isFaceDisabled(userId); } private void stopListeningForFingerprint() { diff --git a/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt b/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt index 16618064f249..fe4014575156 100644 --- a/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt +++ b/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt @@ -630,7 +630,7 @@ constructor(@KeyguardUpdateMonitorLog private val logBuffer: LogBuffer) { ) } - fun logFpEnrolledUpdated(userId: Int, oldValue: Boolean, newValue: Boolean) { + fun logFpPossibleUpdated(userId: Int, oldValue: Boolean, newValue: Boolean) { logBuffer.log( TAG, DEBUG, @@ -639,7 +639,7 @@ constructor(@KeyguardUpdateMonitorLog private val logBuffer: LogBuffer) { bool1 = oldValue bool2 = newValue }, - { "Fp enrolled state changed for userId: $int1 old: $bool1, new: $bool2" } + { "Fp possible state changed for userId: $int1 old: $bool1, new: $bool2" } ) } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt index 74ab47ff27a1..c17366ad242c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt @@ -115,9 +115,7 @@ class KeyguardLiftController @Inject constructor( val onKeyguard = keyguardUpdateMonitor.isKeyguardVisible && !statusBarStateController.isDozing - val userId = KeyguardUpdateMonitor.getCurrentUser() - val isFaceEnabled = keyguardUpdateMonitor.isFaceAuthEnabledForUser(userId) - val shouldListen = (onKeyguard || bouncerVisible) && isFaceEnabled + val shouldListen = (onKeyguard || bouncerVisible) && keyguardUpdateMonitor.isFaceEnrolled if (shouldListen != isListening) { isListening = shouldListen diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java index 673819b20e4b..3d811cfc901d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java @@ -240,7 +240,7 @@ public class KeyguardStateControllerImpl implements KeyguardStateController, Dum || (Build.IS_DEBUGGABLE && DEBUG_AUTH_WITH_ADB && mDebugUnlocked); boolean trustManaged = mKeyguardUpdateMonitor.getUserTrustIsManaged(user); boolean trusted = mKeyguardUpdateMonitor.getUserHasTrust(user); - boolean faceAuthEnabled = mKeyguardUpdateMonitor.isFaceAuthEnabledForUser(user); + boolean faceAuthEnabled = mKeyguardUpdateMonitor.isFaceEnrolled(); boolean changed = secure != mSecure || canDismissLockScreen != mCanDismissLockScreen || trustManaged != mTrustManaged || mTrusted != trusted || mFaceAuthEnabled != faceAuthEnabled; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java index 2962c14b813a..71246c994bfa 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java @@ -383,6 +383,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { } private void setupFingerprintAuth(boolean isClass3) throws RemoteException { + when(mAuthController.isFingerprintEnrolled(anyInt())).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); when(mFingerprintManager.hasEnrolledTemplates(anyInt())).thenReturn(true); mFingerprintSensorProperties = List.of( @@ -2692,33 +2693,42 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { } @Test public void testFingerprintSensorProperties() throws RemoteException { + // GIVEN no fingerprint sensor properties + when(mAuthController.isFingerprintEnrolled(anyInt())).thenReturn(true); mFingerprintAuthenticatorsRegisteredCallback.onAllAuthenticatorsRegistered( new ArrayList<>()); + // THEN fingerprint is not possible assertThat(mKeyguardUpdateMonitor.isUnlockWithFingerprintPossible( KeyguardUpdateMonitor.getCurrentUser())).isFalse(); + // WHEN there are fingerprint sensor properties mFingerprintAuthenticatorsRegisteredCallback .onAllAuthenticatorsRegistered(mFingerprintSensorProperties); - verifyFingerprintAuthenticateCall(); + // THEN unlock with fp is possible & fingerprint starts listening assertThat(mKeyguardUpdateMonitor.isUnlockWithFingerprintPossible( KeyguardUpdateMonitor.getCurrentUser())).isTrue(); + verifyFingerprintAuthenticateCall(); } @Test public void testFaceSensorProperties() throws RemoteException { + // GIVEN no face sensor properties + when(mAuthController.isFaceAuthEnrolled(anyInt())).thenReturn(true); mFaceAuthenticatorsRegisteredCallback.onAllAuthenticatorsRegistered(new ArrayList<>()); - assertThat(mKeyguardUpdateMonitor.isFaceAuthEnabledForUser( + // THEN face is not possible + assertThat(mKeyguardUpdateMonitor.isUnlockWithFacePossible( KeyguardUpdateMonitor.getCurrentUser())).isFalse(); + // WHEN there are face sensor properties mFaceAuthenticatorsRegisteredCallback.onAllAuthenticatorsRegistered(mFaceSensorProperties); - biometricsEnabledForCurrentUser(); + // THEN face is possible but face does NOT start listening immediately + assertThat(mKeyguardUpdateMonitor.isUnlockWithFacePossible( + KeyguardUpdateMonitor.getCurrentUser())).isTrue(); verifyFaceAuthenticateNeverCalled(); verifyFaceDetectNeverCalled(); - assertThat(mKeyguardUpdateMonitor.isFaceAuthEnabledForUser( - KeyguardUpdateMonitor.getCurrentUser())).isTrue(); } @Test @@ -2791,9 +2801,6 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { } private void mockCanBypassLockscreen(boolean canBypass) { - // force update the isFaceEnrolled cache: - mKeyguardUpdateMonitor.isFaceAuthEnabledForUser(getCurrentUser()); - mKeyguardUpdateMonitor.setKeyguardBypassController(mKeyguardBypassController); when(mKeyguardBypassController.canBypass()).thenReturn(canBypass); } |