From 3e8a37f2c7da4e07b6f4950c5e90b61755550280 Mon Sep 17 00:00:00 2001 From: Milton Wu Date: Wed, 3 May 2023 18:55:46 +0800 Subject: [PATCH] [BiometricsV2] Remove "Try again" button from errorDialog Remove "Try again" button from fingerprint enrolling error dialog for biometrics v2. Test: Manual (Enable biometrics v2, Start enrollment and don't complete it for 10 minutes; observe the dialog) Test: atest FingerprintEnrollEnrollingViewModelTest FingerprintEnrollmentActivityTest Bug: 280546173 Change-Id: I844786719a41b1a3d0e86ab32b74ab9b5aeaa0a1 --- ...FingerprintEnrollEnrollingErrorDialog.java | 95 ------------------- .../FingerprintEnrollEnrollingErrorDialog.kt | 63 ++++++++++++ .../FingerprintEnrollEnrollingViewModel.java | 15 +-- ...ngerprintEnrollEnrollingViewModelTest.java | 8 +- 4 files changed, 66 insertions(+), 115 deletions(-) delete mode 100644 src/com/android/settings/biometrics2/ui/view/FingerprintEnrollEnrollingErrorDialog.java create mode 100644 src/com/android/settings/biometrics2/ui/view/FingerprintEnrollEnrollingErrorDialog.kt diff --git a/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollEnrollingErrorDialog.java b/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollEnrollingErrorDialog.java deleted file mode 100644 index ad34e740d98..00000000000 --- a/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollEnrollingErrorDialog.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * 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.biometrics2.ui.view; - -import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.ErrorDialogData; -import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ERROR_DIALOG_ACTION_RESTART; -import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH; -import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT; - -import android.app.Dialog; -import android.app.settings.SettingsEnums; -import android.content.Context; -import android.hardware.biometrics.BiometricConstants; -import android.os.Bundle; - -import androidx.appcompat.app.AlertDialog; -import androidx.lifecycle.ViewModelProvider; - -import com.android.settings.R; -import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel; -import com.android.settings.core.instrumentation.InstrumentedDialogFragment; - -/** - * Fingerprint error dialog, will be shown when an error occurs during fingerprint enrollment. - */ -public class FingerprintEnrollEnrollingErrorDialog extends InstrumentedDialogFragment { - - private FingerprintEnrollEnrollingViewModel mViewModel; - - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - final ErrorDialogData data = mViewModel.getErrorDialogLiveData().getValue(); - final int errMsgId = data.getErrMsgId(); - final boolean canAssumeUdfps = mViewModel.canAssumeUdfps(); - final boolean wasTimeout = errMsgId == BiometricConstants.BIOMETRIC_ERROR_TIMEOUT; - - builder.setTitle(data.getErrTitle()) - .setMessage(data.getErrMsg()) - .setCancelable(false); - if (wasTimeout && canAssumeUdfps) { - builder.setPositiveButton( - R.string.security_settings_fingerprint_enroll_dialog_try_again, - (dialog, which) -> { - dialog.dismiss(); - mViewModel.onErrorDialogAction(FINGERPRINT_ERROR_DIALOG_ACTION_RESTART); - }); - builder.setNegativeButton( - R.string.security_settings_fingerprint_enroll_dialog_ok, - (dialog, which) -> { - dialog.dismiss(); - mViewModel.onErrorDialogAction( - FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT); - }); - } else { - builder.setPositiveButton( - R.string.security_settings_fingerprint_enroll_dialog_ok, - (dialog, which) -> { - dialog.dismiss(); - mViewModel.onErrorDialogAction(wasTimeout - ? FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT - : FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH); - }); - } - final AlertDialog dialog = builder.create(); - dialog.setCanceledOnTouchOutside(false); - return dialog; - } - - @Override - public int getMetricsCategory() { - return SettingsEnums.DIALOG_FINGERPINT_ERROR; - } - - @Override - public void onAttach(Context context) { - mViewModel = new ViewModelProvider(getActivity()).get( - FingerprintEnrollEnrollingViewModel.class); - super.onAttach(context); - } -} diff --git a/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollEnrollingErrorDialog.kt b/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollEnrollingErrorDialog.kt new file mode 100644 index 00000000000..6fa22d7f633 --- /dev/null +++ b/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollEnrollingErrorDialog.kt @@ -0,0 +1,63 @@ +/* + * Copyright 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.biometrics2.ui.view + +import android.app.Dialog +import android.content.Context +import android.content.DialogInterface +import android.hardware.biometrics.BiometricConstants +import android.os.Bundle +import androidx.appcompat.app.AlertDialog +import androidx.fragment.app.DialogFragment +import androidx.lifecycle.ViewModelProvider +import com.android.settings.R +import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel +import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH +import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT + +/** + * Fingerprint error dialog, will be shown when an error occurs during fingerprint enrollment. + */ +class FingerprintEnrollEnrollingErrorDialog : DialogFragment() { + + private var mViewModel: FingerprintEnrollEnrollingViewModel? = null + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val value = mViewModel!!.errorDialogLiveData.value!! + return AlertDialog.Builder(requireActivity()) + .setTitle(value.errTitle) + .setMessage(value.errMsg) + .setCancelable(false) + .setPositiveButton( + R.string.security_settings_fingerprint_enroll_dialog_ok + ) { dialog: DialogInterface, _: Int -> + dialog.dismiss() + mViewModel?.onErrorDialogAction( + if (value.errMsgId == BiometricConstants.BIOMETRIC_ERROR_TIMEOUT) + FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT + else + FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH) + } + .create() + .apply { setCanceledOnTouchOutside(false) } + } + + override fun onAttach(context: Context) { + mViewModel = ViewModelProvider(requireActivity())[ + FingerprintEnrollEnrollingViewModel::class.java] + super.onAttach(context) + } +} diff --git a/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollEnrollingViewModel.java b/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollEnrollingViewModel.java index 12584ee9d96..e2b2ee2b51d 100644 --- a/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollEnrollingViewModel.java +++ b/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollEnrollingViewModel.java @@ -89,15 +89,9 @@ public class FingerprintEnrollEnrollingViewModel extends AndroidViewModel { */ public static final int FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT = 1; - /** - * Icon touch dialog show - */ - public static final int FINGERPRINT_ERROR_DIALOG_ACTION_RESTART = 2; - @IntDef(prefix = { "FINGERPRINT_ERROR_DIALOG_ACTION_" }, value = { FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH, - FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT, - FINGERPRINT_ERROR_DIALOG_ACTION_RESTART + FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT }) @Retention(RetentionPolicy.SOURCE) public @interface FingerprintErrorDialogAction {} @@ -294,13 +288,6 @@ public class FingerprintEnrollEnrollingViewModel extends AndroidViewModel { return mFingerprintRepository.getFirstFingerprintSensorPropertiesInternal(); } - /** - * The first sensor type is UDFPS sensor or not - */ - public boolean canAssumeUdfps() { - return mFingerprintRepository.canAssumeUdfps(); - } - /** * Data for passing to FingerprintEnrollEnrollingErrorDialog */ diff --git a/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollEnrollingViewModelTest.java b/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollEnrollingViewModelTest.java index 5ced939f0d9..a038747a9e8 100644 --- a/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollEnrollingViewModelTest.java +++ b/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollEnrollingViewModelTest.java @@ -22,7 +22,6 @@ import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnr import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ENROLL_ENROLLING_ACTION_SHOW_ICON_TOUCH_DIALOG; import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ENROLL_ENROLLING_CANCELED_BECAUSE_BACK_PRESSED; import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ENROLL_ENROLLING_CANCELED_BECAUSE_USER_SKIP; -import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ERROR_DIALOG_ACTION_RESTART; import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH; import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT; import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel.FingerprintErrorDialogAction; @@ -106,11 +105,8 @@ public class FingerprintEnrollEnrollingViewModelTest { public void testErrorDialogActionLiveData() { assertThat(mViewModel.getErrorDialogActionLiveData().getValue()).isEqualTo(null); - @FingerprintErrorDialogAction int action = FINGERPRINT_ERROR_DIALOG_ACTION_RESTART; - mViewModel.onErrorDialogAction(action); - assertThat(mViewModel.getErrorDialogActionLiveData().getValue()).isEqualTo(action); - - action = FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT; + @FingerprintErrorDialogAction int action = + FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT; mViewModel.onErrorDialogAction(action); assertThat(mViewModel.getErrorDialogActionLiveData().getValue()).isEqualTo(action);