Loading src/com/android/settings/Utils.java +26 −3 Original line number Diff line number Diff line Loading @@ -1543,19 +1543,42 @@ public final class Utils extends com.android.settingslib.Utils { */ public static void launchBiometricPromptForMandatoryBiometrics(@NonNull Fragment fragment, int requestCode, int userId, boolean hideBackground) { fragment.startActivityForResult(getIntentForBiometricAuthentication(fragment.getResources(), userId, hideBackground), requestCode); } /** * Launch biometric prompt for mandatory biometrics. Call * {@link #requestBiometricAuthenticationForMandatoryBiometrics(Context, boolean, int)} * to check if all requirements for mandatory biometrics is satisfied * before launching biometric prompt. * * @param activity corresponding activity of the surface * @param requestCode for starting the new activity * @param userId user id for the authentication request * @param hideBackground if the background activity screen needs to be hidden */ public static void launchBiometricPromptForMandatoryBiometrics(@NonNull Activity activity, int requestCode, int userId, boolean hideBackground) { activity.startActivityForResult(getIntentForBiometricAuthentication( activity.getResources(), userId, hideBackground), requestCode); } private static Intent getIntentForBiometricAuthentication(Resources resources, int userId, boolean hideBackground) { final Intent intent = new Intent(); intent.putExtra(BIOMETRIC_PROMPT_AUTHENTICATORS, BiometricManager.Authenticators.MANDATORY_BIOMETRICS); intent.putExtra(BIOMETRIC_PROMPT_NEGATIVE_BUTTON_TEXT, fragment.getString(R.string.cancel)); resources.getString(R.string.cancel)); intent.putExtra(KeyguardManager.EXTRA_DESCRIPTION, fragment.getString(R.string.mandatory_biometrics_prompt_description)); resources.getString(R.string.mandatory_biometrics_prompt_description)); intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_ALLOW_ANY_USER, true); intent.putExtra(EXTRA_USER_ID, userId); intent.putExtra(BIOMETRIC_PROMPT_HIDE_BACKGROUND, hideBackground); intent.setClassName(SETTINGS_PACKAGE_NAME, ConfirmDeviceCredentialActivity.InternalActivity.class.getName()); fragment.startActivityForResult(intent, requestCode); return intent; } private static void disableComponent(PackageManager pm, ComponentName componentName) { Loading src/com/android/settings/biometrics/BiometricEnrollActivity.java +16 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.settings.biometrics; import static android.provider.Settings.ACTION_BIOMETRIC_ENROLL; import static android.provider.Settings.EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED; import static com.android.settings.biometrics.BiometricEnrollBase.BIOMETRIC_AUTH_REQUEST; import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_CONSENT_DENIED; import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_CONSENT_GRANTED; Loading Loading @@ -51,6 +52,7 @@ import com.android.internal.util.FrameworkStatsLog; import com.android.internal.widget.LockPatternUtils; import com.android.settings.R; import com.android.settings.SetupWizardUtils; import com.android.settings.Utils; import com.android.settings.core.InstrumentedActivity; import com.android.settings.overlay.FeatureFactory; import com.android.settings.password.ChooseLockGeneric; Loading Loading @@ -442,6 +444,16 @@ public class BiometricEnrollActivity extends InstrumentedActivity { if (!mParentalConsentHelper.launchNext(this, REQUEST_CHOOSE_OPTIONS)) { Log.e(TAG, "Nothing to prompt for consent (no modalities enabled)!"); finish(); } else { final Utils.BiometricStatus biometricStatus = Utils.requestBiometricAuthenticationForMandatoryBiometrics(this, false /* biometricsAuthenticationRequested */, mUserId); if (biometricStatus == Utils.BiometricStatus.OK) { Utils.launchBiometricPromptForMandatoryBiometrics(this, BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */); } else if (biometricStatus != Utils.BiometricStatus.NOT_ACTIVE) { finish(); } } } else { Log.d(TAG, "Unknown result for set/choose lock: " + resultCode); Loading Loading @@ -473,6 +485,10 @@ public class BiometricEnrollActivity extends InstrumentedActivity { finish(); } break; case BIOMETRIC_AUTH_REQUEST: if (resultCode != RESULT_OK) { finish(); } default: Log.w(TAG, "Unknown consenting requestCode: " + requestCode + ", finishing"); finish(); Loading src/com/android/settings/biometrics/BiometricEnrollBase.java +1 −1 Original line number Diff line number Diff line Loading @@ -117,7 +117,6 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity { public static final int LEARN_MORE_REQUEST = 3; public static final int CONFIRM_REQUEST = 4; public static final int ENROLL_REQUEST = 5; public static final int BIOMETRIC_AUTH_REQUEST = 6; /** * Request code when starting another biometric enrollment from within a biometric flow. For Loading @@ -125,6 +124,7 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity { */ public static final int ENROLL_NEXT_BIOMETRIC_REQUEST = 6; public static final int REQUEST_POSTURE_GUIDANCE = 7; public static final int BIOMETRIC_AUTH_REQUEST = 8; protected boolean mLaunchedConfirmLock; protected boolean mLaunchedPostureGuidance; Loading src/com/android/settings/biometrics/BiometricEnrollIntroduction.java +14 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import androidx.annotation.VisibleForTesting; import com.android.internal.widget.LockPatternUtils; import com.android.settings.R; 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.SetupSkipDialog; Loading Loading @@ -417,6 +418,15 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase getNextButton().setEnabled(true); })); } final Utils.BiometricStatus biometricStatus = Utils.requestBiometricAuthenticationForMandatoryBiometrics(this, false /* biometricsAuthenticationRequested */, mUserId); if (biometricStatus == Utils.BiometricStatus.OK) { Utils.launchBiometricPromptForMandatoryBiometrics(this, BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */); } else if (biometricStatus != Utils.BiometricStatus.NOT_ACTIVE) { finish(); } } else { setResult(resultCode, data); finish(); Loading Loading @@ -445,6 +455,10 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase setResult(resultCode, data); finish(); } } else if (requestCode == BIOMETRIC_AUTH_REQUEST) { if (resultCode != RESULT_OK) { finish(); } } super.onActivityResult(requestCode, resultCode, data); } Loading Loading
src/com/android/settings/Utils.java +26 −3 Original line number Diff line number Diff line Loading @@ -1543,19 +1543,42 @@ public final class Utils extends com.android.settingslib.Utils { */ public static void launchBiometricPromptForMandatoryBiometrics(@NonNull Fragment fragment, int requestCode, int userId, boolean hideBackground) { fragment.startActivityForResult(getIntentForBiometricAuthentication(fragment.getResources(), userId, hideBackground), requestCode); } /** * Launch biometric prompt for mandatory biometrics. Call * {@link #requestBiometricAuthenticationForMandatoryBiometrics(Context, boolean, int)} * to check if all requirements for mandatory biometrics is satisfied * before launching biometric prompt. * * @param activity corresponding activity of the surface * @param requestCode for starting the new activity * @param userId user id for the authentication request * @param hideBackground if the background activity screen needs to be hidden */ public static void launchBiometricPromptForMandatoryBiometrics(@NonNull Activity activity, int requestCode, int userId, boolean hideBackground) { activity.startActivityForResult(getIntentForBiometricAuthentication( activity.getResources(), userId, hideBackground), requestCode); } private static Intent getIntentForBiometricAuthentication(Resources resources, int userId, boolean hideBackground) { final Intent intent = new Intent(); intent.putExtra(BIOMETRIC_PROMPT_AUTHENTICATORS, BiometricManager.Authenticators.MANDATORY_BIOMETRICS); intent.putExtra(BIOMETRIC_PROMPT_NEGATIVE_BUTTON_TEXT, fragment.getString(R.string.cancel)); resources.getString(R.string.cancel)); intent.putExtra(KeyguardManager.EXTRA_DESCRIPTION, fragment.getString(R.string.mandatory_biometrics_prompt_description)); resources.getString(R.string.mandatory_biometrics_prompt_description)); intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_ALLOW_ANY_USER, true); intent.putExtra(EXTRA_USER_ID, userId); intent.putExtra(BIOMETRIC_PROMPT_HIDE_BACKGROUND, hideBackground); intent.setClassName(SETTINGS_PACKAGE_NAME, ConfirmDeviceCredentialActivity.InternalActivity.class.getName()); fragment.startActivityForResult(intent, requestCode); return intent; } private static void disableComponent(PackageManager pm, ComponentName componentName) { Loading
src/com/android/settings/biometrics/BiometricEnrollActivity.java +16 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.settings.biometrics; import static android.provider.Settings.ACTION_BIOMETRIC_ENROLL; import static android.provider.Settings.EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED; import static com.android.settings.biometrics.BiometricEnrollBase.BIOMETRIC_AUTH_REQUEST; import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_CONSENT_DENIED; import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_CONSENT_GRANTED; Loading Loading @@ -51,6 +52,7 @@ import com.android.internal.util.FrameworkStatsLog; import com.android.internal.widget.LockPatternUtils; import com.android.settings.R; import com.android.settings.SetupWizardUtils; import com.android.settings.Utils; import com.android.settings.core.InstrumentedActivity; import com.android.settings.overlay.FeatureFactory; import com.android.settings.password.ChooseLockGeneric; Loading Loading @@ -442,6 +444,16 @@ public class BiometricEnrollActivity extends InstrumentedActivity { if (!mParentalConsentHelper.launchNext(this, REQUEST_CHOOSE_OPTIONS)) { Log.e(TAG, "Nothing to prompt for consent (no modalities enabled)!"); finish(); } else { final Utils.BiometricStatus biometricStatus = Utils.requestBiometricAuthenticationForMandatoryBiometrics(this, false /* biometricsAuthenticationRequested */, mUserId); if (biometricStatus == Utils.BiometricStatus.OK) { Utils.launchBiometricPromptForMandatoryBiometrics(this, BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */); } else if (biometricStatus != Utils.BiometricStatus.NOT_ACTIVE) { finish(); } } } else { Log.d(TAG, "Unknown result for set/choose lock: " + resultCode); Loading Loading @@ -473,6 +485,10 @@ public class BiometricEnrollActivity extends InstrumentedActivity { finish(); } break; case BIOMETRIC_AUTH_REQUEST: if (resultCode != RESULT_OK) { finish(); } default: Log.w(TAG, "Unknown consenting requestCode: " + requestCode + ", finishing"); finish(); Loading
src/com/android/settings/biometrics/BiometricEnrollBase.java +1 −1 Original line number Diff line number Diff line Loading @@ -117,7 +117,6 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity { public static final int LEARN_MORE_REQUEST = 3; public static final int CONFIRM_REQUEST = 4; public static final int ENROLL_REQUEST = 5; public static final int BIOMETRIC_AUTH_REQUEST = 6; /** * Request code when starting another biometric enrollment from within a biometric flow. For Loading @@ -125,6 +124,7 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity { */ public static final int ENROLL_NEXT_BIOMETRIC_REQUEST = 6; public static final int REQUEST_POSTURE_GUIDANCE = 7; public static final int BIOMETRIC_AUTH_REQUEST = 8; protected boolean mLaunchedConfirmLock; protected boolean mLaunchedPostureGuidance; Loading
src/com/android/settings/biometrics/BiometricEnrollIntroduction.java +14 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import androidx.annotation.VisibleForTesting; import com.android.internal.widget.LockPatternUtils; import com.android.settings.R; 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.SetupSkipDialog; Loading Loading @@ -417,6 +418,15 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase getNextButton().setEnabled(true); })); } final Utils.BiometricStatus biometricStatus = Utils.requestBiometricAuthenticationForMandatoryBiometrics(this, false /* biometricsAuthenticationRequested */, mUserId); if (biometricStatus == Utils.BiometricStatus.OK) { Utils.launchBiometricPromptForMandatoryBiometrics(this, BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */); } else if (biometricStatus != Utils.BiometricStatus.NOT_ACTIVE) { finish(); } } else { setResult(resultCode, data); finish(); Loading Loading @@ -445,6 +455,10 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase setResult(resultCode, data); finish(); } } else if (requestCode == BIOMETRIC_AUTH_REQUEST) { if (resultCode != RESULT_OK) { finish(); } } super.onActivityResult(requestCode, resultCode, data); } Loading