From 05c2a2bf41fb493d39dfe219198f1da316b26dd9 Mon Sep 17 00:00:00 2001 From: Mill Chen Date: Thu, 1 Apr 2021 17:33:17 +0800 Subject: [PATCH] Fix Settings crash When pressing back from fingerprint enrollment flow, Settings will get crashed. That was caused by calling a destroied fragment manager to create an error dialog. Bug: 184234884 Test: manual test 1) Settings -> Security -> Fingerprint 2) Following the enrollment flow, then pressing back from either find sensor or enrolling page 3) Observe and see if there's no crash Change-Id: I2028df0c6a65e8e960a627161834660681b7b70a --- .../biometrics/fingerprint/FingerprintErrorDialog.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java index 3173a347c4e..416e805682a 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java @@ -20,6 +20,8 @@ import android.app.settings.SettingsEnums; import android.hardware.fingerprint.FingerprintManager; import android.os.Bundle; +import androidx.fragment.app.FragmentManager; + import com.android.settings.R; import com.android.settings.biometrics.BiometricEnrollBase; import com.android.settings.biometrics.BiometricErrorDialog; @@ -31,7 +33,10 @@ 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()); + final FragmentManager fragmentManager = host.getSupportFragmentManager(); + if (!fragmentManager.isDestroyed()) { + dialog.show(fragmentManager, FingerprintErrorDialog.class.getName()); + } } private static int getErrorMessage(int errMsgId) {