diff --git a/src/com/android/settings/network/MobileNetworkListFragment.java b/src/com/android/settings/network/MobileNetworkListFragment.java index 1767c1c8039..03e5a010631 100644 --- a/src/com/android/settings/network/MobileNetworkListFragment.java +++ b/src/com/android/settings/network/MobileNetworkListFragment.java @@ -65,14 +65,12 @@ public class MobileNetworkListFragment extends DashboardFragment { if (Utils.isProviderModelEnabled(getContext())) { NetworkProviderSimsCategoryController simCategoryPrefCtrl = - new NetworkProviderSimsCategoryController(context, KEY_PREFERENCE_CATEGORY_SIM); - simCategoryPrefCtrl.init(getSettingsLifecycle()); + new NetworkProviderSimsCategoryController(context, KEY_PREFERENCE_CATEGORY_SIM, + getSettingsLifecycle()); controllers.add(simCategoryPrefCtrl); - NetworkProviderDownloadedSimsCategoryController downloadedSimsCategoryCtrl = new NetworkProviderDownloadedSimsCategoryController(context, - KEY_PREFERENCE_CATEGORY_DOWNLOADED_SIM); - downloadedSimsCategoryCtrl.init(getSettingsLifecycle()); + KEY_PREFERENCE_CATEGORY_DOWNLOADED_SIM, getSettingsLifecycle()); controllers.add(downloadedSimsCategoryCtrl); } else { controllers.add(new MobileNetworkListController(getContext(), getLifecycle())); diff --git a/src/com/android/settings/network/NetworkProviderDownloadedSimsCategoryController.java b/src/com/android/settings/network/NetworkProviderDownloadedSimsCategoryController.java index f7c70f25a90..f5176b030d4 100644 --- a/src/com/android/settings/network/NetworkProviderDownloadedSimsCategoryController.java +++ b/src/com/android/settings/network/NetworkProviderDownloadedSimsCategoryController.java @@ -1,8 +1,8 @@ package com.android.settings.network; import android.content.Context; +import android.util.Log; -import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; @@ -15,23 +15,17 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver; public class NetworkProviderDownloadedSimsCategoryController extends PreferenceCategoryController implements LifecycleObserver { + private static final String LOG_TAG = "NetworkProviderDownloadedSimsCategoryController"; private static final String KEY_PREFERENCE_CATEGORY_DOWNLOADED_SIM = "provider_model_downloaded_sim_category"; private PreferenceCategory mPreferenceCategory; private NetworkProviderDownloadedSimListController mNetworkProviderDownloadedSimListController; - public NetworkProviderDownloadedSimsCategoryController(Context context, String key) { - super(context, key); - } - - public void init(Lifecycle lifecycle) { - mNetworkProviderDownloadedSimListController = createDownloadedSimListController(lifecycle); - } - - @VisibleForTesting - protected NetworkProviderDownloadedSimListController createDownloadedSimListController( + public NetworkProviderDownloadedSimsCategoryController(Context context, String key, Lifecycle lifecycle) { - return new NetworkProviderDownloadedSimListController(mContext, lifecycle); + super(context, key); + mNetworkProviderDownloadedSimListController = + new NetworkProviderDownloadedSimListController(mContext, lifecycle); } @Override @@ -47,15 +41,23 @@ public class NetworkProviderDownloadedSimsCategoryController extends @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); + mNetworkProviderDownloadedSimListController.displayPreference(screen); mPreferenceCategory = screen.findPreference( KEY_PREFERENCE_CATEGORY_DOWNLOADED_SIM); + if (mPreferenceCategory == null) { + Log.d(LOG_TAG, "displayPreference(), Can not find the category."); + return; + } mPreferenceCategory.setVisible(isAvailable()); - mNetworkProviderDownloadedSimListController.displayPreference(screen); } @Override public void updateState(Preference preference) { super.updateState(preference); + if (mPreferenceCategory == null) { + Log.d(LOG_TAG, "updateState(), Can not find the category."); + return; + } int count = mPreferenceCategory.getPreferenceCount(); String title = mContext.getString(count > 1 ? R.string.downloaded_sims_category_title diff --git a/src/com/android/settings/network/NetworkProviderSimListController.java b/src/com/android/settings/network/NetworkProviderSimListController.java index 814a461e988..8fb6cb65d36 100644 --- a/src/com/android/settings/network/NetworkProviderSimListController.java +++ b/src/com/android/settings/network/NetworkProviderSimListController.java @@ -172,7 +172,6 @@ public class NetworkProviderSimListController extends AbstractPreferenceControll for (SubscriptionInfo info : SubscriptionUtil.getAvailableSubscriptions(mContext)) { if (!info.isEmbedded()) { subList.add(info); - break; } } return subList; diff --git a/src/com/android/settings/network/NetworkProviderSimsCategoryController.java b/src/com/android/settings/network/NetworkProviderSimsCategoryController.java index e27575a3b63..06035a91e44 100644 --- a/src/com/android/settings/network/NetworkProviderSimsCategoryController.java +++ b/src/com/android/settings/network/NetworkProviderSimsCategoryController.java @@ -17,33 +17,28 @@ package com.android.settings.network; import android.content.Context; +import android.util.Log; -import androidx.annotation.VisibleForTesting; +import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; +import com.android.settings.R; import com.android.settings.widget.PreferenceCategoryController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; public class NetworkProviderSimsCategoryController extends PreferenceCategoryController implements LifecycleObserver { - + private static final String LOG_TAG = "NetworkProviderSimsCategoryController"; private static final String KEY_PREFERENCE_CATEGORY_SIM = "provider_model_sim_category"; private NetworkProviderSimListController mNetworkProviderSimListController; + private PreferenceCategory mPreferenceCategory; - public NetworkProviderSimsCategoryController(Context context, String key) { + public NetworkProviderSimsCategoryController(Context context, String key, Lifecycle lifecycle) { super(context, key); - } - - public void init(Lifecycle lifecycle) { - mNetworkProviderSimListController = createSimListController(lifecycle); - } - - @VisibleForTesting - protected NetworkProviderSimListController createSimListController( - Lifecycle lifecycle) { - return new NetworkProviderSimListController(mContext, lifecycle); + mNetworkProviderSimListController = + new NetworkProviderSimListController(mContext, lifecycle); } @Override @@ -59,8 +54,26 @@ public class NetworkProviderSimsCategoryController extends PreferenceCategoryCon @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); - PreferenceCategory preferenceCategory = screen.findPreference(KEY_PREFERENCE_CATEGORY_SIM); - preferenceCategory.setVisible(isAvailable()); mNetworkProviderSimListController.displayPreference(screen); + mPreferenceCategory = screen.findPreference(KEY_PREFERENCE_CATEGORY_SIM); + if (mPreferenceCategory == null) { + Log.d(LOG_TAG, "displayPreference(), Can not find the category."); + return; + } + mPreferenceCategory.setVisible(isAvailable()); + } + + @Override + public void updateState(Preference preference) { + super.updateState(preference); + if (mPreferenceCategory == null) { + Log.d(LOG_TAG, "updateState(), Can not find the category."); + return; + } + int count = mPreferenceCategory.getPreferenceCount(); + String title = mContext.getString(count > 1 + ? R.string.provider_network_settings_title + : R.string.sim_category_title); + mPreferenceCategory.setTitle(title); } } diff --git a/tests/unit/src/com/android/settings/network/NetworkProviderDownloadedSimsCategoryControllerTest.java b/tests/unit/src/com/android/settings/network/NetworkProviderDownloadedSimsCategoryControllerTest.java index e34b489844e..90455022eda 100644 --- a/tests/unit/src/com/android/settings/network/NetworkProviderDownloadedSimsCategoryControllerTest.java +++ b/tests/unit/src/com/android/settings/network/NetworkProviderDownloadedSimsCategoryControllerTest.java @@ -26,9 +26,12 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.os.Looper; +import android.telephony.SubscriptionInfo; +import com.android.settings.testutils.ResourcesUtils; import com.android.settingslib.core.lifecycle.Lifecycle; +import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; @@ -41,38 +44,39 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.ArrayList; +import java.util.Arrays; + @RunWith(AndroidJUnit4.class) public class NetworkProviderDownloadedSimsCategoryControllerTest { private static final String KEY_PREFERENCE_CATEGORY_DOWNLOADED_SIM = "provider_model_downloaded_sim_category"; + private static final String KEY_ADD_MORE = "add_more"; + private static final String SUB_1 = "SUB_1"; + private static final String SUB_2 = "SUB_2"; + private static final int SUB_ID_1 = 1; + private static final int SUB_ID_2 = 2; - @Mock - private NetworkProviderDownloadedSimListController mNetworkProviderDownloadedSimListController; - @Mock - private PreferenceCategory mPreferenceCategory; @Mock private Lifecycle mLifecycle; + @Mock + private SubscriptionInfo mSubscriptionInfo1; + @Mock + private SubscriptionInfo mSubscriptionInfo2; private Context mContext; private NetworkProviderDownloadedSimsCategoryController mCategoryController; - + private PreferenceCategory mPreferenceCategory; private PreferenceManager mPreferenceManager; private PreferenceScreen mPreferenceScreen; + private Preference mAddMorePreference; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mContext = spy(ApplicationProvider.getApplicationContext()); - mCategoryController = new NetworkProviderDownloadedSimsCategoryController( - mContext, KEY_PREFERENCE_CATEGORY_DOWNLOADED_SIM) { - @Override - protected NetworkProviderDownloadedSimListController createDownloadedSimListController( - Lifecycle lifecycle) { - return mNetworkProviderDownloadedSimListController; - } - }; if (Looper.myLooper() == null) { Looper.prepare(); @@ -80,14 +84,21 @@ public class NetworkProviderDownloadedSimsCategoryControllerTest { mPreferenceManager = new PreferenceManager(mContext); mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext); - when(mPreferenceCategory.getKey()).thenReturn(KEY_PREFERENCE_CATEGORY_DOWNLOADED_SIM); - when(mPreferenceCategory.getPreferenceCount()).thenReturn(1); + mPreferenceCategory = new PreferenceCategory(mContext); + mPreferenceCategory.setKey(KEY_PREFERENCE_CATEGORY_DOWNLOADED_SIM); + mAddMorePreference = new Preference(mContext); + mAddMorePreference.setKey(KEY_ADD_MORE); + mAddMorePreference.setVisible(true); mPreferenceScreen.addPreference(mPreferenceCategory); + mPreferenceScreen.addPreference(mAddMorePreference); + + mCategoryController = new NetworkProviderDownloadedSimsCategoryController(mContext, + KEY_PREFERENCE_CATEGORY_DOWNLOADED_SIM, mLifecycle); } @Test public void getAvailabilityStatus_returnUnavailable() { - mNetworkProviderDownloadedSimListController = null; + SubscriptionUtil.setAvailableSubscriptionsForTesting(new ArrayList<>()); assertThat(mCategoryController.getAvailabilityStatus()).isEqualTo( CONDITIONALLY_UNAVAILABLE); @@ -95,10 +106,46 @@ public class NetworkProviderDownloadedSimsCategoryControllerTest { @Test public void displayPreference_isVisible() { - when(mNetworkProviderDownloadedSimListController.isAvailable()).thenReturn(true); - mCategoryController.init(mLifecycle); + setUpSubscriptionInfoForDownloadedSim(SUB_ID_1, SUB_1, mSubscriptionInfo1); + SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscriptionInfo1)); mCategoryController.displayPreference(mPreferenceScreen); assertEquals(mPreferenceCategory.isVisible(), true); } + + + @Test + public void updateState_setTitle_withTwoDownloadedSims_returnDownloadedSims() { + setUpSubscriptionInfoForDownloadedSim(SUB_ID_1, SUB_1, mSubscriptionInfo1); + setUpSubscriptionInfoForDownloadedSim(SUB_ID_2, SUB_2, mSubscriptionInfo2); + SubscriptionUtil.setAvailableSubscriptionsForTesting( + Arrays.asList(mSubscriptionInfo1, mSubscriptionInfo2)); + + mCategoryController.displayPreference(mPreferenceScreen); + mCategoryController.updateState(mPreferenceCategory); + + assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(2); + assertThat(mPreferenceCategory.getTitle()).isEqualTo( + ResourcesUtils.getResourcesString(mContext, "downloaded_sims_category_title")); + } + + @Test + public void updateState_setTitle_withOneDownloadedSim_returnDownloadedSim() { + setUpSubscriptionInfoForDownloadedSim(SUB_ID_1, SUB_1, mSubscriptionInfo1); + SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscriptionInfo1)); + + mCategoryController.displayPreference(mPreferenceScreen); + mCategoryController.updateState(mPreferenceCategory); + + assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(1); + assertThat(mPreferenceCategory.getTitle()).isEqualTo( + ResourcesUtils.getResourcesString(mContext, "downloaded_sim_category_title")); + } + + private void setUpSubscriptionInfoForDownloadedSim(int subId, String displayName, + SubscriptionInfo subscriptionInfo) { + when(subscriptionInfo.isEmbedded()).thenReturn(true); + when(subscriptionInfo.getSubscriptionId()).thenReturn(subId); + when(subscriptionInfo.getDisplayName()).thenReturn(displayName); + } } diff --git a/tests/unit/src/com/android/settings/network/NetworkProviderSimListControllerTest.java b/tests/unit/src/com/android/settings/network/NetworkProviderSimListControllerTest.java index 3b0a40ab702..066cf6b5f69 100644 --- a/tests/unit/src/com/android/settings/network/NetworkProviderSimListControllerTest.java +++ b/tests/unit/src/com/android/settings/network/NetworkProviderSimListControllerTest.java @@ -16,10 +16,14 @@ package com.android.settings.network; +import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE; +import static com.google.common.truth.Truth.assertThat; + import static androidx.lifecycle.Lifecycle.Event; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; @@ -170,7 +174,6 @@ public class NetworkProviderSimListControllerTest { assertTrue(TextUtils.equals(mController.getSummary(SUB_ID_1, DISPLAY_NAME_1), summary)); } - @Test @UiThreadTest public void getSummary_inactivePSim() { @@ -227,4 +230,18 @@ public class NetworkProviderSimListControllerTest { assertTrue(TextUtils.equals(mController.getSummary(SUB_ID_1, DISPLAY_NAME_1), summary)); } + @Test + @UiThreadTest + public void getAvailablePhysicalSubscription_withTwoPhysicalSims_returnTwo() { + final SubscriptionInfo info1 = mock(SubscriptionInfo.class); + when(info1.isEmbedded()).thenReturn(false); + final SubscriptionInfo info2 = mock(SubscriptionInfo.class); + when(info2.isEmbedded()).thenReturn(false); + when(mSubscriptionManager.getAvailableSubscriptionInfoList()).thenReturn( + Arrays.asList(info1, info2)); + displayPreferenceWithLifecycle(); + + assertThat(mController.getAvailablePhysicalSubscription().size()).isEqualTo(2); + } + } diff --git a/tests/unit/src/com/android/settings/network/NetworkProviderSimsCategoryControllerTest.java b/tests/unit/src/com/android/settings/network/NetworkProviderSimsCategoryControllerTest.java index cfa376bd183..c8d750ce437 100644 --- a/tests/unit/src/com/android/settings/network/NetworkProviderSimsCategoryControllerTest.java +++ b/tests/unit/src/com/android/settings/network/NetworkProviderSimsCategoryControllerTest.java @@ -17,6 +17,7 @@ package com.android.settings.network; import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE; + import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; @@ -25,7 +26,10 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.os.Looper; +import android.telephony.SubscriptionInfo; +import android.telephony.SubscriptionManager; +import com.android.settings.testutils.ResourcesUtils; import com.android.settingslib.core.lifecycle.Lifecycle; import androidx.preference.PreferenceCategory; @@ -40,37 +44,35 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.ArrayList; +import java.util.Arrays; + @RunWith(AndroidJUnit4.class) public class NetworkProviderSimsCategoryControllerTest { private static final String KEY_PREFERENCE_CATEGORY_SIM = "provider_model_sim_category"; + private static final String SUB_1 = "SUB_1"; + private static final String SUB_2 = "SUB_2"; + private static final int SUB_ID_1 = 1; + private static final int SUB_ID_2 = 2; - @Mock - private NetworkProviderSimListController mNetworkProviderSimListController; - @Mock - private PreferenceCategory mPreferenceCategory; @Mock private Lifecycle mLifecycle; + @Mock + private SubscriptionInfo mSubscriptionInfo1; + @Mock + private SubscriptionInfo mSubscriptionInfo2; private Context mContext; private NetworkProviderSimsCategoryController mCategoryController; - private PreferenceManager mPreferenceManager; private PreferenceScreen mPreferenceScreen; + private PreferenceCategory mPreferenceCategory; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); - mContext = spy(ApplicationProvider.getApplicationContext()); - mCategoryController = new NetworkProviderSimsCategoryController( - mContext, KEY_PREFERENCE_CATEGORY_SIM) { - @Override - protected NetworkProviderSimListController createSimListController( - Lifecycle lifecycle) { - return mNetworkProviderSimListController; - } - }; if (Looper.myLooper() == null) { Looper.prepare(); @@ -78,14 +80,17 @@ public class NetworkProviderSimsCategoryControllerTest { mPreferenceManager = new PreferenceManager(mContext); mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext); - when(mPreferenceCategory.getKey()).thenReturn(KEY_PREFERENCE_CATEGORY_SIM); - when(mPreferenceCategory.getPreferenceCount()).thenReturn(1); + mPreferenceCategory = new PreferenceCategory(mContext); + mPreferenceCategory.setKey(KEY_PREFERENCE_CATEGORY_SIM); mPreferenceScreen.addPreference(mPreferenceCategory); + + mCategoryController = new NetworkProviderSimsCategoryController( + mContext, KEY_PREFERENCE_CATEGORY_SIM, mLifecycle); } @Test public void getAvailabilityStatus_returnUnavailable() { - mNetworkProviderSimListController = null; + SubscriptionUtil.setAvailableSubscriptionsForTesting(new ArrayList<>()); assertThat(mCategoryController.getAvailabilityStatus()).isEqualTo( CONDITIONALLY_UNAVAILABLE); @@ -93,10 +98,46 @@ public class NetworkProviderSimsCategoryControllerTest { @Test public void displayPreference_isVisible() { - when(mNetworkProviderSimListController.isAvailable()).thenReturn(true); - mCategoryController.init(mLifecycle); + setUpSubscriptionInfoForPhysicalSim(SUB_ID_1, SUB_1, mSubscriptionInfo1); + SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscriptionInfo1)); mCategoryController.displayPreference(mPreferenceScreen); assertEquals(mPreferenceCategory.isVisible(), true); } + + @Test + public void updateState_setTitle_withTwoPhysicalSims_returnSims() { + setUpSubscriptionInfoForPhysicalSim(SUB_ID_1, SUB_1, mSubscriptionInfo1); + setUpSubscriptionInfoForPhysicalSim(SUB_ID_2, SUB_2, mSubscriptionInfo2); + SubscriptionUtil.setAvailableSubscriptionsForTesting( + Arrays.asList(mSubscriptionInfo1, mSubscriptionInfo2)); + + mCategoryController.displayPreference(mPreferenceScreen); + mCategoryController.updateState(mPreferenceCategory); + + assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(2); + assertThat(mPreferenceCategory.getTitle()).isEqualTo( + ResourcesUtils.getResourcesString(mContext, "provider_network_settings_title")); + } + + @Test + public void updateState_setTitle_withOnePhysicalSim_returnSim() { + setUpSubscriptionInfoForPhysicalSim(SUB_ID_1, SUB_1, mSubscriptionInfo1); + SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscriptionInfo1)); + + mCategoryController.displayPreference(mPreferenceScreen); + mCategoryController.updateState(mPreferenceCategory); + + assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(1); + assertThat(mPreferenceCategory.getTitle()).isEqualTo( + ResourcesUtils.getResourcesString(mContext, "sim_category_title")); + } + + private void setUpSubscriptionInfoForPhysicalSim(int subId, String displayName, + SubscriptionInfo subscriptionInfo) { + when(subscriptionInfo.isEmbedded()).thenReturn(false); + when(subscriptionInfo.getSubscriptionId()).thenReturn(subId); + when(subscriptionInfo.getDisplayName()).thenReturn(displayName); + } + }