diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java index 224fc41e0b9..5f1becaf54d 100644 --- a/src/com/android/settings/network/SubscriptionUtil.java +++ b/src/com/android/settings/network/SubscriptionUtil.java @@ -27,16 +27,33 @@ import java.util.Iterator; import java.util.List; public class SubscriptionUtil { - private static List sResultsForTesting; + private static List sAvailableResultsForTesting; + private static List sActiveResultsForTesting; @VisibleForTesting public static void setAvailableSubscriptionsForTesting(List results) { - sResultsForTesting = results; + sAvailableResultsForTesting = results; + } + + @VisibleForTesting + public static void setActiveSubscriptionsForTesting(List results) { + sActiveResultsForTesting = results; + } + + public static List getActiveSubscriptions(SubscriptionManager manager) { + if (sActiveResultsForTesting != null) { + return sActiveResultsForTesting; + } + List subscriptions = manager.getActiveSubscriptionInfoList(true); + if (subscriptions == null) { + return new ArrayList<>(); + } + return subscriptions; } public static List getAvailableSubscriptions(SubscriptionManager manager) { - if (sResultsForTesting != null) { - return sResultsForTesting; + if (sAvailableResultsForTesting != null) { + return sAvailableResultsForTesting; } List subscriptions = manager.getSelectableSubscriptionInfoList(); if (subscriptions == null) { diff --git a/src/com/android/settings/network/SubscriptionsPreferenceController.java b/src/com/android/settings/network/SubscriptionsPreferenceController.java index 1ff67f8b307..88ff5cf247f 100644 --- a/src/com/android/settings/network/SubscriptionsPreferenceController.java +++ b/src/com/android/settings/network/SubscriptionsPreferenceController.java @@ -129,7 +129,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl mSubscriptionPreferences = new ArrayMap<>(); int order = mStartOrder; - for (SubscriptionInfo info : SubscriptionUtil.getAvailableSubscriptions(mManager)) { + for (SubscriptionInfo info : SubscriptionUtil.getActiveSubscriptions(mManager)) { final int subId = info.getSubscriptionId(); Preference pref = existingPrefs.remove(subId); if (pref == null) { @@ -216,7 +216,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl if (mSubscriptionsListener.isAirplaneModeOn()) { return false; } - return SubscriptionUtil.getAvailableSubscriptions(mManager).size() >= 2; + return SubscriptionUtil.getActiveSubscriptions(mManager).size() >= 2; } @Override diff --git a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java index e982a6ba2db..02a2d58c009 100644 --- a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java +++ b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java @@ -75,7 +75,7 @@ public abstract class DefaultSubscriptionController extends BasePreferenceContro @Override public int getAvailabilityStatus() { - final List subs = SubscriptionUtil.getAvailableSubscriptions(mManager); + final List subs = SubscriptionUtil.getActiveSubscriptions(mManager); if (subs.size() > 1) { return AVAILABLE; } else { @@ -121,7 +121,7 @@ public abstract class DefaultSubscriptionController extends BasePreferenceContro } mPreference.setVisible(true); - final List subs = SubscriptionUtil.getAvailableSubscriptions(mManager); + final List subs = SubscriptionUtil.getActiveSubscriptions(mManager); // We'll have one entry for each available subscription, plus one for a "ask me every // time" entry at the end. diff --git a/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java index dbc122a3256..c074466b789 100644 --- a/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java +++ b/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java @@ -18,6 +18,7 @@ package com.android.settings.network; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -108,4 +109,32 @@ public class SubscriptionUtilTest { assertThat(subs.get(0).getSubscriptionId()).isEqualTo(1); assertThat(subs.get(1).getSubscriptionId()).isEqualTo(4); } + + @Test + public void getActiveSubscriptions_nullInfoFromSubscriptionManager_nonNullResult() { + when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(null); + final List subs = SubscriptionUtil.getActiveSubscriptions(mManager); + assertThat(subs).isNotNull(); + assertThat(subs).isEmpty(); + } + + @Test + public void getActiveSubscriptions_oneSubscription_oneResult() { + final SubscriptionInfo info = mock(SubscriptionInfo.class); + when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(Arrays.asList(info)); + final List subs = SubscriptionUtil.getActiveSubscriptions(mManager); + assertThat(subs).isNotNull(); + assertThat(subs).hasSize(1); + } + + @Test + public void getActiveSubscriptions_twoSubscriptions_twoResults() { + final SubscriptionInfo info1 = mock(SubscriptionInfo.class); + final SubscriptionInfo info2 = mock(SubscriptionInfo.class); + when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn( + Arrays.asList(info1, info2)); + final List subs = SubscriptionUtil.getActiveSubscriptions(mManager); + assertThat(subs).isNotNull(); + assertThat(subs).hasSize(2); + } } diff --git a/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java index 97966b3420a..26f26ff5505 100644 --- a/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java @@ -103,19 +103,19 @@ public class SubscriptionsPreferenceControllerTest { @After public void tearDown() { - SubscriptionUtil.setAvailableSubscriptionsForTesting(null); + SubscriptionUtil.setActiveSubscriptionsForTesting(null); } @Test public void isAvailable_oneSubscription_availableFalse() { - SubscriptionUtil.setAvailableSubscriptionsForTesting( + SubscriptionUtil.setActiveSubscriptionsForTesting( Arrays.asList(mock(SubscriptionInfo.class))); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_twoSubscriptions_availableTrue() { - SubscriptionUtil.setAvailableSubscriptionsForTesting( + SubscriptionUtil.setActiveSubscriptionsForTesting( Arrays.asList(mock(SubscriptionInfo.class), mock(SubscriptionInfo.class))); assertThat(mController.isAvailable()).isTrue(); } @@ -126,13 +126,13 @@ public class SubscriptionsPreferenceControllerTest { for (int i = 0; i < 5; i++) { subs.add(mock(SubscriptionInfo.class)); } - SubscriptionUtil.setAvailableSubscriptionsForTesting(subs); + SubscriptionUtil.setActiveSubscriptionsForTesting(subs); assertThat(mController.isAvailable()).isTrue(); } @Test public void isAvailable_airplaneModeOn_availableFalse() { - SubscriptionUtil.setAvailableSubscriptionsForTesting( + SubscriptionUtil.setActiveSubscriptionsForTesting( Arrays.asList(mock(SubscriptionInfo.class), mock(SubscriptionInfo.class))); assertThat(mController.isAvailable()).isTrue(); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1); @@ -141,7 +141,7 @@ public class SubscriptionsPreferenceControllerTest { @Test public void onAirplaneModeChanged_airplaneModeTurnedOn_eventFired() { - SubscriptionUtil.setAvailableSubscriptionsForTesting( + SubscriptionUtil.setActiveSubscriptionsForTesting( Arrays.asList(mock(SubscriptionInfo.class), mock(SubscriptionInfo.class))); mController.onResume(); mController.displayPreference(mScreen); @@ -157,7 +157,7 @@ public class SubscriptionsPreferenceControllerTest { @Test public void onAirplaneModeChanged_airplaneModeTurnedOff_eventFired() { Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1); - SubscriptionUtil.setAvailableSubscriptionsForTesting( + SubscriptionUtil.setActiveSubscriptionsForTesting( Arrays.asList(mock(SubscriptionInfo.class), mock(SubscriptionInfo.class))); mController.onResume(); mController.displayPreference(mScreen); @@ -174,13 +174,13 @@ public class SubscriptionsPreferenceControllerTest { public void onSubscriptionsChanged_countBecameTwo_eventFired() { final SubscriptionInfo sub1 = mock(SubscriptionInfo.class); final SubscriptionInfo sub2 = mock(SubscriptionInfo.class); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1)); mController.onResume(); mController.displayPreference(mScreen); assertThat(mController.isAvailable()).isFalse(); final int updateCountBeforeSubscriptionChange = mOnChildUpdatedCount; - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2)); mController.onSubscriptionsChanged(); assertThat(mController.isAvailable()).isTrue(); assertThat(mOnChildUpdatedCount).isEqualTo(updateCountBeforeSubscriptionChange + 1); @@ -192,14 +192,14 @@ public class SubscriptionsPreferenceControllerTest { final SubscriptionInfo sub2 = mock(SubscriptionInfo.class); when(sub1.getSubscriptionId()).thenReturn(1); when(sub2.getSubscriptionId()).thenReturn(2); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2)); mController.onResume(); mController.displayPreference(mScreen); assertThat(mController.isAvailable()).isTrue(); verify(mPreferenceCategory, times(2)).addPreference(any(Preference.class)); final int updateCountBeforeSubscriptionChange = mOnChildUpdatedCount; - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1)); mController.onSubscriptionsChanged(); assertThat(mController.isAvailable()).isFalse(); assertThat(mOnChildUpdatedCount).isEqualTo(updateCountBeforeSubscriptionChange + 1); @@ -221,7 +221,7 @@ public class SubscriptionsPreferenceControllerTest { when(sub3.getSubscriptionId()).thenReturn(3); // Start out with only sub1 and sub2. - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2)); mController.onResume(); mController.displayPreference(mScreen); final ArgumentCaptor captor = ArgumentCaptor.forClass(Preference.class); @@ -233,7 +233,7 @@ public class SubscriptionsPreferenceControllerTest { // Now replace sub2 with sub3, and make sure the old preference was removed and the new // preference was added. final int updateCountBeforeSubscriptionChange = mOnChildUpdatedCount; - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub3)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub3)); mController.onSubscriptionsChanged(); assertThat(mController.isAvailable()).isTrue(); assertThat(mOnChildUpdatedCount).isEqualTo(updateCountBeforeSubscriptionChange + 1); @@ -259,7 +259,7 @@ public class SubscriptionsPreferenceControllerTest { doReturn(i + 1).when(sub).getSubscriptionId(); subscriptions.add(sub); } - SubscriptionUtil.setAvailableSubscriptionsForTesting(subscriptions); + SubscriptionUtil.setActiveSubscriptionsForTesting(subscriptions); mController.displayPreference(mScreen); final ArgumentCaptor prefCaptor = ArgumentCaptor.forClass(Preference.class); verify(mPreferenceCategory, times(subscriptionCount)).addPreference(prefCaptor.capture()); @@ -303,7 +303,7 @@ public class SubscriptionsPreferenceControllerTest { final SubscriptionInfo sub2 = mock(SubscriptionInfo.class); when(sub1.getSubscriptionId()).thenReturn(11); when(sub2.getSubscriptionId()).thenReturn(22); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2)); ShadowSubscriptionManager.setDefaultDataSubscriptionId(11); ShadowSubscriptionManager.setDefaultSmsSubscriptionId(11); @@ -324,7 +324,7 @@ public class SubscriptionsPreferenceControllerTest { final SubscriptionInfo sub2 = mock(SubscriptionInfo.class); when(sub1.getSubscriptionId()).thenReturn(11); when(sub2.getSubscriptionId()).thenReturn(22); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2)); ShadowSubscriptionManager.setDefaultVoiceSubscriptionId(11); ShadowSubscriptionManager.setDefaultSmsSubscriptionId(11); @@ -346,7 +346,7 @@ public class SubscriptionsPreferenceControllerTest { final SubscriptionInfo sub2 = mock(SubscriptionInfo.class); when(sub1.getSubscriptionId()).thenReturn(11); when(sub2.getSubscriptionId()).thenReturn(22); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2)); ShadowSubscriptionManager.setDefaultDataSubscriptionId(11); ShadowSubscriptionManager.setDefaultSmsSubscriptionId(22); diff --git a/tests/robotests/src/com/android/settings/network/telephony/DefaultSubscriptionControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/DefaultSubscriptionControllerTest.java index e503d70599d..7dd636a4ab8 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/DefaultSubscriptionControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/DefaultSubscriptionControllerTest.java @@ -73,19 +73,19 @@ public class DefaultSubscriptionControllerTest { @After public void tearDown() { - SubscriptionUtil.setAvailableSubscriptionsForTesting(null); + SubscriptionUtil.setActiveSubscriptionsForTesting(null); } @Test public void getAvailabilityStatus_onlyOneSubscription_notAvailable() { - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList( + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList( createMockSub(1, "sub1"))); assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE); } @Test public void getAvailabilityStatus_twoSubscriptions_isAvailable() { - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList( + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList( createMockSub(1, "sub1"), createMockSub(2, "sub2"))); assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); @@ -95,7 +95,7 @@ public class DefaultSubscriptionControllerTest { public void displayPreference_twoSubscriptionsSub1Default_correctListPreferenceValues() { final SubscriptionInfo sub1 = createMockSub(111, "sub1"); final SubscriptionInfo sub2 = createMockSub(222, "sub2"); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2)); doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId(); mController.displayPreference(mScreen); @@ -123,7 +123,7 @@ public class DefaultSubscriptionControllerTest { public void displayPreference_twoSubscriptionsSub2Default_correctListPreferenceValues() { final SubscriptionInfo sub1 = createMockSub(111, "sub1"); final SubscriptionInfo sub2 = createMockSub(222, "sub2"); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2)); doReturn(sub2.getSubscriptionId()).when(mController).getDefaultSubscriptionId(); mController.displayPreference(mScreen); @@ -156,7 +156,7 @@ public class DefaultSubscriptionControllerTest { // Mark sub2 as opportunistic; then it should not appear in the list of entries/entryValues. when(sub2.isOpportunistic()).thenReturn(true); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2, sub3)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2, sub3)); doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId(); mController.displayPreference(mScreen); @@ -179,7 +179,7 @@ public class DefaultSubscriptionControllerTest { public void onPreferenceChange_prefChangedToSub2_callbackCalledCorrectly() { final SubscriptionInfo sub1 = createMockSub(111, "sub1"); final SubscriptionInfo sub2 = createMockSub(222, "sub2"); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2)); doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId(); mController.displayPreference(mScreen); @@ -192,7 +192,7 @@ public class DefaultSubscriptionControllerTest { public void onPreferenceChange_prefChangedToAlwaysAsk_callbackCalledCorrectly() { final SubscriptionInfo sub1 = createMockSub(111, "sub1"); final SubscriptionInfo sub2 = createMockSub(222, "sub2"); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2)); doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId(); mController.displayPreference(mScreen); @@ -207,7 +207,7 @@ public class DefaultSubscriptionControllerTest { public void onSubscriptionsChanged_twoSubscriptionsDefaultChanges_selectedEntryGetsUpdated() { final SubscriptionInfo sub1 = createMockSub(111, "sub1"); final SubscriptionInfo sub2 = createMockSub(222, "sub2"); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2)); doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId(); mController.displayPreference(mScreen); @@ -224,14 +224,14 @@ public class DefaultSubscriptionControllerTest { public void onSubscriptionsChanged_goFromTwoSubscriptionsToOne_prefDisappears() { final SubscriptionInfo sub1 = createMockSub(111, "sub1"); final SubscriptionInfo sub2 = createMockSub(222, "sub2"); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2)); doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId(); mController.displayPreference(mScreen); assertThat(mController.isAvailable()).isTrue(); assertThat(mListPreference.isVisible()).isTrue(); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1)); mController.onSubscriptionsChanged(); assertThat(mController.isAvailable()).isFalse(); @@ -242,14 +242,14 @@ public class DefaultSubscriptionControllerTest { public void onSubscriptionsChanged_goFromOneSubscriptionToTwo_prefAppears() { final SubscriptionInfo sub1 = createMockSub(111, "sub1"); final SubscriptionInfo sub2 = createMockSub(222, "sub2"); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1)); doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId(); mController.displayPreference(mScreen); assertThat(mController.isAvailable()).isFalse(); assertThat(mListPreference.isVisible()).isFalse(); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2)); mController.onSubscriptionsChanged(); assertThat(mController.isAvailable()).isTrue(); @@ -261,13 +261,13 @@ public class DefaultSubscriptionControllerTest { final SubscriptionInfo sub1 = createMockSub(111, "sub1"); final SubscriptionInfo sub2 = createMockSub(222, "sub2"); final SubscriptionInfo sub3 = createMockSub(333, "sub3"); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2)); doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId(); mController.displayPreference(mScreen); assertThat(mListPreference.getEntries().length).isEqualTo(3); - SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2, sub3)); + SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2, sub3)); mController.onSubscriptionsChanged(); assertThat(mController.isAvailable()).isTrue();