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

Commit f8894145 authored by Diya Bera's avatar Diya Bera Committed by Android (Google) Code Review
Browse files

Merge "Reduce boot time" into main

parents 6b8d8a46 508bc9e5
Loading
Loading
Loading
Loading
+31 −14
Original line number Diff line number Diff line
@@ -216,6 +216,13 @@ public class AuthService extends SystemService {
        public String[] getFaceAidlInstances() {
            return ServiceManager.getDeclaredInstances(IFace.DESCRIPTOR);
        }

        /**
         * Allows to test with handlers.
         */
        public BiometricHandlerProvider getBiometricHandlerProvider() {
            return BiometricHandlerProvider.getInstance();
        }
    }

    private final class AuthServiceImpl extends IAuthService.Stub {
@@ -772,7 +779,6 @@ public class AuthService extends SystemService {
        }

        if (com.android.server.biometrics.Flags.deHidl()) {
            Slog.d(TAG, "deHidl flag is on.");
            registerAuthenticators();
        } else {
            // Registers HIDL and AIDL authenticators, but only HIDL configs need to be provided.
@@ -783,10 +789,16 @@ public class AuthService extends SystemService {
    }

    private void registerAuthenticators() {
        BiometricHandlerProvider handlerProvider = mInjector.getBiometricHandlerProvider();

        handlerProvider.getFingerprintHandler().post(() ->
                registerFingerprintSensors(mInjector.getFingerprintAidlInstances(),
                mInjector.getFingerprintConfiguration(getContext()));
                        mInjector.getFingerprintConfiguration(getContext()), getContext(),
                        mInjector.getFingerprintService()));
        handlerProvider.getFaceHandler().post(() ->
                registerFaceSensors(mInjector.getFaceAidlInstances(),
                mInjector.getFaceConfiguration(getContext()));
                        mInjector.getFaceConfiguration(getContext()), getContext(),
                        mInjector.getFaceService()));
        registerIrisSensors(mInjector.getIrisConfiguration(getContext()));
    }

@@ -837,15 +849,18 @@ public class AuthService extends SystemService {
        }
    }

    private void registerFaceSensors(final String[] faceAidlInstances,
            final String[] hidlConfigStrings) {
    /**
     * This method is invoked on {@link BiometricHandlerProvider.mFaceHandler}.
     */
    private static void registerFaceSensors(final String[] faceAidlInstances,
            final String[] hidlConfigStrings, final Context context,
            final IFaceService faceService) {
        final FaceSensorConfigurations mFaceSensorConfigurations =
                new FaceSensorConfigurations(hidlConfigStrings != null
                        && hidlConfigStrings.length > 0);

        if (hidlConfigStrings != null && hidlConfigStrings.length > 0) {
            mFaceSensorConfigurations.addHidlConfigs(
                    hidlConfigStrings, getContext());
            mFaceSensorConfigurations.addHidlConfigs(hidlConfigStrings, context);
        }

        if (faceAidlInstances != null && faceAidlInstances.length > 0) {
@@ -854,7 +869,6 @@ public class AuthService extends SystemService {
                            ServiceManager.waitForDeclaredService(name))));
        }

        final IFaceService faceService = mInjector.getFaceService();
        if (faceService != null) {
            try {
                faceService.registerAuthenticatorsLegacy(mFaceSensorConfigurations);
@@ -866,14 +880,18 @@ public class AuthService extends SystemService {
        }
    }

    private void registerFingerprintSensors(final String[] fingerprintAidlInstances,
            final String[] hidlConfigStrings) {
    /**
     * This method is invoked on {@link BiometricHandlerProvider.mFingerprintHandler}.
     */
    private static void registerFingerprintSensors(final String[] fingerprintAidlInstances,
            final String[] hidlConfigStrings, final Context context,
            final IFingerprintService fingerprintService) {
        final FingerprintSensorConfigurations mFingerprintSensorConfigurations =
                new FingerprintSensorConfigurations(!(hidlConfigStrings != null
                        && hidlConfigStrings.length > 0));

        if (hidlConfigStrings != null && hidlConfigStrings.length > 0) {
            mFingerprintSensorConfigurations.addHidlSensors(hidlConfigStrings, getContext());
            mFingerprintSensorConfigurations.addHidlSensors(hidlConfigStrings, context);
        }

        if (fingerprintAidlInstances != null && fingerprintAidlInstances.length > 0) {
@@ -882,7 +900,6 @@ public class AuthService extends SystemService {
                            ServiceManager.waitForDeclaredService(name))));
        }

        final IFingerprintService fingerprintService = mInjector.getFingerprintService();
        if (fingerprintService != null) {
            try {
                fingerprintService.registerAuthenticatorsLegacy(mFingerprintSensorConfigurations);
+15 −0
Original line number Diff line number Diff line
@@ -60,8 +60,10 @@ import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.hardware.fingerprint.IFingerprintService;
import android.hardware.iris.IIrisService;
import android.os.Binder;
import android.os.Handler;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.annotations.RequiresFlagsEnabled;
@@ -127,6 +129,8 @@ public class AuthServiceTest {
    AppOpsManager mAppOpsManager;
    @Mock
    private VirtualDeviceManagerInternal mVdmInternal;
    @Mock
    private BiometricHandlerProvider mBiometricHandlerProvider;
    @Captor
    private ArgumentCaptor<List<FingerprintSensorPropertiesInternal>> mFingerprintPropsCaptor;
    @Captor
@@ -136,6 +140,9 @@ public class AuthServiceTest {
    @Captor
    private ArgumentCaptor<List<FaceSensorPropertiesInternal>> mFacePropsCaptor;

    private final TestLooper mFingerprintLooper = new TestLooper();
    private final TestLooper mFaceLooper = new TestLooper();

    @Before
    public void setUp() {
        // Placeholder test config
@@ -167,6 +174,11 @@ public class AuthServiceTest {
        when(mInjector.getIrisService()).thenReturn(mIrisService);
        when(mInjector.getAppOps(any())).thenReturn(mAppOpsManager);
        when(mInjector.isHidlDisabled(any())).thenReturn(false);
        when(mInjector.getBiometricHandlerProvider()).thenReturn(mBiometricHandlerProvider);
        when(mBiometricHandlerProvider.getFingerprintHandler()).thenReturn(
                new Handler(mFingerprintLooper.getLooper()));
        when(mBiometricHandlerProvider.getFaceHandler()).thenReturn(
                new Handler(mFaceLooper.getLooper()));

        setInternalAndTestBiometricPermissions(mContext, false /* hasPermission */);
    }
@@ -250,6 +262,9 @@ public class AuthServiceTest {
        mAuthService = new AuthService(mContext, mInjector);
        mAuthService.onStart();

        mFingerprintLooper.dispatchAll();
        mFaceLooper.dispatchAll();

        verify(mFingerprintService).registerAuthenticatorsLegacy(
                mFingerprintSensorConfigurationsCaptor.capture());