From 3a9f242226a1ecda3bd9b6f25e86b70a9014a0dc Mon Sep 17 00:00:00 2001 From: Shawn Lin Date: Thu, 20 Mar 2025 10:54:49 +0000 Subject: [PATCH] Add ways to dismiss check enroll fingerprint dialog Dismiss dialog when: - touch outside the fingerprint icon - failure over 3 times Bug: 404875447 Test: 1. enroll a fingerprint 2. click "check enrolled fingerprints" 3. touch outside fp icon 4. use not enrolled finger 3 times Flag: EXEMPT bug fix Change-Id: I30850c0e8a37d89ffeac75575b04eb8584271dbe --- .../fingerprint/FingerprintSettings.java | 23 ++++++++++++++++++- .../fingerprint/UdfpsCheckEnrolledView.java | 8 +++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java index 283e3420607..3151593c132 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java @@ -1654,7 +1654,10 @@ public class FingerprintSettings extends SubSettings { private static final String KEY_USER_ID = "user_id"; private static final String KEY_SENSOR_PROPERTIES = "sensor_properties"; + private static final String EXTRA_FAILURE_COUNT = "failure_count"; + private static final int MAX_FAILURE_COUNT = 3; private int mUserId; + private int mFailureCount; private @Nullable CancellationSignal mCancellationSignal; private @Nullable FingerprintSensorPropertiesInternal mSensorPropertiesInternal; @@ -1663,6 +1666,9 @@ public class FingerprintSettings extends SubSettings { @NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + if (savedInstanceState != null) { + mFailureCount = savedInstanceState.getInt(EXTRA_FAILURE_COUNT, 0); + } return inflater.inflate( R.layout.fingerprint_check_enrolled_dialog, container, false); } @@ -1682,12 +1688,22 @@ public class FingerprintSettings extends SubSettings { final UdfpsCheckEnrolledView v = dialog.findViewById(R.id.udfps_check_enrolled_view); v.setSensorProperties(mSensorPropertiesInternal); + v.setOnTouchListener((view, event) -> { + Log.d(TAG, "CheckEnrollDialog dismissed: touch outside"); + dialog.dismiss(); + return false; + }); }); } - return dialog; } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt(EXTRA_FAILURE_COUNT, mFailureCount); + } + @Override public void onStart() { super.onStart(); @@ -1752,6 +1768,11 @@ public class FingerprintSettings extends SubSettings { message.postDelayed(() -> { message.setText(R.string.fingerprint_check_enroll_touch_sensor); }, 2000); + mFailureCount++; + if (mFailureCount >= MAX_FAILURE_COUNT) { + Log.d(TAG, "CheckEnrollDialog dismissed: failed 3 times"); + dialog.dismiss(); + } } }, null /* handler */, diff --git a/src/com/android/settings/biometrics/fingerprint/UdfpsCheckEnrolledView.java b/src/com/android/settings/biometrics/fingerprint/UdfpsCheckEnrolledView.java index 52a28c75ea1..028fccd44db 100644 --- a/src/com/android/settings/biometrics/fingerprint/UdfpsCheckEnrolledView.java +++ b/src/com/android/settings/biometrics/fingerprint/UdfpsCheckEnrolledView.java @@ -24,6 +24,7 @@ import android.util.AttributeSet; import android.util.Log; import android.util.RotationUtils; import android.view.DisplayInfo; +import android.view.MotionEvent; import android.view.Surface; import android.widget.ImageView; import android.widget.RelativeLayout; @@ -61,6 +62,13 @@ public class UdfpsCheckEnrolledView extends RelativeLayout { super.onFinishInflate(); mFingerprintView = findViewById(R.id.udfps_fingerprint_sensor_view); mFingerprintView.setImageDrawable(mFingerprintDrawable); + mFingerprintView.setOnTouchListener((v, event) -> { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + Log.d(TAG, "Fingerprint view touched!"); + return true; + } + return false; + }); } /**