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

Commit 2c2b2ca7 authored by Jeff Pu's avatar Jeff Pu Committed by Android (Google) Code Review
Browse files

Merge "Retrieve IFIngerprint from IVirtual interface over Fingerprint Virtual HAL" into main

parents 529e1eb7 06b93a79
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -98,6 +98,7 @@ filegroup {
        ":android.frameworks.location.altitude-V2-java-source",
        ":android.hardware.biometrics.common-V4-java-source",
        ":android.hardware.biometrics.fingerprint-V5-java-source",
        ":android.hardware.biometrics.fingerprint.virtualhal-java-source",
        ":android.hardware.biometrics.face-V4-java-source",
        ":android.hardware.gnss-V2-java-source",
        ":android.hardware.graphics.common-V3-java-source",
+40 −2
Original line number Diff line number Diff line
@@ -23,12 +23,14 @@ import android.annotation.Nullable;
import android.content.Context;
import android.hardware.biometrics.fingerprint.IFingerprint;
import android.hardware.biometrics.fingerprint.SensorProps;
import android.hardware.biometrics.fingerprint.virtualhal.IVirtualHal;
import android.os.Binder;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Log;
import android.util.Slog;

import java.util.ArrayList;
import java.util.HashMap;
@@ -162,6 +164,43 @@ public class FingerprintSensorConfigurations implements Parcelable {
        dest.writeMap(mSensorPropsMap);
    }


    /**
     * Remap fqName of VHAL because the `virtual` instance is registered
     * with IVirtulalHal now (IFingerprint previously)
     * @param fqName fqName to be translated
     * @return real fqName
     */
    public static String remapFqName(String fqName) {
        if (!fqName.contains(IFingerprint.DESCRIPTOR + "/virtual")) {
            return fqName;  //no remap needed for real hardware HAL
        } else {
            //new Vhal instance name
            return fqName.replace("IFingerprint", "virtualhal.IVirtualHal");
        }
    }

    /**
     * @param fqName aidl interface instance name
     * @return aidl interface
     */
    public static IFingerprint getIFingerprint(String fqName) {
        if (fqName.contains("virtual")) {
            String fqNameMapped = remapFqName(fqName);
            Slog.i(TAG, "getIFingerprint fqName is mapped: " + fqName + "->" + fqNameMapped);
            try {
                IVirtualHal vhal = IVirtualHal.Stub.asInterface(
                        Binder.allowBlocking(ServiceManager.waitForService(fqNameMapped)));
                return vhal.getFingerprintHal();
            } catch (RemoteException e) {
                Slog.e(TAG, "Remote exception in vhal.getFingerprintHal() call" + fqNameMapped);
            }
        }

        return IFingerprint.Stub.asInterface(
                Binder.allowBlocking(ServiceManager.waitForDeclaredService(fqName)));
    }

    /**
     * Returns fingerprint sensor props for the HAL {@param instance}.
     */
@@ -176,8 +215,7 @@ public class FingerprintSensorConfigurations implements Parcelable {

        try {
            final String fqName = IFingerprint.DESCRIPTOR + "/" + instance;
            final IFingerprint fp = IFingerprint.Stub.asInterface(Binder.allowBlocking(
                    ServiceManager.waitForDeclaredService(fqName)));
            final IFingerprint fp = getIFingerprint(fqName);
            if (fp != null) {
                props = fp.getSensorProps();
            } else {
+2 −2
Original line number Diff line number Diff line
@@ -50,7 +50,6 @@ import android.hardware.biometrics.PromptInfo;
import android.hardware.biometrics.SensorLocationInternal;
import android.hardware.biometrics.SensorPropertiesInternal;
import android.hardware.biometrics.face.IFace;
import android.hardware.biometrics.fingerprint.IFingerprint;
import android.hardware.face.FaceSensorConfigurations;
import android.hardware.face.FaceSensorProperties;
import android.hardware.face.FaceSensorPropertiesInternal;
@@ -74,6 +73,7 @@ import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
import com.android.server.SystemService;
import com.android.server.biometrics.sensors.fingerprint.FingerprintService;
import com.android.server.companion.virtual.VirtualDeviceManagerInternal;

import java.util.ArrayList;
@@ -203,7 +203,7 @@ public class AuthService extends SystemService {
         */
        @VisibleForTesting
        public String[] getFingerprintAidlInstances() {
            return ServiceManager.getDeclaredInstances(IFingerprint.DESCRIPTOR);
            return FingerprintService.getDeclaredInstances();
        }

        /**
+22 −3
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPR
import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_USER_CANCELED;
import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_VENDOR;
import static android.hardware.biometrics.SensorProperties.STRENGTH_STRONG;
import static android.hardware.fingerprint.FingerprintSensorConfigurations.getIFingerprint;

import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -78,6 +79,7 @@ import android.util.proto.ProtoOutputStream;

import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.DumpUtils;
import com.android.internal.widget.LockPatternUtils;
import com.android.server.SystemService;
@@ -1015,7 +1017,7 @@ public class FingerprintService extends SystemService {
        this(context, BiometricContext.getInstance(context),
                () -> IBiometricService.Stub.asInterface(
                        ServiceManager.getService(Context.BIOMETRIC_SERVICE)),
                () -> ServiceManager.getDeclaredInstances(IFingerprint.DESCRIPTOR),
                () -> getDeclaredInstances(),
                null /* fingerprintProvider */,
                null /* fingerprintProviderFunction */);
    }
@@ -1039,8 +1041,7 @@ public class FingerprintService extends SystemService {
        mFingerprintProvider = fingerprintProvider != null ? fingerprintProvider :
                (name) -> {
                    final String fqName = IFingerprint.DESCRIPTOR + "/" + name;
                    final IFingerprint fp = IFingerprint.Stub.asInterface(
                            Binder.allowBlocking(ServiceManager.waitForDeclaredService(fqName)));
                    final IFingerprint fp = getIFingerprint(fqName);
                    if (fp != null) {
                        try {
                            return new FingerprintProvider(getContext(),
@@ -1129,6 +1130,24 @@ public class FingerprintService extends SystemService {
        publishBinderService(Context.FINGERPRINT_SERVICE, mServiceWrapper);
    }

    /**
     * Get all fingerprint hal instances declared in manifest
     * @return instance names
     */
    public static String[] getDeclaredInstances() {
        String[] a = ServiceManager.getDeclaredInstances(IFingerprint.DESCRIPTOR);
        Slog.i(TAG, "Before:getDeclaredInstances: IFingerprint instance found, a.length="
                + a.length);
        if (!ArrayUtils.contains(a, "virtual")) {
            // Now, the virtual hal is registered with IVirtualHal interface and it is also
            //   moved from vendor to system_ext partition without a device manifest. So
            //   if the old vhal is not declared, add here.
            a = ArrayUtils.appendElement(String.class, a, "virtual");
        }
        Slog.i(TAG, "After:getDeclaredInstances: a.length=" + a.length);
        return a;
    }

    @NonNull
    private List<Fingerprint> getEnrolledFingerprintsDeprecated(int userId, String opPackageName) {
        final Pair<Integer, ServiceProvider> provider = mRegistry.getSingleProvider();
+4 −4
Original line number Diff line number Diff line
@@ -20,9 +20,9 @@ import android.annotation.NonNull;
import android.content.Context;
import android.hardware.biometrics.ITestSession;
import android.hardware.biometrics.ITestSessionCallback;
import android.hardware.biometrics.fingerprint.AcquiredInfoAndVendorCode;
import android.hardware.biometrics.fingerprint.EnrollmentProgressStep;
import android.hardware.biometrics.fingerprint.NextEnrollment;
import android.hardware.biometrics.fingerprint.virtualhal.AcquiredInfoAndVendorCode;
import android.hardware.biometrics.fingerprint.virtualhal.EnrollmentProgressStep;
import android.hardware.biometrics.fingerprint.virtualhal.NextEnrollment;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintEnrollOptions;
import android.hardware.fingerprint.FingerprintManager;
Loading