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

Commit 27dcc3d2 authored by Shawn Lin's avatar Shawn Lin Committed by Android (Google) Code Review
Browse files

Merge "Support force fingerprint reenrollment" into main

parents 7b988185 4c5bbf14
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -221,7 +221,8 @@ public interface BiometricFingerprintConstants {
            FINGERPRINT_ACQUIRED_IMMOBILE,
            FINGERPRINT_ACQUIRED_TOO_BRIGHT,
            FINGERPRINT_ACQUIRED_POWER_PRESSED,
            FINGERPRINT_ACQUIRED_RE_ENROLL})
            FINGERPRINT_ACQUIRED_RE_ENROLL_OPTIONAL,
            FINGERPRINT_ACQUIRED_RE_ENROLL_FORCED})
    @Retention(RetentionPolicy.SOURCE)
    @interface FingerprintAcquired {}

@@ -316,7 +317,13 @@ public interface BiometricFingerprintConstants {
     * This message is sent to encourage the user to re-enroll their fingerprints.
     * @hide
     */
    int FINGERPRINT_ACQUIRED_RE_ENROLL = 12;
    int FINGERPRINT_ACQUIRED_RE_ENROLL_OPTIONAL = 12;

    /**
     * This message is sent to force the user to re-enroll their fingerprints.
     * @hide
     */
    int FINGERPRINT_ACQUIRED_RE_ENROLL_FORCED = 13;

    /**
     * @hide
+6 −2
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ public class BiometricNotificationBroadcastReceiver extends BroadcastReceiver {
    static final String ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG =
            "fingerprint_action_show_reenroll_dialog";

    static final String EXTRA_IS_REENROLL_FORCED = "is_reenroll_forced";

    private static final String TAG = "BiometricNotificationBroadcastReceiver";

    private final Context mContext;
@@ -56,14 +58,16 @@ public class BiometricNotificationBroadcastReceiver extends BroadcastReceiver {
                mNotificationDialogFactory.createReenrollDialog(
                        mContext.getUserId(),
                        mContext::startActivity,
                        BiometricSourceType.FACE)
                        BiometricSourceType.FACE,
                        false)
                        .show();
                break;
            case ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG:
                mNotificationDialogFactory.createReenrollDialog(
                        mContext.getUserId(),
                        mContext::startActivity,
                        BiometricSourceType.FINGERPRINT)
                        BiometricSourceType.FINGERPRINT,
                        intent.getBooleanExtra(EXTRA_IS_REENROLL_FORCED, false))
                        .show();
                break;
            default:
+9 −5
Original line number Diff line number Diff line
@@ -29,13 +29,12 @@ import android.hardware.fingerprint.FingerprintManager;
import android.provider.Settings;
import android.util.Log;

import com.android.systemui.res.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.res.R;
import com.android.systemui.statusbar.phone.SystemUIDialog;

import javax.inject.Inject;
import javax.inject.Provider;

/**
 * Manages the creation of dialogs to be shown for biometric re enroll notifications.
@@ -61,7 +60,8 @@ public class BiometricNotificationDialogFactory {
    }

    Dialog createReenrollDialog(
            int userId, ActivityStarter activityStarter, BiometricSourceType biometricSourceType) {
            int userId, ActivityStarter activityStarter, BiometricSourceType biometricSourceType,
            boolean isReenrollForced) {
        SystemUIDialog sysuiDialog = mSystemUIDialogFactory.create();
        if (biometricSourceType == BiometricSourceType.FACE) {
            sysuiDialog.setTitle(mResources.getString(R.string.face_re_enroll_dialog_title));
@@ -80,8 +80,12 @@ public class BiometricNotificationDialogFactory {
        sysuiDialog.setPositiveButton(R.string.biometric_re_enroll_dialog_confirm,
                (dialog, which) -> onReenrollDialogConfirm(
                        userId, biometricSourceType, activityStarter));
        if (!isReenrollForced) {
            sysuiDialog.setNegativeButton(R.string.biometric_re_enroll_dialog_cancel,
                (dialog, which) -> {});
                    (dialog, which) -> {
                    });
        }
        sysuiDialog.setCanceledOnTouchOutside(!isReenrollForced);
        return sysuiDialog;
    }

+15 −6
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.biometrics;

import static android.app.PendingIntent.FLAG_IMMUTABLE;
import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;

import static com.android.systemui.biometrics.BiometricNotificationBroadcastReceiver.ACTION_SHOW_FACE_REENROLL_DIALOG;
import static com.android.systemui.biometrics.BiometricNotificationBroadcastReceiver.ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG;
@@ -43,8 +44,8 @@ import android.util.Log;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.CoreStartable;
import com.android.systemui.res.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.res.R;
import com.android.systemui.statusbar.policy.KeyguardStateController;

import java.util.Optional;
@@ -80,6 +81,8 @@ public class BiometricNotificationService implements CoreStartable {
    private boolean mFingerprintNotificationQueued;
    private boolean mFingerprintReenrollRequired;

    private boolean mIsFingerprintReenrollForced;

    private final KeyguardStateController.Callback mKeyguardStateControllerCallback =
            new KeyguardStateController.Callback() {
                private boolean mIsShowing = true;
@@ -118,9 +121,11 @@ public class BiometricNotificationService implements CoreStartable {
                public void onBiometricHelp(int msgId, String helpString,
                        BiometricSourceType biometricSourceType) {
                    if (biometricSourceType == BiometricSourceType.FINGERPRINT
                            && mFingerprintReEnrollNotification.isFingerprintReEnrollRequired(
                            && mFingerprintReEnrollNotification.isFingerprintReEnrollRequested(
                                    msgId)) {
                        mFingerprintReenrollRequired = true;
                        mIsFingerprintReenrollForced =
                                mFingerprintReEnrollNotification.isFingerprintReEnrollForced(msgId);
                    }
                }
            };
@@ -191,7 +196,7 @@ public class BiometricNotificationService implements CoreStartable {
        final String name = mContext.getString(R.string.face_re_enroll_notification_name);
        mHandler.postDelayed(
                () -> showNotification(ACTION_SHOW_FACE_REENROLL_DIALOG, title, content, name,
                        FACE_NOTIFICATION_ID),
                        FACE_NOTIFICATION_ID, false),
                SHOW_NOTIFICATION_DELAY_MS);
    }

@@ -204,12 +209,12 @@ public class BiometricNotificationService implements CoreStartable {
        final String name = mContext.getString(R.string.fingerprint_re_enroll_notification_name);
        mHandler.postDelayed(
                () -> showNotification(ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG, title, content,
                        name, FINGERPRINT_NOTIFICATION_ID),
                        name, FINGERPRINT_NOTIFICATION_ID, mIsFingerprintReenrollForced),
                SHOW_NOTIFICATION_DELAY_MS);
    }

    private void showNotification(String action, CharSequence title, CharSequence content,
            CharSequence name, int notificationId) {
            CharSequence name, int notificationId, boolean isReenrollForced) {
        if (notificationId == FACE_NOTIFICATION_ID) {
            mFaceNotificationQueued = false;
        } else if (notificationId == FINGERPRINT_NOTIFICATION_ID) {
@@ -223,8 +228,12 @@ public class BiometricNotificationService implements CoreStartable {
        }

        final Intent onClickIntent = new Intent(action);
        onClickIntent.putExtra(BiometricNotificationBroadcastReceiver.EXTRA_IS_REENROLL_FORCED,
                isReenrollForced);

        final PendingIntent onClickPendingIntent = PendingIntent.getBroadcastAsUser(mContext,
                0 /* requestCode */, onClickIntent, FLAG_IMMUTABLE, UserHandle.CURRENT);
                0 /* requestCode */, onClickIntent, FLAG_IMMUTABLE | FLAG_UPDATE_CURRENT,
                UserHandle.CURRENT);

        final Notification notification = new Notification.Builder(mContext, CHANNEL_ID)
                .setCategory(Notification.CATEGORY_SYSTEM)
+11 −2
Original line number Diff line number Diff line
@@ -23,7 +23,16 @@ import android.hardware.biometrics.BiometricFingerprintConstants;
 */
public interface FingerprintReEnrollNotification {
    //TODO: Remove this class and add a constant in the HAL API instead (b/281841852)
    /** Returns true if msgId corresponds to FINGERPRINT_ACQUIRED_RE_ENROLL. */
    boolean isFingerprintReEnrollRequired(
    /**
     * Returns true if msgId corresponds to FINGERPRINT_ACQUIRED_RE_ENROLL_OPTIONAL or
     * FINGERPRINT_ACQUIRED_RE_ENROLL_FORCED.
     */
    boolean isFingerprintReEnrollRequested(
            @BiometricFingerprintConstants.FingerprintAcquired int msgId);

    /**
     * Returns true if msgId corresponds to FINGERPRINT_ACQUIRED_RE_ENROLL_FORCED.
     */
    boolean isFingerprintReEnrollForced(
            @BiometricFingerprintConstants.FingerprintAcquired int msgId);
}
Loading