Merge "[Provider Model] The SIMs page should list all p-SIMs" into sc-qpr1-dev am: 39b6769e5e
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/15834629
Change-Id: I80712b16464d2104e570038060044bde74c9c4fb
diff --git a/src/com/android/settings/network/MobileNetworkListFragment.java b/src/com/android/settings/network/MobileNetworkListFragment.java
index 1767c1c..03e5a01 100644
--- a/src/com/android/settings/network/MobileNetworkListFragment.java
+++ b/src/com/android/settings/network/MobileNetworkListFragment.java
@@ -65,14 +65,12 @@
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 f7c70f2..f5176b0 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 @@
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 @@
@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 814a461..8fb6cb6 100644
--- a/src/com/android/settings/network/NetworkProviderSimListController.java
+++ b/src/com/android/settings/network/NetworkProviderSimListController.java
@@ -172,7 +172,6 @@
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 e27575a..06035a9 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 @@
@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 e34b489..9045502 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 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.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 @@
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 @@
@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 3b0a40a..066cf6b 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 @@
assertTrue(TextUtils.equals(mController.getSummary(SUB_ID_1, DISPLAY_NAME_1), summary));
}
-
@Test
@UiThreadTest
public void getSummary_inactivePSim() {
@@ -227,4 +230,18 @@
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 cfa376b..c8d750c 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 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.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 @@
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 @@
@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);
+ }
+
}