From 8bb09238bb466feb7e9146ec9efd683684cfbf93 Mon Sep 17 00:00:00 2001 From: tom hsu Date: Tue, 13 Jun 2023 17:00:57 +0800 Subject: [PATCH] [Settings] Avoid NPE when user enter WifiCallingSettings back and forth Bug: 277833102 Test: Manual test Change-Id: Ifd3272ddf8b8a27fc7772d860653df2c33a3df7b --- .../calling/WifiCallingSettingsForSub.java | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java index 0c3d769f661..3890ddfcdde 100644 --- a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java +++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java @@ -94,7 +94,6 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment private ListWithEntrySummaryPreference mButtonWfcRoamingMode; private Preference mUpdateAddress; - private boolean mValidListener = false; private boolean mEditableWfcMode = true; private boolean mEditableWfcRoamingMode = true; private boolean mUseWfcHomeModeForRoaming = false; @@ -104,7 +103,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment private ProvisioningManager mProvisioningManager; private TelephonyManager mTelephonyManager; - private final PhoneTelephonyCallback mTelephonyCallback = new PhoneTelephonyCallback(); + private PhoneTelephonyCallback mTelephonyCallback; private class PhoneTelephonyCallback extends TelephonyCallback implements TelephonyCallback.CallStateListener { @@ -418,27 +417,20 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment @Override public void onResume() { super.onResume(); - updateBody(); - - final Context context = getActivity(); - if (queryImsState(mSubId).isWifiCallingSupported()) { + Context context = getActivity(); + if (mTelephonyCallback == null && queryImsState(mSubId).isWifiCallingSupported()) { + mTelephonyCallback = new PhoneTelephonyCallback(); getTelephonyManagerForSub(mSubId).registerTelephonyCallback( context.getMainExecutor(), mTelephonyCallback); - mSwitchBar.addOnSwitchChangeListener(this); - - mValidListener = true; } - context.registerReceiver(mIntentReceiver, mIntentFilter, Context.RECEIVER_EXPORTED_UNAUDITED); - final Intent intent = getActivity().getIntent(); if (intent.getBooleanExtra(Phone.EXTRA_KEY_ALERT_SHOW, false)) { showAlert(intent); } - // Register callback for provisioning changes. registerProvisioningChangedCallback(); } @@ -446,19 +438,13 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment @Override public void onPause() { super.onPause(); - - final Context context = getActivity(); - - if (mValidListener) { - mValidListener = false; - + Context context = getActivity(); + if (mTelephonyCallback != null) { getTelephonyManagerForSub(mSubId).unregisterTelephonyCallback(mTelephonyCallback); - + mTelephonyCallback = null; mSwitchBar.removeOnSwitchChangeListener(this); } - context.unregisterReceiver(mIntentReceiver); - // Remove callback for provisioning changes. unregisterProvisioningChangedCallback(); }