From 0b9a6304aa4cb13566c830df8238f03aac3d1779 Mon Sep 17 00:00:00 2001 From: Shen Lin Date: Sun, 4 Sep 2022 22:45:10 +0800 Subject: [PATCH] Fix NPE crash in UwbPreferenceController and optimize the lifecycle observer adding condition in page This patch contains two fixes: - Make sure mUwbManager is non-null by calling isUwbSupportedOnDevice to avoid a NPE. - Modify AdvancedConnectedDeviceDashboardFragment, add lifecycle observer only if device supports UWB. Bug: 244871579 Test: manual test and Robotest. Change-Id: I78f97794a66f3fb487f067c4570899e21c254acf --- .../AdvancedConnectedDeviceDashboardFragment.java | 8 ++++++-- src/com/android/settings/uwb/UwbPreferenceController.java | 6 ++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java index b58d9c35d28..e2d92c7ce50 100644 --- a/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java +++ b/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java @@ -69,8 +69,12 @@ public class AdvancedConnectedDeviceDashboardFragment extends DashboardFragment public void onAttach(Context context) { super.onAttach(context); UwbPreferenceController uwbPreferenceController = use(UwbPreferenceController.class); - if (uwbPreferenceController != null && getSettingsLifecycle() != null) { - getSettingsLifecycle().addObserver(uwbPreferenceController); + // We only need the observer listen to the broadcast in the background for refreshing + // UI if the device supports UWB. + if (uwbPreferenceController != null && uwbPreferenceController.isUwbSupportedOnDevice()) { + if (getSettingsLifecycle() != null) { + getSettingsLifecycle().addObserver(uwbPreferenceController); + } } } diff --git a/src/com/android/settings/uwb/UwbPreferenceController.java b/src/com/android/settings/uwb/UwbPreferenceController.java index ad040ed6043..fb0836d6d3c 100644 --- a/src/com/android/settings/uwb/UwbPreferenceController.java +++ b/src/com/android/settings/uwb/UwbPreferenceController.java @@ -75,8 +75,7 @@ public class UwbPreferenceController extends TogglePreferenceController implemen }; } - @VisibleForTesting - boolean isUwbSupportedOnDevice() { + public boolean isUwbSupportedOnDevice() { return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_UWB); } @@ -99,6 +98,9 @@ public class UwbPreferenceController extends TogglePreferenceController implemen @Override public boolean isChecked() { + if (!isUwbSupportedOnDevice()) { + return false; + } int state = mUwbManager.getAdapterState(); return state == STATE_ENABLED_ACTIVE || state == STATE_ENABLED_INACTIVE; }