Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 966039ed authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Cache AuthenticationPolicyManager in BiometricService" into main

parents 3e0b6d9a 6de518b9
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -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<>();

@@ -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,
@@ -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 {
+32 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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");