From ec1bd37db06c791b20b2e7c229d5b40eada025b9 Mon Sep 17 00:00:00 2001 From: Grace Cheng Date: Thu, 27 Apr 2023 18:30:38 +0000 Subject: [PATCH] Prevent NPE on deleting fingerprint in Settings Gate all Settings FingerprintUnlockCategory logic on isSfps() check to prevent NPE Fixes: 279866500 Test: Enroll 2+ fingerprints on a non-sfps device, delete fingerprint, observe no crash Change-Id: I040d498426e0f8efb789875eedeb7bcf44436149 --- .../fingerprint/FingerprintSettings.java | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java index a5e5f579c02..e0f402bdc02 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java @@ -283,7 +283,9 @@ public class FingerprintSettings extends SubSettings { case MSG_REFRESH_FINGERPRINT_TEMPLATES: removeFingerprintPreference(msg.arg1); updateAddPreference(); - updateFingerprintUnlockCategoryVisibility(); + if (isSfps()) { + updateFingerprintUnlockCategoryVisibility(); + } updatePreferences(); break; case MSG_FINGER_AUTH_SUCCESS: @@ -494,9 +496,13 @@ public class FingerprintSettings extends SubSettings { } private boolean isSfps() { - for (FingerprintSensorPropertiesInternal prop : mSensorProperties) { - if (prop.isAnySidefpsType()) { - return true; + mFingerprintManager = Utils.getFingerprintManagerOrNull(getActivity()); + if (mFingerprintManager != null) { + mSensorProperties = mFingerprintManager.getSensorPropertiesInternal(); + for (FingerprintSensorPropertiesInternal prop : mSensorProperties) { + if (prop.isAnySidefpsType()) { + return true; + } } } return false; @@ -838,18 +844,20 @@ public class FingerprintSettings extends SubSettings { private List buildPreferenceControllers(Context context) { final List controllers = new ArrayList<>(); - mFingerprintUnlockCategoryPreferenceController = + if (isSfps()) { + mFingerprintUnlockCategoryPreferenceController = new FingerprintUnlockCategoryController( - context, - KEY_FINGERPRINT_UNLOCK_CATEGORY + context, + KEY_FINGERPRINT_UNLOCK_CATEGORY ); - mRequireScreenOnToAuthPreferenceController = - new FingerprintSettingsRequireScreenOnToAuthPreferenceController( - context, - KEY_REQUIRE_SCREEN_ON_TO_AUTH - ); - controllers.add(mFingerprintUnlockCategoryPreferenceController); - controllers.add(mRequireScreenOnToAuthPreferenceController); + mRequireScreenOnToAuthPreferenceController = + new FingerprintSettingsRequireScreenOnToAuthPreferenceController( + context, + KEY_REQUIRE_SCREEN_ON_TO_AUTH + ); + controllers.add(mFingerprintUnlockCategoryPreferenceController); + controllers.add(mRequireScreenOnToAuthPreferenceController); + } return controllers; }