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

Commit 8120d6af authored by Diya Bera's avatar Diya Bera
Browse files

Initialize biometric handler only when required

Flag: FLAG.DE_HIDL
Test: N/A
Bug: 327303552

Change-Id: I91f173d417c1dabf0fb383b5e124150ea5455022
parent 4faa2d19
Loading
Loading
Loading
Loading
+64 −48
Original line number Diff line number Diff line
@@ -791,14 +791,12 @@ public class AuthService extends SystemService {
    private void registerAuthenticators() {
        BiometricHandlerProvider handlerProvider = mInjector.getBiometricHandlerProvider();

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

@@ -854,7 +852,14 @@ public class AuthService extends SystemService {
     */
    private static void registerFaceSensors(final String[] faceAidlInstances,
            final String[] hidlConfigStrings, final Context context,
            final IFaceService faceService) {
            final IFaceService faceService, final BiometricHandlerProvider handlerProvider) {
        if ((hidlConfigStrings == null || hidlConfigStrings.length == 0)
                && (faceAidlInstances == null || faceAidlInstances.length == 0)) {
            Slog.d(TAG, "No face sensors.");
            return;
        }

        handlerProvider.getFaceHandler().post(() -> {
            final FaceSensorConfigurations mFaceSensorConfigurations =
                    new FaceSensorConfigurations(hidlConfigStrings != null
                            && hidlConfigStrings.length > 0);
@@ -878,6 +883,7 @@ public class AuthService extends SystemService {
            } else if (mFaceSensorConfigurations.hasSensorConfigurations()) {
                Slog.e(TAG, "Face configuration exists, but FaceService is null.");
            }
        });
    }

    /**
@@ -885,7 +891,15 @@ public class AuthService extends SystemService {
     */
    private static void registerFingerprintSensors(final String[] fingerprintAidlInstances,
            final String[] hidlConfigStrings, final Context context,
            final IFingerprintService fingerprintService) {
            final IFingerprintService fingerprintService,
            final BiometricHandlerProvider handlerProvider) {
        if ((hidlConfigStrings == null || hidlConfigStrings.length == 0)
                && (fingerprintAidlInstances == null || fingerprintAidlInstances.length == 0)) {
            Slog.d(TAG, "No fingerprint sensors.");
            return;
        }

        handlerProvider.getFingerprintHandler().post(() -> {
            final FingerprintSensorConfigurations mFingerprintSensorConfigurations =
                    new FingerprintSensorConfigurations(!(hidlConfigStrings != null
                            && hidlConfigStrings.length > 0));
@@ -902,13 +916,15 @@ public class AuthService extends SystemService {

            if (fingerprintService != null) {
                try {
                fingerprintService.registerAuthenticatorsLegacy(mFingerprintSensorConfigurations);
                    fingerprintService.registerAuthenticatorsLegacy(
                            mFingerprintSensorConfigurations);
                } catch (RemoteException e) {
                    Slog.e(TAG, "RemoteException when registering fingerprint authenticators", e);
                }
            } else if (mFingerprintSensorConfigurations.hasSensorConfigurations()) {
                Slog.e(TAG, "Fingerprint configuration exists, but FingerprintService is null.");
            }
        });
    }

    /**
+19 −10
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@

package com.android.server.biometrics;

import static android.os.Process.THREAD_PRIORITY_DEFAULT;
import static android.os.Process.THREAD_PRIORITY_DISPLAY;

import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
@@ -27,9 +30,9 @@ public class BiometricHandlerProvider {
    private static final BiometricHandlerProvider sBiometricHandlerProvider =
            new BiometricHandlerProvider();

    private final Handler mBiometricsCallbackHandler;
    private final Handler mFingerprintHandler;
    private final Handler mFaceHandler;
    private Handler mBiometricsCallbackHandler;
    private Handler mFingerprintHandler;
    private Handler mFaceHandler;

    /**
     * @return an instance of {@link BiometricHandlerProvider} which contains the three
@@ -39,16 +42,16 @@ public class BiometricHandlerProvider {
        return sBiometricHandlerProvider;
    }

    private BiometricHandlerProvider() {
        mBiometricsCallbackHandler = getNewHandler("BiometricsCallbackHandler");
        mFingerprintHandler = getNewHandler("FingerprintHandler");
        mFaceHandler = getNewHandler("FaceHandler");
    }
    private BiometricHandlerProvider() {}

    /**
    * @return the handler to process all biometric callback operations
    */
    public synchronized Handler getBiometricCallbackHandler() {
        if (mBiometricsCallbackHandler == null) {
            mBiometricsCallbackHandler = getNewHandler("BiometricsCallbackHandler",
                    THREAD_PRIORITY_DISPLAY);
        }
        return mBiometricsCallbackHandler;
    }

@@ -56,6 +59,9 @@ public class BiometricHandlerProvider {
     * @return the handler to process all face related biometric operations
     */
    public synchronized Handler getFaceHandler() {
        if (mFaceHandler == null) {
            mFaceHandler = getNewHandler("FaceHandler", THREAD_PRIORITY_DEFAULT);
        }
        return mFaceHandler;
    }

@@ -63,12 +69,15 @@ public class BiometricHandlerProvider {
     * @return the handler to process all fingerprint related biometric operations
     */
    public synchronized Handler getFingerprintHandler() {
        if (mFingerprintHandler == null) {
            mFingerprintHandler = getNewHandler("FingerprintHandler", THREAD_PRIORITY_DEFAULT);
        }
        return mFingerprintHandler;
    }

    private Handler getNewHandler(String tag) {
    private Handler getNewHandler(String tag, int priority) {
        if (Flags.deHidl()) {
            HandlerThread handlerThread = new HandlerThread(tag);
            HandlerThread handlerThread = new HandlerThread(tag, priority);
            handlerThread.start();
            return new Handler(handlerThread.getLooper());
        }