Loading services/core/java/com/android/server/biometrics/BiometricService.java +14 −2 Original line number Diff line number Diff line Loading @@ -139,6 +139,11 @@ public class BiometricService extends SystemService { @VisibleForTesting IGateKeeperService mGateKeeper; //Initialized only after authenticate is called. @VisibleForTesting @Nullable AuthenticationPolicyManager mAuthenticationPolicyManager; // Get and cache the available biometric authenticators and their associated info. final CopyOnWriteArrayList<BiometricSensor> mSensors = new CopyOnWriteArrayList<>(); Loading Loading @@ -1879,6 +1884,14 @@ public class BiometricService extends SystemService { mAuthSession = null; } if (mAuthenticationPolicyManager == null) { mAuthenticationPolicyManager = mInjector.getAuthenticationPolicyManager(getContext()); //Log error if authentication policy manager is still null if (mAuthenticationPolicyManager == null) { Slog.e(TAG, "AuthenticationPolicyManager is null"); } } final boolean debugEnabled = mInjector.isDebugEnabled(getContext(), userId); mAuthSession = new AuthSession(getContext(), mBiometricContext, mStatusBarService, createSysuiReceiver(requestId), mKeyStoreAuthorization, mRandom, Loading @@ -1886,8 +1899,7 @@ public class BiometricService extends SystemService { operationId, userId, createBiometricSensorReceiver(requestId), receiver, opPackageName, promptInfo, debugEnabled, mInjector.getFingerprintSensorProperties(getContext()), new WatchRangingHelper( requestId, mInjector.getAuthenticationPolicyManager(getContext()), mHandler, requestId, mAuthenticationPolicyManager, mHandler, this::onWatchRangingStateChange)); try { Loading services/tests/servicestests/src/com/android/server/biometrics/BiometricServiceTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.atMostOnce; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; Loading Loading @@ -1426,6 +1427,37 @@ public class BiometricServiceTest { verify(mAuthenticationPolicyService).cancelWatchRangingForRequestId(anyLong()); } @Test public void testAuthenticationPolicyManagerInitialization_whenAuthenticationIsInvoked() throws Exception { when(mInjector.getAuthenticationPolicyManager(mContext)).thenReturn( mAuthenticationPolicyManager); setupAuthForOnly(TYPE_FACE, Authenticators.BIOMETRIC_STRONG); invokeAuthenticateAndStart(mBiometricService.mImpl, mReceiver1, false /* requireConfirmation */, null /* authenticators */); verify(mInjector).getAuthenticationPolicyManager(mContext); assertThat(mBiometricService.mAuthenticationPolicyManager).isEqualTo( mAuthenticationPolicyManager); //Finish current authentication mBiometricService.mAuthSession.mSensorReceiver.onError( SENSOR_ID_FACE, getCookieForCurrentSession(mBiometricService.mAuthSession), BiometricConstants.BIOMETRIC_ERROR_TIMEOUT, 0 /* vendorCode */); mBiometricService.mAuthSession.mSysuiReceiver.onDialogDismissed( BiometricPrompt.DISMISSED_REASON_CONTENT_VIEW_MORE_OPTIONS, null /* credentialAttestation */); waitForIdle(); invokeAuthenticateAndStart(mBiometricService.mImpl, mReceiver1, false /* requireConfirmation */, null /* authenticators */); verify(mInjector, atMostOnce()).getAuthenticationPolicyManager(mContext); } @Test public void testAcquire_whenAuthenticating_sentToSystemUI() throws Exception { when(mContext.getResources().getString(anyInt())).thenReturn("test string"); Loading Loading
services/core/java/com/android/server/biometrics/BiometricService.java +14 −2 Original line number Diff line number Diff line Loading @@ -139,6 +139,11 @@ public class BiometricService extends SystemService { @VisibleForTesting IGateKeeperService mGateKeeper; //Initialized only after authenticate is called. @VisibleForTesting @Nullable AuthenticationPolicyManager mAuthenticationPolicyManager; // Get and cache the available biometric authenticators and their associated info. final CopyOnWriteArrayList<BiometricSensor> mSensors = new CopyOnWriteArrayList<>(); Loading Loading @@ -1879,6 +1884,14 @@ public class BiometricService extends SystemService { mAuthSession = null; } if (mAuthenticationPolicyManager == null) { mAuthenticationPolicyManager = mInjector.getAuthenticationPolicyManager(getContext()); //Log error if authentication policy manager is still null if (mAuthenticationPolicyManager == null) { Slog.e(TAG, "AuthenticationPolicyManager is null"); } } final boolean debugEnabled = mInjector.isDebugEnabled(getContext(), userId); mAuthSession = new AuthSession(getContext(), mBiometricContext, mStatusBarService, createSysuiReceiver(requestId), mKeyStoreAuthorization, mRandom, Loading @@ -1886,8 +1899,7 @@ public class BiometricService extends SystemService { operationId, userId, createBiometricSensorReceiver(requestId), receiver, opPackageName, promptInfo, debugEnabled, mInjector.getFingerprintSensorProperties(getContext()), new WatchRangingHelper( requestId, mInjector.getAuthenticationPolicyManager(getContext()), mHandler, requestId, mAuthenticationPolicyManager, mHandler, this::onWatchRangingStateChange)); try { Loading
services/tests/servicestests/src/com/android/server/biometrics/BiometricServiceTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.atMostOnce; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; Loading Loading @@ -1426,6 +1427,37 @@ public class BiometricServiceTest { verify(mAuthenticationPolicyService).cancelWatchRangingForRequestId(anyLong()); } @Test public void testAuthenticationPolicyManagerInitialization_whenAuthenticationIsInvoked() throws Exception { when(mInjector.getAuthenticationPolicyManager(mContext)).thenReturn( mAuthenticationPolicyManager); setupAuthForOnly(TYPE_FACE, Authenticators.BIOMETRIC_STRONG); invokeAuthenticateAndStart(mBiometricService.mImpl, mReceiver1, false /* requireConfirmation */, null /* authenticators */); verify(mInjector).getAuthenticationPolicyManager(mContext); assertThat(mBiometricService.mAuthenticationPolicyManager).isEqualTo( mAuthenticationPolicyManager); //Finish current authentication mBiometricService.mAuthSession.mSensorReceiver.onError( SENSOR_ID_FACE, getCookieForCurrentSession(mBiometricService.mAuthSession), BiometricConstants.BIOMETRIC_ERROR_TIMEOUT, 0 /* vendorCode */); mBiometricService.mAuthSession.mSysuiReceiver.onDialogDismissed( BiometricPrompt.DISMISSED_REASON_CONTENT_VIEW_MORE_OPTIONS, null /* credentialAttestation */); waitForIdle(); invokeAuthenticateAndStart(mBiometricService.mImpl, mReceiver1, false /* requireConfirmation */, null /* authenticators */); verify(mInjector, atMostOnce()).getAuthenticationPolicyManager(mContext); } @Test public void testAcquire_whenAuthenticating_sentToSystemUI() throws Exception { when(mContext.getResources().getString(anyInt())).thenReturn("test string"); Loading