Add an error dialog in FingerprintEnrollFindSensor
When a device stands for a while during the fingerprint enrollment, the fingerprint icon will disappear without any warning message. This change is trying to show a dialog to inform users. Fixes: 180633056 Test: visual verified 1) Settings -> Security -> Fingerprint 2) Navigate to "Touch & hold the fingerprint icon" page 3) Let device stand for a while and see if there's a dialog shown Change-Id: I69c8fb73f2a7406e4a379396e2624fb523e162a8
This commit is contained in:
@@ -46,7 +46,6 @@ import androidx.appcompat.app.AlertDialog;
|
|||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.biometrics.BiometricEnrollSidecar;
|
import com.android.settings.biometrics.BiometricEnrollSidecar;
|
||||||
import com.android.settings.biometrics.BiometricErrorDialog;
|
|
||||||
import com.android.settings.biometrics.BiometricUtils;
|
import com.android.settings.biometrics.BiometricUtils;
|
||||||
import com.android.settings.biometrics.BiometricsEnrollEnrolling;
|
import com.android.settings.biometrics.BiometricsEnrollEnrolling;
|
||||||
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
||||||
@@ -111,32 +110,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
|
|||||||
private boolean mRestoring;
|
private boolean mRestoring;
|
||||||
private Vibrator mVibrator;
|
private Vibrator mVibrator;
|
||||||
|
|
||||||
public static class FingerprintErrorDialog extends BiometricErrorDialog {
|
|
||||||
static FingerprintErrorDialog newInstance(CharSequence msg, int msgId) {
|
|
||||||
FingerprintErrorDialog dialog = new FingerprintErrorDialog();
|
|
||||||
Bundle args = new Bundle();
|
|
||||||
args.putCharSequence(KEY_ERROR_MSG, msg);
|
|
||||||
args.putInt(KEY_ERROR_ID, msgId);
|
|
||||||
dialog.setArguments(args);
|
|
||||||
return dialog;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMetricsCategory() {
|
|
||||||
return SettingsEnums.DIALOG_FINGERPINT_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getTitleResId() {
|
|
||||||
return R.string.security_settings_fingerprint_enroll_error_dialog_title;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getOkButtonTextResId() {
|
|
||||||
return R.string.security_settings_fingerprint_enroll_dialog_ok;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@@ -339,19 +312,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnrollmentError(int errMsgId, CharSequence errString) {
|
public void onEnrollmentError(int errMsgId, CharSequence errString) {
|
||||||
int msgId;
|
FingerprintErrorDialog.showErrorDialog(this, errMsgId);
|
||||||
switch (errMsgId) {
|
|
||||||
case FingerprintManager.FINGERPRINT_ERROR_TIMEOUT:
|
|
||||||
// This message happens when the underlying crypto layer decides to revoke the
|
|
||||||
// enrollment auth token.
|
|
||||||
msgId = R.string.security_settings_fingerprint_enroll_error_timeout_dialog_message;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// There's nothing specific to tell the user about. Ask them to try again.
|
|
||||||
msgId = R.string.security_settings_fingerprint_enroll_error_generic_dialog_message;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
showErrorDialog(getText(msgId), errMsgId);
|
|
||||||
stopIconAnimation();
|
stopIconAnimation();
|
||||||
if (!mCanAssumeUdfps) {
|
if (!mCanAssumeUdfps) {
|
||||||
mErrorText.removeCallbacks(mTouchAgainRunnable);
|
mErrorText.removeCallbacks(mTouchAgainRunnable);
|
||||||
@@ -398,11 +359,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
|
|||||||
return PROGRESS_BAR_MAX * progress / (steps + 1);
|
return PROGRESS_BAR_MAX * progress / (steps + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showErrorDialog(CharSequence msg, int msgId) {
|
|
||||||
BiometricErrorDialog dlg = FingerprintErrorDialog.newInstance(msg, msgId);
|
|
||||||
dlg.show(getSupportFragmentManager(), FingerprintErrorDialog.class.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showIconTouchDialog() {
|
private void showIconTouchDialog() {
|
||||||
mIconTouchCount = 0;
|
mIconTouchCount = 0;
|
||||||
new IconTouchDialog().show(getSupportFragmentManager(), null /* tag */);
|
new IconTouchDialog().show(getSupportFragmentManager(), null /* tag */);
|
||||||
|
@@ -28,7 +28,7 @@ import androidx.annotation.Nullable;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.biometrics.BiometricEnrollBase;
|
import com.android.settings.biometrics.BiometricEnrollBase;
|
||||||
import com.android.settings.biometrics.BiometricEnrollSidecar.Listener;
|
import com.android.settings.biometrics.BiometricEnrollSidecar;
|
||||||
import com.android.settings.biometrics.BiometricUtils;
|
import com.android.settings.biometrics.BiometricUtils;
|
||||||
import com.android.settings.password.ChooseLockSettingsHelper;
|
import com.android.settings.password.ChooseLockSettingsHelper;
|
||||||
|
|
||||||
@@ -40,7 +40,8 @@ import java.util.List;
|
|||||||
/**
|
/**
|
||||||
* Activity explaining the fingerprint sensor location for fingerprint enrollment.
|
* Activity explaining the fingerprint sensor location for fingerprint enrollment.
|
||||||
*/
|
*/
|
||||||
public class FingerprintEnrollFindSensor extends BiometricEnrollBase {
|
public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
|
||||||
|
BiometricEnrollSidecar.Listener {
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private FingerprintFindSensorAnimation mAnimation;
|
private FingerprintFindSensorAnimation mAnimation;
|
||||||
@@ -139,7 +140,9 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase {
|
|||||||
.add(mSidecar, FingerprintEnrollEnrolling.TAG_SIDECAR)
|
.add(mSidecar, FingerprintEnrollEnrolling.TAG_SIDECAR)
|
||||||
.commitAllowingStateLoss();
|
.commitAllowingStateLoss();
|
||||||
}
|
}
|
||||||
mSidecar.setListener(new Listener() {
|
mSidecar.setListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnrollmentProgressChange(int steps, int remaining) {
|
public void onEnrollmentProgressChange(int steps, int remaining) {
|
||||||
mNextClicked = true;
|
mNextClicked = true;
|
||||||
@@ -155,10 +158,10 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase {
|
|||||||
if (mNextClicked && errMsgId == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
|
if (mNextClicked && errMsgId == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
|
||||||
mNextClicked = false;
|
mNextClicked = false;
|
||||||
proceedToEnrolling(false /* cancelEnrollment */);
|
proceedToEnrolling(false /* cancelEnrollment */);
|
||||||
|
} else {
|
||||||
|
FingerprintErrorDialog.showErrorDialog(this, errMsgId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStop() {
|
protected void onStop() {
|
||||||
|
@@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2021 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.settings.SettingsEnums;
|
||||||
|
import android.hardware.fingerprint.FingerprintManager;
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.biometrics.BiometricEnrollBase;
|
||||||
|
import com.android.settings.biometrics.BiometricErrorDialog;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fingerprint error dialog, will be shown when an error occurs during fingerprint enrollment.
|
||||||
|
*/
|
||||||
|
public class FingerprintErrorDialog extends BiometricErrorDialog {
|
||||||
|
public static void showErrorDialog(BiometricEnrollBase host, int errMsgId) {
|
||||||
|
final CharSequence errMsg = host.getText(getErrorMessage(errMsgId));
|
||||||
|
final FingerprintErrorDialog dialog = newInstance(errMsg, errMsgId);
|
||||||
|
dialog.show(host.getSupportFragmentManager(), FingerprintErrorDialog.class.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getErrorMessage(int errMsgId) {
|
||||||
|
switch (errMsgId) {
|
||||||
|
case FingerprintManager.FINGERPRINT_ERROR_TIMEOUT:
|
||||||
|
// This message happens when the underlying crypto layer decides to revoke the
|
||||||
|
// enrollment auth token.
|
||||||
|
return R.string.security_settings_fingerprint_enroll_error_timeout_dialog_message;
|
||||||
|
default:
|
||||||
|
// There's nothing specific to tell the user about. Ask them to try again.
|
||||||
|
return R.string.security_settings_fingerprint_enroll_error_generic_dialog_message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static FingerprintErrorDialog newInstance(CharSequence msg, int msgId) {
|
||||||
|
FingerprintErrorDialog dialog = new FingerprintErrorDialog();
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putCharSequence(KEY_ERROR_MSG, msg);
|
||||||
|
args.putInt(KEY_ERROR_ID, msgId);
|
||||||
|
dialog.setArguments(args);
|
||||||
|
return dialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getTitleResId() {
|
||||||
|
return R.string.security_settings_fingerprint_enroll_error_dialog_title;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getOkButtonTextResId() {
|
||||||
|
return R.string.security_settings_fingerprint_enroll_dialog_ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMetricsCategory() {
|
||||||
|
return SettingsEnums.DIALOG_FINGERPINT_ERROR;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user