From c48148a8f593fa8bc33f01f7437619dcf3e8dfd0 Mon Sep 17 00:00:00 2001 From: Diya Bera Date: Wed, 1 Feb 2023 18:03:36 +0000 Subject: [PATCH] Handling power press messages sent from the HAL Test: Manually checked behavior when power is pressed for: Biometric Prompt: an error is shown Keyguard authentication: nothing happens Fingerprint Enrollment: an acquired message is displayed atest FingerprintAuthenticationClientTest FingerprintEnrollClientTest Bug: 265202141 Change-Id: I842115fae9f25387c7d8d5b494336b3fe10c2cb0 --- .../server/biometrics/sensors/SensorOverlays.java | 7 +++++++ .../aidl/FingerprintAuthenticationClient.java | 10 ++++++++-- .../fingerprint/aidl/FingerprintEnrollClient.java | 14 +++++++++----- .../aidl/FingerprintAuthenticationClientTest.java | 11 +++++++++++ .../aidl/FingerprintEnrollClientTest.java | 10 +++++----- 5 files changed, 40 insertions(+), 12 deletions(-) diff --git a/services/core/java/com/android/server/biometrics/sensors/SensorOverlays.java b/services/core/java/com/android/server/biometrics/sensors/SensorOverlays.java index 969a174f49c73..0b5c1c1713544 100644 --- a/services/core/java/com/android/server/biometrics/sensors/SensorOverlays.java +++ b/services/core/java/com/android/server/biometrics/sensors/SensorOverlays.java @@ -149,6 +149,13 @@ public final class SensorOverlays { } } + /** + * Returns if the sensor is side fps. + */ + public boolean isSfps() { + return mSidefpsController.isPresent(); + } + /** * Consumer for a biometric overlay controller. * 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 a90679e755cf6..932c0b4948a01 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 @@ -236,8 +236,14 @@ class FingerprintAuthenticationClient extends AuthenticationClient @Override public void onError(int errorCode, int vendorCode) { - super.onError(errorCode, vendorCode); - + if (errorCode == BiometricFingerprintConstants.FINGERPRINT_ERROR_VENDOR + && vendorCode == BiometricFingerprintConstants.BIOMETRIC_ERROR_POWER_PRESSED + && mSensorOverlays.isSfps()) { + super.onError(BiometricFingerprintConstants.BIOMETRIC_ERROR_POWER_PRESSED, + 0 /* vendorCode */); + } else { + super.onError(errorCode, vendorCode); + } if (errorCode == BiometricFingerprintConstants.FINGERPRINT_ERROR_BAD_CALIBRATION) { BiometricNotificationUtils.showBadCalibrationNotification(getContext()); } 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 2ac8b433b3af2..75dabcca4b804 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 @@ -146,7 +146,14 @@ class FingerprintEnrollClient extends EnrollClient implements Udfps } }); mCallback.onBiometricAction(BiometricStateListener.ACTION_SENSOR_TOUCH); - super.onAcquired(acquiredInfo, vendorCode); + if (acquiredInfo == BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_VENDOR + && vendorCode == BiometricFingerprintConstants.BIOMETRIC_ERROR_POWER_PRESSED + && mSensorOverlays.isSfps()) { + super.onAcquired(BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_POWER_PRESSED, + 0 /* vendorCode */); + } else { + super.onAcquired(acquiredInfo, vendorCode); + } } @Override @@ -266,8 +273,5 @@ class FingerprintEnrollClient extends EnrollClient implements Udfps } @Override - public void onPowerPressed() { - onAcquired(BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_POWER_PRESSED, - 0 /* vendorCode */); - } + public void onPowerPressed() { } } diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java index 99f7905a9f70f..e605a317f0964 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java @@ -35,6 +35,7 @@ import static org.mockito.Mockito.when; import android.app.ActivityManager; import android.app.ActivityTaskManager; import android.content.ComponentName; +import android.hardware.biometrics.BiometricFingerprintConstants; import android.hardware.biometrics.BiometricManager; import android.hardware.biometrics.common.ICancellationSignal; import android.hardware.biometrics.common.OperationContext; @@ -364,6 +365,16 @@ public class FingerprintAuthenticationClientTest { showHideOverlay(c -> c.onLockoutPermanent()); } + @Test + public void testPowerPressForwardsErrorMessage() throws RemoteException { + final FingerprintAuthenticationClient client = createClient(); + + client.onError(BiometricFingerprintConstants.FINGERPRINT_ERROR_VENDOR, + BiometricFingerprintConstants.BIOMETRIC_ERROR_POWER_PRESSED); + + verify(mClientMonitorCallbackConverter).onError(anyInt(), anyInt(), + eq(BiometricFingerprintConstants.BIOMETRIC_ERROR_POWER_PRESSED), eq(0)); + } private void showHideOverlay(Consumer block) throws RemoteException { final FingerprintAuthenticationClient client = createClient(); diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java index 26524d7df7c3d..a40d3fe3a3d6c 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java @@ -16,8 +16,6 @@ package com.android.server.biometrics.sensors.fingerprint.aidl; -import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_POWER_PRESSED; - import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; @@ -29,6 +27,7 @@ import static org.mockito.Mockito.same; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.hardware.biometrics.BiometricFingerprintConstants; import android.hardware.biometrics.common.OperationContext; import android.hardware.biometrics.fingerprint.ISession; import android.hardware.biometrics.fingerprint.PointerContext; @@ -276,11 +275,12 @@ public class FingerprintEnrollClientTest { @Test public void testPowerPressForwardsAcquireMessage() throws RemoteException { final FingerprintEnrollClient client = createClient(); - client.start(mCallback); - client.onPowerPressed(); + + client.onAcquired(BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_VENDOR, + BiometricFingerprintConstants.BIOMETRIC_ERROR_POWER_PRESSED); verify(mClientMonitorCallbackConverter).onAcquired(anyInt(), - eq(FINGERPRINT_ACQUIRED_POWER_PRESSED), anyInt()); + eq(BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_POWER_PRESSED), eq(0)); } private void showHideOverlay(Consumer block)