diff --git a/services/core/java/com/android/server/biometrics/sensors/RemovalClient.java b/services/core/java/com/android/server/biometrics/sensors/RemovalClient.java index 8197edc97a053..383efce5bb2a4 100644 --- a/services/core/java/com/android/server/biometrics/sensors/RemovalClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/RemovalClient.java @@ -65,12 +65,10 @@ public abstract class RemovalClient(Arrays.asList(faceId)), - 0 /* userId */); + if (faceId == 0) { + // For this HAL interface, remove(0) means to remove all enrollments. + final List faces = FaceUtils.getInstance(mSensorId) + .getBiometricsForUser(mContext, mUserId); + final ArrayList faceIds = new ArrayList<>(); + for (Face face : faces) { + faceIds.add(face.getBiometricId()); + } + mCallback.onRemoved(0 /* deviceId */, faceIds, mUserId); + } else { + mCallback.onRemoved(0 /* deviceId */, + new ArrayList<>(Collections.singletonList(faceId)), + mUserId); + } } return 0; } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java index f2992cccbe099..e149ca9428dde 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java @@ -402,7 +402,7 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider @VisibleForTesting synchronized IBiometricsFingerprint getDaemon() { if (mTestHalEnabled) { - final TestHal testHal = new TestHal(); + final TestHal testHal = new TestHal(mContext, mSensorId); testHal.setNotify(mHalResultController); return testHal; } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/TestHal.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/TestHal.java index 129f6a61df04c..986e92e244f0e 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/TestHal.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/TestHal.java @@ -16,22 +16,38 @@ package com.android.server.biometrics.sensors.fingerprint.hidl; +import android.annotation.NonNull; import android.annotation.Nullable; +import android.content.Context; import android.hardware.biometrics.fingerprint.V2_1.FingerprintError; import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprintClientCallback; import android.hardware.biometrics.fingerprint.V2_3.IBiometricsFingerprint; +import android.hardware.fingerprint.Fingerprint; import android.os.RemoteException; import android.util.Slog; +import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils; + +import java.util.List; + /** * Test HAL that provides only provides no-ops. */ public class TestHal extends IBiometricsFingerprint.Stub { private static final String TAG = "fingerprint.hidl.TestHal"; + @NonNull + private final Context mContext; + private final int mSensorId; + @Nullable private IBiometricsFingerprintClientCallback mCallback; + TestHal(@NonNull Context context, int sensorId) { + mContext = context; + mSensorId = sensorId; + } + @Override public boolean isUdfps(int sensorId) { return false; @@ -96,7 +112,18 @@ public class TestHal extends IBiometricsFingerprint.Stub { public int remove(int gid, int fid) throws RemoteException { Slog.w(TAG, "Remove"); if (mCallback != null) { - mCallback.onRemoved(0 /* deviceId */, fid, gid, 0 /* remaining */); + if (fid == 0) { + // For this HAL interface, remove(0) means to remove all enrollments. + final List fingerprints = FingerprintUtils.getInstance(mSensorId) + .getBiometricsForUser(mContext, gid); + for (int i = 0; i < fingerprints.size(); i++) { + final Fingerprint fp = fingerprints.get(i); + mCallback.onRemoved(0 /* deviceId */, fp.getBiometricId(), gid, + fingerprints.size() - i - 1); + } + } else { + mCallback.onRemoved(0 /* deviceId */, fid, gid, 0 /* remaining */); + } } return 0; }