diff --git a/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java b/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
index 98f571b809493..c59d7571ee6d7 100644
--- a/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
+++ b/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
@@ -217,7 +217,8 @@ public interface BiometricFingerprintConstants {
FINGERPRINT_ACQUIRED_START,
FINGERPRINT_ACQUIRED_UNKNOWN,
FINGERPRINT_ACQUIRED_IMMOBILE,
- FINGERPRINT_ACQUIRED_TOO_BRIGHT})
+ FINGERPRINT_ACQUIRED_TOO_BRIGHT,
+ FINGERPRINT_ACQUIRED_POWER_PRESSED})
@Retention(RetentionPolicy.SOURCE)
@interface FingerprintAcquired {}
@@ -301,6 +302,13 @@ public interface BiometricFingerprintConstants {
*/
int FINGERPRINT_ACQUIRED_TOO_BRIGHT = 10;
+ /**
+ * For sensors that have the power button co-located with their sensor, this event will
+ * be sent during enrollment.
+ * @hide
+ */
+ int FINGERPRINT_ACQUIRED_POWER_PRESSED = 11;
+
/**
* @hide
*/
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java
index 72d8122693740..0fd164de8ffb0 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -1538,6 +1538,9 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
case FINGERPRINT_ACQUIRED_TOO_BRIGHT:
return context.getString(
com.android.internal.R.string.fingerprint_acquired_too_bright);
+ case FINGERPRINT_ACQUIRED_POWER_PRESSED:
+ return context.getString(
+ com.android.internal.R.string.fingerprint_acquired_power_press);
case FINGERPRINT_ACQUIRED_VENDOR: {
String[] msgArray = context.getResources().getStringArray(
com.android.internal.R.array.fingerprint_acquired_vendor);
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 368259e8947b5..6ec98e82211c7 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1708,6 +1708,8 @@
Try another fingerprint
Too bright
+
+ Power press detected
Try adjusting
@@ -3574,11 +3576,11 @@
- Tap to turn off screen
+ To end setup, turn off screen
- Turn off screen
+ Turn off
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 3511db203a8c2..6c6a0a3e3abd6 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2612,6 +2612,7 @@
+
diff --git a/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCallbackConverter.java b/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCallbackConverter.java
index 46d863d7aaec7..2e1a363bcc680 100644
--- a/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCallbackConverter.java
+++ b/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCallbackConverter.java
@@ -59,7 +59,7 @@ public class ClientMonitorCallbackConverter {
// The following apply to all clients
- void onAcquired(int sensorId, int acquiredInfo, int vendorCode) throws RemoteException {
+ public void onAcquired(int sensorId, int acquiredInfo, int vendorCode) throws RemoteException {
if (mSensorReceiver != null) {
mSensorReceiver.onAcquired(sensorId, acquiredInfo, vendorCode);
} else if (mFaceServiceReceiver != null) {
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 e0393b54d2c5c..612d906708883 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
@@ -50,12 +50,14 @@ import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback;
import com.android.server.biometrics.sensors.EnrollClient;
import com.android.server.biometrics.sensors.SensorOverlays;
import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils;
+import com.android.server.biometrics.sensors.fingerprint.PowerPressHandler;
import com.android.server.biometrics.sensors.fingerprint.Udfps;
import com.android.server.biometrics.sensors.fingerprint.UdfpsHelper;
import java.util.function.Supplier;
-class FingerprintEnrollClient extends EnrollClient implements Udfps {
+class FingerprintEnrollClient extends EnrollClient implements Udfps,
+ PowerPressHandler {
private static final String TAG = "FingerprintEnrollClient";
@@ -266,4 +268,10 @@ class FingerprintEnrollClient extends EnrollClient implements Udfps
Slog.e(TAG, "Unable to send UI ready", e);
}
}
+
+ @Override
+ public void onPowerPressed() {
+ onAcquired(BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_POWER_PRESSED,
+ 0 /* vendorCode */);
+ }
}
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 92e1f27ab624c..837b553974165 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,6 +16,8 @@
package com.android.server.biometrics.sensors.fingerprint.aidl;
+import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_POWER_PRESSED;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -253,6 +255,16 @@ public class FingerprintEnrollClientTest {
showHideOverlay(c -> c.onEnrollResult(new Fingerprint("", 1, 1), 0));
}
+ @Test
+ public void testPowerPressForwardsAcquireMessage() throws RemoteException {
+ final FingerprintEnrollClient client = createClient();
+ client.start(mCallback);
+ client.onPowerPressed();
+
+ verify(mClientMonitorCallbackConverter).onAcquired(anyInt(),
+ eq(FINGERPRINT_ACQUIRED_POWER_PRESSED), anyInt());
+ }
+
private void showHideOverlay(Consumer block)
throws RemoteException {
final FingerprintEnrollClient client = createClient();