diff options
author | 2023-04-26 01:52:54 +0000 | |
---|---|---|
committer | 2023-04-26 01:52:54 +0000 | |
commit | 8b5a734009c83c5205c61e609c0845b245e87ab7 (patch) | |
tree | ca350755437db6a7d358be888a68a130a1948940 | |
parent | 4b0843162e6e1a20f3655b21792053fff3ff00a3 (diff) | |
parent | 3d285adbe5da2b33f74651c81bb0b467e9c49625 (diff) |
Merge "Revert "KUM directly uses AuthController.isFaceEnrolled and isFingerprintEnrolled"" into udc-dev
5 files changed, 49 insertions, 38 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 2c669bbb8fed..9573913e5e2f 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -396,6 +396,7 @@ 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; @@ -2572,6 +2573,16 @@ 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(); } @@ -2611,17 +2622,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } /** - * @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 + * @return true if there's at least one face enrolled */ public boolean isFaceEnrolled() { - return isFaceEnrolled(getCurrentUser()); + return mIsFaceEnrolled; } private final UserTracker.Callback mUserChangedCallback = new UserTracker.Callback() { @@ -3280,13 +3284,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @SuppressLint("MissingPermission") @VisibleForTesting boolean isUnlockWithFingerprintPossible(int userId) { - 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); + // 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); return mIsUnlockWithFingerprintPossible.get(userId); } @@ -3301,13 +3306,24 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab /** * @deprecated This is being migrated to use modern architecture. */ - @VisibleForTesting @Deprecated - public boolean isUnlockWithFacePossible(int userId) { + private boolean isUnlockWithFacePossible(int userId) { if (isFaceAuthInteractorEnabled()) { return getFaceAuthInteractor().canFaceAuthRun(); } - return isFaceSupported() && isFaceEnrolled(userId) && !isFaceDisabled(userId); + 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; } 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 fe4014575156..16618064f249 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 logFpPossibleUpdated(userId: Int, oldValue: Boolean, newValue: Boolean) { + fun logFpEnrolledUpdated(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 possible state changed for userId: $int1 old: $bool1, new: $bool2" } + { "Fp enrolled 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 c17366ad242c..74ab47ff27a1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt @@ -115,7 +115,9 @@ class KeyguardLiftController @Inject constructor( val onKeyguard = keyguardUpdateMonitor.isKeyguardVisible && !statusBarStateController.isDozing - val shouldListen = (onKeyguard || bouncerVisible) && keyguardUpdateMonitor.isFaceEnrolled + val userId = KeyguardUpdateMonitor.getCurrentUser() + val isFaceEnabled = keyguardUpdateMonitor.isFaceAuthEnabledForUser(userId) + val shouldListen = (onKeyguard || bouncerVisible) && isFaceEnabled 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 3d811cfc901d..673819b20e4b 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.isFaceEnrolled(); + boolean faceAuthEnabled = mKeyguardUpdateMonitor.isFaceAuthEnabledForUser(user); 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 71246c994bfa..2962c14b813a 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java @@ -383,7 +383,6 @@ 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( @@ -2693,42 +2692,33 @@ 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); - // THEN unlock with fp is possible & fingerprint starts listening + verifyFingerprintAuthenticateCall(); 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<>()); - // THEN face is not possible - assertThat(mKeyguardUpdateMonitor.isUnlockWithFacePossible( + assertThat(mKeyguardUpdateMonitor.isFaceAuthEnabledForUser( 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 @@ -2801,6 +2791,9 @@ 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); } |