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

Commit d72678d3 authored by Diya Bera's avatar Diya Bera Committed by Android (Google) Code Review
Browse files

Merge "Add mandatory biometric for exported enroll intents" into main

parents 3605e235 b8ab650a
Loading
Loading
Loading
Loading
+26 −3
Original line number Diff line number Diff line
@@ -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) {
+16 −0
Original line number Diff line number Diff line
@@ -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;

@@ -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;
@@ -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);
@@ -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();
+1 −1
Original line number Diff line number Diff line
@@ -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
@@ -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;
+14 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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();
@@ -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);
    }