Refine UdfpsEnrollCalibration
Remove most implementation from Settings Test: FingerprintEnrollIntroductionTest FingerprintEnrollFindSensorTest Bug: 301226085 Change-Id: Ib3438c740919f38f3d2f86d508fcd20bef522023
This commit is contained in:
@@ -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
|
||||
|
@@ -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) {
|
||||
|
@@ -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)
|
||||
);
|
||||
if (mCalibrator == null
|
||||
|| mCalibrator.getStatusLiveData().getValue() == Status.FINISHED) {
|
||||
.getUdfpsEnrollCalibrator(getApplicationContext(), savedInstanceState,
|
||||
getIntent());
|
||||
if (mCalibrator != null) {
|
||||
mCalibrator.onFindSensorPage(
|
||||
getLifecycle(),
|
||||
getSupportFragmentManager(),
|
||||
this::enableUdfpsLottieAndNextButton
|
||||
);
|
||||
} else {
|
||||
enableUdfpsLottieAndNextButton();
|
||||
}
|
||||
} else {
|
||||
@@ -193,14 +187,19 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
|
||||
}
|
||||
|
||||
private void enableUdfpsLottieAndNextButton() {
|
||||
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 (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
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -21,8 +21,6 @@ import androidx.annotation.Nullable;
|
||||
import com.android.settings.biometrics.fingerprint.feature.SfpsEnrollmentFeature;
|
||||
import com.android.settings.biometrics.fingerprint.feature.SfpsEnrollmentFeatureImpl;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class FingerprintFeatureProviderImpl implements FingerprintFeatureProvider {
|
||||
|
||||
@Nullable
|
||||
@@ -35,10 +33,4 @@ public class FingerprintFeatureProviderImpl implements FingerprintFeatureProvide
|
||||
}
|
||||
return mSfpsEnrollmentFeatureImpl;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public UdfpsEnrollCalibrator getUdfpsEnrollCalibrator(@Nullable UUID uuid) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@@ -1,58 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.android.settings.biometrics.fingerprint
|
||||
|
||||
import android.app.Dialog
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import com.android.settings.R
|
||||
|
||||
class UdfpsEnrollCalibrationDialog : DialogFragment() {
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog =
|
||||
AlertDialog.Builder(requireActivity(), R.style.Theme_AlertDialog)
|
||||
.setTitle(arguments!!.getInt(KEY_TITLE_TEXT_ID))
|
||||
.setMessage(arguments!!.getInt(KEY_MESSAGE_TEXT_ID))
|
||||
.setPositiveButton(arguments!!.getInt(KEY_DISMISS_BUTTON_TEXT_ID)) {
|
||||
dialog: DialogInterface?, _: Int -> dialog?.dismiss()
|
||||
}
|
||||
.create().also {
|
||||
isCancelable = false
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
private const val KEY_TITLE_TEXT_ID = "title_text_id"
|
||||
private const val KEY_MESSAGE_TEXT_ID = "message_text_id"
|
||||
private const val KEY_DISMISS_BUTTON_TEXT_ID = "dismiss_button_text_id"
|
||||
|
||||
@JvmStatic
|
||||
fun newInstance(
|
||||
@StringRes titleTextId: Int,
|
||||
@StringRes messageTextId: Int,
|
||||
@StringRes dismissButtonTextId: Int
|
||||
) = UdfpsEnrollCalibrationDialog().apply {
|
||||
arguments = Bundle().apply {
|
||||
putInt(KEY_TITLE_TEXT_ID, titleTextId)
|
||||
putInt(KEY_MESSAGE_TEXT_ID, messageTextId)
|
||||
putInt(KEY_DISMISS_BUTTON_TEXT_ID, dismissButtonTextId)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,36 +1,18 @@
|
||||
package com.android.settings.biometrics.fingerprint
|
||||
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.lifecycle.LiveData
|
||||
import java.util.UUID
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.lifecycle.Lifecycle
|
||||
|
||||
interface UdfpsEnrollCalibrator {
|
||||
|
||||
enum class Status {
|
||||
PROCESSING,
|
||||
GOT_RESULT,
|
||||
FINISHED,
|
||||
}
|
||||
val extrasForNextIntent: Bundle
|
||||
|
||||
enum class Result {
|
||||
NEED_CALIBRATION,
|
||||
NO_NEED_CALIBRATION,
|
||||
}
|
||||
fun onSaveInstanceState(outState: Bundle)
|
||||
|
||||
val uuid: UUID
|
||||
|
||||
val statusLiveData: LiveData<Status>
|
||||
|
||||
val result: Result?
|
||||
|
||||
fun setFinished()
|
||||
|
||||
@get:StringRes
|
||||
val calibrationDialogTitleTextId: Int
|
||||
|
||||
@get:StringRes
|
||||
val calibrationDialogMessageTextId: Int
|
||||
|
||||
@get:StringRes
|
||||
val calibrationDialogDismissButtonTextId: Int
|
||||
fun onFindSensorPage(
|
||||
lifecycle: Lifecycle,
|
||||
fragmentManager: FragmentManager,
|
||||
enableEnrollingRunnable: Runnable
|
||||
)
|
||||
}
|
Reference in New Issue
Block a user