summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/fingerprint/FingerprintManager.java2
-rw-r--r--core/res/res/values/strings.xml11
-rw-r--r--core/res/res/values/symbols.xml3
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/BiometricNotificationUtils.java (renamed from services/core/java/com/android/server/biometrics/sensors/face/ReEnrollNotificationUtils.java)70
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java4
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java4
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java4
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceAuthenticationClient.java4
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java5
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java2
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient.java5
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintEnrollClient.java2
12 files changed, 98 insertions, 18 deletions
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java
index 0819835f5fb5..68dd62343eb0 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -1376,7 +1376,7 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
return context.getString(
com.android.internal.R.string.fingerprint_error_security_update_required);
case FINGERPRINT_ERROR_BAD_CALIBARTION:
- context.getString(
+ return context.getString(
com.android.internal.R.string.fingerprint_error_bad_calibration);
case FINGERPRINT_ERROR_VENDOR: {
String[] msgArray = context.getResources().getStringArray(
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index bcd121a2caa6..d1a5cc49be9f 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1638,8 +1638,8 @@
<string name="fingerprint_error_hw_not_present">This device does not have a fingerprint sensor.</string>
<!-- Generic error message shown when fingerprint is not available due to a security vulnerability. [CHAR LIMIT=50] -->
<string name="fingerprint_error_security_update_required">Sensor temporarily disabled.</string>
- <!-- Generic error message shown when fingerprint needs calibration [CHAR LIMIT=50] -->
- <string name="fingerprint_error_bad_calibration">Sensor needs calibration</string>
+ <!-- Generic error message shown when fingerprint needs calibration [CHAR LIMIT=150] -->
+ <string name="fingerprint_error_bad_calibration">Can\u2019t use fingerprint sensor. Visit a repair provider</string>
<!-- Template to be used to name enrolled fingerprints by default. -->
<string name="fingerprint_name_template">Finger <xliff:g id="fingerId" example="1">%d</xliff:g></string>
@@ -1675,6 +1675,13 @@
<!-- Contents of a notification that directs the user to enroll a fingerprint. [CHAR LIMIT=NONE] -->
<string name="fingerprint_setup_notification_content">Tap to add a fingerprint</string>
+ <!-- Notification name shown when the system requires the user to re-calibrate their fingerprint. [CHAR LIMIT=NONE] -->
+ <string name="fingerprint_recalibrate_notification_name">Fingerprint Unlock</string>
+ <!-- Notification title shown when the system requires the user to re-calibrate their fingerprint. [CHAR LIMIT=NONE] -->
+ <string name="fingerprint_recalibrate_notification_title">Can\u2019t use fingerprint sensor</string>
+ <!-- Notification content shown when the system requires the user to re-calibrate their fingerprint. [CHAR LIMIT=NONE] -->
+ <string name="fingerprint_recalibrate_notification_content">Visit a repair provider.</string>
+
<!-- Message shown during face acquisition when the face cannot be recognized [CHAR LIMIT=50] -->
<string name="face_acquired_insufficient">Couldn\u2019t capture accurate face data. Try again.</string>
<!-- Message shown during face acquisition when the image is too bright [CHAR LIMIT=50] -->
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index ea2821526768..9976f36674f4 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2541,6 +2541,9 @@
<java-symbol type="string" name="fingerprint_error_security_update_required" />
<java-symbol type="string" name="fingerprint_error_bad_calibration" />
<java-symbol type="string" name="fingerprint_acquired_immobile" />
+ <java-symbol type="string" name="fingerprint_recalibrate_notification_name" />
+ <java-symbol type="string" name="fingerprint_recalibrate_notification_title" />
+ <java-symbol type="string" name="fingerprint_recalibrate_notification_content" />
<!-- Fingerprint config -->
<java-symbol type="integer" name="config_fingerprintMaxTemplatesPerUser"/>
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/ReEnrollNotificationUtils.java b/services/core/java/com/android/server/biometrics/sensors/BiometricNotificationUtils.java
index f35a5208f6ed..1f1309d4c48c 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/ReEnrollNotificationUtils.java
+++ b/services/core/java/com/android/server/biometrics/sensors/BiometricNotificationUtils.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.biometrics.sensors.face;
+package com.android.server.biometrics.sensors;
import android.annotation.NonNull;
import android.app.Notification;
@@ -27,11 +27,18 @@ import android.os.UserHandle;
import com.android.internal.R;
-public class ReEnrollNotificationUtils {
+/**
+ * Biometric notification helper class.
+ */
+public class BiometricNotificationUtils {
- private static final String NOTIFICATION_TAG = "FaceService";
+ private static final String RE_ENROLL_NOTIFICATION_TAG = "FaceService";
+ private static final String BAD_CALIBRATION_NOTIFICATION_TAG = "FingerprintService";
private static final int NOTIFICATION_ID = 1;
+ /**
+ * Shows a face re-enrollment notification.
+ */
public static void showReEnrollmentNotification(@NonNull Context context) {
final NotificationManager notificationManager =
context.getSystemService(NotificationManager.class);
@@ -52,6 +59,42 @@ public class ReEnrollNotificationUtils {
final String channelName = "FaceEnrollNotificationChannel";
+ showNotificationHelper(context, name, title, content, pendingIntent, channelName,
+ RE_ENROLL_NOTIFICATION_TAG);
+ }
+
+ /**
+ * Shows a fingerprint bad calibration notification.
+ */
+ public static void showBadCalibrationNotification(@NonNull Context context) {
+ final NotificationManager notificationManager =
+ context.getSystemService(NotificationManager.class);
+
+ final String name =
+ context.getString(R.string.fingerprint_recalibrate_notification_name);
+ final String title =
+ context.getString(R.string.fingerprint_recalibrate_notification_title);
+ final String content =
+ context.getString(R.string.fingerprint_recalibrate_notification_content);
+
+ final Intent intent = new Intent("android.settings.FINGERPRINT_SETTINGS");
+ intent.setPackage("com.android.settings");
+
+ final PendingIntent pendingIntent = PendingIntent.getActivityAsUser(context,
+ 0 /* requestCode */, intent, PendingIntent.FLAG_IMMUTABLE /* flags */,
+ null /* options */, UserHandle.CURRENT);
+
+ final String channelName = "FingerprintBadCalibrationNotificationChannel";
+
+ showNotificationHelper(context, name, title, content, pendingIntent, channelName,
+ BAD_CALIBRATION_NOTIFICATION_TAG);
+ }
+
+ private static void showNotificationHelper(Context context, String name, String title,
+ String content, PendingIntent pendingIntent, String channelName,
+ String notificationTag) {
+ final NotificationManager notificationManager =
+ context.getSystemService(NotificationManager.class);
final NotificationChannel channel = new NotificationChannel(channelName, name,
NotificationManager.IMPORTANCE_HIGH);
final Notification notification = new Notification.Builder(context, channelName)
@@ -68,15 +111,28 @@ public class ReEnrollNotificationUtils {
.build();
notificationManager.createNotificationChannel(channel);
- notificationManager.notifyAsUser(NOTIFICATION_TAG,
- NOTIFICATION_ID, notification,
+ notificationManager.notifyAsUser(notificationTag, NOTIFICATION_ID, notification,
UserHandle.CURRENT);
}
- public static void cancelNotification(@NonNull Context context) {
+ /**
+ * Cancels a face re-enrollment notification
+ */
+ public static void cancelReEnrollNotification(@NonNull Context context) {
final NotificationManager notificationManager =
context.getSystemService(NotificationManager.class);
- notificationManager.cancelAsUser(NOTIFICATION_TAG, NOTIFICATION_ID, UserHandle.CURRENT);
+ notificationManager.cancelAsUser(RE_ENROLL_NOTIFICATION_TAG, NOTIFICATION_ID,
+ UserHandle.CURRENT);
+ }
+
+ /**
+ * Cancels a fingerprint bad calibration notification
+ */
+ public static void cancelBadCalibrationNotification(@NonNull Context context) {
+ final NotificationManager notificationManager =
+ context.getSystemService(NotificationManager.class);
+ notificationManager.cancelAsUser(BAD_CALIBRATION_NOTIFICATION_TAG, NOTIFICATION_ID,
+ UserHandle.CURRENT);
}
}
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java
index 2156f6462bf8..98f9fe178b9b 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java
@@ -40,11 +40,11 @@ import android.util.Slog;
import com.android.internal.R;
import com.android.server.biometrics.Utils;
import com.android.server.biometrics.sensors.AuthenticationClient;
+import com.android.server.biometrics.sensors.BiometricNotificationUtils;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
import com.android.server.biometrics.sensors.LockoutCache;
import com.android.server.biometrics.sensors.LockoutConsumer;
import com.android.server.biometrics.sensors.LockoutTracker;
-import com.android.server.biometrics.sensors.face.ReEnrollNotificationUtils;
import com.android.server.biometrics.sensors.face.UsageStats;
import java.util.ArrayList;
@@ -182,7 +182,7 @@ class FaceAuthenticationClient extends AuthenticationClient<ISession> implements
}
break;
case BiometricConstants.BIOMETRIC_ERROR_RE_ENROLL:
- ReEnrollNotificationUtils.showReEnrollmentNotification(getContext());
+ BiometricNotificationUtils.showReEnrollmentNotification(getContext());
break;
default:
break;
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java
index ff68aa87dbbb..0400e2257321 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java
@@ -37,11 +37,11 @@ import android.util.Slog;
import com.android.internal.R;
import com.android.server.biometrics.HardwareAuthTokenUtils;
import com.android.server.biometrics.Utils;
+import com.android.server.biometrics.sensors.BiometricNotificationUtils;
import com.android.server.biometrics.sensors.BiometricUtils;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
import com.android.server.biometrics.sensors.EnrollClient;
import com.android.server.biometrics.sensors.face.FaceUtils;
-import com.android.server.biometrics.sensors.face.ReEnrollNotificationUtils;
import java.io.IOException;
import java.util.ArrayList;
@@ -92,7 +92,7 @@ public class FaceEnrollClient extends EnrollClient<ISession> {
public void start(@NonNull Callback callback) {
super.start(callback);
- ReEnrollNotificationUtils.cancelNotification(getContext());
+ BiometricNotificationUtils.cancelReEnrollNotification(getContext());
}
@NonNull
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 0981f184e143..26c5bca7f726 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
@@ -57,6 +57,7 @@ import com.android.server.biometrics.Utils;
import com.android.server.biometrics.sensors.AcquisitionClient;
import com.android.server.biometrics.sensors.AuthenticationConsumer;
import com.android.server.biometrics.sensors.BaseClientMonitor;
+import com.android.server.biometrics.sensors.BiometricNotificationUtils;
import com.android.server.biometrics.sensors.BiometricScheduler;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
import com.android.server.biometrics.sensors.EnumerateConsumer;
@@ -68,7 +69,6 @@ import com.android.server.biometrics.sensors.PerformanceTracker;
import com.android.server.biometrics.sensors.RemovalConsumer;
import com.android.server.biometrics.sensors.face.FaceUtils;
import com.android.server.biometrics.sensors.face.LockoutHalImpl;
-import com.android.server.biometrics.sensors.face.ReEnrollNotificationUtils;
import com.android.server.biometrics.sensors.face.ServiceProvider;
import com.android.server.biometrics.sensors.face.UsageStats;
@@ -574,7 +574,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider {
mHandler.post(() -> {
scheduleUpdateActiveUserWithoutHandler(userId);
- ReEnrollNotificationUtils.cancelNotification(mContext);
+ BiometricNotificationUtils.cancelReEnrollNotification(mContext);
final FaceEnrollClient client = new FaceEnrollClient(mContext, mLazyDaemon, token,
new ClientMonitorCallbackConverter(receiver), userId, hardwareAuthToken,
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceAuthenticationClient.java
index 01dd18fb5cf0..38e6f083da51 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceAuthenticationClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceAuthenticationClient.java
@@ -35,9 +35,9 @@ import android.util.Slog;
import com.android.internal.R;
import com.android.server.biometrics.Utils;
import com.android.server.biometrics.sensors.AuthenticationClient;
+import com.android.server.biometrics.sensors.BiometricNotificationUtils;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
import com.android.server.biometrics.sensors.LockoutTracker;
-import com.android.server.biometrics.sensors.face.ReEnrollNotificationUtils;
import com.android.server.biometrics.sensors.face.UsageStats;
import java.util.ArrayList;
@@ -195,7 +195,7 @@ class FaceAuthenticationClient extends AuthenticationClient<IBiometricsFace> {
mLastAcquire = acquireInfo;
if (acquireInfo == FaceManager.FACE_ACQUIRED_RECALIBRATE) {
- ReEnrollNotificationUtils.showReEnrollmentNotification(getContext());
+ BiometricNotificationUtils.showReEnrollmentNotification(getContext());
}
final boolean shouldSend = shouldSend(acquireInfo, vendorCode);
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 85995a5cc99c..ba6ef2955461 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
@@ -33,6 +33,7 @@ import android.util.Slog;
import com.android.server.biometrics.Utils;
import com.android.server.biometrics.sensors.AuthenticationClient;
+import com.android.server.biometrics.sensors.BiometricNotificationUtils;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
import com.android.server.biometrics.sensors.LockoutCache;
import com.android.server.biometrics.sensors.LockoutConsumer;
@@ -102,6 +103,10 @@ class FingerprintAuthenticationClient extends AuthenticationClient<ISession> imp
public void onError(int errorCode, int vendorCode) {
super.onError(errorCode, vendorCode);
+ if (errorCode == BiometricFingerprintConstants.FINGERPRINT_ERROR_BAD_CALIBARTION) {
+ BiometricNotificationUtils.showBadCalibrationNotification(getContext());
+ }
+
UdfpsHelper.hideUdfpsOverlay(getSensorId(), mUdfpsOverlayController);
}
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 11849661693b..646b988545be 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
@@ -35,6 +35,7 @@ import android.os.RemoteException;
import android.util.Slog;
import com.android.server.biometrics.HardwareAuthTokenUtils;
+import com.android.server.biometrics.sensors.BiometricNotificationUtils;
import com.android.server.biometrics.sensors.BiometricUtils;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
import com.android.server.biometrics.sensors.EnrollClient;
@@ -150,6 +151,7 @@ class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps {
UdfpsHelper.getReasonFromEnrollReason(mEnrollReason),
mUdfpsOverlayController, this);
SidefpsHelper.showOverlay(mSidefpsController);
+ BiometricNotificationUtils.cancelBadCalibrationNotification(getContext());
try {
mCancellationSignal = getFreshDaemon().enroll(
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 45e35e34b62b..01136d619a26 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
@@ -32,6 +32,7 @@ import android.util.Slog;
import com.android.server.biometrics.Utils;
import com.android.server.biometrics.sensors.AuthenticationClient;
+import com.android.server.biometrics.sensors.BiometricNotificationUtils;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
import com.android.server.biometrics.sensors.LockoutTracker;
import com.android.server.biometrics.sensors.fingerprint.Udfps;
@@ -111,6 +112,10 @@ class FingerprintAuthenticationClient extends AuthenticationClient<IBiometricsFi
public void onError(int errorCode, int vendorCode) {
super.onError(errorCode, vendorCode);
+ if (errorCode == BiometricFingerprintConstants.FINGERPRINT_ERROR_BAD_CALIBARTION) {
+ BiometricNotificationUtils.showBadCalibrationNotification(getContext());
+ }
+
UdfpsHelper.hideUdfpsOverlay(getSensorId(), mUdfpsOverlayController);
}
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 a28a3f6bd5c3..eba445f7e7b4 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
@@ -31,6 +31,7 @@ import android.os.IBinder;
import android.os.RemoteException;
import android.util.Slog;
+import com.android.server.biometrics.sensors.BiometricNotificationUtils;
import com.android.server.biometrics.sensors.BiometricUtils;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
import com.android.server.biometrics.sensors.EnrollClient;
@@ -97,6 +98,7 @@ public class FingerprintEnrollClient extends EnrollClient<IBiometricsFingerprint
UdfpsHelper.getReasonFromEnrollReason(mEnrollReason),
mUdfpsOverlayController, this);
SidefpsHelper.showOverlay(mSidefpsController);
+ BiometricNotificationUtils.cancelBadCalibrationNotification(getContext());
try {
// GroupId was never used. In fact, groupId is always the same as userId.
getFreshDaemon().enroll(mHardwareAuthToken, getTargetUserId(), mTimeoutSec);