From ae78184c5f9a96b86bf83c3084ccb4788c02c734 Mon Sep 17 00:00:00 2001 From: Stanley Wang Date: Wed, 22 May 2019 16:21:33 +0800 Subject: [PATCH] Fix Settings crashing while displaying phone number slice. Check if the SubscriptionInfo list is empty to avoid the IndexOutOfBoundsException. Fixes: 133258244 Test: maunal & robotest Change-Id: I837f6761ba2b53823f0126f734f65875a30e34dd --- .../deviceinfo/PhoneNumberPreferenceController.java | 2 +- .../PhoneNumberPreferenceControllerTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java index ddc3ad6643e..537c705d0bf 100644 --- a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java +++ b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java @@ -120,7 +120,7 @@ public class PhoneNumberPreferenceController extends BasePreferenceController { private CharSequence getFirstPhoneNumber() { final List subscriptionInfoList = mSubscriptionManager.getActiveSubscriptionInfoList(true); - if (subscriptionInfoList == null) { + if (subscriptionInfoList == null || subscriptionInfoList.isEmpty()) { return mContext.getText(R.string.device_info_default); } diff --git a/tests/robotests/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.java index 023135d4d7f..3e6e4360f37 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.java @@ -149,6 +149,16 @@ public class PhoneNumberPreferenceControllerTest { assertThat(primaryNumber).isEqualTo(mContext.getString(R.string.device_info_default)); } + @Test + public void getSummary_getEmptySubscriptionInfo_shouldShowUnknown() { + List infos = new ArrayList<>(); + when(mSubscriptionManager.getActiveSubscriptionInfoList(eq(true))).thenReturn(infos); + + CharSequence primaryNumber = mController.getSummary(); + + assertThat(primaryNumber).isEqualTo(mContext.getString(R.string.device_info_default)); + } + @Test public void isSliceable_shouldBeTrue() { assertThat(mController.isSliceable()).isTrue();