From 7f668ac2c509a91cb7a42ec8e8b2c55da5085b59 Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Mon, 25 Jan 2021 17:06:51 -0800 Subject: [PATCH] Send enrollment signals to SystemUI Fixes: 178147339 Test: UdfpsAnimationEnroll logs are seen Change-Id: Ifdaa58ab75662606fd0e46683448750843795249 --- .../fingerprint/IUdfpsOverlayController.aidl | 6 ++++ .../biometrics/UdfpsAnimationEnroll.java | 9 ++++++ .../systemui/biometrics/UdfpsController.java | 10 ++++++ .../systemui/biometrics/UdfpsView.java | 13 +++++++- .../sensors/fingerprint/UdfpsHelper.java | 32 +++++++++++++++++++ .../aidl/FingerprintEnrollClient.java | 11 +++++++ .../hidl/FingerprintEnrollClient.java | 11 +++++++ 7 files changed, 91 insertions(+), 1 deletion(-) diff --git a/core/java/android/hardware/fingerprint/IUdfpsOverlayController.aidl b/core/java/android/hardware/fingerprint/IUdfpsOverlayController.aidl index c3b6c052500af..c093489d44946 100644 --- a/core/java/android/hardware/fingerprint/IUdfpsOverlayController.aidl +++ b/core/java/android/hardware/fingerprint/IUdfpsOverlayController.aidl @@ -32,6 +32,12 @@ oneway interface IUdfpsOverlayController { // Hides the overlay. void hideUdfpsOverlay(int sensorId); + // Notifies of enrollment progress changes. + void onEnrollmentProgress(int sensorId, int remaining); + + // Notifies when a non-terminal error occurs (e.g. user moved their finger too fast). + void onEnrollmentHelp(int sensorId); + // Shows debug messages on the UDFPS overlay. void setDebugMessage(int sensorId, String message); } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsAnimationEnroll.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsAnimationEnroll.java index 1a2a4927c3fd8..58ebadeb3f77a 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsAnimationEnroll.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsAnimationEnroll.java @@ -23,6 +23,7 @@ import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.RectF; +import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -85,4 +86,12 @@ public class UdfpsAnimationEnroll extends UdfpsAnimation { public int getOpacity() { return 0; } + + public void onEnrollmentProgress(int remaining) { + Log.d(TAG, "Remaining: " + remaining); + } + + public void onEnrollmentHelp() { + Log.d(TAG, "onEnrollmentHelp"); + } } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java index a2b2bea8a06f8..001730a7e4fef 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java @@ -130,6 +130,16 @@ class UdfpsController implements DozeReceiver { UdfpsController.this.hideOverlay(); } + @Override + public void onEnrollmentProgress(int sensorId, int remaining) { + mView.onEnrollmentProgress(remaining); + } + + @Override + public void onEnrollmentHelp(int sensorId) { + mView.onEnrollmentHelp(); + } + @Override public void setDebugMessage(int sensorId, String message) { mView.setDebugMessage(message); diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.java index 4cb8101385eaf..983206e7984ae 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.java @@ -55,7 +55,6 @@ public class UdfpsView extends View implements DozeReceiver { @NonNull private final Paint mSensorPaint; private final float mSensorTouchAreaCoefficient; - // Stores rounded up values from mSensorRect. Necessary for APIs that only take Rect (not RecF). @NonNull private final Rect mTouchableRegion; // mInsetsListener is used to set the touchable region for our window. Our window covers the @@ -281,4 +280,16 @@ public class UdfpsView extends View implements DozeReceiver { mShowScrimAndDot = false; invalidate(); } + + void onEnrollmentProgress(int remaining) { + if (mUdfpsAnimation instanceof UdfpsAnimationEnroll) { + ((UdfpsAnimationEnroll) mUdfpsAnimation).onEnrollmentProgress(remaining); + } + } + + void onEnrollmentHelp() { + if (mUdfpsAnimation instanceof UdfpsAnimationEnroll) { + ((UdfpsAnimationEnroll) mUdfpsAnimation).onEnrollmentHelp(); + } + } } 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 01a620f7937ce..d092e860e2081 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 @@ -16,8 +16,11 @@ package com.android.server.biometrics.sensors.fingerprint; +import android.annotation.NonNull; import android.annotation.Nullable; +import android.content.Context; import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint; +import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.RemoteException; import android.util.Slog; @@ -85,4 +88,33 @@ public class UdfpsHelper { Slog.e(TAG, "Remote exception when hiding the UDFPS overlay", e); } } + + public static void onEnrollmentProgress(int sensorId, int remaining, + @Nullable IUdfpsOverlayController udfpsOverlayController) { + if (udfpsOverlayController == null) { + return; + } + try { + udfpsOverlayController.onEnrollmentProgress(sensorId, remaining); + } catch (RemoteException e) { + Slog.e(TAG, "Remote exception when sending onEnrollmentProgress", e); + } + } + + public static void onEnrollmentHelp(int sensorId, + @Nullable IUdfpsOverlayController udfpsOverlayController) { + if (udfpsOverlayController == null) { + return; + } + try { + udfpsOverlayController.onEnrollmentHelp(sensorId); + } catch (RemoteException e) { + Slog.e(TAG, "Remote exception when sending onEnrollmentHelp", e); + } + } + + public static boolean isValidAcquisitionMessage(@NonNull Context context, + int acquireInfo, int vendorCode) { + return FingerprintManager.getAcquiredString(context, acquireInfo, vendorCode) != 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 0864c1a69a6f4..08cc464b4766a 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 @@ -65,11 +65,22 @@ class FingerprintEnrollClient extends EnrollClient implements Udfps { public void onEnrollResult(BiometricAuthenticator.Identifier identifier, int remaining) { super.onEnrollResult(identifier, remaining); + UdfpsHelper.onEnrollmentProgress(getSensorId(), remaining, mUdfpsOverlayController); + if (remaining == 0) { UdfpsHelper.hideUdfpsOverlay(getSensorId(), mUdfpsOverlayController); } } + @Override + public void onAcquired(int acquiredInfo, int vendorCode) { + super.onAcquired(acquiredInfo, vendorCode); + + if (UdfpsHelper.isValidAcquisitionMessage(getContext(), acquiredInfo, vendorCode)) { + UdfpsHelper.onEnrollmentHelp(getSensorId(), mUdfpsOverlayController); + } + } + @Override public void onError(int errorCode, int vendorCode) { super.onError(errorCode, vendorCode); 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 8493af13abd42..d927aa717fbc6 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 @@ -107,11 +107,22 @@ public class FingerprintEnrollClient extends EnrollClient