Loading core/java/android/hardware/biometrics/BiometricFingerprintConstants.java +9 −2 Original line number Diff line number Diff line Loading @@ -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 {} Loading Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationBroadcastReceiver.java +6 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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: Loading packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationDialogFactory.java +9 −5 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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)); Loading @@ -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; } Loading packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java +15 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); } } }; Loading Loading @@ -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); } Loading @@ -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) { Loading @@ -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) Loading packages/SystemUI/src/com/android/systemui/biometrics/FingerprintReEnrollNotification.java +11 −2 Original line number Diff line number Diff line Loading @@ -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
core/java/android/hardware/biometrics/BiometricFingerprintConstants.java +9 −2 Original line number Diff line number Diff line Loading @@ -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 {} Loading Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationBroadcastReceiver.java +6 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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: Loading
packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationDialogFactory.java +9 −5 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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)); Loading @@ -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; } Loading
packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java +15 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); } } }; Loading Loading @@ -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); } Loading @@ -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) { Loading @@ -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) Loading
packages/SystemUI/src/com/android/systemui/biometrics/FingerprintReEnrollNotification.java +11 −2 Original line number Diff line number Diff line Loading @@ -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); }