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

Commit b8ab650a authored by Diya Bera's avatar Diya Bera
Browse files

Add mandatory biometric for exported enroll intents

Flag: android.hardware.biometrics.flags.mandatory_biometrics
Fixes: 358173662
Test: N/A
Change-Id: Ic67d42ba84220f4c18cf445ae75d4f7f8dfd1f39
parent e7c670ea
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);
    }