Merge "Keystore 2.0: Update Wifi settings to use mostly public keystore API."
diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
index fd585a1..8a32a95 100644
--- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
@@ -164,7 +164,22 @@
}
}
- private final static class PreferenceEntriesBuilder {
+ enum EnabledNetworks {
+ ENABLED_NETWORKS_UNKNOWN,
+ ENABLED_NETWORKS_CDMA_CHOICES,
+ ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES,
+ ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES,
+ ENABLED_NETWORKS_TDSCDMA_CHOICES,
+ ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES,
+ ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES,
+ ENABLED_NETWORKS_EXCEPT_GSM_CHOICES,
+ ENABLED_NETWORKS_EXCEPT_LTE_CHOICES,
+ ENABLED_NETWORKS_4G_CHOICES,
+ ENABLED_NETWORKS_CHOICES,
+ PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE
+ }
+
+ private final class PreferenceEntriesBuilder {
private CarrierConfigManager mCarrierConfigManager;
private Context mContext;
private TelephonyManager mTelephonyManager;
@@ -181,21 +196,6 @@
private List<String> mEntries = new ArrayList<>();
private List<Integer> mEntriesValue = new ArrayList<>();
- enum EnabledNetworks {
- ENABLED_NETWORKS_UNKNOWN,
- ENABLED_NETWORKS_CDMA_CHOICES,
- ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES,
- ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES,
- ENABLED_NETWORKS_TDSCDMA_CHOICES,
- ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES,
- ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES,
- ENABLED_NETWORKS_EXCEPT_GSM_CHOICES,
- ENABLED_NETWORKS_EXCEPT_LTE_CHOICES,
- ENABLED_NETWORKS_4G_CHOICES,
- ENABLED_NETWORKS_CHOICES,
- PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE
- }
-
PreferenceEntriesBuilder(Context context, int subId) {
this.mContext = context;
this.mSubId = subId;
@@ -226,7 +226,7 @@
int[] entryValuesInt;
switch (getEnabledNetworkType()) {
case ENABLED_NETWORKS_CDMA_CHOICES:
- entryValues = mContext.getResources().getStringArray(
+ entryValues = getResourcesForSubId().getStringArray(
R.array.enabled_networks_cdma_values);
entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
if (entryValuesInt.length < 4) {
@@ -240,7 +240,7 @@
addGlobalEntry(entryValuesInt[3]);
break;
case ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES:
- entryValues = mContext.getResources().getStringArray(
+ entryValues = getResourcesForSubId().getStringArray(
R.array.enabled_networks_cdma_no_lte_values);
entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
if (entryValuesInt.length < 2) {
@@ -251,7 +251,7 @@
add1xEntry(entryValuesInt[1]);
break;
case ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES:
- entryValues = mContext.getResources().getStringArray(
+ entryValues = getResourcesForSubId().getStringArray(
R.array.enabled_networks_cdma_only_lte_values);
entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
if (entryValuesInt.length < 2) {
@@ -262,7 +262,7 @@
addGlobalEntry(entryValuesInt[1]);
break;
case ENABLED_NETWORKS_TDSCDMA_CHOICES:
- entryValues = mContext.getResources().getStringArray(
+ entryValues = getResourcesForSubId().getStringArray(
R.array.enabled_networks_tdscdma_values);
entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
if (entryValuesInt.length < 3) {
@@ -275,7 +275,7 @@
add2gEntry(entryValuesInt[2]);
break;
case ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES:
- entryValues = mContext.getResources().getStringArray(
+ entryValues = getResourcesForSubId().getStringArray(
R.array.enabled_networks_except_gsm_lte_values);
entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
if (entryValuesInt.length < 1) {
@@ -285,7 +285,7 @@
add3gEntry(entryValuesInt[0]);
break;
case ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES:
- entryValues = mContext.getResources().getStringArray(
+ entryValues = getResourcesForSubId().getStringArray(
R.array.enabled_networks_except_gsm_values);
entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
if (entryValuesInt.length < 2) {
@@ -297,7 +297,7 @@
add3gEntry(entryValuesInt[1]);
break;
case ENABLED_NETWORKS_EXCEPT_GSM_CHOICES:
- entryValues = mContext.getResources().getStringArray(
+ entryValues = getResourcesForSubId().getStringArray(
R.array.enabled_networks_except_gsm_values);
entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
if (entryValuesInt.length < 2) {
@@ -309,7 +309,7 @@
add3gEntry(entryValuesInt[1]);
break;
case ENABLED_NETWORKS_EXCEPT_LTE_CHOICES:
- entryValues = mContext.getResources().getStringArray(
+ entryValues = getResourcesForSubId().getStringArray(
R.array.enabled_networks_except_lte_values);
entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
if (entryValuesInt.length < 2) {
@@ -320,7 +320,7 @@
add2gEntry(entryValuesInt[1]);
break;
case ENABLED_NETWORKS_4G_CHOICES:
- entryValues = mContext.getResources().getStringArray(
+ entryValues = getResourcesForSubId().getStringArray(
R.array.enabled_networks_values);
entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
if (entryValuesInt.length < 3) {
@@ -334,7 +334,7 @@
add2gEntry(entryValuesInt[2]);
break;
case ENABLED_NETWORKS_CHOICES:
- entryValues = mContext.getResources().getStringArray(
+ entryValues = getResourcesForSubId().getStringArray(
R.array.enabled_networks_values);
entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
if (entryValuesInt.length < 3) {
@@ -346,7 +346,7 @@
add2gEntry(entryValuesInt[2]);
break;
case PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE:
- entryValues = mContext.getResources().getStringArray(
+ entryValues = getResourcesForSubId().getStringArray(
R.array.preferred_network_mode_values_world_mode);
entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
if (entryValuesInt.length < 3) {
@@ -354,9 +354,14 @@
"PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE index error.");
}
addGlobalEntry(entryValuesInt[0]);
- addCustomEntry(mContext.getString(R.string.network_world_mode_cdma_lte),
+
+ addCustomEntry(
+ getResourcesForSubId().getString(
+ R.string.network_world_mode_cdma_lte),
entryValuesInt[1]);
- addCustomEntry(mContext.getString(R.string.network_world_mode_gsm_lte),
+ addCustomEntry(
+ getResourcesForSubId().getString(
+ R.string.network_world_mode_gsm_lte),
entryValuesInt[2]);
break;
default:
@@ -571,8 +576,9 @@
case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_WCDMA:
setSelectedEntry(
TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA);
- setSummary(mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended));
+ setSummary(getResourcesForSubId().getString(R.string.network_5G)
+ + getResourcesForSubId().getString(
+ R.string.network_recommended));
break;
case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA:
case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM:
@@ -581,13 +587,15 @@
case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
setSelectedEntry(TelephonyManagerConstants
.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA);
- setSummary(mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended));
+ setSummary(getResourcesForSubId().getString(R.string.network_5G)
+ + getResourcesForSubId().getString(
+ R.string.network_recommended));
break;
case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO:
setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO);
- setSummary(mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended));
+ setSummary(getResourcesForSubId().getString(R.string.network_5G)
+ + getResourcesForSubId().getString(
+ R.string.network_recommended));
break;
case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA:
setSelectedEntry(
@@ -597,13 +605,15 @@
|| MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
setSummary(R.string.network_global);
} else {
- setSummary(mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended));
+ setSummary(getResourcesForSubId().getString(R.string.network_5G)
+ + getResourcesForSubId().getString(
+ R.string.network_recommended));
}
break;
default:
setSummary(
- mContext.getString(R.string.mobile_network_mode_error, networkMode));
+ getResourcesForSubId().getString(
+ R.string.mobile_network_mode_error, networkMode));
}
}
@@ -613,7 +623,7 @@
* @param networkType an LTE network mode without 5G.
* @return the corresponding network mode with 5G.
*/
- private static int addNrToLteNetworkType(int networkType) {
+ private int addNrToLteNetworkType(int networkType) {
switch(networkType) {
case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE;
@@ -647,7 +657,7 @@
* @param networkType an 5G network mode.
* @return the corresponding network mode without 5G.
*/
- private static int reduceNrToLteNetworkType(int networkType) {
+ private int reduceNrToLteNetworkType(int networkType) {
switch(networkType) {
case TelephonyManagerConstants.NETWORK_MODE_NR_LTE:
return TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY;
@@ -689,8 +699,8 @@
private void add5gEntry(int value) {
boolean isNRValue = value >= TelephonyManagerConstants.NETWORK_MODE_NR_ONLY;
if (showNrList() && isNRValue) {
- mEntries.add(mContext.getString(R.string.network_5G)
- + mContext.getString(R.string.network_recommended));
+ mEntries.add(getResourcesForSubId().getString(R.string.network_5G)
+ + getResourcesForSubId().getString(R.string.network_recommended));
mEntriesValue.add(value);
mIs5gEntryDisplayed = true;
} else {
@@ -706,7 +716,7 @@
Log.d(LOG_TAG, "addGlobalEntry. "
+ " supported5GRadioAccessFamily: " + mSupported5gRadioAccessFamily
+ " allowed5GNetworkType: " + mAllowed5gNetworkType);
- mEntries.add(mContext.getString(R.string.network_global));
+ mEntries.add(getResourcesForSubId().getString(R.string.network_global));
if (showNrList()) {
value = addNrToLteNetworkType(value);
}
@@ -722,9 +732,9 @@
*/
private void addLteEntry(int value) {
if (showNrList()) {
- mEntries.add(mContext.getString(R.string.network_lte_pure));
+ mEntries.add(getResourcesForSubId().getString(R.string.network_lte_pure));
} else {
- mEntries.add(mContext.getString(R.string.network_lte));
+ mEntries.add(getResourcesForSubId().getString(R.string.network_lte));
}
mEntriesValue.add(value);
}
@@ -734,25 +744,25 @@
*/
private void add4gEntry(int value) {
if (showNrList()) {
- mEntries.add(mContext.getString(R.string.network_4G_pure));
+ mEntries.add(getResourcesForSubId().getString(R.string.network_4G_pure));
} else {
- mEntries.add(mContext.getString(R.string.network_4G));
+ mEntries.add(getResourcesForSubId().getString(R.string.network_4G));
}
mEntriesValue.add(value);
}
private void add3gEntry(int value) {
- mEntries.add(mContext.getString(R.string.network_3G));
+ mEntries.add(getResourcesForSubId().getString(R.string.network_3G));
mEntriesValue.add(value);
}
private void add2gEntry(int value) {
- mEntries.add(mContext.getString(R.string.network_2G));
+ mEntries.add(getResourcesForSubId().getString(R.string.network_2G));
mEntriesValue.add(value);
}
private void add1xEntry(int value) {
- mEntries.add(mContext.getString(R.string.network_1x));
+ mEntries.add(getResourcesForSubId().getString(R.string.network_1x));
mEntriesValue.add(value);
}
@@ -800,7 +810,7 @@
}
private void setSummary(int summaryResId) {
- setSummary(mContext.getString(summaryResId));
+ setSummary(getResourcesForSubId().getString(summaryResId));
}
private void setSummary(String summary) {
diff --git a/src/com/android/settings/network/telephony/TelephonyBasePreferenceController.java b/src/com/android/settings/network/telephony/TelephonyBasePreferenceController.java
index 2bd7de9..3972f39 100644
--- a/src/com/android/settings/network/telephony/TelephonyBasePreferenceController.java
+++ b/src/com/android/settings/network/telephony/TelephonyBasePreferenceController.java
@@ -17,6 +17,7 @@
package com.android.settings.network.telephony;
import android.content.Context;
+import android.content.res.Resources;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
@@ -74,4 +75,13 @@
mContext.getSystemService(CarrierConfigManager.class);
return carrierConfigMgr.getConfigForSubId(subId);
}
+
+ /**
+ * Returns the resources associated with Subscription.
+ *
+ * @return Resources associated with Subscription.
+ */
+ public Resources getResourcesForSubId() {
+ return SubscriptionManager.getResourcesForSubId(mContext, mSubId);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
index e519b9a..ca36f1f 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
@@ -363,43 +363,43 @@
@Test
public void checkResource_stringArrayLength() {
- String[] entryValues = mContext.getResources().getStringArray(
+ String[] entryValues = mController.getResourcesForSubId().getStringArray(
R.array.enabled_networks_cdma_values);
assertEquals(4, entryValues.length);
- entryValues = mContext.getResources().getStringArray(
+ entryValues = mController.getResourcesForSubId().getStringArray(
R.array.enabled_networks_cdma_no_lte_values);
assertEquals(2, entryValues.length);
- entryValues = mContext.getResources().getStringArray(
+ entryValues = mController.getResourcesForSubId().getStringArray(
R.array.enabled_networks_cdma_only_lte_values);
assertEquals(2, entryValues.length);
- entryValues = mContext.getResources().getStringArray(
+ entryValues = mController.getResourcesForSubId().getStringArray(
R.array.enabled_networks_tdscdma_values);
assertEquals(3, entryValues.length);
- entryValues = mContext.getResources().getStringArray(
+ entryValues = mController.getResourcesForSubId().getStringArray(
R.array.enabled_networks_except_gsm_lte_values);
assertEquals(1, entryValues.length);
- entryValues = mContext.getResources().getStringArray(
+ entryValues = mController.getResourcesForSubId().getStringArray(
R.array.enabled_networks_except_gsm_values);
assertEquals(2, entryValues.length);
- entryValues = mContext.getResources().getStringArray(
+ entryValues = mController.getResourcesForSubId().getStringArray(
R.array.enabled_networks_except_lte_values);
assertEquals(2, entryValues.length);
- entryValues = mContext.getResources().getStringArray(
+ entryValues = mController.getResourcesForSubId().getStringArray(
R.array.enabled_networks_values);
assertEquals(3, entryValues.length);
- entryValues = mContext.getResources().getStringArray(
+ entryValues = mController.getResourcesForSubId().getStringArray(
R.array.enabled_networks_values);
assertEquals(3, entryValues.length);
- entryValues = mContext.getResources().getStringArray(
+ entryValues = mController.getResourcesForSubId().getStringArray(
R.array.preferred_network_mode_values_world_mode);
assertEquals(3, entryValues.length);
}
diff --git a/tests/robotests/src/com/android/settings/network/PreferredNetworkModeContentObserverTest.java b/tests/unit/src/com/android/settings/network/PreferredNetworkModeContentObserverTest.java
similarity index 79%
rename from tests/robotests/src/com/android/settings/network/PreferredNetworkModeContentObserverTest.java
rename to tests/unit/src/com/android/settings/network/PreferredNetworkModeContentObserverTest.java
index 657b8b3..e07a8f1 100644
--- a/tests/robotests/src/com/android/settings/network/PreferredNetworkModeContentObserverTest.java
+++ b/tests/unit/src/com/android/settings/network/PreferredNetworkModeContentObserverTest.java
@@ -16,41 +16,43 @@
package com.android.settings.network;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.content.ContentResolver;
import android.content.Context;
import android.provider.Settings;
+import android.test.mock.MockContentResolver;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(AndroidJUnit4.class)
public class PreferredNetworkModeContentObserverTest {
private static final int SUB_ID = 1;
- @Mock
- private ContentResolver mResolver;
- @Mock
private Context mContext;
+ private MockContentResolver mResolver;
+ private PreferredNetworkModeContentObserver mPreferredNetworkModeContentObserver;
+
@Mock
private PreferredNetworkModeContentObserver.OnPreferredNetworkModeChangedListener mListener;
- private PreferredNetworkModeContentObserver mPreferredNetworkModeContentObserver;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- when(mContext.getContentResolver()).thenReturn(mResolver);
+ mContext = spy(ApplicationProvider.getApplicationContext());
+
+ mResolver = spy(new MockContentResolver(mContext));
+ when(mContext.getContentResolver()).thenReturn(mResolver);
mPreferredNetworkModeContentObserver =
spy(new PreferredNetworkModeContentObserver(null));
}
@@ -68,8 +70,8 @@
mPreferredNetworkModeContentObserver.register(mContext, SUB_ID);
verify(mResolver).registerContentObserver(
- Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID), false,
- mPreferredNetworkModeContentObserver);
+ Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID), false,
+ mPreferredNetworkModeContentObserver);
}
@Test
@@ -78,5 +80,4 @@
verify(mResolver).unregisterContentObserver(mPreferredNetworkModeContentObserver);
}
-
}
diff --git a/tests/robotests/src/com/android/settings/network/telephony/DisabledSubscriptionControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/DisabledSubscriptionControllerTest.java
similarity index 79%
rename from tests/robotests/src/com/android/settings/network/telephony/DisabledSubscriptionControllerTest.java
rename to tests/unit/src/com/android/settings/network/telephony/DisabledSubscriptionControllerTest.java
index 38223b8..b269660 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/DisabledSubscriptionControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/DisabledSubscriptionControllerTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2019 The Android Open Source Project
+ * Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -11,7 +11,7 @@
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
- * limitations under the License
+ * limitations under the License.
*/
package com.android.settings.network.telephony;
@@ -20,13 +20,17 @@
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
import android.content.Context;
+import android.os.Looper;
import android.telephony.SubscriptionManager;
-import androidx.lifecycle.LifecycleOwner;
import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -35,10 +39,8 @@
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(AndroidJUnit4.class)
public class DisabledSubscriptionControllerTest {
private static final String KEY = "disabled_subscription_category";
@@ -47,22 +49,28 @@
@Mock
private SubscriptionManager mSubscriptionManager;
@Mock
- private PreferenceScreen mScreen;
+ private Lifecycle mLifecycle;
+ private PreferenceScreen mScreen;
+ private PreferenceManager mPreferenceManager;
private PreferenceCategory mCategory;
private Context mContext;
- private Lifecycle mLifecycle;
private DisabledSubscriptionController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mContext = spy(RuntimeEnvironment.application);
- LifecycleOwner lifecycleOwner = () -> mLifecycle;
- mLifecycle = new Lifecycle(lifecycleOwner);
- doReturn(mSubscriptionManager).when(mContext).getSystemService(SubscriptionManager.class);
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+ mPreferenceManager = new PreferenceManager(mContext);
+ mScreen = mPreferenceManager.createPreferenceScreen(mContext);
mCategory = new PreferenceCategory(mContext);
- doReturn(mCategory).when(mScreen).findPreference(KEY);
+ mCategory.setKey(KEY);
+ mScreen.addPreference(mCategory);
+
mController = new DisabledSubscriptionController(mContext, KEY);
mController.init(mLifecycle, SUB_ID);
}
diff --git a/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java b/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java
new file mode 100644
index 0000000..ee8157d
--- /dev/null
+++ b/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java
@@ -0,0 +1,336 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network.telephony;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.os.PersistableBundle;
+import android.provider.Settings;
+import android.telecom.PhoneAccountHandle;
+import android.telephony.CarrierConfigManager;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
+
+import org.junit.Before;
+import org.junit.Test;
+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 MobileNetworkUtilsTest {
+ private static final String PACKAGE_NAME = "com.android.app";
+ private static final int SUB_ID_1 = 1;
+ private static final int SUB_ID_2 = 2;
+ private static final int SUB_ID_INVALID = -1;
+ private static final String PLMN_FROM_TELEPHONY_MANAGER_API = "testPlmn";
+ private static final String PLMN_FROM_SUB_ID_1 = "testPlmnSub1";
+ private static final String PLMN_FROM_SUB_ID_2 = "testPlmnSub2";
+
+ @Mock
+ private TelephonyManager mTelephonyManager;
+ @Mock
+ private TelephonyManager mTelephonyManager2;
+ @Mock
+ private SubscriptionManager mSubscriptionManager;
+ @Mock
+ private SubscriptionInfo mSubscriptionInfo1;
+ @Mock
+ private SubscriptionInfo mSubscriptionInfo2;
+ @Mock
+ private PackageManager mPackageManager;
+ @Mock
+ private ResolveInfo mResolveInfo;
+ @Mock
+ private CarrierConfigManager mCarrierConfigManager;
+
+ private Context mContext;
+ private PersistableBundle mCarrierConfig;
+ private PhoneAccountHandle mPhoneAccountHandle;
+ private ComponentName mComponentName;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
+ when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
+ when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
+ when(mTelephonyManager.createForSubscriptionId(SUB_ID_1)).thenReturn(mTelephonyManager);
+ when(mTelephonyManager.createForSubscriptionId(SUB_ID_2)).thenReturn(mTelephonyManager2);
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+
+ when(mContext.getSystemService(CarrierConfigManager.class)).thenReturn(
+ mCarrierConfigManager);
+
+ mCarrierConfig = new PersistableBundle();
+ when(mCarrierConfigManager.getConfigForSubId(SUB_ID_1)).thenReturn(mCarrierConfig);
+
+ when(mSubscriptionInfo1.getSubscriptionId()).thenReturn(SUB_ID_1);
+ when(mSubscriptionInfo1.getCarrierName()).thenReturn(PLMN_FROM_SUB_ID_1);
+ when(mSubscriptionInfo2.getSubscriptionId()).thenReturn(SUB_ID_2);
+ when(mSubscriptionInfo2.getCarrierName()).thenReturn(PLMN_FROM_SUB_ID_2);
+
+ when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(
+ Arrays.asList(mSubscriptionInfo1, mSubscriptionInfo2));
+ when(mSubscriptionManager.getAccessibleSubscriptionInfoList()).thenReturn(
+ Arrays.asList(mSubscriptionInfo1, mSubscriptionInfo2));
+
+ when(mTelephonyManager.getNetworkOperatorName()).thenReturn(
+ PLMN_FROM_TELEPHONY_MANAGER_API);
+ }
+
+ @Test
+ public void setMobileDataEnabled_setEnabled_enabled() {
+ MobileNetworkUtils.setMobileDataEnabled(mContext, SUB_ID_1, true, false);
+
+ verify(mTelephonyManager).setDataEnabled(true);
+ verify(mTelephonyManager2, never()).setDataEnabled(anyBoolean());
+ }
+
+ @Test
+ public void setMobileDataEnabled_setDisabled_disabled() {
+ MobileNetworkUtils.setMobileDataEnabled(mContext, SUB_ID_2, true, false);
+
+ verify(mTelephonyManager2).setDataEnabled(true);
+ verify(mTelephonyManager, never()).setDataEnabled(anyBoolean());
+ }
+
+ @Test
+ public void setMobileDataEnabled_disableOtherSubscriptions() {
+ MobileNetworkUtils.setMobileDataEnabled(mContext, SUB_ID_1, true, true);
+
+ verify(mTelephonyManager).setDataEnabled(true);
+ verify(mTelephonyManager2).setDataEnabled(false);
+ }
+
+ @Test
+ public void buildConfigureIntent_nullHandle_returnNull() {
+ assertThat(MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext, null)).isNull();
+ }
+
+ @Test
+ public void buildConfigureIntent_noActivityHandleIntent_returnNull() {
+ when(mPackageManager.queryIntentActivities(nullable(Intent.class), anyInt()))
+ .thenReturn(new ArrayList<>());
+
+ assertThat(MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext,
+ mPhoneAccountHandle)).isNull();
+ }
+
+ @Test
+ public void buildConfigureIntent_hasActivityHandleIntent_returnIntent() {
+ mComponentName = new ComponentName(PACKAGE_NAME, "testClass");
+ mPhoneAccountHandle = new PhoneAccountHandle(mComponentName, "");
+ when(mPackageManager.queryIntentActivities(nullable(Intent.class), anyInt()))
+ .thenReturn(Arrays.asList(mResolveInfo));
+
+ assertThat(MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext,
+ mPhoneAccountHandle)).isNotNull();
+ }
+
+ @Test
+ public void isCdmaOptions_phoneTypeCdma_returnTrue() {
+ when(mTelephonyManager.getPhoneType()).thenReturn(TelephonyManager.PHONE_TYPE_CDMA);
+
+ assertThat(MobileNetworkUtils.isCdmaOptions(mContext, SUB_ID_1)).isTrue();
+ }
+
+ @Test
+ public void isCdmaOptions_worldModeWithGsmWcdma_returnTrue() {
+ when(mTelephonyManager.getPhoneType()).thenReturn(TelephonyManager.PHONE_TYPE_GSM);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
+
+ Settings.Global.putInt(mContext.getContentResolver(),
+ android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
+ TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
+
+ assertThat(MobileNetworkUtils.isCdmaOptions(mContext, SUB_ID_1)).isTrue();
+ }
+
+ @Test
+ public void isCdmaOptions_carrierWorldModeWithoutHideCarrier_returnTrue() {
+ when(mTelephonyManager.getPhoneType()).thenReturn(TelephonyManager.PHONE_TYPE_GSM);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL,
+ false);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL, true);
+
+ assertThat(MobileNetworkUtils.isCdmaOptions(mContext, SUB_ID_1)).isTrue();
+ }
+
+ @Test
+ public void getSearchableSubscriptionId_oneActive_returnValid() {
+ when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(
+ Arrays.asList(mSubscriptionInfo1));
+ assertThat(MobileNetworkUtils.getSearchableSubscriptionId(mContext)).isEqualTo(SUB_ID_1);
+ }
+
+ @Test
+ public void getSearchableSubscriptionId_nonActive_returnInvalid() {
+ when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(new ArrayList<>());
+
+ assertThat(MobileNetworkUtils.getSearchableSubscriptionId(mContext))
+ .isEqualTo(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+ }
+
+ @Test
+ public void shouldDisplayNetworkSelectOptions_HideCarrierNetwork_returnFalse() {
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL,
+ true);
+
+ assertThat(MobileNetworkUtils.shouldDisplayNetworkSelectOptions(mContext, SUB_ID_1))
+ .isFalse();
+ }
+
+ @Test
+ public void shouldDisplayNetworkSelectOptions_allCheckPass_returnTrue() {
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL,
+ false);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_OPERATOR_SELECTION_EXPAND_BOOL, true);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_CSP_ENABLED_BOOL, false);
+ when(mTelephonyManager.getPhoneType()).thenReturn(TelephonyManager.PHONE_TYPE_GSM);
+
+ assertThat(MobileNetworkUtils.shouldDisplayNetworkSelectOptions(mContext, SUB_ID_1))
+ .isTrue();
+ }
+
+ @Test
+ public void shouldSpeciallyUpdateGsmCdma_notWorldMode_returnFalse() {
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, false);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false);
+
+ assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isFalse();
+ }
+
+ @Test
+ public void shouldSpeciallyUpdateGsmCdma_supportTdscdma_returnFalse() {
+ when(mCarrierConfigManager.getConfig()).thenReturn(mCarrierConfig);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, true);
+
+ assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isFalse();
+ }
+
+ @Test
+ public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdmaGsm_returnTrue() {
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false);
+ Settings.Global.putInt(mContext.getContentResolver(),
+ android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
+ TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM);
+
+ assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue();
+ }
+
+ @Test
+ public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdmaGsmWcdma_returnTrue() {
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false);
+ Settings.Global.putInt(mContext.getContentResolver(),
+ android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
+ TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA);
+
+ assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue();
+ }
+
+ @Test
+ public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdma_returnTrue() {
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false);
+ Settings.Global.putInt(mContext.getContentResolver(),
+ android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
+ TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA);
+
+ assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue();
+ }
+
+ @Test
+ public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdmaWcdma_returnTrue() {
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false);
+ Settings.Global.putInt(mContext.getContentResolver(),
+ android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
+ TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA);
+
+ assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue();
+ }
+
+ @Test
+ public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdmaCdmaEvdoGsmWcdma_returnTrue() {
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false);
+ Settings.Global.putInt(mContext.getContentResolver(),
+ android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
+ TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA);
+
+ assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue();
+ }
+
+ @Test
+ public void shouldSpeciallyUpdateGsmCdma_ModeLteCdmaEvdoGsmWcdma_returnTrue() {
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false);
+ Settings.Global.putInt(mContext.getContentResolver(),
+ android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
+ TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
+
+ assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue();
+ }
+
+ @Test
+ public void getCurrentCarrierNameForDisplay_withoutValidSubId_returnNetworkOperatorName() {
+ assertThat(MobileNetworkUtils.getCurrentCarrierNameForDisplay(
+ mContext, SUB_ID_INVALID)).isEqualTo(PLMN_FROM_TELEPHONY_MANAGER_API);
+ }
+
+ @Test
+ public void getCurrentCarrierNameForDisplay_withValidSubId_returnCurrentCarrierName() {
+ assertThat(MobileNetworkUtils.getCurrentCarrierNameForDisplay(
+ mContext, SUB_ID_1)).isEqualTo(PLMN_FROM_SUB_ID_1);
+ assertThat(MobileNetworkUtils.getCurrentCarrierNameForDisplay(
+ mContext, SUB_ID_2)).isEqualTo(PLMN_FROM_SUB_ID_2);
+ }
+
+ @Test
+ public void getCurrentCarrierNameForDisplay_withoutSubId_returnNotNull() {
+ assertThat(MobileNetworkUtils.getCurrentCarrierNameForDisplay(
+ mContext)).isNotNull();
+ }
+}
diff --git a/tests/unit/src/com/android/settings/network/telephony/cdma/CdmaListPreferenceTest.java b/tests/unit/src/com/android/settings/network/telephony/cdma/CdmaListPreferenceTest.java
new file mode 100644
index 0000000..027a53b
--- /dev/null
+++ b/tests/unit/src/com/android/settings/network/telephony/cdma/CdmaListPreferenceTest.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network.telephony.cdma;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.telephony.TelephonyManager;
+
+import androidx.preference.PreferenceManager;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+public class CdmaListPreferenceTest {
+ private static final int SUB_ID = 2;
+
+ @Mock
+ private TelephonyManager mTelephonyManager;
+ @Mock
+ private PreferenceManager mPreferenceManager;
+
+ private CdmaListPreference mPreference;
+ private Context mContext;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
+ when(mTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(mTelephonyManager);
+ mPreference = spy(new CdmaListPreference(mContext, null));
+ mPreference.setSubId(SUB_ID);
+ }
+
+ @Test
+ public void onClick_inEcm_doNothing() {
+ doReturn(true).when(mTelephonyManager).getEmergencyCallbackMode();
+
+ mPreference.onClick();
+
+ verify(mPreferenceManager, never()).showDialog(mPreference);
+ }
+}
diff --git a/tests/unit/src/com/android/settings/network/telephony/cdma/CdmaSubscriptionPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/cdma/CdmaSubscriptionPreferenceControllerTest.java
new file mode 100644
index 0000000..86488c6
--- /dev/null
+++ b/tests/unit/src/com/android/settings/network/telephony/cdma/CdmaSubscriptionPreferenceControllerTest.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network.telephony.cdma;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.SystemProperties;
+import android.provider.Settings;
+import android.telephony.TelephonyManager;
+
+import androidx.preference.ListPreference;
+import androidx.preference.PreferenceManager;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+public class CdmaSubscriptionPreferenceControllerTest {
+ private static final int SUB_ID = 2;
+
+ @Mock
+ private PreferenceManager mPreferenceManager;
+ @Mock
+ private TelephonyManager mTelephonyManager;
+
+ private CdmaSubscriptionPreferenceController mController;
+ private ListPreference mPreference;
+ private Context mContext;
+ private int mCdmaMode;
+ private String mSubscriptionsSupported;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
+ doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID);
+
+ mPreference = new ListPreference(mContext);
+ mController = new CdmaSubscriptionPreferenceController(mContext, "mobile_data");
+ mController.init(mPreferenceManager, SUB_ID);
+ mController.mPreference = mPreference;
+ mPreference.setKey(mController.getPreferenceKey());
+
+ mCdmaMode = Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.CDMA_SUBSCRIPTION_MODE,
+ TelephonyManager.CDMA_SUBSCRIPTION_RUIM_SIM);
+
+ mSubscriptionsSupported = SystemProperties.get("ril.subscription.types");
+ }
+
+ @After
+ public void tearDown() {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.CDMA_SUBSCRIPTION_MODE, mCdmaMode);
+
+ SystemProperties.set("ril.subscription.types", mSubscriptionsSupported);
+ }
+
+ @Test
+ public void onPreferenceChange_selectNV_returnNVMode() {
+ doReturn(true).when(mTelephonyManager).setCdmaSubscriptionMode(anyInt());
+
+ mController.onPreferenceChange(mPreference, Integer.toString(
+ TelephonyManager.CDMA_SUBSCRIPTION_NV));
+
+ assertThat(Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.CDMA_SUBSCRIPTION_MODE,
+ TelephonyManager.CDMA_SUBSCRIPTION_RUIM_SIM)).isEqualTo(
+ TelephonyManager.CDMA_SUBSCRIPTION_NV);
+ }
+
+ @Test
+ public void updateState_stateRUIM_displayRUIM() {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.CDMA_SUBSCRIPTION_MODE, TelephonyManager.CDMA_SUBSCRIPTION_NV);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.getValue()).isEqualTo(Integer.toString(
+ TelephonyManager.CDMA_SUBSCRIPTION_NV));
+ }
+
+ @Test
+ public void updateState_stateUnknown_doNothing() {
+ mPreference.setValue(Integer.toString(TelephonyManager.CDMA_SUBSCRIPTION_NV));
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.CDMA_SUBSCRIPTION_MODE, TelephonyManager.CDMA_SUBSCRIPTION_UNKNOWN);
+
+ mController.updateState(mPreference);
+
+ // Still NV mode
+ assertThat(mPreference.getValue()).isEqualTo(Integer.toString(
+ TelephonyManager.CDMA_SUBSCRIPTION_NV));
+ }
+
+ @Test
+ public void deviceSupportsNvAndRuim() {
+ SystemProperties.set("ril.subscription.types", "NV,RUIM");
+ assertThat(mController.deviceSupportsNvAndRuim()).isTrue();
+
+ SystemProperties.set("ril.subscription.types", "");
+
+ assertThat(mController.deviceSupportsNvAndRuim()).isFalse();
+ }
+}
diff --git a/tests/unit/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceControllerTest.java
new file mode 100644
index 0000000..4f44a29
--- /dev/null
+++ b/tests/unit/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceControllerTest.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network.telephony.cdma;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.telephony.TelephonyManager;
+
+import androidx.preference.ListPreference;
+import androidx.preference.PreferenceManager;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+public class CdmaSystemSelectPreferenceControllerTest {
+ private static final int SUB_ID = 2;
+
+ @Mock
+ private PreferenceManager mPreferenceManager;
+ @Mock
+ private TelephonyManager mTelephonyManager;
+
+ private CdmaSystemSelectPreferenceController mController;
+ private ListPreference mPreference;
+ private Context mContext;
+ private int mCdmaRoamingMode;
+ private int mSettingsNetworkMode;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
+ doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID);
+
+ mPreference = new ListPreference(mContext);
+ mController = new CdmaSystemSelectPreferenceController(mContext, "mobile_data");
+ mController.init(mPreferenceManager, SUB_ID);
+ mController.mPreference = mPreference;
+ mPreference.setKey(mController.getPreferenceKey());
+
+ mCdmaRoamingMode = Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.CDMA_ROAMING_MODE,
+ TelephonyManager.CDMA_ROAMING_MODE_ANY);
+
+ mSettingsNetworkMode = Settings.Global.getInt(
+ mContext.getContentResolver(),
+ Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+ TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE);
+ }
+
+ @After
+ public void tearDown() {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.CDMA_ROAMING_MODE, mCdmaRoamingMode);
+
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID, mSettingsNetworkMode);
+ }
+
+ @Test
+ public void onPreferenceChange_selectHome_returnHomeMode() {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.CDMA_ROAMING_MODE,
+ TelephonyManager.CDMA_ROAMING_MODE_ANY);
+ doReturn(true).when(mTelephonyManager).setCdmaRoamingMode(anyInt());
+
+ mController.onPreferenceChange(mPreference,
+ Integer.toString(TelephonyManager.CDMA_ROAMING_MODE_HOME));
+
+ assertThat(Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.CDMA_ROAMING_MODE,
+ TelephonyManager.CDMA_ROAMING_MODE_ANY)).isEqualTo(
+ TelephonyManager.CDMA_ROAMING_MODE_HOME);
+ }
+
+ @Test
+ public void updateState_stateHome_displayHome() {
+ doReturn(TelephonyManager.CDMA_ROAMING_MODE_HOME).when(
+ mTelephonyManager).getCdmaRoamingMode();
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.getValue()).isEqualTo(
+ Integer.toString(TelephonyManager.CDMA_ROAMING_MODE_HOME));
+ }
+
+ @Test
+ public void updateState_LteGSMWcdma_disabled() {
+ doReturn(TelephonyManager.CDMA_ROAMING_MODE_HOME).when(
+ mTelephonyManager).getCdmaRoamingMode();
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+ TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.isEnabled()).isFalse();
+ }
+
+ @Test
+ public void updateState_stateOther_resetToDefault() {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.CDMA_ROAMING_MODE,
+ TelephonyManager.CDMA_ROAMING_MODE_HOME);
+ doReturn(TelephonyManager.CDMA_ROAMING_MODE_AFFILIATED).when(
+ mTelephonyManager).getCdmaRoamingMode();
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.getValue()).isEqualTo(
+ Integer.toString(TelephonyManager.CDMA_ROAMING_MODE_ANY));
+ assertThat(Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.CDMA_ROAMING_MODE,
+ TelephonyManager.CDMA_ROAMING_MODE_HOME)).isEqualTo(
+ TelephonyManager.CDMA_ROAMING_MODE_ANY);
+ }
+}