Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3fd42db7 authored by Joshua Mccloskey's avatar Joshua Mccloskey Committed by Automerger Merge Worker
Browse files

Merge "Added fingerprint bad calibration notification" into sc-dev am: f4ecf18a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15057260

Change-Id: Ic1ae4cc0793d2431593a8dcf541f03c68b8259c4
parents a845f019 f4ecf18a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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(
+9 −2
Original line number Diff line number Diff line
@@ -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] -->
+3 −0
Original line number Diff line number Diff line
@@ -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"/>
+63 −7
Original line number Diff line number Diff line
@@ -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);
    }

}
+2 −2
Original line number Diff line number Diff line
@@ -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;
Loading