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);