From 41bb2cb6a8c4c34ef484186557b35e344d961944 Mon Sep 17 00:00:00 2001 From: Lei Yu Date: Thu, 13 Jun 2019 14:07:57 -0700 Subject: [PATCH] Handle null intent in WifiCallingPreferenceController When intent is null, we will hide wifi calling preference however its listener might still triggered with null intent. This CL update controller so it can handle this event inside listener callback. Fixes: 135095929 Test: RunSettingsRoboTests Change-Id: I4c5aba03871f11a2d9f9b4da329c2c2655ff9adb --- .../telephony/WifiCallingPreferenceController.java | 4 ++++ .../telephony/WifiCallingPreferenceControllerTest.java | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java b/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java index c71ee3536b2..4d4d3ef7f01 100644 --- a/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java +++ b/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java @@ -114,6 +114,10 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont if (mSimCallManager != null) { Intent intent = MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext, mSimCallManager); + if (intent == null) { + // Do nothing in this case since preference is invisible + return; + } final PackageManager pm = mContext.getPackageManager(); List resolutions = pm.queryIntentActivities(intent, 0); preference.setTitle(resolutions.get(0).loadLabel(pm)); diff --git a/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java index 1a0126e4fd6..42422f9e8e5 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java @@ -27,6 +27,7 @@ import android.content.Context; import android.content.Intent; import android.os.PersistableBundle; import android.provider.Settings; +import android.telecom.PhoneAccountHandle; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; @@ -117,6 +118,14 @@ public class WifiCallingPreferenceControllerTest { assertThat(mPreference.isEnabled()).isFalse(); } + @Test + public void updateState_invalidPhoneAccountHandle_shouldNotCrash() { + mController.mSimCallManager = new PhoneAccountHandle(null /* invalid */, ""); + + //Should not crash + mController.updateState(mPreference); + } + @Test public void updateState_wfcNonRoaming() { assertNull(mController.mSimCallManager);