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

Commit b3d4b76c authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add mandatory biometric prompt to platform surfaces (5/N)" into main

parents 1dfc1874 92ea474b
Loading
Loading
Loading
Loading
+7 −4
Original line number Original line Diff line number Diff line
@@ -183,13 +183,16 @@ public class MainClear extends InstrumentedFragment implements OnGlobalLayoutLis


        if (requestCode == KEYGUARD_REQUEST) {
        if (requestCode == KEYGUARD_REQUEST) {
            final int userId = getActivity().getUserId();
            final int userId = getActivity().getUserId();
            if (Utils.requestBiometricAuthenticationForMandatoryBiometrics(getActivity(),
            final Utils.BiometricStatus biometricAuthStatus =
                    false /* biometricsSuccessfullyAuthenticated */,
                    Utils.requestBiometricAuthenticationForMandatoryBiometrics(getActivity(),
                            false /* biometricsAuthenticationRequested */,
                            false /* biometricsAuthenticationRequested */,
                    userId)) {
                            userId);
            if (biometricAuthStatus == Utils.BiometricStatus.OK) {
                Utils.launchBiometricPromptForMandatoryBiometrics(this, BIOMETRICS_REQUEST,
                Utils.launchBiometricPromptForMandatoryBiometrics(this, BIOMETRICS_REQUEST,
                        userId, false /* hideBackground */);
                        userId, false /* hideBackground */);
                return;
                return;
            } else if (biometricAuthStatus != Utils.BiometricStatus.NOT_ACTIVE) {
                return;
            }
            }
        }
        }


+32 −16
Original line number Original line Diff line number Diff line
@@ -199,6 +199,15 @@ public final class Utils extends com.android.settingslib.Utils {
        return ActivityManager.isUserAMonkey();
        return ActivityManager.isUserAMonkey();
    }
    }


    /**
     * Enum for returning biometric status.
     * {@link OK} no error detected when requesting mandatory biometrics authentication
     * {@link NOT_ACTIVE} mandatory biometrics is not active
     * {@link LOCKOUT} biometric sensors are in lockout mode
     * {@link ERROR} corresponds to other errors
     */
    public enum BiometricStatus {OK, NOT_ACTIVE, LOCKOUT, ERROR}

    /**
    /**
     * Returns whether the device is voice-capable (meaning, it is also a phone).
     * Returns whether the device is voice-capable (meaning, it is also a phone).
     */
     */
@@ -1490,33 +1499,40 @@ public final class Utils extends com.android.settingslib.Utils {
     * Request biometric authentication if all requirements for mandatory biometrics is satisfied.
     * Request biometric authentication if all requirements for mandatory biometrics is satisfied.
     *
     *
     * @param context                           of the corresponding activity/fragment
     * @param context                           of the corresponding activity/fragment
     * @param biometricsSuccessfullyAuthenticated if the user has already authenticated using
     *                                            biometrics
     * @param biometricsAuthenticationRequested if the activity/fragment has already requested for
     * @param biometricsAuthenticationRequested if the activity/fragment has already requested for
     *                                          biometric prompt
     *                                          biometric prompt
     * @param userId                            user id for the authentication request
     * @param userId                            user id for the authentication request
     * @return true if all requirements for mandatory biometrics is satisfied
     * @return biometric status when mandatory biometrics authentication is requested
     */
     */
    public static boolean requestBiometricAuthenticationForMandatoryBiometrics(
    public static BiometricStatus requestBiometricAuthenticationForMandatoryBiometrics(
            @NonNull Context context,
            @NonNull Context context,
            boolean biometricsSuccessfullyAuthenticated,
            boolean biometricsAuthenticationRequested, int userId) {
            boolean biometricsAuthenticationRequested, int userId) {
        final BiometricManager biometricManager = context.getSystemService(BiometricManager.class);
        final BiometricManager biometricManager = context.getSystemService(BiometricManager.class);
        if (biometricManager == null) {
        if (biometricManager == null) {
            Log.e(TAG, "Biometric Manager is null.");
            Log.e(TAG, "Biometric Manager is null.");
            return false;
            return BiometricStatus.NOT_ACTIVE;
        }
        }
        final int status = biometricManager.canAuthenticate(userId,
        final int status = biometricManager.canAuthenticate(userId,
                BiometricManager.Authenticators.MANDATORY_BIOMETRICS);
                BiometricManager.Authenticators.MANDATORY_BIOMETRICS);
        return android.hardware.biometrics.Flags.mandatoryBiometrics()
        if (android.hardware.biometrics.Flags.mandatoryBiometrics()
                && status == BiometricManager.BIOMETRIC_SUCCESS
                && !biometricsAuthenticationRequested) {
                && !biometricsSuccessfullyAuthenticated
            switch(status) {
                && !biometricsAuthenticationRequested;
                case BiometricManager.BIOMETRIC_SUCCESS:
                    return BiometricStatus.OK;
                case BiometricManager.BIOMETRIC_ERROR_LOCKOUT:
                    return BiometricStatus.LOCKOUT;
                case BiometricManager.BIOMETRIC_ERROR_MANDATORY_NOT_ACTIVE:
                    return BiometricStatus.NOT_ACTIVE;
                default:
                    return BiometricStatus.ERROR;
            }
        }
        return BiometricStatus.NOT_ACTIVE;
    }
    }


    /**
    /**
     * Launch biometric prompt for mandatory biometrics. Call
     * Launch biometric prompt for mandatory biometrics. Call
     * {@link #requestBiometricAuthenticationForMandatoryBiometrics(Context, boolean, boolean, int)}
     * {@link #requestBiometricAuthenticationForMandatoryBiometrics(Context, boolean, int)}
     * to check if all requirements for mandatory biometrics is satisfied
     * to check if all requirements for mandatory biometrics is satisfied
     * before launching biometric prompt.
     * before launching biometric prompt.
     *
     *
+15 −33
Original line number Original line Diff line number Diff line
@@ -75,14 +75,11 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
    @VisibleForTesting
    @VisibleForTesting
    static final String RETRY_PREFERENCE_BUNDLE = "retry_preference_bundle";
    static final String RETRY_PREFERENCE_BUNDLE = "retry_preference_bundle";
    private static final String BIOMETRICS_AUTH_REQUESTED = "biometrics_auth_requested";
    private static final String BIOMETRICS_AUTH_REQUESTED = "biometrics_auth_requested";
    private static final String BIOMETRICS_AUTHENTICATED_SUCCESSFULLY =
            "biometrics_authenticated_successfully";


    protected int mUserId;
    protected int mUserId;
    protected long mGkPwHandle;
    protected long mGkPwHandle;
    private boolean mConfirmCredential;
    private boolean mConfirmCredential;
    private boolean mBiometricsAuthenticationRequested;
    private boolean mBiometricsAuthenticationRequested;
    private boolean mBiometricsSuccessfullyAuthenticated;
    @Nullable private FaceManager mFaceManager;
    @Nullable private FaceManager mFaceManager;
    @Nullable private FingerprintManager mFingerprintManager;
    @Nullable private FingerprintManager mFingerprintManager;
    // Do not finish() if choosing/confirming credential, showing fp/face settings, or launching
    // Do not finish() if choosing/confirming credential, showing fp/face settings, or launching
@@ -120,9 +117,6 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
            mGkPwHandle = BiometricUtils.getGatekeeperPasswordHandle(getIntent());
            mGkPwHandle = BiometricUtils.getGatekeeperPasswordHandle(getIntent());
        }
        }


        mBiometricsSuccessfullyAuthenticated = getIntent().getBooleanExtra(
                BIOMETRICS_AUTHENTICATED_SUCCESSFULLY, false);

        if (savedInstanceState != null) {
        if (savedInstanceState != null) {
            mConfirmCredential = savedInstanceState.getBoolean(SAVE_STATE_CONFIRM_CREDETIAL);
            mConfirmCredential = savedInstanceState.getBoolean(SAVE_STATE_CONFIRM_CREDETIAL);
            mDoNotFinishActivity = savedInstanceState.getBoolean(DO_NOT_FINISH_ACTIVITY);
            mDoNotFinishActivity = savedInstanceState.getBoolean(DO_NOT_FINISH_ACTIVITY);
@@ -135,21 +129,12 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
            }
            }
            mBiometricsAuthenticationRequested = savedInstanceState.getBoolean(
            mBiometricsAuthenticationRequested = savedInstanceState.getBoolean(
                    BIOMETRICS_AUTH_REQUESTED);
                    BIOMETRICS_AUTH_REQUESTED);
            mBiometricsSuccessfullyAuthenticated = savedInstanceState.getBoolean(
                    BIOMETRICS_AUTHENTICATED_SUCCESSFULLY);
        }
        }


        if (mGkPwHandle == 0L && !mConfirmCredential) {
        if (mGkPwHandle == 0L && !mConfirmCredential) {
            mConfirmCredential = true;
            mConfirmCredential = true;
            launchChooseOrConfirmLock();
            launchChooseOrConfirmLock();
        } else if (Utils.requestBiometricAuthenticationForMandatoryBiometrics(
                getActivity(), mBiometricsSuccessfullyAuthenticated,
                mBiometricsAuthenticationRequested, mUserId)) {
            mBiometricsAuthenticationRequested = true;
            Utils.launchBiometricPromptForMandatoryBiometrics(this, BIOMETRIC_AUTH_REQUEST,
                    mUserId, true /* hideBackground */);
        }
        }

        updateUnlockPhonePreferenceSummary();
        updateUnlockPhonePreferenceSummary();


        final Preference useInAppsPreference = findPreference(getUseInAppsPreferenceKey());
        final Preference useInAppsPreference = findPreference(getUseInAppsPreferenceKey());
@@ -161,13 +146,6 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
    @Override
    @Override
    public void onResume() {
    public void onResume() {
        super.onResume();
        super.onResume();
        if (Utils.requestBiometricAuthenticationForMandatoryBiometrics(getActivity(),
                mBiometricsSuccessfullyAuthenticated, mBiometricsAuthenticationRequested, mUserId)
                && mGkPwHandle != 0L) {
            mBiometricsAuthenticationRequested = true;
            Utils.launchBiometricPromptForMandatoryBiometrics(this, BIOMETRIC_AUTH_REQUEST,
                    mUserId, true /* hideBackground */);
        }
        if (!mConfirmCredential) {
        if (!mConfirmCredential) {
            mDoNotFinishActivity = false;
            mDoNotFinishActivity = false;
        }
        }
@@ -204,9 +182,6 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
                    extras.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
                    extras.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
                    extras.putInt(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, sensorId);
                    extras.putInt(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, sensorId);
                    extras.putLong(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, challenge);
                    extras.putLong(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, challenge);
                    extras.putBoolean(
                            BiometricEnrollBase.EXTRA_BIOMETRICS_AUTHENTICATED_SUCCESSFULLY,
                            mBiometricsSuccessfullyAuthenticated);
                    onFaceOrFingerprintPreferenceTreeClick(preference);
                    onFaceOrFingerprintPreferenceTreeClick(preference);
                } catch (IllegalStateException e) {
                } catch (IllegalStateException e) {
                    if (retry) {
                    if (retry) {
@@ -236,9 +211,6 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
                    final Bundle extras = preference.getExtras();
                    final Bundle extras = preference.getExtras();
                    extras.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
                    extras.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
                    extras.putLong(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, challenge);
                    extras.putLong(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, challenge);
                    extras.putBoolean(
                            BiometricEnrollBase.EXTRA_BIOMETRICS_AUTHENTICATED_SUCCESSFULLY,
                            mBiometricsSuccessfullyAuthenticated);
                    onFaceOrFingerprintPreferenceTreeClick(preference);
                    onFaceOrFingerprintPreferenceTreeClick(preference);
                } catch (IllegalStateException e) {
                } catch (IllegalStateException e) {
                    if (retry) {
                    if (retry) {
@@ -323,8 +295,6 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
        }
        }
        outState.putBoolean(BIOMETRICS_AUTH_REQUESTED,
        outState.putBoolean(BIOMETRICS_AUTH_REQUESTED,
                mBiometricsAuthenticationRequested);
                mBiometricsAuthenticationRequested);
        outState.putBoolean(BIOMETRICS_AUTHENTICATED_SUCCESSFULLY,
                mBiometricsSuccessfullyAuthenticated);
    }
    }


    @Override
    @Override
@@ -342,6 +312,20 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
                                com.google.android.setupdesign.R.anim.sud_slide_next_out);
                                com.google.android.setupdesign.R.anim.sud_slide_next_out);
                        retryPreferenceKey(mRetryPreferenceKey, mRetryPreferenceExtra);
                        retryPreferenceKey(mRetryPreferenceKey, mRetryPreferenceExtra);
                    }
                    }
                    final Utils.BiometricStatus biometricAuthStatus =
                            Utils.requestBiometricAuthenticationForMandatoryBiometrics(
                                    getActivity(),
                                    mBiometricsAuthenticationRequested,
                                    mUserId);
                    if (biometricAuthStatus == Utils.BiometricStatus.OK) {
                        mBiometricsAuthenticationRequested = true;
                        Utils.launchBiometricPromptForMandatoryBiometrics(this,
                                BIOMETRIC_AUTH_REQUEST,
                                mUserId, true /* hideBackground */);
                    } else if (biometricAuthStatus != Utils.BiometricStatus.NOT_ACTIVE) {
                        finish();
                        return;
                    }
                } else {
                } else {
                    Log.d(getLogTag(), "Data null or GK PW missing.");
                    Log.d(getLogTag(), "Data null or GK PW missing.");
                    finish();
                    finish();
@@ -354,9 +338,7 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
            mRetryPreferenceExtra = null;
            mRetryPreferenceExtra = null;
        } else if (requestCode == BIOMETRIC_AUTH_REQUEST) {
        } else if (requestCode == BIOMETRIC_AUTH_REQUEST) {
            mBiometricsAuthenticationRequested = false;
            mBiometricsAuthenticationRequested = false;
            if (resultCode == RESULT_OK) {
            if (resultCode != RESULT_OK) {
                mBiometricsSuccessfullyAuthenticated = true;
            } else {
                finish();
                finish();
            }
            }
        }
        }
+12 −17
Original line number Original line Diff line number Diff line
@@ -23,7 +23,6 @@ import static com.android.settings.Utils.isPrivateProfile;
import static com.android.settings.biometrics.BiometricEnrollBase.BIOMETRIC_AUTH_REQUEST;
import static com.android.settings.biometrics.BiometricEnrollBase.BIOMETRIC_AUTH_REQUEST;
import static com.android.settings.biometrics.BiometricEnrollBase.CONFIRM_REQUEST;
import static com.android.settings.biometrics.BiometricEnrollBase.CONFIRM_REQUEST;
import static com.android.settings.biometrics.BiometricEnrollBase.ENROLL_REQUEST;
import static com.android.settings.biometrics.BiometricEnrollBase.ENROLL_REQUEST;
import static com.android.settings.biometrics.BiometricEnrollBase.EXTRA_BIOMETRICS_AUTHENTICATED_SUCCESSFULLY;
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED;
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED;
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_TIMEOUT;
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_TIMEOUT;


@@ -98,7 +97,6 @@ public class FaceSettings extends DashboardFragment {


    private boolean mConfirmingPassword;
    private boolean mConfirmingPassword;
    private boolean mBiometricsAuthenticationRequested;
    private boolean mBiometricsAuthenticationRequested;
    private boolean mBiometricsSuccessfullyAuthenticated;


    private final FaceSettingsRemoveButtonPreferenceController.Listener mRemovalListener = () -> {
    private final FaceSettingsRemoveButtonPreferenceController.Listener mRemovalListener = () -> {


@@ -150,8 +148,6 @@ public class FaceSettings extends DashboardFragment {
    public void onSaveInstanceState(Bundle outState) {
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        super.onSaveInstanceState(outState);
        outState.putByteArray(KEY_TOKEN, mToken);
        outState.putByteArray(KEY_TOKEN, mToken);
        outState.putBoolean(KEY_BIOMETRICS_SUCCESSFULLY_AUTHENTICATED,
                mBiometricsSuccessfullyAuthenticated);
    }
    }


    @Override
    @Override
@@ -171,8 +167,6 @@ public class FaceSettings extends DashboardFragment {
        mToken = getIntent().getByteArrayExtra(KEY_TOKEN);
        mToken = getIntent().getByteArrayExtra(KEY_TOKEN);
        mSensorId = getIntent().getIntExtra(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, -1);
        mSensorId = getIntent().getIntExtra(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, -1);
        mChallenge = getIntent().getLongExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, 0L);
        mChallenge = getIntent().getLongExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, 0L);
        mBiometricsSuccessfullyAuthenticated = getIntent().getBooleanExtra(
                EXTRA_BIOMETRICS_AUTHENTICATED_SUCCESSFULLY, false);


        mUserId = getActivity().getIntent().getIntExtra(
        mUserId = getActivity().getIntent().getIntExtra(
                Intent.EXTRA_USER_ID, UserHandle.myUserId());
                Intent.EXTRA_USER_ID, UserHandle.myUserId());
@@ -241,8 +235,6 @@ public class FaceSettings extends DashboardFragment {


        if (savedInstanceState != null) {
        if (savedInstanceState != null) {
            mToken = savedInstanceState.getByteArray(KEY_TOKEN);
            mToken = savedInstanceState.getByteArray(KEY_TOKEN);
            mBiometricsSuccessfullyAuthenticated = savedInstanceState.getBoolean(
                    KEY_BIOMETRICS_SUCCESSFULLY_AUTHENTICATED);
        }
        }
    }
    }


@@ -288,12 +280,6 @@ public class FaceSettings extends DashboardFragment {
                Log.e(TAG, "Password not set");
                Log.e(TAG, "Password not set");
                finish();
                finish();
            }
            }
        } else if (Utils.requestBiometricAuthenticationForMandatoryBiometrics(getActivity(),
                mBiometricsSuccessfullyAuthenticated, mBiometricsAuthenticationRequested,
                mUserId)) {
            mBiometricsAuthenticationRequested = true;
            Utils.launchBiometricPromptForMandatoryBiometrics(this, BIOMETRIC_AUTH_REQUEST,
                    mUserId, true /* hideBackground */);
        } else {
        } else {
            mAttentionController.setToken(mToken);
            mAttentionController.setToken(mToken);
            mEnrollController.setToken(mToken);
            mEnrollController.setToken(mToken);
@@ -330,6 +316,17 @@ public class FaceSettings extends DashboardFragment {
                final boolean hasEnrolled = mFaceManager.hasEnrolledTemplates(mUserId);
                final boolean hasEnrolled = mFaceManager.hasEnrolledTemplates(mUserId);
                mEnrollButton.setVisible(!hasEnrolled);
                mEnrollButton.setVisible(!hasEnrolled);
                mRemoveButton.setVisible(hasEnrolled);
                mRemoveButton.setVisible(hasEnrolled);
                final Utils.BiometricStatus biometricAuthStatus =
                        Utils.requestBiometricAuthenticationForMandatoryBiometrics(getActivity(),
                                mBiometricsAuthenticationRequested,
                                mUserId);
                if (biometricAuthStatus == Utils.BiometricStatus.OK) {
                    Utils.launchBiometricPromptForMandatoryBiometrics(this,
                            BIOMETRIC_AUTH_REQUEST,
                            mUserId, true /* hideBackground */);
                } else if (biometricAuthStatus != Utils.BiometricStatus.NOT_ACTIVE) {
                    finish();
                }
            }
            }
        } else if (requestCode == ENROLL_REQUEST) {
        } else if (requestCode == ENROLL_REQUEST) {
            if (resultCode == RESULT_TIMEOUT) {
            if (resultCode == RESULT_TIMEOUT) {
@@ -338,9 +335,7 @@ public class FaceSettings extends DashboardFragment {
            }
            }
        } else if (requestCode == BIOMETRIC_AUTH_REQUEST) {
        } else if (requestCode == BIOMETRIC_AUTH_REQUEST) {
            mBiometricsAuthenticationRequested = false;
            mBiometricsAuthenticationRequested = false;
            if (resultCode == RESULT_OK) {
            if (resultCode != RESULT_OK) {
                mBiometricsSuccessfullyAuthenticated = true;
            } else {
                finish();
                finish();
            }
            }
        }
        }
+13 −26
Original line number Original line Diff line number Diff line
@@ -239,8 +239,6 @@ public class FingerprintSettings extends SubSettings {
                "security_settings_fingerprint_footer";
                "security_settings_fingerprint_footer";
        private static final String KEY_BIOMETRICS_AUTHENTICATION_REQUESTED =
        private static final String KEY_BIOMETRICS_AUTHENTICATION_REQUESTED =
                "biometrics_authentication_requested";
                "biometrics_authentication_requested";
        private static final String KEY_BIOMETRICS_SUCCESSFULLY_AUTHENTICATED =
                "biometrics_successfully_authenticated";


        private static final int MSG_REFRESH_FINGERPRINT_TEMPLATES = 1000;
        private static final int MSG_REFRESH_FINGERPRINT_TEMPLATES = 1000;
        private static final int MSG_FINGER_AUTH_SUCCESS = 1001;
        private static final int MSG_FINGER_AUTH_SUCCESS = 1001;
@@ -276,7 +274,6 @@ public class FingerprintSettings extends SubSettings {
        private byte[] mToken;
        private byte[] mToken;
        private boolean mLaunchedConfirm;
        private boolean mLaunchedConfirm;
        private boolean mBiometricsAuthenticationRequested;
        private boolean mBiometricsAuthenticationRequested;
        private boolean mBiometricsSuccessfullyAuthenticated;
        private boolean mHasFirstEnrolled = true;
        private boolean mHasFirstEnrolled = true;
        private Drawable mHighlightDrawable;
        private Drawable mHighlightDrawable;
        private int mUserId;
        private int mUserId;
@@ -451,8 +448,6 @@ public class FingerprintSettings extends SubSettings {
                    ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
                    ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
            mChallenge = activity.getIntent()
            mChallenge = activity.getIntent()
                    .getLongExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, -1L);
                    .getLongExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, -1L);
            mBiometricsSuccessfullyAuthenticated = getIntent().getBooleanExtra(
                    BiometricEnrollBase.EXTRA_BIOMETRICS_AUTHENTICATED_SUCCESSFULLY, false);


            mAuthenticateSidecar = (FingerprintAuthenticateSidecar)
            mAuthenticateSidecar = (FingerprintAuthenticateSidecar)
                    getFragmentManager().findFragmentByTag(TAG_AUTHENTICATE_SIDECAR);
                    getFragmentManager().findFragmentByTag(TAG_AUTHENTICATE_SIDECAR);
@@ -494,8 +489,6 @@ public class FingerprintSettings extends SubSettings {
                mIsEnrolling = savedInstanceState.getBoolean(KEY_IS_ENROLLING, mIsEnrolling);
                mIsEnrolling = savedInstanceState.getBoolean(KEY_IS_ENROLLING, mIsEnrolling);
                mHasFirstEnrolled = savedInstanceState.getBoolean(KEY_HAS_FIRST_ENROLLED,
                mHasFirstEnrolled = savedInstanceState.getBoolean(KEY_HAS_FIRST_ENROLLED,
                        mHasFirstEnrolled);
                        mHasFirstEnrolled);
                mBiometricsSuccessfullyAuthenticated = savedInstanceState.getBoolean(
                        KEY_BIOMETRICS_SUCCESSFULLY_AUTHENTICATED);
                mBiometricsAuthenticationRequested = savedInstanceState.getBoolean(
                mBiometricsAuthenticationRequested = savedInstanceState.getBoolean(
                        KEY_BIOMETRICS_AUTHENTICATION_REQUESTED);
                        KEY_BIOMETRICS_AUTHENTICATION_REQUESTED);
            }
            }
@@ -506,12 +499,6 @@ public class FingerprintSettings extends SubSettings {
                if (mToken == null) {
                if (mToken == null) {
                    mLaunchedConfirm = true;
                    mLaunchedConfirm = true;
                    launchChooseOrConfirmLock();
                    launchChooseOrConfirmLock();
                } else if (Utils.requestBiometricAuthenticationForMandatoryBiometrics(getActivity(),
                        mBiometricsSuccessfullyAuthenticated, mBiometricsAuthenticationRequested,
                        mUserId)) {
                    mBiometricsAuthenticationRequested = true;
                    Utils.launchBiometricPromptForMandatoryBiometrics(this, BIOMETRIC_AUTH_REQUEST,
                            mUserId, true /* hideBackground */);
                } else if (!mHasFirstEnrolled) {
                } else if (!mHasFirstEnrolled) {
                    mIsEnrolling = true;
                    mIsEnrolling = true;
                    addFirstFingerprint(null);
                    addFirstFingerprint(null);
@@ -801,14 +788,6 @@ public class FingerprintSettings extends SubSettings {


            mCalibrator = FeatureFactory.getFeatureFactory().getFingerprintFeatureProvider()
            mCalibrator = FeatureFactory.getFeatureFactory().getFingerprintFeatureProvider()
                    .getUdfpsEnrollCalibrator(getActivity().getApplicationContext(), null, null);
                    .getUdfpsEnrollCalibrator(getActivity().getApplicationContext(), null, null);

            if (Utils.requestBiometricAuthenticationForMandatoryBiometrics(getActivity(),
                    mBiometricsSuccessfullyAuthenticated, mBiometricsAuthenticationRequested,
                    mUserId)) {
                mBiometricsAuthenticationRequested = true;
                Utils.launchBiometricPromptForMandatoryBiometrics(this,
                        BIOMETRIC_AUTH_REQUEST, mUserId, true /* hideBackground */);
            }
        }
        }


        private void updatePreferences() {
        private void updatePreferences() {
@@ -858,8 +837,6 @@ public class FingerprintSettings extends SubSettings {
            outState.putBoolean(KEY_HAS_FIRST_ENROLLED, mHasFirstEnrolled);
            outState.putBoolean(KEY_HAS_FIRST_ENROLLED, mHasFirstEnrolled);
            outState.putBoolean(KEY_BIOMETRICS_AUTHENTICATION_REQUESTED,
            outState.putBoolean(KEY_BIOMETRICS_AUTHENTICATION_REQUESTED,
                    mBiometricsAuthenticationRequested);
                    mBiometricsAuthenticationRequested);
            outState.putBoolean(KEY_BIOMETRICS_SUCCESSFULLY_AUTHENTICATED,
                    mBiometricsSuccessfullyAuthenticated);
        }
        }


        @Override
        @Override
@@ -1023,6 +1000,18 @@ public class FingerprintSettings extends SubSettings {
                                        updateAddPreference();
                                        updateAddPreference();
                                    });
                                    });
                        }
                        }
                        final Utils.BiometricStatus biometricAuthStatus =
                                Utils.requestBiometricAuthenticationForMandatoryBiometrics(
                                        getActivity(),
                                        mBiometricsAuthenticationRequested,
                                        mUserId);
                        if (biometricAuthStatus == Utils.BiometricStatus.OK) {
                            Utils.launchBiometricPromptForMandatoryBiometrics(this,
                                    BIOMETRIC_AUTH_REQUEST,
                                    mUserId, true /* hideBackground */);
                        } else if (biometricAuthStatus != Utils.BiometricStatus.NOT_ACTIVE) {
                            finish();
                        }
                    } else {
                    } else {
                        Log.d(TAG, "Data null or GK PW missing");
                        Log.d(TAG, "Data null or GK PW missing");
                        finish();
                        finish();
@@ -1075,9 +1064,7 @@ public class FingerprintSettings extends SubSettings {
                updateAddPreference();
                updateAddPreference();
            } else if (requestCode == BIOMETRIC_AUTH_REQUEST) {
            } else if (requestCode == BIOMETRIC_AUTH_REQUEST) {
                mBiometricsAuthenticationRequested = false;
                mBiometricsAuthenticationRequested = false;
                if (resultCode == RESULT_OK) {
                if (resultCode != RESULT_OK) {
                    mBiometricsSuccessfullyAuthenticated = true;
                } else {
                    finish();
                    finish();
                }
                }
            }
            }
Loading