From c0dd229fc6afb78c18b6688f7b5034f6229b222d Mon Sep 17 00:00:00 2001 From: Daniel Chapin Date: Fri, 19 Feb 2021 19:10:04 +0000 Subject: [PATCH 1/2] Revert "Try to ensure tests run sequentially" Revert submission 13593269 Reason for revert: Bug: 180689674 Reverted Changes: I59f6e607f:Update RemovalClient to support new biometric AIDL... I3fdb3fe0b:Try to ensure tests run sequentially Change-Id: Ia9c02759db7238536e21dd05f8e247a91e9ac5aa --- .../hardware/biometrics/BiometricManager.java | 3 +- .../biometrics/BiometricTestSession.java | 75 +++---------------- .../hardware/biometrics/IAuthService.aidl | 3 +- .../biometrics/IBiometricAuthenticator.aidl | 3 +- .../biometrics/IBiometricService.aidl | 3 +- .../hardware/biometrics/ITestSession.aidl | 2 +- .../biometrics/ITestSessionCallback.aidl | 25 ------- .../android/hardware/face/IFaceService.aidl | 3 +- .../fingerprint/FingerprintManager.java | 3 +- .../fingerprint/IFingerprintService.aidl | 3 +- .../server/biometrics/AuthService.java | 8 +- .../server/biometrics/BiometricService.java | 7 +- .../sensors/face/FaceAuthenticator.java | 6 +- .../biometrics/sensors/face/FaceService.java | 6 +- .../sensors/face/ServiceProvider.java | 8 +- .../face/aidl/BiometricTestSessionImpl.java | 27 +------ .../sensors/face/aidl/FaceProvider.java | 14 ++-- .../biometrics/sensors/face/aidl/Sensor.java | 6 +- .../face/hidl/BiometricTestSessionImpl.java | 29 +------ .../biometrics/sensors/face/hidl/Face10.java | 21 ++---- .../fingerprint/FingerprintAuthenticator.java | 6 +- .../fingerprint/FingerprintService.java | 6 +- .../sensors/fingerprint/ServiceProvider.java | 8 +- .../aidl/BiometricTestSessionImpl.java | 29 +------ .../fingerprint/aidl/FingerprintProvider.java | 14 ++-- .../sensors/fingerprint/aidl/Sensor.java | 6 +- .../hidl/BiometricTestSessionImpl.java | 27 +------ .../fingerprint/hidl/Fingerprint21.java | 20 ++--- .../sensors/iris/IrisAuthenticator.java | 4 +- 29 files changed, 72 insertions(+), 303 deletions(-) delete mode 100644 core/java/android/hardware/biometrics/ITestSessionCallback.aidl diff --git a/core/java/android/hardware/biometrics/BiometricManager.java b/core/java/android/hardware/biometrics/BiometricManager.java index ab817d1da4d99..5f5697a4ed0b7 100644 --- a/core/java/android/hardware/biometrics/BiometricManager.java +++ b/core/java/android/hardware/biometrics/BiometricManager.java @@ -237,8 +237,7 @@ public class BiometricManager { public BiometricTestSession createTestSession(int sensorId) { try { return new BiometricTestSession(mContext, sensorId, - (context, sensorId1, callback) -> mService - .createTestSession(sensorId1, callback, context.getOpPackageName())); + mService.createTestSession(sensorId, mContext.getOpPackageName())); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/hardware/biometrics/BiometricTestSession.java b/core/java/android/hardware/biometrics/BiometricTestSession.java index ff1a17e07c113..1c3560882f1bc 100644 --- a/core/java/android/hardware/biometrics/BiometricTestSession.java +++ b/core/java/android/hardware/biometrics/BiometricTestSession.java @@ -19,7 +19,6 @@ package android.hardware.biometrics; import static android.Manifest.permission.TEST_BIOMETRIC; import android.annotation.NonNull; -import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.TestApi; import android.content.Context; @@ -28,9 +27,6 @@ import android.os.RemoteException; import android.util.ArraySet; import android.util.Log; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - /** * Common set of interfaces to test biometric-related APIs, including {@link BiometricPrompt} and * {@link android.hardware.fingerprint.FingerprintManager}. @@ -40,58 +36,22 @@ import java.util.concurrent.TimeUnit; public class BiometricTestSession implements AutoCloseable { private static final String TAG = "BiometricTestSession"; - /** - * @hide - */ - public interface TestSessionProvider { - @NonNull - ITestSession createTestSession(@NonNull Context context, int sensorId, - @NonNull ITestSessionCallback callback) throws RemoteException; - } - private final Context mContext; private final int mSensorId; private final ITestSession mTestSession; // Keep track of users that were tested, which need to be cleaned up when finishing. - @NonNull private final ArraySet mTestedUsers; - - // Track the users currently cleaning up, and provide a latch that gets notified when all - // users have finished cleaning up. This is an imperfect system, as there can technically be - // multiple cleanups per user. Theoretically we should track the cleanup's BaseClientMonitor's - // unique ID, but it's complicated to plumb it through. This should be fine for now. - @Nullable private CountDownLatch mCloseLatch; - @NonNull private final ArraySet mUsersCleaningUp; - - private final ITestSessionCallback mCallback = new ITestSessionCallback.Stub() { - @Override - public void onCleanupStarted(int userId) { - Log.d(TAG, "onCleanupStarted, sensor: " + mSensorId + ", userId: " + userId); - } - - @Override - public void onCleanupFinished(int userId) { - Log.d(TAG, "onCleanupFinished, sensor: " + mSensorId - + ", userId: " + userId - + ", remaining users: " + mUsersCleaningUp.size()); - mUsersCleaningUp.remove(userId); - - if (mUsersCleaningUp.isEmpty() && mCloseLatch != null) { - mCloseLatch.countDown(); - } - } - }; + private final ArraySet mTestedUsers; /** * @hide */ public BiometricTestSession(@NonNull Context context, int sensorId, - @NonNull TestSessionProvider testSessionProvider) throws RemoteException { + @NonNull ITestSession testSession) { mContext = context; mSensorId = sensorId; - mTestSession = testSessionProvider.createTestSession(context, sensorId, mCallback); + mTestSession = testSession; mTestedUsers = new ArraySet<>(); - mUsersCleaningUp = new ArraySet<>(); setTestHalEnabled(true); } @@ -216,11 +176,6 @@ public class BiometricTestSession implements AutoCloseable { @RequiresPermission(TEST_BIOMETRIC) public void cleanupInternalState(int userId) { try { - if (mUsersCleaningUp.contains(userId)) { - Log.w(TAG, "Cleanup already in progress for user: " + userId); - } - - mUsersCleaningUp.add(userId); mTestSession.cleanupInternalState(userId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); @@ -230,24 +185,12 @@ public class BiometricTestSession implements AutoCloseable { @Override @RequiresPermission(TEST_BIOMETRIC) public void close() { - // Cleanup can be performed using the test HAL, since it always responds to enumerate with - // zero enrollments. - if (!mTestedUsers.isEmpty()) { - mCloseLatch = new CountDownLatch(1); - for (int user : mTestedUsers) { - cleanupInternalState(user); - } - - try { - Log.d(TAG, "Awaiting latch..."); - mCloseLatch.await(10, TimeUnit.SECONDS); - Log.d(TAG, "Finished awaiting"); - } catch (InterruptedException e) { - Log.e(TAG, "Latch interrupted", e); - } - } - - // Disable the test HAL after the sensor becomes idle. + // Disable the test HAL first, so that enumerate is run on the real HAL, which should have + // no enrollments. Test-only framework enrollments will be deleted. setTestHalEnabled(false); + + for (int user : mTestedUsers) { + cleanupInternalState(user); + } } } diff --git a/core/java/android/hardware/biometrics/IAuthService.aidl b/core/java/android/hardware/biometrics/IAuthService.aidl index d8c9dbc849a9b..0dfd5dbf300e9 100644 --- a/core/java/android/hardware/biometrics/IAuthService.aidl +++ b/core/java/android/hardware/biometrics/IAuthService.aidl @@ -20,7 +20,6 @@ import android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback; import android.hardware.biometrics.IBiometricServiceReceiver; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.PromptInfo; import android.hardware.biometrics.SensorPropertiesInternal; @@ -33,7 +32,7 @@ import android.hardware.biometrics.SensorPropertiesInternal; */ interface IAuthService { // Creates a test session with the specified sensorId - ITestSession createTestSession(int sensorId, ITestSessionCallback callback, String opPackageName); + ITestSession createTestSession(int sensorId, String opPackageName); // Retrieve static sensor properties for all biometric sensors List getSensorProperties(String opPackageName); diff --git a/core/java/android/hardware/biometrics/IBiometricAuthenticator.aidl b/core/java/android/hardware/biometrics/IBiometricAuthenticator.aidl index 7639c5dd4d16b..c854ac9847d8c 100644 --- a/core/java/android/hardware/biometrics/IBiometricAuthenticator.aidl +++ b/core/java/android/hardware/biometrics/IBiometricAuthenticator.aidl @@ -20,7 +20,6 @@ import android.hardware.biometrics.IBiometricSensorReceiver; import android.hardware.biometrics.IBiometricServiceLockoutResetCallback; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.SensorPropertiesInternal; import android.hardware.face.IFaceServiceReceiver; import android.hardware.face.Face; @@ -33,7 +32,7 @@ import android.hardware.face.Face; interface IBiometricAuthenticator { // Creates a test session - ITestSession createTestSession(ITestSessionCallback callback, String opPackageName); + ITestSession createTestSession(String opPackageName); // Retrieve static sensor properties SensorPropertiesInternal getSensorProperties(String opPackageName); diff --git a/core/java/android/hardware/biometrics/IBiometricService.aidl b/core/java/android/hardware/biometrics/IBiometricService.aidl index 24331863a05fc..a14a910a9e504 100644 --- a/core/java/android/hardware/biometrics/IBiometricService.aidl +++ b/core/java/android/hardware/biometrics/IBiometricService.aidl @@ -21,7 +21,6 @@ import android.hardware.biometrics.IBiometricServiceReceiver; import android.hardware.biometrics.IBiometricAuthenticator; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.PromptInfo; import android.hardware.biometrics.SensorPropertiesInternal; @@ -31,7 +30,7 @@ import android.hardware.biometrics.SensorPropertiesInternal; */ interface IBiometricService { // Creates a test session with the specified sensorId - ITestSession createTestSession(int sensorId, ITestSessionCallback callback, String opPackageName); + ITestSession createTestSession(int sensorId, String opPackageName); // Retrieve static sensor properties for all biometric sensors List getSensorProperties(String opPackageName); diff --git a/core/java/android/hardware/biometrics/ITestSession.aidl b/core/java/android/hardware/biometrics/ITestSession.aidl index f8395a119c0b4..fa7a62c53531e 100644 --- a/core/java/android/hardware/biometrics/ITestSession.aidl +++ b/core/java/android/hardware/biometrics/ITestSession.aidl @@ -18,7 +18,7 @@ package android.hardware.biometrics; import android.hardware.biometrics.SensorPropertiesInternal; /** - * A test service for FingerprintManager and BiometricManager. + * A test service for FingerprintManager and BiometricPrompt. * @hide */ interface ITestSession { diff --git a/core/java/android/hardware/biometrics/ITestSessionCallback.aidl b/core/java/android/hardware/biometrics/ITestSessionCallback.aidl deleted file mode 100644 index 3d9517f29548f..0000000000000 --- a/core/java/android/hardware/biometrics/ITestSessionCallback.aidl +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package android.hardware.biometrics; - -/** - * ITestSession callback for FingerprintManager and BiometricManager. - * @hide - */ -interface ITestSessionCallback { - void onCleanupStarted(int userId); - void onCleanupFinished(int userId); -} diff --git a/core/java/android/hardware/face/IFaceService.aidl b/core/java/android/hardware/face/IFaceService.aidl index 6e7c701ef5ff8..a2e0b3b1cb411 100644 --- a/core/java/android/hardware/face/IFaceService.aidl +++ b/core/java/android/hardware/face/IFaceService.aidl @@ -19,7 +19,6 @@ import android.hardware.biometrics.IBiometricSensorReceiver; import android.hardware.biometrics.IBiometricServiceLockoutResetCallback; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.face.IFaceServiceReceiver; import android.hardware.face.Face; import android.hardware.face.FaceSensorPropertiesInternal; @@ -33,7 +32,7 @@ import android.view.Surface; interface IFaceService { // Creates a test session with the specified sensorId - ITestSession createTestSession(int sensorId, ITestSessionCallback callback, String opPackageName); + ITestSession createTestSession(int sensorId, String opPackageName); // Requests a proto dump of the specified sensor byte[] dumpSensorServiceStateProto(int sensorId, boolean clearSchedulerBuffer); diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java index 9d086cf203e29..6df2764d3f8bf 100644 --- a/core/java/android/hardware/fingerprint/FingerprintManager.java +++ b/core/java/android/hardware/fingerprint/FingerprintManager.java @@ -154,8 +154,7 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing public BiometricTestSession createTestSession(int sensorId) { try { return new BiometricTestSession(mContext, sensorId, - (context, sensorId1, callback) -> mService - .createTestSession(sensorId1, callback, context.getOpPackageName())); + mService.createTestSession(sensorId, mContext.getOpPackageName())); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/hardware/fingerprint/IFingerprintService.aidl b/core/java/android/hardware/fingerprint/IFingerprintService.aidl index 054c0d0f65132..1694fef0f71bf 100644 --- a/core/java/android/hardware/fingerprint/IFingerprintService.aidl +++ b/core/java/android/hardware/fingerprint/IFingerprintService.aidl @@ -19,7 +19,6 @@ import android.hardware.biometrics.IBiometricSensorReceiver; import android.hardware.biometrics.IBiometricServiceLockoutResetCallback; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.fingerprint.IFingerprintClientActiveCallback; import android.hardware.fingerprint.IFingerprintServiceReceiver; import android.hardware.fingerprint.IUdfpsOverlayController; @@ -34,7 +33,7 @@ import java.util.List; interface IFingerprintService { // Creates a test session with the specified sensorId - ITestSession createTestSession(int sensorId, ITestSessionCallback callback, String opPackageName); + ITestSession createTestSession(int sensorId, String opPackageName); // Requests a proto dump of the specified sensor byte[] dumpSensorServiceStateProto(int sensorId, boolean clearSchedulerBuffer); diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java index e19745e5c5780..b15a8869b22a4 100644 --- a/services/core/java/com/android/server/biometrics/AuthService.java +++ b/services/core/java/com/android/server/biometrics/AuthService.java @@ -40,7 +40,6 @@ import android.hardware.biometrics.IBiometricService; import android.hardware.biometrics.IBiometricServiceReceiver; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.PromptInfo; import android.hardware.biometrics.SensorPropertiesInternal; import android.hardware.face.IFaceService; @@ -145,14 +144,13 @@ public class AuthService extends SystemService { private final class AuthServiceImpl extends IAuthService.Stub { @Override - public ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback, - @NonNull String opPackageName) throws RemoteException { + public ITestSession createTestSession(int sensorId, @NonNull String opPackageName) + throws RemoteException { Utils.checkPermission(getContext(), TEST_BIOMETRIC); final long identity = Binder.clearCallingIdentity(); try { - return mInjector.getBiometricService() - .createTestSession(sensorId, callback, opPackageName); + return mInjector.getBiometricService().createTestSession(sensorId, opPackageName); } finally { Binder.restoreCallingIdentity(identity); } diff --git a/services/core/java/com/android/server/biometrics/BiometricService.java b/services/core/java/com/android/server/biometrics/BiometricService.java index 00a4e43f347dc..614c5f1b65bfb 100644 --- a/services/core/java/com/android/server/biometrics/BiometricService.java +++ b/services/core/java/com/android/server/biometrics/BiometricService.java @@ -44,7 +44,6 @@ import android.hardware.biometrics.IBiometricServiceReceiver; import android.hardware.biometrics.IBiometricSysuiReceiver; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.PromptInfo; import android.hardware.biometrics.SensorPropertiesInternal; import android.hardware.fingerprint.FingerprintManager; @@ -571,13 +570,13 @@ public class BiometricService extends SystemService { */ private final class BiometricServiceWrapper extends IBiometricService.Stub { @Override // Binder call - public ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback, - @NonNull String opPackageName) throws RemoteException { + public ITestSession createTestSession(int sensorId, @NonNull String opPackageName) + throws RemoteException { checkInternalPermission(); for (BiometricSensor sensor : mSensors) { if (sensor.id == sensorId) { - return sensor.impl.createTestSession(callback, opPackageName); + return sensor.impl.createTestSession(opPackageName); } } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/FaceAuthenticator.java b/services/core/java/com/android/server/biometrics/sensors/face/FaceAuthenticator.java index 06b049be4501d..f37cf18a13207 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/FaceAuthenticator.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/FaceAuthenticator.java @@ -21,7 +21,6 @@ import android.hardware.biometrics.IBiometricAuthenticator; import android.hardware.biometrics.IBiometricSensorReceiver; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.SensorPropertiesInternal; import android.hardware.face.IFaceService; import android.os.IBinder; @@ -42,9 +41,8 @@ public final class FaceAuthenticator extends IBiometricAuthenticator.Stub { } @Override - public ITestSession createTestSession(@NonNull ITestSessionCallback callback, - @NonNull String opPackageName) throws RemoteException { - return mFaceService.createTestSession(mSensorId, callback, opPackageName); + public ITestSession createTestSession(@NonNull String opPackageName) throws RemoteException { + return mFaceService.createTestSession(mSensorId, opPackageName); } @Override diff --git a/services/core/java/com/android/server/biometrics/sensors/face/FaceService.java b/services/core/java/com/android/server/biometrics/sensors/face/FaceService.java index 6dbd590df8515..b0433d67ff32f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/FaceService.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/FaceService.java @@ -31,7 +31,6 @@ import android.hardware.biometrics.IBiometricService; import android.hardware.biometrics.IBiometricServiceLockoutResetCallback; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.face.IFace; import android.hardware.biometrics.face.SensorProps; import android.hardware.face.Face; @@ -134,8 +133,7 @@ public class FaceService extends SystemService implements BiometricServiceCallba */ private final class FaceServiceWrapper extends IFaceService.Stub { @Override - public ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback, - @NonNull String opPackageName) { + public ITestSession createTestSession(int sensorId, @NonNull String opPackageName) { Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL); final ServiceProvider provider = getProviderForSensor(sensorId); @@ -145,7 +143,7 @@ public class FaceService extends SystemService implements BiometricServiceCallba return null; } - return provider.createTestSession(sensorId, callback, opPackageName); + return provider.createTestSession(sensorId, opPackageName); } @Override diff --git a/services/core/java/com/android/server/biometrics/sensors/face/ServiceProvider.java b/services/core/java/com/android/server/biometrics/sensors/face/ServiceProvider.java index 88edfbf12df11..0b522efb5bac4 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/ServiceProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/ServiceProvider.java @@ -20,7 +20,6 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.face.Face; import android.hardware.face.FaceManager; import android.hardware.face.FaceSensorPropertiesInternal; @@ -29,7 +28,6 @@ import android.os.IBinder; import android.os.NativeHandle; import android.util.proto.ProtoOutputStream; -import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.LockoutTracker; @@ -125,8 +123,7 @@ public interface ServiceProvider { void startPreparedClient(int sensorId, int cookie); - void scheduleInternalCleanup(int sensorId, int userId, - @Nullable BaseClientMonitor.Callback callback); + void scheduleInternalCleanup(int sensorId, int userId); void dumpProtoState(int sensorId, @NonNull ProtoOutputStream proto, boolean clearSchedulerBuffer); @@ -136,8 +133,7 @@ public interface ServiceProvider { void dumpInternal(int sensorId, @NonNull PrintWriter pw); @NonNull - ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback, - @NonNull String opPackageName); + ITestSession createTestSession(int sensorId, @NonNull String opPackageName); void dumpHal(int sensorId, @NonNull FileDescriptor fd, @NonNull String[] args); } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/BiometricTestSessionImpl.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/BiometricTestSessionImpl.java index e886be805b617..d2673d2969c91 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/BiometricTestSessionImpl.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/BiometricTestSessionImpl.java @@ -21,18 +21,15 @@ import static android.Manifest.permission.TEST_BIOMETRIC; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.face.AuthenticationFrame; import android.hardware.biometrics.face.BaseFrame; import android.hardware.face.Face; import android.hardware.face.IFaceServiceReceiver; import android.os.Binder; -import android.os.RemoteException; import android.util.Slog; import com.android.server.biometrics.HardwareAuthTokenUtils; import com.android.server.biometrics.Utils; -import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.face.FaceUtils; import java.util.HashSet; @@ -50,7 +47,6 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { @NonNull private final Context mContext; private final int mSensorId; - @NonNull private final ITestSessionCallback mCallback; @NonNull private final FaceProvider mProvider; @NonNull private final Sensor mSensor; @NonNull private final Set mEnrollmentIds; @@ -124,11 +120,9 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { }; BiometricTestSessionImpl(@NonNull Context context, int sensorId, - @NonNull ITestSessionCallback callback, @NonNull FaceProvider provider, @NonNull Sensor sensor) { mContext = context; mSensorId = sensorId; - mCallback = callback; mProvider = provider; mSensor = sensor; mEnrollmentIds = new HashSet<>(); @@ -218,25 +212,6 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { public void cleanupInternalState(int userId) { Utils.checkPermission(mContext, TEST_BIOMETRIC); - mProvider.scheduleInternalCleanup(mSensorId, userId, new BaseClientMonitor.Callback() { - @Override - public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { - try { - mCallback.onCleanupStarted(clientMonitor.getTargetUserId()); - } catch (RemoteException e) { - Slog.e(TAG, "Remote exception", e); - } - } - - @Override - public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, - boolean success) { - try { - mCallback.onCleanupFinished(clientMonitor.getTargetUserId()); - } catch (RemoteException e) { - Slog.e(TAG, "Remote exception", e); - } - } - }); + mProvider.scheduleInternalCleanup(mSensorId, userId); } } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java index 02e8e921ae731..dc2611f006356 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java @@ -25,7 +25,6 @@ import android.content.Context; import android.content.pm.UserInfo; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.face.IFace; import android.hardware.biometrics.face.SensorProps; import android.hardware.face.Face; @@ -178,8 +177,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { for (int i = 0; i < mSensors.size(); i++) { final int sensorId = mSensors.keyAt(i); scheduleLoadAuthenticatorIds(sensorId); - scheduleInternalCleanup(sensorId, ActivityManager.getCurrentUser(), - null /* callback */); + scheduleInternalCleanup(sensorId, ActivityManager.getCurrentUser()); } return mDaemon; @@ -564,8 +562,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { } @Override - public void scheduleInternalCleanup(int sensorId, int userId, - @Nullable BaseClientMonitor.Callback callback) { + public void scheduleInternalCleanup(int sensorId, int userId) { mHandler.post(() -> { final IFace daemon = getHalInstance(); if (daemon == null) { @@ -586,7 +583,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { FaceUtils.getInstance(sensorId), mSensors.get(sensorId).getAuthenticatorIds()); - mSensors.get(sensorId).getScheduler().scheduleClientMonitor(client, callback); + mSensors.get(sensorId).getScheduler().scheduleClientMonitor(client); } catch (RemoteException e) { Slog.e(getTag(), "Remote exception when scheduling internal cleanup", e); } @@ -649,9 +646,8 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { @NonNull @Override - public ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback, - @NonNull String opPackageName) { - return mSensors.get(sensorId).createTestSession(callback); + public ITestSession createTestSession(int sensorId, @NonNull String opPackageName) { + return mSensors.get(sensorId).createTestSession(); } @Override diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java index 49a4aff7edb14..90aa4ad556133 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java @@ -22,7 +22,6 @@ import android.content.Context; import android.content.pm.UserInfo; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.face.AuthenticationFrame; import android.hardware.biometrics.face.EnrollmentFrame; import android.hardware.biometrics.face.Error; @@ -461,9 +460,8 @@ public class Sensor implements IBinder.DeathRecipient { } } - @NonNull ITestSession createTestSession(@NonNull ITestSessionCallback callback) { - return new BiometricTestSessionImpl(mContext, mSensorProperties.sensorId, callback, - mProvider, this); + @NonNull ITestSession createTestSession() { + return new BiometricTestSessionImpl(mContext, mSensorProperties.sensorId, mProvider, this); } void createNewSession(@NonNull IFace daemon, int sensorId, int userId) diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/BiometricTestSessionImpl.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/BiometricTestSessionImpl.java index 2c7b42d2e3034..4142a52c9253b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/BiometricTestSessionImpl.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/BiometricTestSessionImpl.java @@ -21,15 +21,12 @@ import static android.Manifest.permission.TEST_BIOMETRIC; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.face.Face; import android.hardware.face.IFaceServiceReceiver; import android.os.Binder; -import android.os.RemoteException; import android.util.Slog; import com.android.server.biometrics.Utils; -import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.face.FaceUtils; import java.util.ArrayList; @@ -44,7 +41,6 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { @NonNull private final Context mContext; private final int mSensorId; - @NonNull private final ITestSessionCallback mCallback; @NonNull private final Face10 mFace10; @NonNull private final Face10.HalResultController mHalResultController; @NonNull private final Set mEnrollmentIds; @@ -112,12 +108,10 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { } }; - BiometricTestSessionImpl(@NonNull Context context, int sensorId, - @NonNull ITestSessionCallback callback, @NonNull Face10 face10, + BiometricTestSessionImpl(@NonNull Context context, int sensorId, @NonNull Face10 face10, @NonNull Face10.HalResultController halResultController) { mContext = context; mSensorId = sensorId; - mCallback = callback; mFace10 = face10; mHalResultController = halResultController; mEnrollmentIds = new HashSet<>(); @@ -195,25 +189,6 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { public void cleanupInternalState(int userId) { Utils.checkPermission(mContext, TEST_BIOMETRIC); - mFace10.scheduleInternalCleanup(mSensorId, userId, new BaseClientMonitor.Callback() { - @Override - public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { - try { - mCallback.onCleanupStarted(clientMonitor.getTargetUserId()); - } catch (RemoteException e) { - Slog.e(TAG, "Remote exception", e); - } - } - - @Override - public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, - boolean success) { - try { - mCallback.onCleanupFinished(clientMonitor.getTargetUserId()); - } catch (RemoteException e) { - Slog.e(TAG, "Remote exception", e); - } - } - }); + mFace10.scheduleInternalCleanup(mSensorId, userId); } } 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 ee8823e041bc7..298950fa325a8 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 @@ -29,7 +29,6 @@ import android.hardware.biometrics.BiometricFaceConstants; import android.hardware.biometrics.BiometricManager; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.face.V1_0.IBiometricsFace; import android.hardware.biometrics.face.V1_0.IBiometricsFaceClientCallback; import android.hardware.face.Face; @@ -124,7 +123,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { private final UserSwitchObserver mUserSwitchObserver = new SynchronousUserSwitchObserver() { @Override public void onUserSwitching(int newUserId) { - scheduleInternalCleanup(newUserId, null /* callback */); + scheduleInternalCleanup(newUserId); scheduleGetFeature(mSensorId, new Binder(), newUserId, BiometricFaceConstants.FEATURE_REQUIRE_ATTENTION, null, mContext.getOpPackageName()); @@ -438,7 +437,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { Slog.d(TAG, "Face HAL ready, HAL ID: " + halId); if (halId != 0) { scheduleLoadAuthenticatorIds(); - scheduleInternalCleanup(ActivityManager.getCurrentUser(), null /* callback */); + scheduleInternalCleanup(ActivityManager.getCurrentUser()); scheduleGetFeature(mSensorId, new Binder(), ActivityManager.getCurrentUser(), BiometricFaceConstants.FEATURE_REQUIRE_ATTENTION, null, @@ -757,8 +756,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { }); } - private void scheduleInternalCleanup(int userId, - @Nullable BaseClientMonitor.Callback callback) { + private void scheduleInternalCleanup(int userId) { mHandler.post(() -> { scheduleUpdateActiveUserWithoutHandler(userId); @@ -766,14 +764,13 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { final FaceInternalCleanupClient client = new FaceInternalCleanupClient(mContext, mLazyDaemon, userId, mContext.getOpPackageName(), mSensorId, enrolledList, FaceUtils.getLegacyInstance(mSensorId), mAuthenticatorIds); - mScheduler.scheduleClientMonitor(client, callback); + mScheduler.scheduleClientMonitor(client); }); } @Override - public void scheduleInternalCleanup(int sensorId, int userId, - @Nullable BaseClientMonitor.Callback callback) { - scheduleInternalCleanup(userId, callback); + public void scheduleInternalCleanup(int sensorId, int userId) { + scheduleInternalCleanup(userId); } @Override @@ -947,9 +944,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { @NonNull @Override - public ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback, - @NonNull String opPackageName) { - return new BiometricTestSessionImpl(mContext, mSensorId, callback, this, - mHalResultController); + public ITestSession createTestSession(int sensorId, @NonNull String opPackageName) { + return new BiometricTestSessionImpl(mContext, mSensorId, this, mHalResultController); } } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator.java index 32e9409de4b2d..34a909908b5ab 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator.java @@ -21,7 +21,6 @@ import android.hardware.biometrics.IBiometricAuthenticator; import android.hardware.biometrics.IBiometricSensorReceiver; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.SensorPropertiesInternal; import android.hardware.fingerprint.IFingerprintService; import android.os.IBinder; @@ -43,9 +42,8 @@ public final class FingerprintAuthenticator extends IBiometricAuthenticator.Stub } @Override - public ITestSession createTestSession(@NonNull ITestSessionCallback callback, - @NonNull String opPackageName) throws RemoteException { - return mFingerprintService.createTestSession(mSensorId, callback, opPackageName); + public ITestSession createTestSession(@NonNull String opPackageName) throws RemoteException { + return mFingerprintService.createTestSession(mSensorId, opPackageName); } @Override diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java index 396dd5f42d4d8..b302931b99615 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java @@ -43,7 +43,6 @@ import android.hardware.biometrics.IBiometricService; import android.hardware.biometrics.IBiometricServiceLockoutResetCallback; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.fingerprint.IFingerprint; import android.hardware.biometrics.fingerprint.SensorProps; import android.hardware.fingerprint.Fingerprint; @@ -110,8 +109,7 @@ public class FingerprintService extends SystemService implements BiometricServic */ private final class FingerprintServiceWrapper extends IFingerprintService.Stub { @Override - public ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback, - @NonNull String opPackageName) { + public ITestSession createTestSession(int sensorId, @NonNull String opPackageName) { Utils.checkPermission(getContext(), TEST_BIOMETRIC); final ServiceProvider provider = getProviderForSensor(sensorId); @@ -121,7 +119,7 @@ public class FingerprintService extends SystemService implements BiometricServic return null; } - return provider.createTestSession(sensorId, callback, opPackageName); + return provider.createTestSession(sensorId, opPackageName); } @Override diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java index dfec2e3e308f7..8785070f0afad 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java @@ -20,7 +20,6 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.fingerprint.Fingerprint; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; @@ -29,7 +28,6 @@ import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.IBinder; import android.util.proto.ProtoOutputStream; -import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.LockoutTracker; @@ -104,8 +102,7 @@ public interface ServiceProvider { @NonNull IFingerprintServiceReceiver receiver, int userId, @NonNull String opPackageName); - void scheduleInternalCleanup(int sensorId, int userId, - @Nullable BaseClientMonitor.Callback callback); + void scheduleInternalCleanup(int sensorId, int userId); boolean isHardwareDetected(int sensorId); @@ -140,6 +137,5 @@ public interface ServiceProvider { void dumpInternal(int sensorId, @NonNull PrintWriter pw); @NonNull - ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback, - @NonNull String opPackageName); + ITestSession createTestSession(int sensorId, @NonNull String opPackageName); } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/BiometricTestSessionImpl.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/BiometricTestSessionImpl.java index 20b32543f7a03..ea9c709ec79f5 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/BiometricTestSessionImpl.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/BiometricTestSessionImpl.java @@ -21,17 +21,14 @@ import static android.Manifest.permission.TEST_BIOMETRIC; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.fingerprint.Fingerprint; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.IFingerprintServiceReceiver; import android.os.Binder; -import android.os.RemoteException; import android.util.Slog; import com.android.server.biometrics.HardwareAuthTokenUtils; import com.android.server.biometrics.Utils; -import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils; import java.util.HashSet; @@ -49,7 +46,6 @@ class BiometricTestSessionImpl extends ITestSession.Stub { @NonNull private final Context mContext; private final int mSensorId; - @NonNull private final ITestSessionCallback mCallback; @NonNull private final FingerprintProvider mProvider; @NonNull private final Sensor mSensor; @NonNull private final Set mEnrollmentIds; @@ -114,11 +110,9 @@ class BiometricTestSessionImpl extends ITestSession.Stub { }; BiometricTestSessionImpl(@NonNull Context context, int sensorId, - @NonNull ITestSessionCallback callback, @NonNull FingerprintProvider provider, - @NonNull Sensor sensor) { + @NonNull FingerprintProvider provider, @NonNull Sensor sensor) { mContext = context; mSensorId = sensorId; - mCallback = callback; mProvider = provider; mSensor = sensor; mEnrollmentIds = new HashSet<>(); @@ -198,25 +192,6 @@ class BiometricTestSessionImpl extends ITestSession.Stub { public void cleanupInternalState(int userId) { Utils.checkPermission(mContext, TEST_BIOMETRIC); - mProvider.scheduleInternalCleanup(mSensorId, userId, new BaseClientMonitor.Callback() { - @Override - public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { - try { - mCallback.onCleanupStarted(clientMonitor.getTargetUserId()); - } catch (RemoteException e) { - Slog.e(TAG, "Remote exception", e); - } - } - - @Override - public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, - boolean success) { - try { - mCallback.onCleanupFinished(clientMonitor.getTargetUserId()); - } catch (RemoteException e) { - Slog.e(TAG, "Remote exception", e); - } - } - }); + mProvider.scheduleInternalCleanup(mSensorId, userId); } } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java index 70161d679c1c3..b53639d558890 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java @@ -25,7 +25,6 @@ import android.content.Context; import android.content.pm.UserInfo; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.fingerprint.IFingerprint; import android.hardware.biometrics.fingerprint.SensorProps; import android.hardware.fingerprint.Fingerprint; @@ -186,8 +185,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi for (int i = 0; i < mSensors.size(); i++) { final int sensorId = mSensors.keyAt(i); scheduleLoadAuthenticatorIds(sensorId); - scheduleInternalCleanup(sensorId, ActivityManager.getCurrentUser(), - null /* callback */); + scheduleInternalCleanup(sensorId, ActivityManager.getCurrentUser()); } return mDaemon; @@ -541,8 +539,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi } @Override - public void scheduleInternalCleanup(int sensorId, int userId, - @Nullable BaseClientMonitor.Callback callback) { + public void scheduleInternalCleanup(int sensorId, int userId) { mHandler.post(() -> { final IFingerprint daemon = getHalInstance(); if (daemon == null) { @@ -562,7 +559,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi mContext.getOpPackageName(), sensorId, enrolledList, FingerprintUtils.getInstance(sensorId), mSensors.get(sensorId).getAuthenticatorIds()); - mSensors.get(sensorId).getScheduler().scheduleClientMonitor(client, callback); + mSensors.get(sensorId).getScheduler().scheduleClientMonitor(client); } catch (RemoteException e) { Slog.e(getTag(), "Remote exception when scheduling internal cleanup", e); } @@ -707,9 +704,8 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi @NonNull @Override - public ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback, - @NonNull String opPackageName) { - return mSensors.get(sensorId).createTestSession(callback); + public ITestSession createTestSession(int sensorId, @NonNull String opPackageName) { + return mSensors.get(sensorId).createTestSession(); } @Override diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java index 238b544e7a424..a4dcac794d35c 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java @@ -22,7 +22,6 @@ import android.content.Context; import android.content.pm.UserInfo; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.fingerprint.Error; import android.hardware.biometrics.fingerprint.IFingerprint; import android.hardware.biometrics.fingerprint.ISession; @@ -441,9 +440,8 @@ class Sensor implements IBinder.DeathRecipient { } } - @NonNull ITestSession createTestSession(@NonNull ITestSessionCallback callback) { - return new BiometricTestSessionImpl(mContext, mSensorProperties.sensorId, callback, - mProvider, this); + @NonNull ITestSession createTestSession() { + return new BiometricTestSessionImpl(mContext, mSensorProperties.sensorId, mProvider, this); } void createNewSession(@NonNull IFingerprint daemon, int sensorId, int userId) diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/BiometricTestSessionImpl.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/BiometricTestSessionImpl.java index 766a8829e9682..312ee0a267ac3 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/BiometricTestSessionImpl.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/BiometricTestSessionImpl.java @@ -21,16 +21,13 @@ import static android.Manifest.permission.TEST_BIOMETRIC; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.fingerprint.Fingerprint; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.IFingerprintServiceReceiver; import android.os.Binder; -import android.os.RemoteException; import android.util.Slog; import com.android.server.biometrics.Utils; -import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils; import java.util.ArrayList; @@ -50,7 +47,6 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { @NonNull private final Context mContext; private final int mSensorId; - @NonNull private final ITestSessionCallback mCallback; @NonNull private final Fingerprint21 mFingerprint21; @NonNull private final Fingerprint21.HalResultController mHalResultController; @NonNull private final Set mEnrollmentIds; @@ -115,12 +111,10 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { }; BiometricTestSessionImpl(@NonNull Context context, int sensorId, - @NonNull ITestSessionCallback callback, @NonNull Fingerprint21 fingerprint21, @NonNull Fingerprint21.HalResultController halResultController) { mContext = context; mSensorId = sensorId; - mCallback = callback; mFingerprint21 = fingerprint21; mHalResultController = halResultController; mEnrollmentIds = new HashSet<>(); @@ -197,25 +191,6 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { public void cleanupInternalState(int userId) { Utils.checkPermission(mContext, TEST_BIOMETRIC); - mFingerprint21.scheduleInternalCleanup(mSensorId, userId, new BaseClientMonitor.Callback() { - @Override - public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { - try { - mCallback.onCleanupStarted(clientMonitor.getTargetUserId()); - } catch (RemoteException e) { - Slog.e(TAG, "Remote exception", e); - } - } - - @Override - public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, - boolean success) { - try { - mCallback.onCleanupFinished(clientMonitor.getTargetUserId()); - } catch (RemoteException e) { - Slog.e(TAG, "Remote exception", e); - } - } - }); + mFingerprint21.scheduleInternalCleanup(mSensorId, userId); } } 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 22e7603099661..453b951e1f3bb 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 @@ -30,7 +30,6 @@ import android.hardware.biometrics.BiometricManager; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint; import android.hardware.biometrics.fingerprint.V2_2.IBiometricsFingerprintClientCallback; import android.hardware.fingerprint.Fingerprint; @@ -159,7 +158,7 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider private final UserSwitchObserver mUserSwitchObserver = new SynchronousUserSwitchObserver() { @Override public void onUserSwitching(int newUserId) { - scheduleInternalCleanup(newUserId, null /* callback */); + scheduleInternalCleanup(newUserId); } }; @@ -438,7 +437,7 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider Slog.d(TAG, "Fingerprint HAL ready, HAL ID: " + halId); if (halId != 0) { scheduleLoadAuthenticatorIds(); - scheduleInternalCleanup(ActivityManager.getCurrentUser(), null /* callback */); + scheduleInternalCleanup(ActivityManager.getCurrentUser()); } else { Slog.e(TAG, "Unable to set callback"); mDaemon = null; @@ -654,8 +653,7 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider }); } - private void scheduleInternalCleanup(int userId, - @Nullable BaseClientMonitor.Callback callback) { + private void scheduleInternalCleanup(int userId) { mHandler.post(() -> { scheduleUpdateActiveUserWithoutHandler(userId); @@ -665,14 +663,13 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider mContext, mLazyDaemon, userId, mContext.getOpPackageName(), mSensorProperties.sensorId, enrolledList, FingerprintUtils.getLegacyInstance(mSensorId), mAuthenticatorIds); - mScheduler.scheduleClientMonitor(client, callback); + mScheduler.scheduleClientMonitor(client); }); } @Override - public void scheduleInternalCleanup(int sensorId, int userId, - @Nullable BaseClientMonitor.Callback callback) { - scheduleInternalCleanup(userId, callback); + public void scheduleInternalCleanup(int sensorId, int userId) { + scheduleInternalCleanup(userId); } @Override @@ -852,9 +849,8 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider @NonNull @Override - public ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback, - @NonNull String opPackageName) { - return new BiometricTestSessionImpl(mContext, mSensorProperties.sensorId, callback, this, + public ITestSession createTestSession(int sensorId, @NonNull String opPackageName) { + return new BiometricTestSessionImpl(mContext, mSensorProperties.sensorId, this, mHalResultController); } } diff --git a/services/core/java/com/android/server/biometrics/sensors/iris/IrisAuthenticator.java b/services/core/java/com/android/server/biometrics/sensors/iris/IrisAuthenticator.java index f44e0691bb9d0..8e84613b2d645 100644 --- a/services/core/java/com/android/server/biometrics/sensors/iris/IrisAuthenticator.java +++ b/services/core/java/com/android/server/biometrics/sensors/iris/IrisAuthenticator.java @@ -21,7 +21,6 @@ import android.hardware.biometrics.IBiometricAuthenticator; import android.hardware.biometrics.IBiometricSensorReceiver; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; -import android.hardware.biometrics.ITestSessionCallback; import android.hardware.biometrics.SensorPropertiesInternal; import android.hardware.iris.IIrisService; import android.os.IBinder; @@ -40,8 +39,7 @@ public final class IrisAuthenticator extends IBiometricAuthenticator.Stub { } @Override - public ITestSession createTestSession(@NonNull ITestSessionCallback callback, - @NonNull String opPackageName) throws RemoteException { + public ITestSession createTestSession(@NonNull String opPackageName) throws RemoteException { return null; } From 62e2c705c50c3def86a401804c2a5d07bffbf290 Mon Sep 17 00:00:00 2001 From: Daniel Chapin Date: Fri, 19 Feb 2021 19:10:04 +0000 Subject: [PATCH 2/2] Revert "Update RemovalClient to support new biometric AIDL" Revert submission 13593269 Reason for revert: Bug: 180689674 Reverted Changes: I59f6e607f:Update RemovalClient to support new biometric AIDL... I3fdb3fe0b:Try to ensure tests run sequentially Change-Id: I939172f2961f3f2c9f8eddd59261f75552eeb31f --- .../android/hardware/face/FaceManager.java | 23 +++++-------------- .../android/hardware/face/IFaceService.aidl | 5 +--- .../fingerprint/FingerprintManager.java | 21 ++++------------- .../fingerprint/IFingerprintService.aidl | 3 --- .../biometrics/sensors/RemovalClient.java | 7 +++--- .../biometrics/sensors/face/FaceService.java | 17 +------------- .../sensors/face/ServiceProvider.java | 3 --- .../face/aidl/FaceInternalCleanupClient.java | 4 ++-- .../sensors/face/aidl/FaceProvider.java | 21 +---------------- .../sensors/face/aidl/FaceRemovalClient.java | 13 ++++------- .../biometrics/sensors/face/hidl/Face10.java | 14 ----------- .../sensors/face/hidl/FaceRemovalClient.java | 5 +--- .../fingerprint/FingerprintService.java | 16 +------------ .../sensors/fingerprint/ServiceProvider.java | 4 ---- .../FingerprintInternalCleanupClient.java | 4 ++-- .../fingerprint/aidl/FingerprintProvider.java | 23 +------------------ .../aidl/FingerprintRemovalClient.java | 10 ++++---- .../fingerprint/hidl/Fingerprint21.java | 17 -------------- .../hidl/FingerprintRemovalClient.java | 5 +--- .../locksettings/LockSettingsService.java | 23 ++++++++++++------- .../LockSettingsServiceTests.java | 8 +++---- 21 files changed, 54 insertions(+), 192 deletions(-) diff --git a/core/java/android/hardware/face/FaceManager.java b/core/java/android/hardware/face/FaceManager.java index 28bc404efb363..588bc01d7d420 100644 --- a/core/java/android/hardware/face/FaceManager.java +++ b/core/java/android/hardware/face/FaceManager.java @@ -562,23 +562,12 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan mService.remove(mToken, face.getBiometricId(), userId, mServiceReceiver, mContext.getOpPackageName()); } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - } - - /** - * Removes all face templates for the given user. - * @hide - */ - @RequiresPermission(MANAGE_BIOMETRIC) - public void removeAll(int userId, @NonNull RemovalCallback callback) { - if (mService != null) { - try { - mRemovalCallback = callback; - mService.removeAll(mToken, userId, mServiceReceiver, mContext.getOpPackageName()); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); + Slog.w(TAG, "Remote exception in remove: ", e); + if (callback != null) { + callback.onRemovalError(face, FACE_ERROR_HW_UNAVAILABLE, + getErrorString(mContext, FACE_ERROR_HW_UNAVAILABLE, + 0 /* vendorCode */)); + } } } } diff --git a/core/java/android/hardware/face/IFaceService.aidl b/core/java/android/hardware/face/IFaceService.aidl index a2e0b3b1cb411..a3e7e2d2c5cbc 100644 --- a/core/java/android/hardware/face/IFaceService.aidl +++ b/core/java/android/hardware/face/IFaceService.aidl @@ -83,13 +83,10 @@ interface IFaceService { // Cancel enrollment in progress void cancelEnrollment(IBinder token); - // Removes the specified face enrollment for the specified userId. + // Any errors resulting from this call will be returned to the listener void remove(IBinder token, int faceId, int userId, IFaceServiceReceiver receiver, String opPackageName); - // Removes all face enrollments for the specified userId. - void removeAll(IBinder token, int userId, IFaceServiceReceiver receiver, String opPackageName); - // Get the enrolled face for user. List getEnrolledFaces(int sensorId, int userId, String opPackageName); diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java index 6df2764d3f8bf..a614ebfe1793a 100644 --- a/core/java/android/hardware/fingerprint/FingerprintManager.java +++ b/core/java/android/hardware/fingerprint/FingerprintManager.java @@ -739,22 +739,11 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing mService.remove(mToken, fp.getBiometricId(), userId, mServiceReceiver, mContext.getOpPackageName()); } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - - /** - * Removes all face templates for the given user. - * @hide - */ - @RequiresPermission(MANAGE_FINGERPRINT) - public void removeAll(int userId, @NonNull RemovalCallback callback) { - if (mService != null) { - try { - mRemovalCallback = callback; - mService.removeAll(mToken, userId, mServiceReceiver, mContext.getOpPackageName()); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); + Slog.w(TAG, "Remote exception in remove: ", e); + if (callback != null) { + callback.onRemovalError(fp, FINGERPRINT_ERROR_HW_UNAVAILABLE, + getErrorString(mContext, FINGERPRINT_ERROR_HW_UNAVAILABLE, + 0 /* vendorCode */)); } } } diff --git a/core/java/android/hardware/fingerprint/IFingerprintService.aidl b/core/java/android/hardware/fingerprint/IFingerprintService.aidl index 1694fef0f71bf..8888247e2823f 100644 --- a/core/java/android/hardware/fingerprint/IFingerprintService.aidl +++ b/core/java/android/hardware/fingerprint/IFingerprintService.aidl @@ -87,9 +87,6 @@ interface IFingerprintService { void remove(IBinder token, int fingerId, int userId, IFingerprintServiceReceiver receiver, String opPackageName); - // Removes all face enrollments for the specified userId. - void removeAll(IBinder token, int userId, IFingerprintServiceReceiver receiver, String opPackageName); - // Rename the fingerprint specified by fingerId and userId to the given name void rename(int fingerId, int userId, String name); 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 16f82af938560..e0626952fac3c 100644 --- a/services/core/java/com/android/server/biometrics/sensors/RemovalClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/RemovalClient.java @@ -37,16 +37,18 @@ public abstract class RemovalClient mBiometricUtils; private final Map mAuthenticatorIds; public RemovalClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, - int userId, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, - @NonNull Map authenticatorIds, int statsModality) { + int biometricId, int userId, @NonNull String owner, @NonNull BiometricUtils utils, + int sensorId, @NonNull Map authenticatorIds, int statsModality) { super(context, lazyDaemon, token, listener, userId, owner, 0 /* cookie */, sensorId, statsModality, BiometricsProtoEnums.ACTION_REMOVE, BiometricsProtoEnums.CLIENT_UNKNOWN); + mBiometricId = biometricId; mBiometricUtils = utils; mAuthenticatorIds = authenticatorIds; } @@ -66,7 +68,6 @@ public abstract class RemovalClient provider = getSingleProvider(); - if (provider == null) { - Slog.w(TAG, "Null provider for removeAll"); - return; - } - - provider.second.scheduleRemoveAll(provider.first, token, userId, receiver, - opPackageName); - } - - @Override // Binder call + @Override public void addLockoutResetCallback(final IBiometricServiceLockoutResetCallback callback, final String opPackageName) { Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/ServiceProvider.java b/services/core/java/com/android/server/biometrics/sensors/face/ServiceProvider.java index 0b522efb5bac4..cc24b8960e756 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/ServiceProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/ServiceProvider.java @@ -109,9 +109,6 @@ public interface ServiceProvider { void scheduleRemove(int sensorId, @NonNull IBinder token, int faceId, int userId, @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName); - void scheduleRemoveAll(int sensorId, @NonNull IBinder token, int userId, - @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName); - void scheduleResetLockout(int sensorId, int userId, @NonNull byte[] hardwareAuthToken); void scheduleSetFeature(int sensorId, @NonNull IBinder token, int userId, int feature, diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalCleanupClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalCleanupClient.java index c6696aed6520d..9680e4e1841e7 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalCleanupClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalCleanupClient.java @@ -61,7 +61,7 @@ class FaceInternalCleanupClient extends InternalCleanupClient { // Internal remove does not need to send results to anyone. Cleanup (enumerate + remove) // is all done internally. return new FaceRemovalClient(context, lazyDaemon, token, - null /* ClientMonitorCallbackConverter */, new int[] {biometricId}, userId, owner, - utils, sensorId, authenticatorIds); + null /* ClientMonitorCallbackConverter */, biometricId, userId, owner, utils, + sensorId, authenticatorIds); } } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java index dc2611f006356..e685ee2899afa 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java @@ -468,25 +468,6 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { @Override public void scheduleRemove(int sensorId, @NonNull IBinder token, int faceId, int userId, @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) { - scheduleRemoveSpecifiedIds(sensorId, token, new int[] {faceId}, userId, receiver, - opPackageName); - } - - @Override - public void scheduleRemoveAll(int sensorId, @NonNull IBinder token, int userId, - @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) { - final List faces = FaceUtils.getInstance(sensorId) - .getBiometricsForUser(mContext, userId); - final int[] faceIds = new int[faces.size()]; - for (int i = 0; i < faces.size(); i++) { - faceIds[i] = faces.get(i).getBiometricId(); - } - - scheduleRemoveSpecifiedIds(sensorId, token, faceIds, userId, receiver, opPackageName); - } - - private void scheduleRemoveSpecifiedIds(int sensorId, @NonNull IBinder token, int[] faceIds, - int userId, @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) { mHandler.post(() -> { final IFace daemon = getHalInstance(); if (daemon == null) { @@ -504,7 +485,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { final FaceRemovalClient client = new FaceRemovalClient(mContext, mSensors.get(sensorId).getLazySession(), token, - new ClientMonitorCallbackConverter(receiver), faceIds, userId, + new ClientMonitorCallbackConverter(receiver), faceId, userId, opPackageName, FaceUtils.getInstance(sensorId), sensorId, mSensors.get(sensorId).getAuthenticatorIds()); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRemovalClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRemovalClient.java index 48796c173dd8d..1cb5031374ec2 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRemovalClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRemovalClient.java @@ -38,22 +38,19 @@ import java.util.Map; class FaceRemovalClient extends RemovalClient { private static final String TAG = "FaceRemovalClient"; - final int[] mBiometricIds; - FaceRemovalClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, - int[] biometricIds, int userId, @NonNull String owner, - @NonNull BiometricUtils utils, int sensorId, - @NonNull Map authenticatorIds) { - super(context, lazyDaemon, token, listener, userId, owner, utils, sensorId, + int biometricId, int userId, @NonNull String owner, @NonNull BiometricUtils utils, + int sensorId, @NonNull Map authenticatorIds) { + super(context, lazyDaemon, token, listener, biometricId, userId, owner, utils, sensorId, authenticatorIds, BiometricsProtoEnums.MODALITY_FACE); - mBiometricIds = biometricIds; } @Override protected void startHalOperation() { try { - getFreshDaemon().removeEnrollments(mSequentialId, mBiometricIds); + final int[] ids = new int[]{mBiometricId}; + getFreshDaemon().removeEnrollments(mSequentialId, ids); } catch (RemoteException e) { Slog.e(TAG, "Remote exception when requesting remove", e); mCallback.onClientFinished(this, false /* success */); 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 298950fa325a8..e46661a5e985f 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 @@ -671,20 +671,6 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { }); } - @Override - public void scheduleRemoveAll(int sensorId, @NonNull IBinder token, int userId, - @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) { - mHandler.post(() -> { - scheduleUpdateActiveUserWithoutHandler(userId); - - // For IBiometricsFace@1.0, remove(0) means remove all enrollments - final FaceRemovalClient client = new FaceRemovalClient(mContext, mLazyDaemon, token, - new ClientMonitorCallbackConverter(receiver), 0 /* faceId */, userId, - opPackageName, - FaceUtils.getLegacyInstance(mSensorId), mSensorId, mAuthenticatorIds); - mScheduler.scheduleClientMonitor(client); - }); - } @Override public void scheduleResetLockout(int sensorId, int userId, @NonNull byte[] hardwareAuthToken) { diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceRemovalClient.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceRemovalClient.java index 2b0dd02e283c7..acae89928460f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceRemovalClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceRemovalClient.java @@ -38,15 +38,12 @@ import java.util.Map; class FaceRemovalClient extends RemovalClient { private static final String TAG = "FaceRemovalClient"; - private final int mBiometricId; - FaceRemovalClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int biometricId, int userId, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, @NonNull Map authenticatorIds) { - super(context, lazyDaemon, token, listener, userId, owner, utils, sensorId, + super(context, lazyDaemon, token, listener, biometricId, userId, owner, utils, sensorId, authenticatorIds, BiometricsProtoEnums.MODALITY_FACE); - mBiometricId = biometricId; } @Override diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java index b302931b99615..b0e42cd137eb5 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java @@ -499,21 +499,7 @@ public class FingerprintService extends SystemService implements BiometricServic opPackageName); } - @Override // Binder call - public void removeAll(final IBinder token, final int userId, - final IFingerprintServiceReceiver receiver, final String opPackageName) { - Utils.checkPermission(getContext(), MANAGE_FINGERPRINT); - - final Pair provider = getSingleProvider(); - if (provider == null) { - Slog.w(TAG, "Null provider for removeAll"); - return; - } - provider.second.scheduleRemoveAll(provider.first, token, receiver, userId, - opPackageName); - } - - @Override // Binder call + @Override public void addLockoutResetCallback(final IBiometricServiceLockoutResetCallback callback, final String opPackageName) { Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java index 8785070f0afad..f672ae56e0206 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java @@ -98,10 +98,6 @@ public interface ServiceProvider { @NonNull IFingerprintServiceReceiver receiver, int fingerId, int userId, @NonNull String opPackageName); - void scheduleRemoveAll(int sensorId, @NonNull IBinder token, - @NonNull IFingerprintServiceReceiver receiver, int userId, - @NonNull String opPackageName); - void scheduleInternalCleanup(int sensorId, int userId); boolean isHardwareDetected(int sensorId); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClient.java index 0de3f4f8cce23..2a0e984e59334 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClient.java @@ -60,7 +60,7 @@ class FingerprintInternalCleanupClient extends InternalCleanupClient utils, int sensorId, Map authenticatorIds) { return new FingerprintRemovalClient(context, lazyDaemon, token, - null /* ClientMonitorCallbackConverter */, new int[] {biometricId}, userId, owner, - utils, sensorId, authenticatorIds); + null /* ClientMonitorCallbackConverter */, biometricId, userId, owner, utils, + sensorId, authenticatorIds); } } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java index b53639d558890..ced46e140c0a8 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java @@ -490,27 +490,6 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi public void scheduleRemove(int sensorId, @NonNull IBinder token, @NonNull IFingerprintServiceReceiver receiver, int fingerId, int userId, @NonNull String opPackageName) { - scheduleRemoveSpecifiedIds(sensorId, token, new int[] {fingerId}, userId, receiver, - opPackageName); - } - - @Override - public void scheduleRemoveAll(int sensorId, @NonNull IBinder token, - @NonNull IFingerprintServiceReceiver receiver, int userId, - @NonNull String opPackageName) { - final List fingers = FingerprintUtils.getInstance(sensorId) - .getBiometricsForUser(mContext, userId); - final int[] fingerIds = new int[fingers.size()]; - for (int i = 0; i < fingers.size(); i++) { - fingerIds[i] = fingers.get(i).getBiometricId(); - } - - scheduleRemoveSpecifiedIds(sensorId, token, fingerIds, userId, receiver, opPackageName); - } - - private void scheduleRemoveSpecifiedIds(int sensorId, @NonNull IBinder token, - int[] fingerprintIds, int userId, @NonNull IFingerprintServiceReceiver receiver, - @NonNull String opPackageName) { mHandler.post(() -> { final IFingerprint daemon = getHalInstance(); if (daemon == null) { @@ -528,7 +507,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi final FingerprintRemovalClient client = new FingerprintRemovalClient(mContext, mSensors.get(sensorId).getLazySession(), token, - new ClientMonitorCallbackConverter(receiver), fingerprintIds, userId, + new ClientMonitorCallbackConverter(receiver), fingerId, userId, opPackageName, FingerprintUtils.getInstance(sensorId), sensorId, mSensors.get(sensorId).getAuthenticatorIds()); mSensors.get(sensorId).getScheduler().scheduleClientMonitor(client); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRemovalClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRemovalClient.java index c622208262e01..4a99a7b29638b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRemovalClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRemovalClient.java @@ -39,22 +39,20 @@ import java.util.Map; class FingerprintRemovalClient extends RemovalClient { private static final String TAG = "FingerprintRemovalClient"; - private final int[] mBiometricIds; - FingerprintRemovalClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, - @Nullable ClientMonitorCallbackConverter listener, int[] biometricIds, int userId, + @Nullable ClientMonitorCallbackConverter listener, int biometricId, int userId, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, @NonNull Map authenticatorIds) { - super(context, lazyDaemon, token, listener, userId, owner, utils, sensorId, + super(context, lazyDaemon, token, listener, biometricId, userId, owner, utils, sensorId, authenticatorIds, BiometricsProtoEnums.MODALITY_FINGERPRINT); - mBiometricIds = biometricIds; } @Override protected void startHalOperation() { try { - getFreshDaemon().removeEnrollments(mSequentialId, mBiometricIds); + final int[] ids = new int[] {mBiometricId}; + getFreshDaemon().removeEnrollments(mSequentialId, ids); } catch (RemoteException e) { Slog.e(TAG, "Remote exception when requesting remove", e); mCallback.onClientFinished(this, false /* success */); 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 453b951e1f3bb..7a74c6a39aa17 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 @@ -636,23 +636,6 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider }); } - @Override - public void scheduleRemoveAll(int sensorId, @NonNull IBinder token, - @NonNull IFingerprintServiceReceiver receiver, int userId, - @NonNull String opPackageName) { - mHandler.post(() -> { - scheduleUpdateActiveUserWithoutHandler(userId); - - // For IBiometricsFingerprint@2.1, remove(0) means remove all enrollments - final FingerprintRemovalClient client = new FingerprintRemovalClient(mContext, - mLazyDaemon, token, new ClientMonitorCallbackConverter(receiver), - 0 /* fingerprintId */, userId, opPackageName, - FingerprintUtils.getLegacyInstance(mSensorId), - mSensorProperties.sensorId, mAuthenticatorIds); - mScheduler.scheduleClientMonitor(client); - }); - } - private void scheduleInternalCleanup(int userId) { mHandler.post(() -> { scheduleUpdateActiveUserWithoutHandler(userId); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintRemovalClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintRemovalClient.java index 2f360f31a325f..f6a22f581f1a7 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintRemovalClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintRemovalClient.java @@ -39,16 +39,13 @@ import java.util.Map; class FingerprintRemovalClient extends RemovalClient { private static final String TAG = "FingerprintRemovalClient"; - private final int mBiometricId; - FingerprintRemovalClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int biometricId, int userId, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, @NonNull Map authenticatorIds) { - super(context, lazyDaemon, token, listener, userId, owner, utils, sensorId, + super(context, lazyDaemon, token, listener, biometricId, userId, owner, utils, sensorId, authenticatorIds, BiometricsProtoEnums.MODALITY_FINGERPRINT); - mBiometricId = biometricId; } @Override diff --git a/services/core/java/com/android/server/locksettings/LockSettingsService.java b/services/core/java/com/android/server/locksettings/LockSettingsService.java index deeac8f131f09..28c90e965e47a 100644 --- a/services/core/java/com/android/server/locksettings/LockSettingsService.java +++ b/services/core/java/com/android/server/locksettings/LockSettingsService.java @@ -2890,8 +2890,11 @@ public class LockSettingsService extends ILockSettings.Stub { FingerprintManager mFingerprintManager = mInjector.getFingerprintManager(); if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) { if (mFingerprintManager.hasEnrolledFingerprints(userId)) { - final CountDownLatch latch = new CountDownLatch(1); - mFingerprintManager.removeAll(userId, fingerprintManagerRemovalCallback(latch)); + CountDownLatch latch = new CountDownLatch(1); + // For the purposes of M and N, groupId is the same as userId. + Fingerprint finger = new Fingerprint(null, userId, 0, 0); + mFingerprintManager.remove(finger, userId, + fingerprintManagerRemovalCallback(latch)); try { latch.await(10000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { @@ -2905,8 +2908,9 @@ public class LockSettingsService extends ILockSettings.Stub { FaceManager mFaceManager = mInjector.getFaceManager(); if (mFaceManager != null && mFaceManager.isHardwareDetected()) { if (mFaceManager.hasEnrolledTemplates(userId)) { - final CountDownLatch latch = new CountDownLatch(1); - mFaceManager.removeAll(userId, faceManagerRemovalCallback(latch)); + CountDownLatch latch = new CountDownLatch(1); + Face face = new Face(null, 0, 0); + mFaceManager.remove(face, userId, faceManagerRemovalCallback(latch)); try { latch.await(10000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { @@ -2920,8 +2924,10 @@ public class LockSettingsService extends ILockSettings.Stub { CountDownLatch latch) { return new FingerprintManager.RemovalCallback() { @Override - public void onRemovalError(@Nullable Fingerprint fp, int errMsgId, CharSequence err) { - Slog.e(TAG, "Unable to remove fingerprint, error: " + err); + public void onRemovalError(Fingerprint fp, int errMsgId, CharSequence err) { + Slog.e(TAG, String.format( + "Can't remove fingerprint %d in group %d. Reason: %s", + fp.getBiometricId(), fp.getGroupId(), err)); latch.countDown(); } @@ -2937,8 +2943,9 @@ public class LockSettingsService extends ILockSettings.Stub { private FaceManager.RemovalCallback faceManagerRemovalCallback(CountDownLatch latch) { return new FaceManager.RemovalCallback() { @Override - public void onRemovalError(@Nullable Face face, int errMsgId, CharSequence err) { - Slog.e(TAG, "Unable to remove face, error: " + err); + public void onRemovalError(Face face, int errMsgId, CharSequence err) { + Slog.e(TAG, String.format("Can't remove face %d. Reason: %s", + face.getBiometricId(), err)); latch.countDown(); } diff --git a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java index 67d69292b476c..1f66c7c02658b 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java @@ -339,11 +339,11 @@ public class LockSettingsServiceTests extends BaseLockSettingsServiceTests { mService.setLockCredential(nonePassword(), newPattern("123654"), PRIMARY_USER_ID); // Verify fingerprint is removed - verify(mFingerprintManager).removeAll(eq(PRIMARY_USER_ID), any()); - verify(mFaceManager).removeAll(eq(PRIMARY_USER_ID), any()); + verify(mFingerprintManager).remove(any(), eq(PRIMARY_USER_ID), any()); + verify(mFaceManager).remove(any(), eq(PRIMARY_USER_ID), any()); - verify(mFingerprintManager).removeAll(eq(MANAGED_PROFILE_USER_ID), any()); - verify(mFaceManager).removeAll(eq(MANAGED_PROFILE_USER_ID), any()); + verify(mFingerprintManager).remove(any(), eq(MANAGED_PROFILE_USER_ID), any()); + verify(mFaceManager).remove(any(), eq(MANAGED_PROFILE_USER_ID), any()); } @Test