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.biometrics.BiometricEnrollSidecar;
|
||||
import com.android.settings.biometrics.BiometricErrorDialog;
|
||||
import com.android.settings.biometrics.BiometricUtils;
|
||||
import com.android.settings.biometrics.BiometricsEnrollEnrolling;
|
||||
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
||||
@@ -111,32 +110,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
|
||||
private boolean mRestoring;
|
||||
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
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@@ -339,19 +312,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
|
||||
|
||||
@Override
|
||||
public void onEnrollmentError(int errMsgId, CharSequence errString) {
|
||||
int msgId;
|
||||
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);
|
||||
FingerprintErrorDialog.showErrorDialog(this, errMsgId);
|
||||
stopIconAnimation();
|
||||
if (!mCanAssumeUdfps) {
|
||||
mErrorText.removeCallbacks(mTouchAgainRunnable);
|
||||
@@ -398,11 +359,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
|
||||
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() {
|
||||
mIconTouchCount = 0;
|
||||
new IconTouchDialog().show(getSupportFragmentManager(), null /* tag */);
|
||||
|
@@ -28,7 +28,7 @@ import androidx.annotation.Nullable;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
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.password.ChooseLockSettingsHelper;
|
||||
|
||||
@@ -40,7 +40,8 @@ import java.util.List;
|
||||
/**
|
||||
* Activity explaining the fingerprint sensor location for fingerprint enrollment.
|
||||
*/
|
||||
public class FingerprintEnrollFindSensor extends BiometricEnrollBase {
|
||||
public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
|
||||
BiometricEnrollSidecar.Listener {
|
||||
|
||||
@Nullable
|
||||
private FingerprintFindSensorAnimation mAnimation;
|
||||
@@ -139,7 +140,9 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase {
|
||||
.add(mSidecar, FingerprintEnrollEnrolling.TAG_SIDECAR)
|
||||
.commitAllowingStateLoss();
|
||||
}
|
||||
mSidecar.setListener(new Listener() {
|
||||
mSidecar.setListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnrollmentProgressChange(int steps, int remaining) {
|
||||
mNextClicked = true;
|
||||
@@ -155,10 +158,10 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase {
|
||||
if (mNextClicked && errMsgId == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
|
||||
mNextClicked = false;
|
||||
proceedToEnrolling(false /* cancelEnrollment */);
|
||||
} else {
|
||||
FingerprintErrorDialog.showErrorDialog(this, errMsgId);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
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