From 07ac5fc5fa2bcef9e072f61124039c3d035df156 Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Tue, 30 Mar 2021 00:05:53 -0700 Subject: [PATCH] Update removeAll test path 1) for the old HIDL interfaces, remove(0) means to remove all enrollments. Thus, have the test HAL pass back the fake enrollmentIds instead of just "0" 2) RemovalClient never receives null identifiers. Update it to be @NonNull and remove the unnecessary null check Test: atest CtsBiometricsTestCases Bug: 183755255 Change-Id: I2cffc4afb77c009ef75ad6ebae358e7779917744 --- .../biometrics/sensors/RemovalClient.java | 8 ++--- .../biometrics/sensors/face/hidl/Face10.java | 2 +- .../biometrics/sensors/face/hidl/TestHal.java | 36 +++++++++++++++++-- .../fingerprint/hidl/Fingerprint21.java | 2 +- .../sensors/fingerprint/hidl/TestHal.java | 29 ++++++++++++++- 5 files changed, 66 insertions(+), 11 deletions(-) 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; }