Merge "Avoid IPCs to check for checking enrollment status of face and fp." into tm-qpr-dev

This commit is contained in:
Chandru S
2022-08-17 10:45:24 +00:00
committed by Android (Google) Code Review
2 changed files with 23 additions and 3 deletions

View File

@@ -2580,8 +2580,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
} }
private boolean isOnlyFaceEnrolled() { private boolean isOnlyFaceEnrolled() {
return isFaceAuthEnabledForUser(getCurrentUser()) return isFaceEnrolled()
&& !isUnlockWithFingerprintPossible(getCurrentUser()); && !getCachedIsUnlockWithFingerprintPossible(sCurrentUser);
} }
private void maybeLogListenerModelData(KeyguardListenModel model) { private void maybeLogListenerModelData(KeyguardListenModel model) {
@@ -2696,7 +2696,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
return isUnlockWithFacePossible(userId) || isUnlockWithFingerprintPossible(userId); return isUnlockWithFacePossible(userId) || isUnlockWithFingerprintPossible(userId);
} }
private boolean isUnlockWithFingerprintPossible(int userId) { @VisibleForTesting
boolean isUnlockWithFingerprintPossible(int userId) {
// TODO (b/242022358), make this rely on onEnrollmentChanged event and update it only once.
mIsUnlockWithFingerprintPossible.put(userId, mFpm != null && mFpm.isHardwareDetected() mIsUnlockWithFingerprintPossible.put(userId, mFpm != null && mFpm.isHardwareDetected()
&& !isFingerprintDisabled(userId) && mFpm.hasEnrolledTemplates(userId)); && !isFingerprintDisabled(userId) && mFpm.hasEnrolledTemplates(userId));
return mIsUnlockWithFingerprintPossible.get(userId); return mIsUnlockWithFingerprintPossible.get(userId);
@@ -2718,6 +2720,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
* If face hardware is available, user has enrolled and enabled auth via setting. * If face hardware is available, user has enrolled and enabled auth via setting.
*/ */
public boolean isFaceAuthEnabledForUser(int userId) { public boolean isFaceAuthEnabledForUser(int userId) {
// TODO (b/242022358), make this rely on onEnrollmentChanged event and update it only once.
updateFaceEnrolled(userId); updateFaceEnrolled(userId);
return mIsFaceEnrolled; return mIsFaceEnrolled;
} }

View File

@@ -581,6 +581,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
@Test @Test
public void testTriesToAuthenticate_whenBouncer() { public void testTriesToAuthenticate_whenBouncer() {
fingerprintIsNotEnrolled(); fingerprintIsNotEnrolled();
faceAuthEnabled();
setKeyguardBouncerVisibility(true); setKeyguardBouncerVisibility(true);
verify(mFaceManager).authenticate(any(), any(), any(), any(), anyInt(), anyBoolean()); verify(mFaceManager).authenticate(any(), any(), any(), any(), anyInt(), anyBoolean());
@@ -1218,6 +1219,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
public void testShouldListenForFace_whenFaceIsAlreadyAuthenticated_returnsFalse() public void testShouldListenForFace_whenFaceIsAlreadyAuthenticated_returnsFalse()
throws RemoteException { throws RemoteException {
// Face auth should run when the following is true. // Face auth should run when the following is true.
faceAuthEnabled();
bouncerFullyVisibleAndNotGoingToSleep(); bouncerFullyVisibleAndNotGoingToSleep();
fingerprintIsNotEnrolled(); fingerprintIsNotEnrolled();
keyguardNotGoingAway(); keyguardNotGoingAway();
@@ -1284,6 +1286,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
public void testShouldListenForFace_whenBiometricsDisabledForUser_returnsFalse() public void testShouldListenForFace_whenBiometricsDisabledForUser_returnsFalse()
throws RemoteException { throws RemoteException {
// Preconditions for face auth to run // Preconditions for face auth to run
faceAuthEnabled();
keyguardNotGoingAway(); keyguardNotGoingAway();
bouncerFullyVisibleAndNotGoingToSleep(); bouncerFullyVisibleAndNotGoingToSleep();
fingerprintIsNotEnrolled(); fingerprintIsNotEnrolled();
@@ -1307,6 +1310,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
public void testShouldListenForFace_whenUserCurrentlySwitching_returnsFalse() public void testShouldListenForFace_whenUserCurrentlySwitching_returnsFalse()
throws RemoteException { throws RemoteException {
// Preconditions for face auth to run // Preconditions for face auth to run
faceAuthEnabled();
keyguardNotGoingAway(); keyguardNotGoingAway();
bouncerFullyVisibleAndNotGoingToSleep(); bouncerFullyVisibleAndNotGoingToSleep();
fingerprintIsNotEnrolled(); fingerprintIsNotEnrolled();
@@ -1329,6 +1333,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
public void testShouldListenForFace_whenSecureCameraLaunched_returnsFalse() public void testShouldListenForFace_whenSecureCameraLaunched_returnsFalse()
throws RemoteException { throws RemoteException {
// Preconditions for face auth to run // Preconditions for face auth to run
faceAuthEnabled();
keyguardNotGoingAway(); keyguardNotGoingAway();
bouncerFullyVisibleAndNotGoingToSleep(); bouncerFullyVisibleAndNotGoingToSleep();
fingerprintIsNotEnrolled(); fingerprintIsNotEnrolled();
@@ -1374,6 +1379,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
public void testShouldListenForFace_whenBouncerShowingAndDeviceIsAwake_returnsTrue() public void testShouldListenForFace_whenBouncerShowingAndDeviceIsAwake_returnsTrue()
throws RemoteException { throws RemoteException {
// Preconditions for face auth to run // Preconditions for face auth to run
faceAuthEnabled();
keyguardNotGoingAway(); keyguardNotGoingAway();
currentUserIsPrimary(); currentUserIsPrimary();
currentUserDoesNotHaveTrust(); currentUserDoesNotHaveTrust();
@@ -1539,8 +1545,19 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(anyBoolean())).isEqualTo(true); assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(anyBoolean())).isEqualTo(true);
} }
private void faceAuthEnabled() {
// this ensures KeyguardUpdateMonitor updates the cached mIsFaceEnrolled flag using the
// face manager mock wire-up in setup()
mKeyguardUpdateMonitor.isFaceAuthEnabledForUser(mCurrentUserId);
}
private void fingerprintIsNotEnrolled() { private void fingerprintIsNotEnrolled() {
when(mFingerprintManager.hasEnrolledTemplates(mCurrentUserId)).thenReturn(false); when(mFingerprintManager.hasEnrolledTemplates(mCurrentUserId)).thenReturn(false);
// This updates the cached fingerprint state.
// There is no straightforward API to update the fingerprint state.
// It currently works updates after enrollment changes because something else invokes
// startListeningForFingerprint(), which internally calls this method.
mKeyguardUpdateMonitor.isUnlockWithFingerprintPossible(mCurrentUserId);
} }
private void statusBarShadeIsNotLocked() { private void statusBarShadeIsNotLocked() {