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

Commit eacde889 authored by Milton Wu's avatar Milton Wu Committed by Android (Google) Code Review
Browse files

Merge "Refine UdfpsEnrollCalibration" into main

parents 5e3472b5 07361691
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -67,7 +67,6 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
    public static final String EXTRA_FINISHED_ENROLL_FACE = "finished_enrolling_face";
    public static final String EXTRA_FINISHED_ENROLL_FINGERPRINT = "finished_enrolling_fingerprint";
    public static final String EXTRA_LAUNCHED_POSTURE_GUIDANCE = "launched_posture_guidance";
    public static final String KEY_CALIBRATOR_UUID = "calibrator_uuid";

    /**
     * Used by the choose fingerprint wizard to indicate the wizard is
+14 −0
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.biometrics.BiometricsEnrollEnrolling;
import com.android.settings.biometrics.fingerprint.feature.SfpsEnrollmentFeature;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.flags.Flags;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.display.DisplayDensityUtils;

@@ -197,6 +198,8 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {

    @NonNull
    private SfpsEnrollmentFeature mSfpsEnrollmentFeature = new EmptySfpsEnrollmentFeature();
    @Nullable
    private UdfpsEnrollCalibrator mCalibrator;

    @VisibleForTesting
    protected boolean shouldShowLottie() {
@@ -245,6 +248,12 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {

            setContentView(layout);
            setDescriptionText(R.string.security_settings_udfps_enroll_start_message);

            if (Flags.udfpsEnrollCalibration()) {
                mCalibrator = FeatureFactory.getFeatureFactory().getFingerprintFeatureProvider()
                        .getUdfpsEnrollCalibrator(getApplicationContext(), savedInstanceState,
                                getIntent());
            }
        } else if (mCanAssumeSfps) {
            mSfpsEnrollmentFeature = FeatureFactory.getFeatureFactory()
                    .getFingerprintFeatureProvider().getSfpsEnrollmentFeature();
@@ -364,6 +373,11 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
        super.onSaveInstanceState(outState);
        outState.putBoolean(KEY_STATE_CANCELED, mIsCanceled);
        outState.putInt(KEY_STATE_PREVIOUS_ROTATION, mPreviousRotation);
        if (Flags.udfpsEnrollCalibration()) {
            if (mCalibrator != null) {
                mCalibrator.onSaveInstanceState(outState);
            }
        }
    }

    private void restoreSavedState(Bundle savedInstanceState) {
+23 −63
Original line number Diff line number Diff line
@@ -25,8 +25,6 @@ import android.content.res.Resources;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.OrientationEventListener;
import android.view.Surface;
@@ -35,15 +33,12 @@ import android.view.accessibility.AccessibilityManager;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;

import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollBase;
import com.android.settings.biometrics.BiometricEnrollSidecar;
import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.biometrics.fingerprint.UdfpsEnrollCalibrator.Result;
import com.android.settings.biometrics.fingerprint.UdfpsEnrollCalibrator.Status;
import com.android.settings.flags.Flags;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ChooseLockSettingsHelper;
@@ -56,7 +51,6 @@ import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;

import java.util.List;
import java.util.UUID;

/**
 * Activity explaining the fingerprint sensor location for fingerprint enrollment.
@@ -85,8 +79,6 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
    private boolean mIsReverseDefaultRotation;
    @Nullable
    private UdfpsEnrollCalibrator mCalibrator;
    @Nullable
    private Observer<Status> mCalibratorStatusObserver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
@@ -172,13 +164,15 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
        if (mCanAssumeUdfps) {
            if (Flags.udfpsEnrollCalibration()) {
                mCalibrator = FeatureFactory.getFeatureFactory().getFingerprintFeatureProvider()
                        .getUdfpsEnrollCalibrator(
                                (savedInstanceState != null)
                                ? savedInstanceState.getParcelable(KEY_CALIBRATOR_UUID, UUID.class)
                                : getIntent().getSerializableExtra(KEY_CALIBRATOR_UUID, UUID.class)
                        .getUdfpsEnrollCalibrator(getApplicationContext(), savedInstanceState,
                                getIntent());
                if (mCalibrator != null) {
                    mCalibrator.onFindSensorPage(
                            getLifecycle(),
                            getSupportFragmentManager(),
                            this::enableUdfpsLottieAndNextButton
                    );
                if (mCalibrator == null
                        || mCalibrator.getStatusLiveData().getValue() == Status.FINISHED) {
                } else {
                    enableUdfpsLottieAndNextButton();
                }
            } else {
@@ -193,14 +187,19 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
    }

    private void enableUdfpsLottieAndNextButton() {
        mFooterBarMixin.setPrimaryButton(
                new FooterButton.Builder(this)
        if (isFinishing()) {
            return;
        }

        if (mFooterBarMixin.getPrimaryButton() == null) {
            mFooterBarMixin.setPrimaryButton(new FooterButton.Builder(this)
                    .setText(R.string.security_settings_udfps_enroll_find_sensor_start_button)
                    .setListener(this::onStartButtonClick)
                    .setButtonType(FooterButton.ButtonType.NEXT)
                    .setTheme(com.google.android.setupdesign.R.style.SudGlifButton_Primary)
                    .build()
            );
        }
        if (mIllustrationLottie != null) {
            mIllustrationLottie.setOnClickListener(this::onStartButtonClick);
        }
@@ -285,7 +284,7 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
        outState.putBoolean(SAVED_STATE_IS_NEXT_CLICKED, mNextClicked);
        if (Flags.udfpsEnrollCalibration()) {
            if (mCalibrator != null) {
                outState.putSerializable(KEY_CALIBRATOR_UUID, mCalibrator.getUuid());
                mCalibrator.onSaveInstanceState(outState);
            }
        }
    }
@@ -317,39 +316,6 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
        if (mAnimation != null) {
            mAnimation.startAnimation();
        }
        if (Flags.udfpsEnrollCalibration()) {
            if (mCalibrator != null) {
                final Status current = mCalibrator.getStatusLiveData().getValue();
                if (current == Status.PROCESSING) {
                    if (mCalibratorStatusObserver == null) {
                        mCalibratorStatusObserver = status -> {
                            if (status == Status.GOT_RESULT) {
                                onGotCalibrationResult();
                            }
                        };
                    }
                    mCalibrator.getStatusLiveData().observe(this, mCalibratorStatusObserver);
                } else if (current == Status.GOT_RESULT) {
                    onGotCalibrationResult();
                }
            }
        }
    }

    private void onGotCalibrationResult() {
        if (Flags.udfpsEnrollCalibration()) {
            if (mCalibrator != null) {
                mCalibrator.setFinished();
                if (mCalibrator.getResult() == Result.NEED_CALIBRATION) {
                    UdfpsEnrollCalibrationDialog.newInstance(
                            mCalibrator.getCalibrationDialogTitleTextId(),
                            mCalibrator.getCalibrationDialogMessageTextId(),
                            mCalibrator.getCalibrationDialogDismissButtonTextId()
                    ).show(getSupportFragmentManager(), "findsensor-calibration-dialog");
                }
            }
            new Handler(Looper.getMainLooper()).post(this::enableUdfpsLottieAndNextButton);
        }
    }

    private void stopLookingForFingerprint() {
@@ -407,12 +373,6 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
        if (mAnimation != null) {
            mAnimation.pauseAnimation();
        }
        if (Flags.udfpsEnrollCalibration()) {
            if (mCalibrator != null && mCalibratorStatusObserver != null) {
                mCalibrator.getStatusLiveData().removeObserver(mCalibratorStatusObserver);
                mCalibratorStatusObserver = null;
            }
        }
    }

    @Override
+3 −9
Original line number Diff line number Diff line
@@ -57,7 +57,6 @@ import com.google.android.setupdesign.span.LinkSpan;
import com.google.android.setupdesign.util.DeviceHelper;

import java.util.List;
import java.util.UUID;

public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {

@@ -92,12 +91,7 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {

        if (Flags.udfpsEnrollCalibration()) {
            mCalibrator = FeatureFactory.getFeatureFactory().getFingerprintFeatureProvider()
                    .getUdfpsEnrollCalibrator(
                            (savedInstanceState != null)
                                    ? savedInstanceState.getParcelable(
                                        KEY_CALIBRATOR_UUID, UUID.class)
                                    : null
                        );
                    .getUdfpsEnrollCalibrator(getApplicationContext(), savedInstanceState, null);
        }

        final ImageView iconFingerprint = findViewById(R.id.icon_fingerprint);
@@ -175,7 +169,7 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
        super.onSaveInstanceState(outState);
        if (Flags.udfpsEnrollCalibration()) {
            if (mCalibrator != null) {
                outState.putSerializable(KEY_CALIBRATOR_UUID, mCalibrator.getUuid());
                mCalibrator.onSaveInstanceState(outState);
            }
        }
    }
@@ -391,7 +385,7 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
        }
        if (Flags.udfpsEnrollCalibration()) {
            if (mCalibrator != null) {
                intent.putExtra(KEY_CALIBRATOR_UUID, mCalibrator.getUuid());
                intent.putExtras(mCalibrator.getExtrasForNextIntent());
            }
        }
        return intent;
+14 −6
Original line number Diff line number Diff line
@@ -16,12 +16,15 @@

package com.android.settings.biometrics.fingerprint;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.settings.biometrics.fingerprint.feature.SfpsEnrollmentFeature;

import java.util.UUID;

public interface FingerprintFeatureProvider {
    /**
     * Gets the feature implementation of SFPS enrollment.
@@ -29,11 +32,16 @@ public interface FingerprintFeatureProvider {
     */
    SfpsEnrollmentFeature getSfpsEnrollmentFeature();


    /**
     * Gets calibrator to calibrate the FPS before enrolling udfps
     * @param uuid unique id for passed between different activities
     * @return udfps calibrator
     * Gets calibrator for udfps pre-enroll
     * @param appContext application context
     * @param activitySavedInstanceState activity savedInstanceState
     * @param activityIntent activity intent
     */
    @Nullable
    UdfpsEnrollCalibrator getUdfpsEnrollCalibrator(@Nullable UUID uuid);
    default UdfpsEnrollCalibrator getUdfpsEnrollCalibrator(@NonNull Context appContext,
            @Nullable Bundle activitySavedInstanceState, @Nullable Intent activityIntent) {
        return null;
    }
}
Loading