From 36796a1616859688da8c79604649d1baed78c1e5 Mon Sep 17 00:00:00 2001 From: SongFerngWang Date: Thu, 18 Jun 2020 23:03:57 +0800 Subject: [PATCH] NetworkModePreference's list needs to allow values set from overlay. Root cause: ag/10614943 removed the resources, so each of item values is hard coded. This broke the overlay. This CL adds the resource back so the overlay can work. Bug: 159301925 Test: make RunSettingsRoboTests ROBOTEST_FILTER=\ EnabledNetworkModePreferenceControllerTest (PASS) Change-Id: Id5ad2fdd0a87586136e4a26d2e44cf5278df5d9d --- res/values/arrays.xml | 43 +++++ ...nabledNetworkModePreferenceController.java | 161 +++++++++++++----- ...edNetworkModePreferenceControllerTest.java | 45 +++++ 3 files changed, 203 insertions(+), 46 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 9f92426346e..11d8bcfbfff 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -1280,6 +1280,49 @@ "1" + + "9" + "0" + + + + "0" + "1" + + + + "0" + + + + "8" + "4" + "5" + "10" + + + + "4" + "5" + + + + "8" + "10" + + + + "22" + "18" + "1" + + + + "10" + "8" + "9" + + Home only diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java index 26c206da84a..63273759ba1 100644 --- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java +++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java @@ -43,6 +43,7 @@ import com.android.settings.network.telephony.TelephonyConstants.TelephonyManage import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Stream; /** * Preference controller for "Enabled network mode" @@ -221,71 +222,142 @@ public class EnabledNetworkModePreferenceController extends void setPreferenceEntries() { clearAllEntries(); - + String[] entryValues; + int[] entryValuesInt; switch (getEnabledNetworkType()) { case ENABLED_NETWORKS_CDMA_CHOICES: - add5gEntry(addNrToLteNetworkType( - TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO)); - addLteEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO); - add3gEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO); - add1xEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO); - addGlobalEntry(); + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_cdma_values); + entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray(); + if (entryValuesInt.length < 4) { + throw new IllegalArgumentException( + "ENABLED_NETWORKS_CDMA_CHOICES index error."); + } + add5gEntry(addNrToLteNetworkType(entryValuesInt[0])); + addLteEntry(entryValuesInt[0]); + add3gEntry(entryValuesInt[1]); + add1xEntry(entryValuesInt[2]); + addGlobalEntry(entryValuesInt[3]); break; case ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES: - add3gEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO); - add1xEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO); + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_cdma_no_lte_values); + entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray(); + if (entryValuesInt.length < 2) { + throw new IllegalArgumentException( + "ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES index error."); + } + add3gEntry(entryValuesInt[0]); + add1xEntry(entryValuesInt[1]); break; case ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES: - addLteEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO); - addGlobalEntry(); + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_cdma_only_lte_values); + entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray(); + if (entryValuesInt.length < 2) { + throw new IllegalArgumentException( + "ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES index error."); + } + addLteEntry(entryValuesInt[0]); + addGlobalEntry(entryValuesInt[1]); break; case ENABLED_NETWORKS_TDSCDMA_CHOICES: - add5gEntry(addNrToLteNetworkType( - TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA)); - addLteEntry( - TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA); - add3gEntry(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA); - add2gEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY); + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_tdscdma_values); + entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray(); + if (entryValuesInt.length < 3) { + throw new IllegalArgumentException( + "ENABLED_NETWORKS_TDSCDMA_CHOICES index error."); + } + add5gEntry(addNrToLteNetworkType(entryValuesInt[0])); + addLteEntry(entryValuesInt[0]); + add3gEntry(entryValuesInt[1]); + add2gEntry(entryValuesInt[2]); break; case ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES: - add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF); + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_except_gsm_lte_values); + entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray(); + if (entryValuesInt.length < 1) { + throw new IllegalArgumentException( + "ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES index error."); + } + add3gEntry(entryValuesInt[0]); break; case ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES: - add5gEntry(addNrToLteNetworkType( - TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA)); - add4gEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA); - add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF); + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_except_gsm_values); + entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray(); + if (entryValuesInt.length < 2) { + throw new IllegalArgumentException( + "ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES index error."); + } + add5gEntry(addNrToLteNetworkType(entryValuesInt[0])); + add4gEntry(entryValuesInt[0]); + add3gEntry(entryValuesInt[1]); break; case ENABLED_NETWORKS_EXCEPT_GSM_CHOICES: - add5gEntry(addNrToLteNetworkType( - TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA)); - addLteEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA); - add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF); + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_except_gsm_values); + entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray(); + if (entryValuesInt.length < 2) { + throw new IllegalArgumentException( + "ENABLED_NETWORKS_EXCEPT_GSM_CHOICES index error."); + } + add5gEntry(addNrToLteNetworkType(entryValuesInt[0])); + addLteEntry(entryValuesInt[0]); + add3gEntry(entryValuesInt[1]); break; case ENABLED_NETWORKS_EXCEPT_LTE_CHOICES: - add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF); - add2gEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY); + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_except_lte_values); + entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray(); + if (entryValuesInt.length < 2) { + throw new IllegalArgumentException( + "ENABLED_NETWORKS_EXCEPT_LTE_CHOICES index error."); + } + add3gEntry(entryValuesInt[0]); + add2gEntry(entryValuesInt[1]); break; case ENABLED_NETWORKS_4G_CHOICES: + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_values); + entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray(); + if (entryValuesInt.length < 3) { + throw new IllegalArgumentException( + "ENABLED_NETWORKS_4G_CHOICES index error."); + } add5gEntry(addNrToLteNetworkType( - TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA)); - add4gEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA); - add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF); - add2gEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY); + entryValuesInt[0])); + add4gEntry(entryValuesInt[0]); + add3gEntry(entryValuesInt[1]); + add2gEntry(entryValuesInt[2]); break; case ENABLED_NETWORKS_CHOICES: - add5gEntry(addNrToLteNetworkType( - TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA)); - addLteEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA); - add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF); - add2gEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY); + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_values); + entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray(); + if (entryValuesInt.length < 3) { + throw new IllegalArgumentException("ENABLED_NETWORKS_CHOICES index error."); + } + add5gEntry(addNrToLteNetworkType(entryValuesInt[0])); + addLteEntry(entryValuesInt[0]); + add3gEntry(entryValuesInt[1]); + add2gEntry(entryValuesInt[2]); break; case PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE: - addGlobalEntry(); + entryValues = mContext.getResources().getStringArray( + R.array.preferred_network_mode_values_world_mode); + entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray(); + if (entryValuesInt.length < 3) { + throw new IllegalArgumentException( + "PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE index error."); + } + addGlobalEntry(entryValuesInt[0]); addCustomEntry(mContext.getString(R.string.network_world_mode_cdma_lte), - TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO); + entryValuesInt[1]); addCustomEntry(mContext.getString(R.string.network_world_mode_gsm_lte), - TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA); + entryValuesInt[2]); break; default: throw new IllegalArgumentException("Not supported enabled network types."); @@ -590,18 +662,15 @@ public class EnabledNetworkModePreferenceController extends } } - private void addGlobalEntry() { + private void addGlobalEntry(int value) { Log.d(LOG_TAG, "addGlobalEntry. " + " supported5GRadioAccessFamily: " + mSupported5gRadioAccessFamily + " allowed5GNetworkType: " + mAllowed5gNetworkType); mEntries.add(mContext.getString(R.string.network_global)); if (showNrList()) { - mEntriesValue.add( - TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA); - } else { - mEntriesValue.add( - TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA); + value = addNrToLteNetworkType(value); } + mEntriesValue.add(value); } private boolean showNrList() { 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 a8188528cd6..e38bd62dc66 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java @@ -24,6 +24,7 @@ import static com.android.settings.network.telephony.MobileNetworkUtils.getRafFr import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doReturn; @@ -44,6 +45,7 @@ import androidx.lifecycle.LifecycleOwner; import androidx.preference.ListPreference; import androidx.preference.PreferenceScreen; +import com.android.settings.R; import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants; import com.android.settingslib.core.lifecycle.Lifecycle; @@ -337,6 +339,49 @@ public class EnabledNetworkModePreferenceControllerTest { assertThat(mPreference.getSummary()).isEqualTo("2G"); } + @Test + public void checkResource_stringArrayLength() { + String[] entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_cdma_values); + assertEquals(4, entryValues.length); + + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_cdma_no_lte_values); + assertEquals(2, entryValues.length); + + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_cdma_only_lte_values); + assertEquals(2, entryValues.length); + + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_tdscdma_values); + assertEquals(3, entryValues.length); + + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_except_gsm_lte_values); + assertEquals(1, entryValues.length); + + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_except_gsm_values); + assertEquals(2, entryValues.length); + + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_except_lte_values); + assertEquals(2, entryValues.length); + + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_values); + assertEquals(3, entryValues.length); + + entryValues = mContext.getResources().getStringArray( + R.array.enabled_networks_values); + assertEquals(3, entryValues.length); + + entryValues = mContext.getResources().getStringArray( + R.array.preferred_network_mode_values_world_mode); + assertEquals(3, entryValues.length); + } + private void mockEnabledNetworkMode(int networkMode) { if (networkMode == TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA) { mockPhoneType(TelephonyManager.PHONE_TYPE_GSM);