diff options
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 8197edc97a05..383efce5bb2a 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<S extends BiometricAuthenticator.Identifier, } @Override - public void onRemoved(@Nullable BiometricAuthenticator.Identifier identifier, int remaining) { + public void onRemoved(@NonNull BiometricAuthenticator.Identifier identifier, int remaining) { Slog.d(TAG, "onRemoved: " + identifier.getBiometricId() + " remaining: " + remaining); - if (identifier != null) { - mBiometricUtils.removeBiometricForUser(getContext(), getTargetUserId(), - identifier.getBiometricId()); - } + mBiometricUtils.removeBiometricForUser(getContext(), getTargetUserId(), + identifier.getBiometricId()); try { if (getListener() != null) { diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java index 79e361f531c7..4ffbe06c11ba 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java @@ -398,7 +398,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { private synchronized IBiometricsFace getDaemon() { if (mTestHalEnabled) { - final TestHal testHal = new TestHal(); + final TestHal testHal = new TestHal(mContext, mSensorId); testHal.setCallback(mHalResultController); return testHal; } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/TestHal.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/TestHal.java index 84aa6d9ad1f8..d9408599aa2b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/TestHal.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/TestHal.java @@ -16,23 +16,40 @@ package com.android.server.biometrics.sensors.face.hidl; +import android.annotation.NonNull; import android.annotation.Nullable; +import android.content.Context; import android.hardware.biometrics.face.V1_0.FaceError; import android.hardware.biometrics.face.V1_0.IBiometricsFace; import android.hardware.biometrics.face.V1_0.IBiometricsFaceClientCallback; import android.hardware.biometrics.face.V1_0.OptionalBool; import android.hardware.biometrics.face.V1_0.OptionalUint64; import android.hardware.biometrics.face.V1_0.Status; +import android.hardware.face.Face; import android.os.RemoteException; import android.util.Slog; +import com.android.server.biometrics.sensors.face.FaceUtils; + import java.util.ArrayList; -import java.util.Arrays; +import java.util.Collections; +import java.util.List; public class TestHal extends IBiometricsFace.Stub { private static final String TAG = "face.hidl.TestHal"; + + @NonNull + private final Context mContext; + private final int mSensorId; + @Nullable private IBiometricsFaceClientCallback mCallback; + private int mUserId; + + TestHal(@NonNull Context context, int sensorId) { + mContext = context; + mSensorId = sensorId; + } @Override public OptionalUint64 setCallback(IBiometricsFaceClientCallback clientCallback) { @@ -44,6 +61,7 @@ public class TestHal extends IBiometricsFace.Stub { @Override public int setActiveUser(int userId, String storePath) { + mUserId = userId; return 0; } @@ -110,8 +128,20 @@ public class TestHal extends IBiometricsFace.Stub { public int remove(int faceId) throws RemoteException { Slog.w(TAG, "remove"); if (mCallback != null) { - mCallback.onRemoved(0 /* deviceId */, new ArrayList<Integer>(Arrays.asList(faceId)), - 0 /* userId */); + if (faceId == 0) { + // For this HAL interface, remove(0) means to remove all enrollments. + final List<Face> faces = FaceUtils.getInstance(mSensorId) + .getBiometricsForUser(mContext, mUserId); + final ArrayList<Integer> 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 f2992cccbe09..e149ca9428dd 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 129f6a61df04..986e92e244f0 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<Fingerprint> 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; } |