From 58fd45573decf65f1c59320069071cf5f52562fc Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Fri, 5 Mar 2021 16:02:57 -0800 Subject: [PATCH 1/2] Slight cleanup for UdfpsController Create an internal ServerRequest class to keep track of per-request things. Otherwise we will just have more and more global variables, such as "mIsOverlayRequested", "mRequestReason", "mEnrollHelper", etc, which is error prone and hard to understand/maintain. Bug: 178403701 Test: atest com.android.systemui.biometrics Change-Id: I2f446263f530741d76f40fa2d1470a0c209b7d5e --- .../systemui/biometrics/UdfpsController.java | 84 +++++++++++-------- 1 file changed, 48 insertions(+), 36 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java index 3296cb867d16f..edc9b8f7478f7 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java @@ -91,11 +91,8 @@ public class UdfpsController implements DozeReceiver, HbmCallback { private long mTouchLogTime; @Nullable private UdfpsView mView; - // Indicates whether the overlay has been requested. - private boolean mIsOverlayRequested; - // Reason the overlay has been requested. See IUdfpsOverlayController for definitions. - private int mRequestReason; - @Nullable UdfpsEnrollHelper mEnrollHelper; + // The current request from FingerprintService. Null if no current request. + @Nullable ServerRequest mServerRequest; // The fingerprint AOD trigger doesn't provide an ACTION_UP/ACTION_CANCEL event to tell us when // to turn off high brightness mode. To get around this limitation, the state of the AOD @@ -104,39 +101,72 @@ public class UdfpsController implements DozeReceiver, HbmCallback { private boolean mIsAodInterruptActive; @Nullable private Runnable mCancelAodTimeoutAction; + /** + * Keeps track of state within a single FingerprintService request. Note that this state + * persists across configuration changes, etc, since it is considered a single request. + * + * TODO: Perhaps we can move more global variables into here + */ + private static class ServerRequest { + // Reason the overlay has been requested. See IUdfpsOverlayController for definitions. + final int mRequestReason; + @Nullable final UdfpsEnrollHelper mEnrollHelper; + + ServerRequest(int requestReason, @Nullable UdfpsEnrollHelper enrollHelper) { + mRequestReason = requestReason; + mEnrollHelper = enrollHelper; + } + + void onEnrollmentProgress(int remaining) { + if (mEnrollHelper != null) { + mEnrollHelper.onEnrollmentProgress(remaining); + } + } + + void onEnrollmentHelp() { + if (mEnrollHelper != null) { + mEnrollHelper.onEnrollmentHelp(); + } + } + } + public class UdfpsOverlayController extends IUdfpsOverlayController.Stub { @Override public void showUdfpsOverlay(int sensorId, int reason) { + final UdfpsEnrollHelper enrollHelper; if (reason == IUdfpsOverlayController.REASON_ENROLL_FIND_SENSOR || reason == IUdfpsOverlayController.REASON_ENROLL_ENROLLING) { - mEnrollHelper = new UdfpsEnrollHelper(mContext, reason); + enrollHelper = new UdfpsEnrollHelper(mContext, reason); } else { - mEnrollHelper = null; + enrollHelper = null; } - UdfpsController.this.showOverlay(reason); + + mServerRequest = new ServerRequest(reason, enrollHelper); + updateOverlay(); } @Override public void hideUdfpsOverlay(int sensorId) { - UdfpsController.this.hideOverlay(); + mServerRequest = null; + updateOverlay(); } @Override public void onEnrollmentProgress(int sensorId, int remaining) { - if (mEnrollHelper == null) { - Log.e(TAG, "onEnrollProgress received but helper is null"); + if (mServerRequest == null) { + Log.e(TAG, "onEnrollProgress received but serverRequest is null"); return; } - mEnrollHelper.onEnrollmentProgress(remaining); + mServerRequest.onEnrollmentProgress(remaining); } @Override public void onEnrollmentHelp(int sensorId) { - if (mEnrollHelper == null) { - Log.e(TAG, "onEnrollmentHelp received but helper is null"); + if (mServerRequest == null) { + Log.e(TAG, "onEnrollmentHelp received but serverRequest is null"); return; } - mEnrollHelper.onEnrollmentHelp(); + mServerRequest.onEnrollmentHelp(); } @Override @@ -314,27 +344,9 @@ public class UdfpsController implements DozeReceiver, HbmCallback { mSensorProps.sensorLocationY + mSensorProps.sensorRadius); } - private void showOverlay(int reason) { - if (mIsOverlayRequested) { - return; - } - mIsOverlayRequested = true; - mRequestReason = reason; - updateOverlay(); - } - - private void hideOverlay() { - if (!mIsOverlayRequested) { - return; - } - mIsOverlayRequested = false; - mRequestReason = IUdfpsOverlayController.REASON_UNKNOWN; - updateOverlay(); - } - private void updateOverlay() { - if (mIsOverlayRequested) { - showUdfpsOverlay(mRequestReason); + if (mServerRequest != null) { + showUdfpsOverlay(mServerRequest.mRequestReason); } else { hideUdfpsOverlay(); } @@ -427,7 +439,7 @@ public class UdfpsController implements DozeReceiver, HbmCallback { case IUdfpsOverlayController.REASON_ENROLL_ENROLLING: { final UdfpsAnimationViewEnroll view = (UdfpsAnimationViewEnroll) inflater.inflate(R.layout.udfps_animation_view_enroll, null, false); - view.setEnrollHelper(mEnrollHelper); + view.setEnrollHelper(mServerRequest.mEnrollHelper); return view; } From 4c4961ab26399ef4b2a498efef927be5ec6fb0e0 Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Fri, 5 Mar 2021 11:30:07 -0800 Subject: [PATCH 2/2] Hide Udfps Overlay together with system transitions Prevent the UDFPS overlay from showing when system dialogs are expected to be closed. Since the UDFPS affordances are not actually shown in the application's window, we should nicely hide the UDFPS overlay together with the system transitions. 1) Adds IUdfpsOverlayControllerCallback for SysUI to notify FingerprintService of per-session events. 2) Adds AcquisitionClient#onUserCanceled, which notifies the caller of ERROR_USER_CANCELED, and then cancels the HAL request Bug: 178403701 Test: Enroll, swipe up. UDFPS affordances animate away together with the activity. BiometricScheduler logs also indicate enrollment canceled. Test: atest AcquisitionClientTest Test: atest UdfpsControllerTest Change-Id: I0b2c9eb20ef0686e426ea12896769e4df077cadb --- .../fingerprint/IUdfpsOverlayController.aidl | 4 +- .../IUdfpsOverlayControllerCallback.aidl | 24 ++++ .../systemui/biometrics/UdfpsController.java | 40 +++++- .../biometrics/UdfpsControllerTest.java | 19 +-- .../biometrics/sensors/AcquisitionClient.java | 12 ++ .../sensors/fingerprint/UdfpsHelper.java | 17 ++- .../aidl/FingerprintAuthenticationClient.java | 2 +- .../aidl/FingerprintDetectClient.java | 2 +- .../aidl/FingerprintEnrollClient.java | 2 +- .../hidl/FingerprintAuthenticationClient.java | 2 +- .../hidl/FingerprintDetectClient.java | 2 +- .../hidl/FingerprintEnrollClient.java | 2 +- .../sensors/AcquisitionClientTest.java | 118 ++++++++++++++++++ 13 files changed, 226 insertions(+), 20 deletions(-) create mode 100644 core/java/android/hardware/fingerprint/IUdfpsOverlayControllerCallback.aidl create mode 100644 services/tests/servicestests/src/com/android/server/biometrics/sensors/AcquisitionClientTest.java diff --git a/core/java/android/hardware/fingerprint/IUdfpsOverlayController.aidl b/core/java/android/hardware/fingerprint/IUdfpsOverlayController.aidl index 81c7d894ee094..d2cb5bfe6910f 100644 --- a/core/java/android/hardware/fingerprint/IUdfpsOverlayController.aidl +++ b/core/java/android/hardware/fingerprint/IUdfpsOverlayController.aidl @@ -15,6 +15,8 @@ */ package android.hardware.fingerprint; +import android.hardware.fingerprint.IUdfpsOverlayControllerCallback; + /** * Interface for interacting with the under-display fingerprint sensor (UDFPS) overlay. * @hide @@ -28,7 +30,7 @@ oneway interface IUdfpsOverlayController { const int REASON_AUTH_FPM_OTHER = 5; // Other FingerprintManager usage // Shows the overlay. - void showUdfpsOverlay(int sensorId, int reason); + void showUdfpsOverlay(int sensorId, int reason, IUdfpsOverlayControllerCallback callback); // Hides the overlay. void hideUdfpsOverlay(int sensorId); diff --git a/core/java/android/hardware/fingerprint/IUdfpsOverlayControllerCallback.aidl b/core/java/android/hardware/fingerprint/IUdfpsOverlayControllerCallback.aidl new file mode 100644 index 0000000000000..51ada29f828fe --- /dev/null +++ b/core/java/android/hardware/fingerprint/IUdfpsOverlayControllerCallback.aidl @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2021 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.fingerprint; + +/** + * @hide + */ +oneway interface IUdfpsOverlayControllerCallback { + // Notify system_server if the user cancels a UDFPS-related operation (enroll, auth) + void onUserCanceled(); +} diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java index edc9b8f7478f7..0ffd7d215b491 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java @@ -20,7 +20,10 @@ import static com.android.internal.util.Preconditions.checkArgument; import static com.android.internal.util.Preconditions.checkNotNull; import android.annotation.SuppressLint; +import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.content.res.Resources; import android.graphics.PixelFormat; import android.graphics.Point; @@ -29,6 +32,8 @@ import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.SystemClock; +import android.hardware.fingerprint.IUdfpsOverlayControllerCallback; +import android.os.RemoteException; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; @@ -110,10 +115,13 @@ public class UdfpsController implements DozeReceiver, HbmCallback { private static class ServerRequest { // Reason the overlay has been requested. See IUdfpsOverlayController for definitions. final int mRequestReason; + @NonNull final IUdfpsOverlayControllerCallback mCallback; @Nullable final UdfpsEnrollHelper mEnrollHelper; - ServerRequest(int requestReason, @Nullable UdfpsEnrollHelper enrollHelper) { + ServerRequest(int requestReason, @NonNull IUdfpsOverlayControllerCallback callback, + @Nullable UdfpsEnrollHelper enrollHelper) { mRequestReason = requestReason; + mCallback = callback; mEnrollHelper = enrollHelper; } @@ -128,11 +136,20 @@ public class UdfpsController implements DozeReceiver, HbmCallback { mEnrollHelper.onEnrollmentHelp(); } } + + void onUserCanceled() { + try { + mCallback.onUserCanceled(); + } catch (RemoteException e) { + Log.e(TAG, "Remote exception", e); + } + } } public class UdfpsOverlayController extends IUdfpsOverlayController.Stub { @Override - public void showUdfpsOverlay(int sensorId, int reason) { + public void showUdfpsOverlay(int sensorId, int reason, + @NonNull IUdfpsOverlayControllerCallback callback) { final UdfpsEnrollHelper enrollHelper; if (reason == IUdfpsOverlayController.REASON_ENROLL_FIND_SENSOR || reason == IUdfpsOverlayController.REASON_ENROLL_ENROLLING) { @@ -141,7 +158,7 @@ public class UdfpsController implements DozeReceiver, HbmCallback { enrollHelper = null; } - mServerRequest = new ServerRequest(reason, enrollHelper); + mServerRequest = new ServerRequest(reason, callback, enrollHelper); updateOverlay(); } @@ -195,6 +212,19 @@ public class UdfpsController implements DozeReceiver, HbmCallback { return (float) Math.sqrt(Math.pow(vx, 2.0) + Math.pow(vy, 2.0)); } + private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (mServerRequest != null + && Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) { + Log.d(TAG, "ACTION_CLOSE_SYSTEM_DIALOGS received"); + mServerRequest.onUserCanceled(); + mServerRequest = null; + updateOverlay(); + } + } + }; + @SuppressLint("ClickableViewAccessibility") private final UdfpsView.OnTouchListener mOnTouchListener = (view, event) -> { UdfpsView udfpsView = (UdfpsView) view; @@ -310,6 +340,10 @@ public class UdfpsController implements DozeReceiver, HbmCallback { mCoreLayoutParams.privateFlags = WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY; mFingerprintManager.setUdfpsOverlayController(new UdfpsOverlayController()); + + final IntentFilter filter = new IntentFilter(); + filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); + context.registerReceiver(mBroadcastReceiver, filter); } @Nullable diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java index f84aa5940e618..07686181649da 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java @@ -31,6 +31,7 @@ import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorProperties; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.IUdfpsOverlayController; +import android.hardware.fingerprint.IUdfpsOverlayControllerCallback; import android.os.PowerManager; import android.os.RemoteException; import android.testing.AndroidTestingRunner; @@ -89,6 +90,8 @@ public class UdfpsControllerTest extends SysuiTestCase { private StatusBarStateController mStatusBarStateController; @Mock private StatusBar mStatusBar; + @Mock + private IUdfpsOverlayControllerCallback mUdfpsOverlayControllerCallback; private FakeExecutor mFgExecutor; @@ -152,7 +155,7 @@ public class UdfpsControllerTest extends SysuiTestCase { @Test public void dozeTimeTick() throws RemoteException { mOverlayController.showUdfpsOverlay(TEST_UDFPS_SENSOR_ID, - IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD); + IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD, mUdfpsOverlayControllerCallback); mFgExecutor.runAllReady(); mUdfpsController.dozeTimeTick(); verify(mUdfpsView).dozeTimeTick(); @@ -161,7 +164,7 @@ public class UdfpsControllerTest extends SysuiTestCase { @Test public void showUdfpsOverlay_addsViewToWindow() throws RemoteException { mOverlayController.showUdfpsOverlay(TEST_UDFPS_SENSOR_ID, - IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD); + IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD, mUdfpsOverlayControllerCallback); mFgExecutor.runAllReady(); verify(mWindowManager).addView(eq(mUdfpsView), any()); } @@ -169,7 +172,7 @@ public class UdfpsControllerTest extends SysuiTestCase { @Test public void hideUdfpsOverlay_removesViewFromWindow() throws RemoteException { mOverlayController.showUdfpsOverlay(TEST_UDFPS_SENSOR_ID, - IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD); + IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD, mUdfpsOverlayControllerCallback); mOverlayController.hideUdfpsOverlay(TEST_UDFPS_SENSOR_ID); mFgExecutor.runAllReady(); verify(mWindowManager).removeView(eq(mUdfpsView)); @@ -183,7 +186,7 @@ public class UdfpsControllerTest extends SysuiTestCase { // GIVEN that the overlay is showing mOverlayController.showUdfpsOverlay(TEST_UDFPS_SENSOR_ID, - IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD); + IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD, mUdfpsOverlayControllerCallback); mFgExecutor.runAllReady(); // WHEN ACTION_DOWN is received verify(mUdfpsView).setOnTouchListener(mTouchListenerCaptor.capture()); @@ -205,7 +208,7 @@ public class UdfpsControllerTest extends SysuiTestCase { public void aodInterrupt() throws RemoteException { // GIVEN that the overlay is showing mOverlayController.showUdfpsOverlay(TEST_UDFPS_SENSOR_ID, - IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD); + IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD, mUdfpsOverlayControllerCallback); mFgExecutor.runAllReady(); // WHEN fingerprint is requested because of AOD interrupt mUdfpsController.onAodInterrupt(0, 0, 2f, 3f); @@ -221,7 +224,7 @@ public class UdfpsControllerTest extends SysuiTestCase { public void cancelAodInterrupt() throws RemoteException { // GIVEN AOD interrupt mOverlayController.showUdfpsOverlay(TEST_UDFPS_SENSOR_ID, - IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD); + IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD, mUdfpsOverlayControllerCallback); mFgExecutor.runAllReady(); mUdfpsController.onAodInterrupt(0, 0, 0f, 0f); // WHEN it is cancelled @@ -234,7 +237,7 @@ public class UdfpsControllerTest extends SysuiTestCase { public void aodInterruptTimeout() throws RemoteException { // GIVEN AOD interrupt mOverlayController.showUdfpsOverlay(TEST_UDFPS_SENSOR_ID, - IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD); + IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD, mUdfpsOverlayControllerCallback); mFgExecutor.runAllReady(); mUdfpsController.onAodInterrupt(0, 0, 0f, 0f); // WHEN it times out @@ -247,7 +250,7 @@ public class UdfpsControllerTest extends SysuiTestCase { @Test public void registersAndUnregistersViewForCallbacks() throws RemoteException { mOverlayController.showUdfpsOverlay(TEST_UDFPS_SENSOR_ID, - IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD); + IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD, mUdfpsOverlayControllerCallback); mFgExecutor.runAllReady(); verify(mStatusBarStateController).addCallback(mUdfpsController.mStatusBarStateListener); verify(mStatusBar).addExpansionChangedListener( diff --git a/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java b/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java index b3580fb790424..93fea90cd89ae 100644 --- a/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java @@ -80,6 +80,18 @@ public abstract class AcquisitionClient extends HalClientMonitor implement onErrorInternal(errorCode, vendorCode, true /* finish */); } + /** + * Notifies the caller that the operation was canceled by the user. Note that the actual + * operation still needs to wait for the HAL to send ERROR_CANCELED. + */ + public void onUserCanceled() { + // Send USER_CANCELED, but do not finish. Wait for the HAL to respond with ERROR_CANCELED, + // which then finishes the AcquisitionClient's lifecycle. + onErrorInternal(BiometricConstants.BIOMETRIC_ERROR_USER_CANCELED, 0 /* vendorCode */, + false /* finish */); + stopHalOperation(); + } + protected void onErrorInternal(int errorCode, int vendorCode, boolean finish) { // In some cases, the framework will send an error to the caller before a true terminal // case (success, failure, or error) is received from the HAL (e.g. versions of fingerprint diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/UdfpsHelper.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/UdfpsHelper.java index 37f8e8c2c1eee..f0e45978c365d 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/UdfpsHelper.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/UdfpsHelper.java @@ -22,9 +22,12 @@ import android.content.Context; import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.IUdfpsOverlayController; +import android.hardware.fingerprint.IUdfpsOverlayControllerCallback; import android.os.RemoteException; import android.util.Slog; +import com.android.server.biometrics.sensors.AcquisitionClient; + /** * Contains helper methods for under-display fingerprint HIDL. */ @@ -77,12 +80,22 @@ public class UdfpsHelper { } public static void showUdfpsOverlay(int sensorId, int reason, - @Nullable IUdfpsOverlayController udfpsOverlayController) { + @Nullable IUdfpsOverlayController udfpsOverlayController, + @NonNull AcquisitionClient client) { if (udfpsOverlayController == null) { return; } + + final IUdfpsOverlayControllerCallback callback = + new IUdfpsOverlayControllerCallback.Stub() { + @Override + public void onUserCanceled() { + client.onUserCanceled(); + } + }; + try { - udfpsOverlayController.showUdfpsOverlay(sensorId, reason); + udfpsOverlayController.showUdfpsOverlay(sensorId, reason, callback); } catch (RemoteException e) { Slog.e(TAG, "Remote exception when showing the UDFPS overlay", e); } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java index f9527d9379bc2..e2743f624c37c 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java @@ -89,7 +89,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient imp @Override protected void startHalOperation() { UdfpsHelper.showUdfpsOverlay(getSensorId(), Utils.getUdfpsAuthReason(this), - mUdfpsOverlayController); + mUdfpsOverlayController, this); try { mCancellationSignal = getFreshDaemon().authenticate(mSequentialId, mOperationId); } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java index bcd1b8bc99766..620a9cf3e6f24 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java @@ -72,7 +72,7 @@ class FingerprintDetectClient extends AcquisitionClient { protected void startHalOperation() { UdfpsHelper.showUdfpsOverlay(getSensorId(), IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD, - mUdfpsOverlayController); + mUdfpsOverlayController, this); try { mCancellationSignal = getFreshDaemon().detectInteraction(mSequentialId); } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java index ae64c77f13650..63fa66cdca209 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java @@ -121,7 +121,7 @@ class FingerprintEnrollClient extends EnrollClient implements Udfps { protected void startHalOperation() { UdfpsHelper.showUdfpsOverlay(getSensorId(), UdfpsHelper.getReasonFromEnrollReason(mEnrollReason), - mUdfpsOverlayController); + mUdfpsOverlayController, this); try { mCancellationSignal = getFreshDaemon().enroll(mSequentialId, HardwareAuthTokenUtils.toHardwareAuthToken(mHardwareAuthToken)); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient.java index 83a3d9492b220..db371125478d7 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient.java @@ -120,7 +120,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient protected void startHalOperation() { UdfpsHelper.showUdfpsOverlay(getSensorId(), IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD, - mUdfpsOverlayController); + mUdfpsOverlayController, this); try { getFreshDaemon().authenticate(0 /* operationId */, getTargetUserId()); } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintEnrollClient.java index 33db64c3259b1..41d23089a5309 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintEnrollClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintEnrollClient.java @@ -84,7 +84,7 @@ public class FingerprintEnrollClient extends EnrollClient { + boolean mHalOperationRunning; + + public TestAcquisitionClient(@NonNull Context context, + @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, + @NonNull ClientMonitorCallbackConverter callback) { + super(context, lazyDaemon, token, callback, 0 /* userId */, "Test", 0 /* cookie */, + TEST_SENSOR_ID /* sensorId */, 0 /* statsModality */, 0 /* statsAction */, + 0 /* statsClient */); + } + + @Override + public void start(@NonNull Callback callback) { + super.start(callback); + startHalOperation(); + } + + @Override + protected void stopHalOperation() { + mHalOperationRunning = false; + } + + @Override + protected void startHalOperation() { + mHalOperationRunning = true; + } + + @Override + public int getProtoEnum() { + return 0; + } + } +}