From 0f471475435d2d7b5c7c742ab9cdf3160e0b6560 Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Sun, 19 Apr 2020 22:46:05 +0800 Subject: [PATCH] [Settings] To avoid from crash when callback Callback from SubscriptionManager and PhoneStateListner may comes in under the case of Preference not available. Bug: 141833767 Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=Enhanced4gBasePreferenceControllerTest Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=VideoCallingPreferenceControllerTest Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=WifiCallingPreferenceControllerTest Change-Id: I50b83b4488d272f6482bde5f09b57d59e6fc27a3 --- .../network/telephony/Enhanced4gBasePreferenceController.java | 3 +++ .../network/telephony/VideoCallingPreferenceController.java | 3 ++- .../network/telephony/WifiCallingPreferenceController.java | 4 +++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java b/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java index 0471f74c717..3a91616a3c6 100644 --- a/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java +++ b/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java @@ -133,6 +133,9 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc @Override public void updateState(Preference preference) { super.updateState(preference); + if (preference == null) { + return; + } final SwitchPreference switchPreference = (SwitchPreference) preference; final VolteQueryImsState queryState = queryImsState(mSubId); diff --git a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java index d235a9ac36a..3321fb3afe5 100644 --- a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java +++ b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java @@ -91,7 +91,8 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC @Override public void updateState(Preference preference) { super.updateState(preference); - if (mCallState == null) { + if ((mCallState == null) || (preference == null)) { + Log.d(TAG, "Skip update under mCallState=" + mCallState); return; } final SwitchPreference switchPreference = (SwitchPreference) preference; diff --git a/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java b/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java index bec8a51adda..32be36e325e 100644 --- a/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java +++ b/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java @@ -30,6 +30,7 @@ import android.telephony.PhoneStateListener; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.ims.ImsMmTelManager; +import android.util.Log; import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; @@ -98,7 +99,8 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont @Override public void updateState(Preference preference) { super.updateState(preference); - if (mCallState == null) { + if ((mCallState == null) || (preference == null)) { + Log.d(TAG, "Skip update under mCallState=" + mCallState); return; } CharSequence summaryText = null;