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

Commit f84de6e6 authored by Jeff Pu's avatar Jeff Pu
Browse files

Enable biometric virtual sensors separately

Bug: 330927425
Test: atest BiometricsE2eTests:BiometricPromptAuthSuccessTest
      atest FrameworksServicesTests:FingerprintServiceTest
      atest FrameworksServicesTests:FaceServiceTest
Change-Id: I71133b40fb57f9c2657df3cbffd3836a256f1432
parent 1d019ffa
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -10977,13 +10977,29 @@ public final class Settings {
                "biometric_debug_enabled";
        /**
         * Whether or not virtual sensors are enabled.
         * Whether or not both fingerprint and face virtual sensors are enabled.
         * @hide
         */
        @TestApi
        @Readable
        public static final String BIOMETRIC_VIRTUAL_ENABLED = "biometric_virtual_enabled";
        /**
         * Whether or not fingerprint virtual sensors are enabled.
         * @hide
         */
        @FlaggedApi("com.android.server.biometrics.face_vhal_feature")
        public static final String BIOMETRIC_FINGERPRINT_VIRTUAL_ENABLED =
                "biometric_fingerprint_virtual_enabled";
        /**
         * Whether or not face virtual sensors are enabled.
         * @hide
         */
        @FlaggedApi("com.android.server.biometrics.face_vhal_feature")
        public static final String BIOMETRIC_FACE_VIRTUAL_ENABLED =
                "biometric_face_virtual_enabled";
        /**
         * Whether or not biometric is allowed on Keyguard.
         * @hide
+2 −0
Original line number Diff line number Diff line
@@ -840,6 +840,8 @@ public class SettingsBackupTest {
                        Settings.Secure.BIOMETRIC_APP_ENABLED,
                        Settings.Secure.BIOMETRIC_KEYGUARD_ENABLED,
                        Settings.Secure.BIOMETRIC_VIRTUAL_ENABLED,
                        Settings.Secure.BIOMETRIC_FINGERPRINT_VIRTUAL_ENABLED,
                        Settings.Secure.BIOMETRIC_FACE_VIRTUAL_ENABLED,
                        Settings.Secure.BLUETOOTH_ADDR_VALID,
                        Settings.Secure.BLUETOOTH_ADDRESS,
                        Settings.Secure.BLUETOOTH_NAME,
+16 −4
Original line number Diff line number Diff line
@@ -89,11 +89,23 @@ public class Utils {
        return true;
    }

    /** If virtualized biometrics are supported (requires debug build). */
    public static boolean isVirtualEnabled(@NonNull Context context) {
    /** If virtualized fingerprint sensor is supported. */
    public static boolean isFingerprintVirtualEnabled(@NonNull Context context) {
        return Build.isDebuggable()
                && Settings.Secure.getIntForUser(context.getContentResolver(),
                Settings.Secure.BIOMETRIC_VIRTUAL_ENABLED, 0, UserHandle.USER_CURRENT) == 1;
                && (Settings.Secure.getIntForUser(context.getContentResolver(),
                Settings.Secure.BIOMETRIC_FINGERPRINT_VIRTUAL_ENABLED, 0,
                UserHandle.USER_CURRENT) == 1
                || Settings.Secure.getIntForUser(context.getContentResolver(),
                Settings.Secure.BIOMETRIC_VIRTUAL_ENABLED, 0, UserHandle.USER_CURRENT) == 1);
    }

    /** If virtualized face sensor is supported. */
    public static boolean isFaceVirtualEnabled(@NonNull Context context) {
        return Build.isDebuggable()
                && (Settings.Secure.getIntForUser(context.getContentResolver(),
                Settings.Secure.BIOMETRIC_FACE_VIRTUAL_ENABLED, 0, UserHandle.USER_CURRENT) == 1
                || Settings.Secure.getIntForUser(context.getContentResolver(),
                Settings.Secure.BIOMETRIC_VIRTUAL_ENABLED, 0, UserHandle.USER_CURRENT) == 1);
    }

    /**
+3 −3
Original line number Diff line number Diff line
@@ -748,7 +748,7 @@ public class FaceService extends SystemService {
            final String virtualInstance = "virtual";
            final boolean isVirtualHalPresent =
                    faceSensorConfigurations.doesInstanceExist(virtualInstance);
            if (Flags.faceVhalFeature() && Utils.isVirtualEnabled(getContext())) {
            if (Flags.faceVhalFeature() && Utils.isFaceVirtualEnabled(getContext())) {
                if (isVirtualHalPresent) {
                    return new Pair<>(virtualInstance,
                            faceSensorConfigurations.getSensorPropForInstance(virtualInstance));
@@ -786,7 +786,7 @@ public class FaceService extends SystemService {
            }

            final int virtualAt = aidlInstances.indexOf("virtual");
            if (Flags.faceVhalFeature() && Utils.isVirtualEnabled(getContext())) {
            if (Flags.faceVhalFeature() && Utils.isFaceVirtualEnabled(getContext())) {
                if (virtualAt != -1) {
                    //only virtual instance should be returned
                    Slog.i(TAG, "virtual hal is used");
@@ -928,7 +928,7 @@ public class FaceService extends SystemService {

    void syncEnrollmentsNow() {
        Utils.checkPermissionOrShell(getContext(), MANAGE_FACE);
        if (Flags.faceVhalFeature() && Utils.isVirtualEnabled(getContext())) {
        if (Flags.faceVhalFeature() && Utils.isFaceVirtualEnabled(getContext())) {
            Slog.i(TAG, "Sync virtual enrollments");
            final int userId = ActivityManager.getCurrentUser();
            for (ServiceProvider provider : mRegistry.getProviders()) {
+4 −4
Original line number Diff line number Diff line
@@ -1136,7 +1136,7 @@ public class FingerprintService extends SystemService {
        final String virtualInstance = "virtual";
        final boolean isVirtualHalPresent =
                fingerprintSensorConfigurations.doesInstanceExist(virtualInstance);
        if (Utils.isVirtualEnabled(getContext())) {
        if (Utils.isFingerprintVirtualEnabled(getContext())) {
            if (isVirtualHalPresent) {
                return new Pair<>(virtualInstance,
                        fingerprintSensorConfigurations.getSensorPropForInstance(virtualInstance));
@@ -1169,7 +1169,7 @@ public class FingerprintService extends SystemService {
        }

        final int virtualAt = aidlInstances.indexOf("virtual");
        if (Utils.isVirtualEnabled(getContext())) {
        if (Utils.isFingerprintVirtualEnabled(getContext())) {
            if (virtualAt != -1) {
                //only virtual instance should be returned
                Slog.i(TAG, "virtual hal is used");
@@ -1295,7 +1295,7 @@ public class FingerprintService extends SystemService {

    void syncEnrollmentsNow() {
        Utils.checkPermissionOrShell(getContext(), MANAGE_FINGERPRINT);
        if (Utils.isVirtualEnabled(getContext())) {
        if (Utils.isFingerprintVirtualEnabled(getContext())) {
            Slog.i(TAG, "Sync virtual enrollments");
            final int userId = ActivityManager.getCurrentUser();
            final CountDownLatch latch = new CountDownLatch(mRegistry.getProviders().size());
@@ -1324,7 +1324,7 @@ public class FingerprintService extends SystemService {
    }

    void simulateVhalFingerDown() {
        if (Utils.isVirtualEnabled(getContext())) {
        if (Utils.isFingerprintVirtualEnabled(getContext())) {
            Slog.i(TAG, "Simulate virtual HAL finger down event");
            final Pair<Integer, ServiceProvider> provider = mRegistry.getSingleProvider();
            if (provider != null) {
Loading