Loading src/com/android/settings/biometrics/BiometricEnrollActivity.java +9 −2 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ import com.android.settings.overlay.FeatureFactory; import com.android.settings.password.ChooseLockGeneric; import com.android.settings.password.ChooseLockPattern; import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ConfirmDeviceCredentialActivity; import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupdesign.transition.TransitionHelper; Loading Loading @@ -452,7 +453,9 @@ public class BiometricEnrollActivity extends InstrumentedActivity { Utils.launchBiometricPromptForMandatoryBiometrics(this, BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */); } else if (biometricStatus != Utils.BiometricStatus.NOT_ACTIVE) { finish(); IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(this, biometricStatus); } } } else { Loading Loading @@ -486,7 +489,11 @@ public class BiometricEnrollActivity extends InstrumentedActivity { } break; case BIOMETRIC_AUTH_REQUEST: if (resultCode != RESULT_OK) { if (resultCode == ConfirmDeviceCredentialActivity.BIOMETRIC_LOCKOUT_ERROR_RESULT) { IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(this, Utils.BiometricStatus.LOCKOUT); } else if (resultCode != RESULT_OK) { finish(); } default: Loading src/com/android/settings/biometrics/BiometricEnrollIntroduction.java +11 −2 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import com.android.settings.SetupWizardUtils; import com.android.settings.Utils; import com.android.settings.password.ChooseLockGeneric; import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ConfirmDeviceCredentialActivity; import com.android.settings.password.SetupSkipDialog; import com.google.android.setupcompat.template.FooterBarMixin; Loading Loading @@ -425,7 +426,9 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase Utils.launchBiometricPromptForMandatoryBiometrics(this, BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */); } else if (biometricStatus != Utils.BiometricStatus.NOT_ACTIVE) { finish(); IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(this, biometricStatus); } } else { setResult(resultCode, data); Loading Loading @@ -457,9 +460,15 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase } } else if (requestCode == BIOMETRIC_AUTH_REQUEST) { if (resultCode != RESULT_OK) { if (resultCode == ConfirmDeviceCredentialActivity.BIOMETRIC_LOCKOUT_ERROR_RESULT) { IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(this, Utils.BiometricStatus.LOCKOUT); } else { finish(); } } } super.onActivityResult(requestCode, resultCode, data); } Loading src/com/android/settings/biometrics/IdentityCheckBiometricErrorDialog.java +31 −3 Original line number Diff line number Diff line Loading @@ -50,9 +50,11 @@ public class IdentityCheckBiometricErrorDialog extends InstrumentedDialogFragmen private static final String KEY_ERROR_CODE = "key_error_code"; private static final String KEY_TWO_FACTOR_AUTHENTICATION = "key_two_factor_authentication"; private static final String KEY_FINISH_ACTIVITY = "key_finish_activity"; private String mActionIdentityCheckSettings = Settings.ACTION_SETTINGS; @Nullable private BroadcastReceiver mBroadcastReceiver; private boolean mShouldFinishActivity = false; @NonNull @Override Loading @@ -70,6 +72,9 @@ public class IdentityCheckBiometricErrorDialog extends InstrumentedDialogFragmen R.string.identity_check_settings_action); mActionIdentityCheckSettings = identityCheckSettingsAction.isEmpty() ? mActionIdentityCheckSettings : identityCheckSettingsAction; mShouldFinishActivity = getArguments().getBoolean( KEY_FINISH_ACTIVITY); setTitle(customView, isLockoutError); setBody(customView, isLockoutError, twoFactorAuthentication); alertDialogBuilder.setView(customView); Loading @@ -94,31 +99,54 @@ public class IdentityCheckBiometricErrorDialog extends InstrumentedDialogFragmen } @Override public void dismiss() { super.dismiss(); public void onDestroyView() { super.onDestroyView(); if (mBroadcastReceiver != null) { getContext().unregisterReceiver(mBroadcastReceiver); mBroadcastReceiver = null; } if (mShouldFinishActivity && getActivity() != null) { getActivity().finish(); } } /** * Shows an error dialog to prompt the user to resolve biometric errors for identity check. * @param fragmentActivity calling activity * @param errorCode refers to the biometric error * @param twoFactorAuthentication if the surface requests LSKF before identity check auth */ public static void showBiometricErrorDialog(FragmentActivity fragmentActivity, Utils.BiometricStatus errorCode, boolean twoFactorAuthentication) { showBiometricErrorDialog(fragmentActivity, errorCode, twoFactorAuthentication, false /* finishActivityOnDismiss */); } /** * Shows an error dialog to prompt the user to resolve biometric errors for identity check. * Finishes the activity once the dialog is dismissed. * @param fragmentActivity calling activity * @param errorCode refers to the biometric error */ public static void showBiometricErrorDialogAndFinishActivityOnDismiss( FragmentActivity fragmentActivity, Utils.BiometricStatus errorCode) { showBiometricErrorDialog(fragmentActivity, errorCode, true /* twoFactorAuthentication */, true /* finishActivityOnDismiss */); } private static void showBiometricErrorDialog(FragmentActivity fragmentActivity, Utils.BiometricStatus errorCode, boolean twoFactorAuthentication, boolean finishActivityOnDismiss) { final IdentityCheckBiometricErrorDialog identityCheckBiometricErrorDialog = new IdentityCheckBiometricErrorDialog(); final Bundle args = new Bundle(); args.putCharSequence(KEY_ERROR_CODE, errorCode.name()); args.putBoolean(KEY_TWO_FACTOR_AUTHENTICATION, twoFactorAuthentication); args.putBoolean(KEY_FINISH_ACTIVITY, finishActivityOnDismiss); identityCheckBiometricErrorDialog.setArguments(args); identityCheckBiometricErrorDialog.show(fragmentActivity.getSupportFragmentManager(), IdentityCheckBiometricErrorDialog.class.getName()); } private void setTitle(View view, boolean lockout) { final TextView titleTextView = view.findViewById(R.id.title); if (lockout) { Loading src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java +12 −2 Original line number Diff line number Diff line Loading @@ -46,10 +46,12 @@ import com.android.settings.Utils; import com.android.settings.biometrics.BiometricEnrollBase; import com.android.settings.biometrics.BiometricStatusPreferenceController; import com.android.settings.biometrics.BiometricUtils; import com.android.settings.biometrics.IdentityCheckBiometricErrorDialog; import com.android.settings.core.SettingsBaseActivity; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.password.ChooseLockGeneric; import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ConfirmDeviceCredentialActivity; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.transition.SettingsTransitionHelper; Loading Loading @@ -323,7 +325,9 @@ public abstract class BiometricsSettingsBase extends DashboardFragment { BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */); } else if (biometricAuthStatus != Utils.BiometricStatus.NOT_ACTIVE) { finish(); IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(getActivity(), biometricAuthStatus); return; } } else { Loading @@ -339,10 +343,16 @@ public abstract class BiometricsSettingsBase extends DashboardFragment { } else if (requestCode == BIOMETRIC_AUTH_REQUEST) { mBiometricsAuthenticationRequested = false; if (resultCode != RESULT_OK) { if (resultCode == ConfirmDeviceCredentialActivity.BIOMETRIC_LOCKOUT_ERROR_RESULT) { IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(getActivity(), Utils.BiometricStatus.LOCKOUT); } else { finish(); } } } } /** * Get the preference key of face for passing through credential data to face settings. Loading src/com/android/settings/biometrics/face/FaceSettings.java +12 −2 Original line number Diff line number Diff line Loading @@ -45,9 +45,11 @@ import com.android.settings.SettingsActivity; import com.android.settings.Utils; import com.android.settings.biometrics.BiometricEnrollBase; import com.android.settings.biometrics.BiometricUtils; import com.android.settings.biometrics.IdentityCheckBiometricErrorDialog; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.overlay.FeatureFactory; import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ConfirmDeviceCredentialActivity; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.core.AbstractPreferenceController; Loading Loading @@ -325,7 +327,9 @@ public class FaceSettings extends DashboardFragment { BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */); } else if (biometricAuthStatus != Utils.BiometricStatus.NOT_ACTIVE) { finish(); IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(getActivity(), biometricAuthStatus); } } } else if (requestCode == ENROLL_REQUEST) { Loading @@ -336,10 +340,16 @@ public class FaceSettings extends DashboardFragment { } else if (requestCode == BIOMETRIC_AUTH_REQUEST) { mBiometricsAuthenticationRequested = false; if (resultCode != RESULT_OK) { if (resultCode == ConfirmDeviceCredentialActivity.BIOMETRIC_LOCKOUT_ERROR_RESULT) { IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(getActivity(), Utils.BiometricStatus.LOCKOUT); } else { finish(); } } } } @Override public void onStop() { Loading Loading
src/com/android/settings/biometrics/BiometricEnrollActivity.java +9 −2 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ import com.android.settings.overlay.FeatureFactory; import com.android.settings.password.ChooseLockGeneric; import com.android.settings.password.ChooseLockPattern; import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ConfirmDeviceCredentialActivity; import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupdesign.transition.TransitionHelper; Loading Loading @@ -452,7 +453,9 @@ public class BiometricEnrollActivity extends InstrumentedActivity { Utils.launchBiometricPromptForMandatoryBiometrics(this, BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */); } else if (biometricStatus != Utils.BiometricStatus.NOT_ACTIVE) { finish(); IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(this, biometricStatus); } } } else { Loading Loading @@ -486,7 +489,11 @@ public class BiometricEnrollActivity extends InstrumentedActivity { } break; case BIOMETRIC_AUTH_REQUEST: if (resultCode != RESULT_OK) { if (resultCode == ConfirmDeviceCredentialActivity.BIOMETRIC_LOCKOUT_ERROR_RESULT) { IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(this, Utils.BiometricStatus.LOCKOUT); } else if (resultCode != RESULT_OK) { finish(); } default: Loading
src/com/android/settings/biometrics/BiometricEnrollIntroduction.java +11 −2 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import com.android.settings.SetupWizardUtils; import com.android.settings.Utils; import com.android.settings.password.ChooseLockGeneric; import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ConfirmDeviceCredentialActivity; import com.android.settings.password.SetupSkipDialog; import com.google.android.setupcompat.template.FooterBarMixin; Loading Loading @@ -425,7 +426,9 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase Utils.launchBiometricPromptForMandatoryBiometrics(this, BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */); } else if (biometricStatus != Utils.BiometricStatus.NOT_ACTIVE) { finish(); IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(this, biometricStatus); } } else { setResult(resultCode, data); Loading Loading @@ -457,9 +460,15 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase } } else if (requestCode == BIOMETRIC_AUTH_REQUEST) { if (resultCode != RESULT_OK) { if (resultCode == ConfirmDeviceCredentialActivity.BIOMETRIC_LOCKOUT_ERROR_RESULT) { IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(this, Utils.BiometricStatus.LOCKOUT); } else { finish(); } } } super.onActivityResult(requestCode, resultCode, data); } Loading
src/com/android/settings/biometrics/IdentityCheckBiometricErrorDialog.java +31 −3 Original line number Diff line number Diff line Loading @@ -50,9 +50,11 @@ public class IdentityCheckBiometricErrorDialog extends InstrumentedDialogFragmen private static final String KEY_ERROR_CODE = "key_error_code"; private static final String KEY_TWO_FACTOR_AUTHENTICATION = "key_two_factor_authentication"; private static final String KEY_FINISH_ACTIVITY = "key_finish_activity"; private String mActionIdentityCheckSettings = Settings.ACTION_SETTINGS; @Nullable private BroadcastReceiver mBroadcastReceiver; private boolean mShouldFinishActivity = false; @NonNull @Override Loading @@ -70,6 +72,9 @@ public class IdentityCheckBiometricErrorDialog extends InstrumentedDialogFragmen R.string.identity_check_settings_action); mActionIdentityCheckSettings = identityCheckSettingsAction.isEmpty() ? mActionIdentityCheckSettings : identityCheckSettingsAction; mShouldFinishActivity = getArguments().getBoolean( KEY_FINISH_ACTIVITY); setTitle(customView, isLockoutError); setBody(customView, isLockoutError, twoFactorAuthentication); alertDialogBuilder.setView(customView); Loading @@ -94,31 +99,54 @@ public class IdentityCheckBiometricErrorDialog extends InstrumentedDialogFragmen } @Override public void dismiss() { super.dismiss(); public void onDestroyView() { super.onDestroyView(); if (mBroadcastReceiver != null) { getContext().unregisterReceiver(mBroadcastReceiver); mBroadcastReceiver = null; } if (mShouldFinishActivity && getActivity() != null) { getActivity().finish(); } } /** * Shows an error dialog to prompt the user to resolve biometric errors for identity check. * @param fragmentActivity calling activity * @param errorCode refers to the biometric error * @param twoFactorAuthentication if the surface requests LSKF before identity check auth */ public static void showBiometricErrorDialog(FragmentActivity fragmentActivity, Utils.BiometricStatus errorCode, boolean twoFactorAuthentication) { showBiometricErrorDialog(fragmentActivity, errorCode, twoFactorAuthentication, false /* finishActivityOnDismiss */); } /** * Shows an error dialog to prompt the user to resolve biometric errors for identity check. * Finishes the activity once the dialog is dismissed. * @param fragmentActivity calling activity * @param errorCode refers to the biometric error */ public static void showBiometricErrorDialogAndFinishActivityOnDismiss( FragmentActivity fragmentActivity, Utils.BiometricStatus errorCode) { showBiometricErrorDialog(fragmentActivity, errorCode, true /* twoFactorAuthentication */, true /* finishActivityOnDismiss */); } private static void showBiometricErrorDialog(FragmentActivity fragmentActivity, Utils.BiometricStatus errorCode, boolean twoFactorAuthentication, boolean finishActivityOnDismiss) { final IdentityCheckBiometricErrorDialog identityCheckBiometricErrorDialog = new IdentityCheckBiometricErrorDialog(); final Bundle args = new Bundle(); args.putCharSequence(KEY_ERROR_CODE, errorCode.name()); args.putBoolean(KEY_TWO_FACTOR_AUTHENTICATION, twoFactorAuthentication); args.putBoolean(KEY_FINISH_ACTIVITY, finishActivityOnDismiss); identityCheckBiometricErrorDialog.setArguments(args); identityCheckBiometricErrorDialog.show(fragmentActivity.getSupportFragmentManager(), IdentityCheckBiometricErrorDialog.class.getName()); } private void setTitle(View view, boolean lockout) { final TextView titleTextView = view.findViewById(R.id.title); if (lockout) { Loading
src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java +12 −2 Original line number Diff line number Diff line Loading @@ -46,10 +46,12 @@ import com.android.settings.Utils; import com.android.settings.biometrics.BiometricEnrollBase; import com.android.settings.biometrics.BiometricStatusPreferenceController; import com.android.settings.biometrics.BiometricUtils; import com.android.settings.biometrics.IdentityCheckBiometricErrorDialog; import com.android.settings.core.SettingsBaseActivity; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.password.ChooseLockGeneric; import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ConfirmDeviceCredentialActivity; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.transition.SettingsTransitionHelper; Loading Loading @@ -323,7 +325,9 @@ public abstract class BiometricsSettingsBase extends DashboardFragment { BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */); } else if (biometricAuthStatus != Utils.BiometricStatus.NOT_ACTIVE) { finish(); IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(getActivity(), biometricAuthStatus); return; } } else { Loading @@ -339,10 +343,16 @@ public abstract class BiometricsSettingsBase extends DashboardFragment { } else if (requestCode == BIOMETRIC_AUTH_REQUEST) { mBiometricsAuthenticationRequested = false; if (resultCode != RESULT_OK) { if (resultCode == ConfirmDeviceCredentialActivity.BIOMETRIC_LOCKOUT_ERROR_RESULT) { IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(getActivity(), Utils.BiometricStatus.LOCKOUT); } else { finish(); } } } } /** * Get the preference key of face for passing through credential data to face settings. Loading
src/com/android/settings/biometrics/face/FaceSettings.java +12 −2 Original line number Diff line number Diff line Loading @@ -45,9 +45,11 @@ import com.android.settings.SettingsActivity; import com.android.settings.Utils; import com.android.settings.biometrics.BiometricEnrollBase; import com.android.settings.biometrics.BiometricUtils; import com.android.settings.biometrics.IdentityCheckBiometricErrorDialog; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.overlay.FeatureFactory; import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ConfirmDeviceCredentialActivity; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.core.AbstractPreferenceController; Loading Loading @@ -325,7 +327,9 @@ public class FaceSettings extends DashboardFragment { BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */); } else if (biometricAuthStatus != Utils.BiometricStatus.NOT_ACTIVE) { finish(); IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(getActivity(), biometricAuthStatus); } } } else if (requestCode == ENROLL_REQUEST) { Loading @@ -336,10 +340,16 @@ public class FaceSettings extends DashboardFragment { } else if (requestCode == BIOMETRIC_AUTH_REQUEST) { mBiometricsAuthenticationRequested = false; if (resultCode != RESULT_OK) { if (resultCode == ConfirmDeviceCredentialActivity.BIOMETRIC_LOCKOUT_ERROR_RESULT) { IdentityCheckBiometricErrorDialog .showBiometricErrorDialogAndFinishActivityOnDismiss(getActivity(), Utils.BiometricStatus.LOCKOUT); } else { finish(); } } } } @Override public void onStop() { Loading