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

Commit a3b82500 authored by Kevin Chyn's avatar Kevin Chyn Committed by Android (Google) Code Review
Browse files

Merge changes I8a307450,I24fd9dad

* changes:
  Update logic when multiple face sensors exist
  Do not assume that legacy HIDL HAL sensorIds == 0
parents 1bc53046 8e6c6bd6
Loading
Loading
Loading
Loading
+18 −13
Original line number Diff line number Diff line
@@ -127,17 +127,6 @@ public class FaceService extends SystemService implements BiometricServiceCallba
        return properties;
    }

    @NonNull
    private List<Face> getEnrolledFaces(int userId, String opPackageName) {
        final Pair<Integer, ServiceProvider> provider = getSingleProvider();
        if (provider == null) {
            Slog.w(TAG, "Null provider for getEnrolledFaces, caller: " + opPackageName);
            return Collections.emptyList();
        }

        return provider.second.getEnrolledFaces(provider.first, userId);
    }

    /**
     * Receives the incoming binder calls from FaceManager.
     */
@@ -438,6 +427,7 @@ public class FaceService extends SystemService implements BiometricServiceCallba
                            pw.println("Dumping for sensorId: " + props.sensorId
                                    + ", provider: " + provider.getClass().getSimpleName());
                            provider.dumpInternal(props.sensorId, pw);
                            pw.println();
                        }
                    }
                }
@@ -471,7 +461,13 @@ public class FaceService extends SystemService implements BiometricServiceCallba
                Utils.checkPermission(getContext(), INTERACT_ACROSS_USERS);
            }

            return FaceService.this.getEnrolledFaces(userId, opPackageName);
            final ServiceProvider provider = getProviderForSensor(sensorId);
            if (provider == null) {
                Slog.w(TAG, "Null provider for getEnrolledFaces, caller: " + opPackageName);
                return Collections.emptyList();
            }

            return provider.getEnrolledFaces(sensorId, userId);
        }

        @Override // Binder call
@@ -482,7 +478,16 @@ public class FaceService extends SystemService implements BiometricServiceCallba
                Utils.checkPermission(getContext(), INTERACT_ACROSS_USERS);
            }

            return !FaceService.this.getEnrolledFaces(userId, opPackageName).isEmpty();
            final ServiceProvider provider = getProviderForSensor(sensorId);
            if (provider == null) {
                Slog.w(TAG, "Null provider for hasEnrolledFaces, caller: " + opPackageName);
                return false;
            }

            final boolean enrolled = provider.getEnrolledFaces(sensorId, userId).size() > 0;
            Slog.d(TAG, "hasEnrolledFaces, sensor: " + sensorId + ", enrolled: " + enrolled);

            return provider.getEnrolledFaces(sensorId, userId).size() > 0;
        }

        @Override // Binder call
+4 −4
Original line number Diff line number Diff line
@@ -72,13 +72,13 @@ public class FaceUtils implements BiometricUtils<Face> {
    }

    /**
     * Legacy getter for {@link android.hardware.biometrics.face.V1_0} and its extended subclasses,
     * which do not support a well defined sensorId from the HAL.
     * Legacy getter for {@link android.hardware.biometrics.face.V1_0} and its extended subclasses.
     * Framework-side cache is always stored in the same file, regardless of sensorId.
     */
    public static FaceUtils getInstance() {
    public static FaceUtils getLegacyInstance(int sensorId) {
        // Note that sensorId for legacy services can be hard-coded to 0 since it's only used
        // to index into the sensor states map.
        return getInstance(0 /* sensorId */, LEGACY_FACE_FILE);
        return getInstance(sensorId, LEGACY_FACE_FILE);
    }

    private FaceUtils(String fileName) {
+2 −1
Original line number Diff line number Diff line
@@ -153,7 +153,8 @@ public class BiometricTestSessionImpl extends ITestSession.Stub {
        Utils.checkPermission(mContext, TEST_BIOMETRIC);

        // Fake authentication with any of the existing fingers
        List<Face> faces = FaceUtils.getInstance().getBiometricsForUser(mContext, userId);
        List<Face> faces = FaceUtils.getLegacyInstance(mSensorId)
                .getBiometricsForUser(mContext, userId);
        if (faces.isEmpty()) {
            Slog.w(TAG, "No faces, returning");
            return;
+9 −8
Original line number Diff line number Diff line
@@ -166,7 +166,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider {
        @Override
        public void onEnrollResult(long deviceId, int faceId, int userId, int remaining) {
            mHandler.post(() -> {
                final CharSequence name = FaceUtils.getInstance()
                final CharSequence name = FaceUtils.getLegacyInstance(mSensorId)
                        .getUniqueName(mContext, userId);
                final Face face = new Face(name, faceId, deviceId);

@@ -471,7 +471,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider {
    @Override
    @NonNull
    public List<Face> getEnrolledFaces(int sensorId, int userId) {
        return FaceUtils.getInstance().getBiometricsForUser(mContext, userId);
        return FaceUtils.getLegacyInstance(mSensorId).getBiometricsForUser(mContext, userId);
    }

    @Override
@@ -610,8 +610,8 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider {

            final FaceEnrollClient client = new FaceEnrollClient(mContext, mLazyDaemon, token,
                    new ClientMonitorCallbackConverter(receiver), userId, hardwareAuthToken,
                    opPackageName, FaceUtils.getInstance(), disabledFeatures, ENROLL_TIMEOUT_SEC,
                    surfaceHandle, mSensorId);
                    opPackageName, FaceUtils.getLegacyInstance(mSensorId), disabledFeatures,
                    ENROLL_TIMEOUT_SEC, surfaceHandle, mSensorId);

            mScheduler.scheduleClientMonitor(client, new ClientMonitor.Callback() {
                @Override
@@ -665,7 +665,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider {

            final FaceRemovalClient client = new FaceRemovalClient(mContext, mLazyDaemon, token,
                    new ClientMonitorCallbackConverter(receiver), faceId, userId, opPackageName,
                    FaceUtils.getInstance(), mSensorId, mAuthenticatorIds);
                    FaceUtils.getLegacyInstance(mSensorId), mSensorId, mAuthenticatorIds);
            mScheduler.scheduleClientMonitor(client);
        });
    }
@@ -748,7 +748,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider {
            final List<Face> enrolledList = getEnrolledFaces(mSensorId, userId);
            final FaceInternalCleanupClient client = new FaceInternalCleanupClient(mContext,
                    mLazyDaemon, userId, mContext.getOpPackageName(), mSensorId, enrolledList,
                    FaceUtils.getInstance(), mAuthenticatorIds);
                    FaceUtils.getLegacyInstance(mSensorId), mAuthenticatorIds);
            mScheduler.scheduleClientMonitor(client);
        });
    }
@@ -777,7 +777,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider {

            final long userToken = proto.start(SensorStateProto.USER_STATES);
            proto.write(UserStateProto.USER_ID, userId);
            proto.write(UserStateProto.NUM_ENROLLED, FaceUtils.getInstance()
            proto.write(UserStateProto.NUM_ENROLLED, FaceUtils.getLegacyInstance(mSensorId)
                    .getBiometricsForUser(mContext, userId).size());
            proto.end(userToken);
        }
@@ -801,7 +801,8 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider {
            JSONArray sets = new JSONArray();
            for (UserInfo user : UserManager.get(mContext).getUsers()) {
                final int userId = user.getUserHandle().getIdentifier();
                final int c = FaceUtils.getInstance().getBiometricsForUser(mContext, userId).size();
                final int c = FaceUtils.getLegacyInstance(mSensorId)
                        .getBiometricsForUser(mContext, userId).size();
                JSONObject set = new JSONObject();
                set.put("id", userId);
                set.put("count", c);
+3 −3
Original line number Diff line number Diff line
@@ -75,12 +75,12 @@ public class FingerprintUtils implements BiometricUtils<Fingerprint> {

    /**
     * Legacy getter for {@link android.hardware.biometrics.fingerprint.V2_1} ands its extended
     * subclasses, which do not support a well defined sensorId from the HAL.
     * subclasses. Framework-side cache is always stored in the same file, regardless of sensorId.
     */
    public static FingerprintUtils getInstance() {
    public static FingerprintUtils getLegacyInstance(int sensorId) {
        // Note that sensorId for legacy services can be hard-coded to 0 since it's only used
        // to index into the sensor states map.
        return getInstance(0 /* sensorId */, LEGACY_FINGERPRINT_FILE);
        return getInstance(sensorId, LEGACY_FINGERPRINT_FILE);
    }

    private FingerprintUtils(String fileName) {
Loading