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

Commit 07361691 authored by MiltonWu's avatar MiltonWu Committed by Milton Wu
Browse files

Refine UdfpsEnrollCalibration

Remove most implementation from Settings

Test: FingerprintEnrollIntroductionTest FingerprintEnrollFindSensorTest
Bug: 301226085
Change-Id: Ib3438c740919f38f3d2f86d508fcd20bef522023
parent f610b193
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