Merge "Improve the wifi description for the case of private DNS broken"
diff --git a/res/drawable/ic_suggestion_close_button.xml b/res/drawable/ic_suggestion_close_button.xml
index 615b215..8b1f0f8 100644
--- a/res/drawable/ic_suggestion_close_button.xml
+++ b/res/drawable/ic_suggestion_close_button.xml
@@ -18,8 +18,10 @@
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0">
+ android:viewportHeight="24.0"
+ android:tint="?android:attr/colorControlNormal">
+
<path
- android:fillColor="#FF000000"
+ android:fillColor="@android:color/white"
android:pathData="M18.3,5.71a0.996,0.996 0,0 0,-1.41 0L12,10.59 7.11,5.7A0.996,0.996 0,1 0,5.7 7.11L10.59,12 5.7,16.89a0.996,0.996 0,1 0,1.41 1.41L12,13.41l4.89,4.89a0.996,0.996 0,1 0,1.41 -1.41L13.41,12l4.89,-4.89c0.38,-0.38 0.38,-1.02 0,-1.4z"/>
</vector>
diff --git a/res/layout/crypt_keeper_emergency_button.xml b/res/layout/crypt_keeper_emergency_button.xml
index 0b6f810..6efcf5a 100644
--- a/res/layout/crypt_keeper_emergency_button.xml
+++ b/res/layout/crypt_keeper_emergency_button.xml
@@ -24,8 +24,7 @@
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
- android:orientation="vertical"
- android:gravity="bottom">
+ android:orientation="vertical">
<Button
android:id="@+id/emergencyCallButton"
android:layout_width="wrap_content"
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 9ac9110..65d9c2e 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1232,6 +1232,17 @@
<item>LTE/TDSCDMA/GSM/WCDMA</item>
<item>TDSCDMA/CDMA/EVDO/GSM/WCDMA </item>
<item>LTE/TDSCDMA/CDMA/EVDO/GSM/WCDMA</item>
+ <item>NR only</item>
+ <item>NR/LTE</item>
+ <item>NR/LTE/CDMA/EvDo</item>
+ <item>NR/LTE/GSM/WCDMA</item>
+ <item>NR/LTE/CDMA/EvDo/GSM/WCDMA</item>
+ <item>NR/LTE/WCDMA</item>
+ <item>NR/LTE/TDSCDMA</item>
+ <item>NR/LTE/TDSCDMA/GSM</item>
+ <item>NR/LTE/TDSCDMA/WCDMA</item>
+ <item>NR/LTE/TDSCDMA/GSM/WCDMA</item>
+ <item>NR/LTE/TDSCDMA/CDMA/EvDo/GSM/WCDMA</item>
</string-array>
<!-- The preferred network modes RIL constants, in order of the modes above,
e.g. the choice "GSM/WCDMA preferred" has the corresponding value "0" -->
@@ -1259,6 +1270,17 @@
<item>"20"</item>
<item>"21"</item>
<item>"22"</item>
+ <item>"23"</item>
+ <item>"24"</item>
+ <item>"25"</item>
+ <item>"26"</item>
+ <item>"27"</item>
+ <item>"28"</item>
+ <item>"29"</item>
+ <item>"30"</item>
+ <item>"31"</item>
+ <item>"32"</item>
+ <item>"33"</item>
</string-array>
<!-- Choices for CDMA subscription-->
diff --git a/res/values/config.xml b/res/values/config.xml
index a4a85ba..5eb55ae 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -410,7 +410,7 @@
<string name="config_nearby_devices_slice_uri" translatable="false">content://com.google.android.gms.nearby.fastpair/device_status_list_item</string>
<!-- Grayscale settings intent -->
- <string name="config_grayscale_settings_intent" translate="false"></string>
+ <string name="config_grayscale_settings_intent" translatable="false"></string>
<!-- List containing the injected tile keys which are suppressed. -->
<string-array name="config_suppress_injected_tile_keys" translatable="false"/>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 246e901..94ed966 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -10839,6 +10839,8 @@
<string name="preferred_network_mode_lte_gsm_wcdma_summary">Preferred network mode: GSM/WCDMA/LTE</string>
<!-- CDMA+LTE/EVDO [CHAR LIMIT=NONE] -->
<string name="preferred_network_mode_lte_cdma_evdo_summary">Preferred network mode: CDMA+LTE/EVDO</string>
+ <!-- LTE/CDMA/EvDo/GSM/WCDMA [CHAR LIMIT=NONE] -->
+ <string name="preferred_network_mode_lte_cdma_evdo_gsm_wcdma_summary">Preferred network mode: LTE/CDMA/EvDo/GSM/WCDMA</string>
<!-- Global [CHAR LIMIT=NONE] -->
<string name="preferred_network_mode_global_summary">Preferred network mode: Global</string>
<!-- LTE / WCDMA [CHAR LIMIT=NONE] -->
@@ -10867,7 +10869,37 @@
<string name="preferred_network_mode_tdscdma_cdma_evdo_gsm_wcdma_summary">Preferred network mode: TDSCDMA/CDMA/EvDo/GSM/WCDMA</string>
<!-- LTE/TDSCDMA/CDMA/EvDo/GSM/WCDMA [CHAR LIMIT=NONE] -->
<string name="preferred_network_mode_lte_tdscdma_cdma_evdo_gsm_wcdma_summary">Preferred network mode: LTE/TDSCDMA/CDMA/EvDo/GSM/WCDMA</string>
+ <!-- NR only [CHAR LIMIT=NONE] -->
+ <string name="preferred_network_mode_nr_only_summary">Preferred network mode: NR only</string>
+ <!-- NR / LTE [CHAR LIMIT=NONE] -->
+ <string name="preferred_network_mode_nr_lte_summary">Preferred network mode: NR / LTE</string>
+ <!-- NR/LTE/CDMA/EvDo [CHAR LIMIT=NONE] -->
+ <string name="preferred_network_mode_nr_lte_cdma_evdo_summary">Preferred network mode: NR/LTE/CDMA/EvDo</string>
+ <!-- NR/LTE/GSM/WCDMA [CHAR LIMIT=NONE] -->
+ <string name="preferred_network_mode_nr_lte_gsm_wcdma_summary">Preferred network mode: NR/LTE/GSM/WCDMA</string>
+ <!-- NR/LTE/TDSCDMA/CDMA/EvDo/GSM/WCDMA [CHAR LIMIT=NONE] -->
+ <string name="preferred_network_mode_nr_lte_cdma_evdo_gsm_wcdma_summary">Preferred network mode: NR/LTE/CDMA/EvDo/GSM/WCDMA</string>
+ <!-- NR/LTE/WCDMA [CHAR LIMIT=NONE] -->
+ <string name="preferred_network_mode_nr_lte_wcdma_summary">Preferred network mode: NR/LTE/WCDMA</string>
+ <!-- NR/LTE/TDSCDMA [CHAR LIMIT=NONE] -->
+ <string name="preferred_network_mode_nr_lte_tdscdma_summary">Preferred network mode: NR/LTE/TDSCDMA</string>
+ <!-- NR/LTE/TDSCDMA/GSM [CHAR LIMIT=NONE] -->
+ <string name="preferred_network_mode_nr_lte_tdscdma_gsm_summary">Preferred network mode: NR/LTE/TDSCDMA/GSM</string>
+ <!-- NR/LTE/TDSCDMA/WCDMA [CHAR LIMIT=NONE] -->
+ <string name="preferred_network_mode_nr_lte_tdscdma_wcdma_summary">Preferred network mode: NR/LTE/TDSCDMA/WCDMA</string>
+ <!-- NR/LTE/TDSCDMA/GSM/WCDMA [CHAR LIMIT=NONE] -->
+ <string name="preferred_network_mode_nr_lte_tdscdma_gsm_wcdma_summary">Preferred network mode: NR/LTE/TDSCDMA/GSM/WCDMA</string>
+ <!-- NR/LTE/TDSCDMA/CDMA/EvDo/GSM/WCDMA [CHAR LIMIT=NONE] -->
+ <string name="preferred_network_mode_nr_lte_tdscdma_cdma_evdo_gsm_wcdma_summary">Preferred network mode: NR/LTE/TDSCDMA/CDMA/EvDo/GSM/WCDMA</string>
+ <!-- Text for Network mode recommended [CHAR LIMIT=NONE] -->
+ <string name="network_recommended">\u0020(recommended)</string>
+ <!-- Text for Network 5g [CHAR LIMIT=NONE] -->
+ <string name="network_5G" translatable="false">5G</string>
+ <!-- Text for Network lte [CHAR LIMIT=NONE] -->
+ <string name="network_lte_pure" translatable="false">LTE</string>
+ <!-- Text for Network 4g [CHAR LIMIT=NONE] -->
+ <string name="network_4G_pure" translatable="false">4G</string>
<!-- Text for Network lte [CHAR LIMIT=NONE] -->
<string name="network_lte">LTE (recommended)</string>
<!-- Text for Network 4g [CHAR LIMIT=NONE] -->
diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index 0df3984..8bb898a 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -64,6 +64,7 @@
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.password.ConfirmLockPattern;
import com.android.settingslib.RestrictedLockUtilsInternal;
+import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
@@ -382,8 +383,7 @@
}
ContentResolver cr = context.getContentResolver();
return Settings.Global.getInt(cr, Settings.Global.EUICC_PROVISIONED, 0) != 0
- || Settings.Global.getInt(
- cr, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
+ || DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(context);
}
@VisibleForTesting
diff --git a/src/com/android/settings/RadioInfo.java b/src/com/android/settings/RadioInfo.java
index 5c6fe9c..d0c6811 100644
--- a/src/com/android/settings/RadioInfo.java
+++ b/src/com/android/settings/RadioInfo.java
@@ -101,28 +101,40 @@
private static final String TAG = "RadioInfo";
private static final String[] mPreferredNetworkLabels = {
- "WCDMA preferred",
+ "GSM/WCDMA preferred",
"GSM only",
"WCDMA only",
- "GSM auto (PRL)",
- "CDMA auto (PRL)",
+ "GSM/WCDMA auto (PRL)",
+ "CDMA/EvDo auto (PRL)",
"CDMA only",
"EvDo only",
- "Global auto (PRL)",
- "LTE/CDMA auto (PRL)",
- "LTE/UMTS auto (PRL)",
- "LTE/CDMA/UMTS auto (PRL)",
+ "CDMA/EvDo/GSM/WCDMA (PRL)",
+ "CDMA + LTE/EvDo (PRL)",
+ "GSM/WCDMA/LTE (PRL)",
+ "LTE/CDMA/EvDo/GSM/WCDMA (PRL)",
"LTE only",
"LTE/WCDMA",
- "TD-SCDMA only",
- "TD-SCDMA/WCDMA",
- "LTE/TD-SCDMA",
- "TD-SCDMA/GSM",
- "TD-SCDMA/UMTS",
- "LTE/TD-SCDMA/WCDMA",
- "LTE/TD-SCDMA/UMTS",
- "TD-SCDMA/CDMA/UMTS",
- "Global/TD-SCDMA",
+ "TDSCDMA only",
+ "TDSCDMA/WCDMA",
+ "LTE/TDSCDMA",
+ "TDSCDMA/GSM",
+ "LTE/TDSCDMA/GSM",
+ "TDSCDMA/GSM/WCDMA",
+ "LTE/TDSCDMA/WCDMA",
+ "LTE/TDSCDMA/GSM/WCDMA",
+ "TDSCDMA/CDMA/EvDo/GSM/WCDMA ",
+ "LTE/TDSCDMA/CDMA/EvDo/GSM/WCDMA",
+ "NR only",
+ "NR/LTE",
+ "NR/LTE/CDME/EvDo",
+ "NR/LTE/GSM/WCDMA",
+ "NR/LTE/CDMA/EvDo/GSM/WCDMA",
+ "NR/LTE/WCDMA",
+ "NR/LTE/TDSCDMA",
+ "NR/LTE/TDSCDMA/GSM",
+ "NR/LTE/TDSCDMA/WCDMA",
+ "NR/LTE/TDSCDMA/GSM/WCDMA",
+ "NR/LTE/TDSCDMA/CDMA/EvDo/GSM/WCDMA",
"Unknown"
};
diff --git a/src/com/android/settings/ResetNetwork.java b/src/com/android/settings/ResetNetwork.java
index 424d976..4fbc09d 100644
--- a/src/com/android/settings/ResetNetwork.java
+++ b/src/com/android/settings/ResetNetwork.java
@@ -52,6 +52,7 @@
import com.android.settings.password.ConfirmLockPattern;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedLockUtilsInternal;
+import com.android.settingslib.development.DevelopmentSettingsEnabler;
import java.util.ArrayList;
import java.util.List;
@@ -236,7 +237,7 @@
}
ContentResolver resolver = context.getContentResolver();
return Settings.Global.getInt(resolver, Global.EUICC_PROVISIONED, 0) != 0
- || Settings.Global.getInt(resolver, Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
+ || DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(context);
}
@Override
diff --git a/src/com/android/settings/network/TetherProvisioningActivity.java b/src/com/android/settings/network/TetherProvisioningActivity.java
index 48c5707..d17a843 100644
--- a/src/com/android/settings/network/TetherProvisioningActivity.java
+++ b/src/com/android/settings/network/TetherProvisioningActivity.java
@@ -32,7 +32,7 @@
/**
* Activity which acts as a proxy to the tether provisioning app for sanity checks and permission
* restrictions. Specifically, the provisioning apps require
- * {@link android.permission.CONNECTIVITY_INTERNAL}, while this activity can be started by a caller
+ * {@link android.permission.TETHER_PRIVILEGED}, while this activity can be started by a caller
* with {@link android.permission.TETHER_PRIVILEGED}.
*/
public class TetherProvisioningActivity extends Activity {
diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
index 94b1761..3abb36a 100644
--- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
@@ -16,38 +16,67 @@
package com.android.settings.network.telephony;
+import static androidx.lifecycle.Lifecycle.Event.ON_START;
+import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
+
import android.content.Context;
+import android.database.ContentObserver;
+import android.os.Handler;
+import android.os.Looper;
import android.os.PersistableBundle;
import android.provider.Settings;
import android.telephony.CarrierConfigManager;
+import android.telephony.RadioAccessFamily;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.Log;
import androidx.annotation.VisibleForTesting;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
import com.android.settings.R;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Preference controller for "Enabled network mode"
*/
public class EnabledNetworkModePreferenceController extends
TelephonyBasePreferenceController implements
- ListPreference.OnPreferenceChangeListener {
+ ListPreference.OnPreferenceChangeListener, LifecycleObserver {
+ private static final String LOG_TAG = "EnabledNetworkMode";
private CarrierConfigManager mCarrierConfigManager;
+ private ContentObserver mPreferredNetworkModeObserver;
private TelephonyManager mTelephonyManager;
private boolean mIsGlobalCdma;
@VisibleForTesting
boolean mShow4GForLTE;
+ private Preference mPreference;
+ @VisibleForTesting
+ boolean mDisplay5gList = false;
public EnabledNetworkModePreferenceController(Context context, String key) {
super(context, key);
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
+ mPreferredNetworkModeObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
+ @Override
+ public void onChange(boolean selfChange) {
+ if (mPreference != null) {
+ updateState(mPreference);
+ }
+ }
+ };
}
@Override
@@ -61,13 +90,9 @@
} else if (carrierConfig == null) {
visible = false;
} else if (carrierConfig.getBoolean(
- CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)) {
- visible = false;
- } else if (carrierConfig.getBoolean(
- CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)
- && !telephonyManager.getServiceState().getRoaming()
- && telephonyManager.getServiceState().getDataRegState()
- == ServiceState.STATE_IN_SERVICE) {
+ CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)
+ || carrierConfig.getBoolean(
+ CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)) {
visible = false;
} else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
visible = false;
@@ -78,6 +103,24 @@
return visible ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
+ @OnLifecycleEvent(ON_START)
+ public void onStart() {
+ mContext.getContentResolver().registerContentObserver(
+ Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + mSubId), true,
+ mPreferredNetworkModeObserver);
+ }
+
+ @OnLifecycleEvent(ON_STOP)
+ public void onStop() {
+ mContext.getContentResolver().unregisterContentObserver(mPreferredNetworkModeObserver);
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference = screen.findPreference(getPreferenceKey());
+ }
+
@Override
public void updateState(Preference preference) {
super.updateState(preference);
@@ -102,7 +145,7 @@
return false;
}
- public void init(int subId) {
+ public void init(Lifecycle lifecycle, int subId) {
mSubId = subId;
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
@@ -115,6 +158,12 @@
? carrierConfig.getBoolean(
CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL)
: false;
+
+ final long supportedRadioBitmask = mTelephonyManager.getSupportedRadioAccessFamily();
+ mDisplay5gList = checkSupportedRadioBitmask(
+ supportedRadioBitmask, mTelephonyManager.NETWORK_TYPE_BITMASK_NR);
+
+ lifecycle.addObserver(this);
}
private int getPreferredNetworkMode() {
@@ -214,6 +263,139 @@
preference.setEntryValues(
R.array.preferred_network_mode_values_world_mode);
}
+
+ if (mDisplay5gList) {
+ add5gListItem(preference);
+ }
+ }
+
+ @VisibleForTesting
+ boolean checkSupportedRadioBitmask(long supportedRadioBitmask, long targetBitmask) {
+ Log.d(LOG_TAG, "supportedRadioBitmask: " + supportedRadioBitmask);
+ if ((targetBitmask & supportedRadioBitmask) > 0) {
+ return true;
+ }
+ return false;
+ }
+
+ /***
+ * Preferred network list add 5G item.
+ *
+ * @string/enabled_networks_cdma_choices
+ * Before | After
+ * @string/network_lte , 8 |@string/network_5G + @string/network_recommended , 25
+ * @string/network_3G , 4 |@string/network_lte_pure, 8
+ * @string/network_1x , 5 |@string/network_3G , 4
+ * @string/network_global, 10|@string/network_1x , 5
+ * |@string/network_global , 27
+ *
+ * @string/enabled_networks_cdma_only_lte_choices
+ * Before | After
+ * @string/network_lte , 8 |@string/network_5G + @string/network_recommended , 25
+ * @string/network_global, 10|@string/network_lte_pure, 8
+ * |@string/network_global , 27
+ *
+ * @string/enabled_networks_tdscdma_choices
+ * Before | After
+ * @string/network_lte, 22|@string/network_5G + @string/network_recommended , 33
+ * @string/network_3G , 18|@string/network_lte_pure, 22
+ * @string/network_2G , 1 |@string/network_3G , 18
+ * |@string/network_2G , 1
+ *
+ * @string/enabled_networks_except_gsm_4g_choices
+ * Before | After
+ * @string/network_4G , 9 |@string/network_5G + @string/network_recommended , 26
+ * @string/network_3G , 0 |@string/network_4G_pure , 9
+ * |@string/network_3G , 0
+ *
+ * @string/enabled_networks_except_gsm_choices
+ * Before | After
+ * @string/network_lte, 9 |@string/network_5G + @string/network_recommended , 26
+ * @string/network_3G , 0 |@string/network_lte_pure, 9
+ * |@string/network_3G , 0
+ *
+ * @string/enabled_networks_4g_choices
+ * Before | After
+ * @string/network_4G , 9 |@string/network_5G + @string/network_recommended , 26
+ * @string/network_3G , 0 |@string/network_4G_pure , 9
+ * @string/network_2G , 1 |@string/network_3G , 0
+ * |@string/network_2G , 1
+ *
+ * @string/enabled_networks_choices
+ * Before | After
+ * @string/network_lte, 9 |@string/network_5G + @string/network_recommended , 26
+ * @string/network_3G , 0 |@string/network_lte_pure, 9
+ * @string/network_2G , 1 |@string/network_3G , 0
+ * |@string/network_2G , 1
+ *
+ * @string/preferred_network_mode_choices_world_mode
+ * Before | After
+ * "Global" , 10|@string/network_global , 27
+ * "LTE / CDMA" , 8 |"LTE / CDMA" , 8
+ * "LTE / GSM / UMTS" , 9 |"LTE / GSM / UMTS" , 9
+ */
+ @VisibleForTesting
+ void add5gListItem(ListPreference preference) {
+ final CharSequence[] oldEntries = preference.getEntries();
+ final CharSequence[] oldEntryValues = preference.getEntryValues();
+ List<CharSequence> newEntries = new ArrayList<>();
+ List<CharSequence> newEntryValues = new ArrayList<>();
+
+ CharSequence oldEntry;
+ CharSequence oldEntryValue;
+ CharSequence new5gEntry;
+ CharSequence new5gEntryValue;
+
+ for (int i = 0; i < oldEntries.length; i++) {
+ oldEntry = oldEntries[i];
+ oldEntryValue = oldEntryValues[i];
+ new5gEntry = "";
+ new5gEntryValue = "";
+
+ if (mContext.getString(R.string.network_lte).equals(oldEntry)) {
+ oldEntry = mContext.getString(R.string.network_lte_pure);
+ new5gEntry = mContext.getString(R.string.network_5G)
+ + mContext.getString(R.string.network_recommended);
+ new5gEntryValue = transformLteEntryValueTo5gEntryValue(oldEntryValue);
+ } else if (mContext.getString(R.string.network_4G).equals(oldEntry)) {
+ oldEntry = mContext.getString(R.string.network_4G_pure);
+ new5gEntry = mContext.getString(R.string.network_5G)
+ + mContext.getString(R.string.network_recommended);
+ new5gEntryValue = transformLteEntryValueTo5gEntryValue(oldEntryValue);
+ } else if (mContext.getString(R.string.network_global).equals(oldEntry)) {
+ //oldEntry: network_global
+ //oldEntryValue: TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA
+ oldEntryValue = Integer.toString(
+ TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
+ }
+
+ if (!TextUtils.isEmpty(new5gEntry)) {
+ newEntries.add(new5gEntry);
+ newEntryValues.add(new5gEntryValue);
+ }
+ newEntries.add(oldEntry);
+ newEntryValues.add(oldEntryValue);
+ }
+
+ preference.setEntries(newEntries.toArray(new CharSequence[newEntries.size()]));
+ preference.setEntryValues(newEntryValues.toArray(new CharSequence[newEntryValues.size()]));
+ }
+
+ /**
+ * LTE network mode transform to 5G network mode.
+ *
+ * @param networkMode this is LTE network mode.
+ * @return 5G network mode.
+ */
+ private CharSequence transformLteEntryValueTo5gEntryValue(CharSequence networkMode) {
+ int networkModeInt = Integer.valueOf(networkMode.toString());
+ return Integer.toString(addNrToNetworkType(networkModeInt));
+ }
+
+ private int addNrToNetworkType(int networkType) {
+ long networkTypeBitmasks = RadioAccessFamily.getRafFromNetworkType(networkType);
+ networkTypeBitmasks |= mTelephonyManager.NETWORK_TYPE_BITMASK_NR;
+ return RadioAccessFamily.getNetworkTypeFromRaf((int) networkTypeBitmasks);
}
private void updatePreferenceValueAndSummary(ListPreference preference, int networkMode) {
@@ -277,7 +459,8 @@
} else {
preference.setValue(
Integer.toString(TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO));
- preference.setSummary(R.string.network_lte);
+ preference.setSummary(
+ mDisplay5gList ? R.string.network_lte_pure : R.string.network_lte);
}
break;
case TelephonyManager.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
@@ -312,7 +495,8 @@
preference.setValue(
Integer.toString(TelephonyManager
.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
- preference.setSummary(R.string.network_lte);
+ preference.setSummary(
+ mDisplay5gList ? R.string.network_lte_pure : R.string.network_lte);
} else {
preference.setValue(
Integer.toString(TelephonyManager
@@ -322,11 +506,34 @@
|| MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
preference.setSummary(R.string.network_global);
} else {
- preference.setSummary(mShow4GForLTE
- ? R.string.network_4G : R.string.network_lte);
+ if (mDisplay5gList) {
+ preference.setSummary(mShow4GForLTE
+ ? R.string.network_4G_pure : R.string.network_lte_pure);
+ } else {
+ preference.setSummary(mShow4GForLTE
+ ? R.string.network_4G : R.string.network_lte);
+ }
}
}
break;
+ case TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO:
+ case TelephonyManager.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+ preference.setValue(Integer.toString(networkMode));
+ preference.setSummary(mContext.getString(R.string.network_5G)
+ + mContext.getString(R.string.network_recommended));
+ break;
+ case TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA:
+ preference.setValue(
+ Integer.toString(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA));
+ if (mTelephonyManager.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA
+ || mIsGlobalCdma
+ || MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
+ preference.setSummary(R.string.network_global);
+ } else {
+ preference.setSummary(mContext.getString(R.string.network_5G)
+ + mContext.getString(R.string.network_recommended));
+ }
+ break;
default:
preference.setSummary(
mContext.getString(R.string.mobile_network_mode_error, networkMode));
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
index c8e2247..8d83ef2 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
@@ -150,7 +150,7 @@
use(CarrierPreferenceController.class).init(mSubId);
use(DataUsagePreferenceController.class).init(mSubId);
use(PreferredNetworkModePreferenceController.class).init(mSubId);
- use(EnabledNetworkModePreferenceController.class).init(mSubId);
+ use(EnabledNetworkModePreferenceController.class).init(getLifecycle(), mSubId);
use(DataServiceSetupPreferenceController.class).init(mSubId);
if (!FeatureFlagPersistent.isEnabled(getContext(), FeatureFlags.NETWORK_INTERNET_V2)) {
use(EuiccPreferenceController.class).init(mSubId);
diff --git a/src/com/android/settings/network/telephony/MobileNetworkUtils.java b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
index 0e5eaa8..70b92c9 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkUtils.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
@@ -53,6 +53,7 @@
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.graph.SignalDrawable;
import java.util.Arrays;
@@ -224,7 +225,7 @@
final boolean euiccProvisioned =
Settings.Global.getInt(cr, Settings.Global.EUICC_PROVISIONED, 0) != 0;
final boolean inDeveloperMode =
- Settings.Global.getInt(cr, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
+ DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(context);
return (inDeveloperMode || euiccProvisioned
|| (!esimIgnoredDevice && enabledEsimUiByDefault && inEsimSupportedCountries));
diff --git a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
index 294f05f..7b24a93 100644
--- a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
@@ -58,13 +58,9 @@
} else if (carrierConfig == null) {
visible = false;
} else if (carrierConfig.getBoolean(
- CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)) {
- visible = false;
- } else if (carrierConfig.getBoolean(
- CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)
- && !telephonyManager.getServiceState().getRoaming()
- && telephonyManager.getServiceState().getDataRegState()
- == ServiceState.STATE_IN_SERVICE) {
+ CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)
+ || carrierConfig.getBoolean(
+ CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)) {
visible = false;
} else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
visible = true;
diff --git a/src/com/android/settings/wifi/tether/TetherService.java b/src/com/android/settings/wifi/tether/TetherService.java
index 34daccf..235c2cc 100644
--- a/src/com/android/settings/wifi/tether/TetherService.java
+++ b/src/com/android/settings/wifi/tether/TetherService.java
@@ -88,7 +88,7 @@
String provisionResponse = getResourceForDefaultDataSubId().getString(
com.android.internal.R.string.config_mobile_hotspot_provision_response);
registerReceiver(mReceiver, new IntentFilter(provisionResponse),
- android.Manifest.permission.CONNECTIVITY_INTERNAL, null);
+ android.Manifest.permission.TETHER_PRIVILEGED, null);
SharedPreferences prefs = getSharedPreferences(PREFS, MODE_PRIVATE);
mCurrentTethers = stringToTethers(prefs.getString(KEY_TETHERS, ""));
mCurrentTypeIndex = 0;
diff --git a/tests/robotests/src/com/android/settings/MasterClearTest.java b/tests/robotests/src/com/android/settings/MasterClearTest.java
index 73adf93..03d42a9 100644
--- a/tests/robotests/src/com/android/settings/MasterClearTest.java
+++ b/tests/robotests/src/com/android/settings/MasterClearTest.java
@@ -39,6 +39,7 @@
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.os.UserManager;
import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.View;
@@ -50,7 +51,9 @@
import androidx.fragment.app.FragmentActivity;
import com.android.settings.testutils.shadow.ShadowUtils;
+import com.android.settingslib.development.DevelopmentSettingsEnabler;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -62,6 +65,7 @@
import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowActivity;
+import org.robolectric.shadows.ShadowUserManager;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowUtils.class)
@@ -92,6 +96,7 @@
private MasterClear mMasterClear;
private ShadowActivity mShadowActivity;
private FragmentActivity mActivity;
+ private ShadowUserManager mShadowUserManager;
private View mContentView;
@Before
@@ -100,6 +105,9 @@
mMasterClear = spy(new MasterClear());
mActivity = Robolectric.setupActivity(FragmentActivity.class);
mShadowActivity = Shadows.shadowOf(mActivity);
+ UserManager userManager = mActivity.getSystemService(UserManager.class);
+ mShadowUserManager = Shadows.shadowOf(userManager);
+ mShadowUserManager.setIsAdminUser(true);
mContentView = LayoutInflater.from(mActivity).inflate(R.layout.master_clear, null);
// Make scrollView only have one child
@@ -107,6 +115,11 @@
when(mScrollView.getChildCount()).thenReturn(1);
}
+ @After
+ public void tearDown() {
+ mShadowUserManager.setIsAdminUser(false);
+ }
+
@Test
public void testShowFinalConfirmation_eraseEsimVisible_eraseEsimChecked() {
final Context context = mock(Context.class);
@@ -443,8 +456,7 @@
doReturn(isEuiccEnabled).when(mMasterClear).isEuiccEnabled(any());
ContentResolver cr = mActivity.getContentResolver();
Settings.Global.putInt(cr, Settings.Global.EUICC_PROVISIONED, isEuiccProvisioned ? 1 : 0);
- Settings.Global.putInt(
- cr, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, isDeveloper ? 1 : 0);
+ DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(mActivity, isDeveloper);
}
private void initScrollView(int height, int scrollY, int childBottom) {
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 ba8be90..773041d 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
@@ -16,6 +16,8 @@
package com.android.settings.network.telephony;
+import static androidx.lifecycle.Lifecycle.Event.ON_START;
+
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
@@ -23,19 +25,27 @@
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
import android.content.Context;
+import android.net.Uri;
import android.os.PersistableBundle;
import android.provider.Settings;
import android.telephony.CarrierConfigManager;
+import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import androidx.lifecycle.LifecycleOwner;
import androidx.preference.ListPreference;
+import androidx.preference.PreferenceScreen;
import com.android.settings.R;
+import com.android.settingslib.core.lifecycle.Lifecycle;
import org.junit.Before;
import org.junit.Test;
@@ -48,6 +58,7 @@
@RunWith(RobolectricTestRunner.class)
public class EnabledNetworkModePreferenceControllerTest {
private static final int SUB_ID = 2;
+ public static final String KEY = "enabled_network";
@Mock
private TelephonyManager mTelephonyManager;
@@ -55,16 +66,21 @@
private TelephonyManager mInvalidTelephonyManager;
@Mock
private CarrierConfigManager mCarrierConfigManager;
+ @Mock
+ private ServiceState mServiceState;
private PersistableBundle mPersistableBundle;
private EnabledNetworkModePreferenceController mController;
private ListPreference mPreference;
private Context mContext;
+ private LifecycleOwner mLifecycleOwner;
+ private Lifecycle mLifecycle;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
-
+ mLifecycleOwner = () -> mLifecycle;
+ mLifecycle = new Lifecycle(mLifecycleOwner);
mContext = spy(RuntimeEnvironment.application);
doReturn(mTelephonyManager).when(mContext).getSystemService(Context.TELEPHONY_SERVICE);
doReturn(mTelephonyManager).when(mContext).getSystemService(TelephonyManager.class);
@@ -73,14 +89,15 @@
doReturn(mInvalidTelephonyManager).when(mTelephonyManager).createForSubscriptionId(
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
doReturn(mContext).when(mContext).createPackageContext(anyString(), anyInt());
+ doReturn(mServiceState).when(mTelephonyManager).getServiceState();
mPersistableBundle = new PersistableBundle();
doReturn(mPersistableBundle).when(mCarrierConfigManager).getConfigForSubId(SUB_ID);
mPreference = new ListPreference(mContext);
mPreference.setEntries(R.array.enabled_networks_choices);
mPreference.setEntryValues(R.array.enabled_networks_values);
- mController = new EnabledNetworkModePreferenceController(mContext, "enabled_network");
- mController.init(SUB_ID);
+ mController = new EnabledNetworkModePreferenceController(mContext, KEY);
+ mController.init(mLifecycle, SUB_ID);
mPreference.setKey(mController.getPreferenceKey());
}
@@ -93,6 +110,25 @@
}
@Test
+ public void getAvailabilityStatus_hidePreferredNetworkType_returnUnavailable() {
+ mPersistableBundle.putBoolean(CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL,
+ true);
+
+ when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE);
+ when(mServiceState.getDataRegState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE);
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+
+ when(mServiceState.getState()).thenReturn(ServiceState.STATE_IN_SERVICE);
+ when(mServiceState.getDataRegState()).thenReturn(ServiceState.STATE_IN_SERVICE);
+
+ when(mServiceState.getRoaming()).thenReturn(false);
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+
+ when(mServiceState.getRoaming()).thenReturn(true);
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
public void getAvailabilityStatus_notWorldPhone_returnAvailable() {
mPersistableBundle.putBoolean(CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL,
false);
@@ -106,12 +142,32 @@
mPersistableBundle.putBoolean(CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL,
true);
- mController.init(SUB_ID);
+ mController.init(mLifecycle, SUB_ID);
assertThat(mController.mShow4GForLTE).isTrue();
}
@Test
+ public void init_initDisplay5gList_returnTrue() {
+ long testBitmask = TelephonyManager.NETWORK_TYPE_BITMASK_NR
+ | TelephonyManager.NETWORK_TYPE_BITMASK_LTE;
+ doReturn(testBitmask).when(mTelephonyManager).getSupportedRadioAccessFamily();
+
+ mController.init(mLifecycle, SUB_ID);
+
+ assertThat(mController.mDisplay5gList).isTrue();
+ }
+
+ @Test
+ public void checkSupportedRadioBitmask_nrBitmask_returnTrue() {
+ long testBitmask = TelephonyManager.NETWORK_TYPE_BITMASK_NR
+ | TelephonyManager.NETWORK_TYPE_BITMASK_LTE;
+
+ assertThat(mController.checkSupportedRadioBitmask(testBitmask,
+ TelephonyManager.NETWORK_TYPE_BITMASK_NR)).isTrue();
+ }
+
+ @Test
public void updateState_updateByNetworkMode() {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
@@ -136,6 +192,203 @@
String.valueOf(TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA));
}
+ /**
+ * @string/enabled_networks_cdma_choices
+ * Before | After
+ * @string/network_lte , 8 |@string/network_5G + @string/network_recommended , 25
+ * @string/network_3G , 4 |@string/network_lte_pure, 8
+ * @string/network_1x , 5 |@string/network_3G , 4
+ * @string/network_global, 10|@string/network_1x , 5
+ * |@string/network_global , 27
+ *
+ * @string/enabled_networks_cdma_only_lte_choices
+ * Before | After
+ * @string/network_lte , 8 |@string/network_5G + @string/network_recommended , 25
+ * @string/network_global, 10|@string/network_lte_pure, 8
+ * |@string/network_global , 27
+ */
+ @Test
+ public void add5gListItem_lteCdma_5gLteCdma() {
+ //case#1
+ mPreference.setEntries(R.array.enabled_networks_cdma_choices);
+ mPreference.setEntryValues(R.array.enabled_networks_cdma_values);
+ CharSequence[] testEntries = {mContext.getString(R.string.network_5G)
+ + mContext.getString(R.string.network_recommended)
+ , mContext.getString(R.string.network_lte_pure)
+ , mContext.getString(R.string.network_3G)
+ , mContext.getString(R.string.network_1x)
+ , mContext.getString(R.string.network_global)};
+ CharSequence[] testEntryValues = {"25", "8", "4", "5", "27"};
+
+ mController.add5gListItem(mPreference);
+
+ assertThat(mPreference.getEntries()).isEqualTo(testEntries);
+ assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
+
+ //case#2
+ mPreference.setEntries(R.array.enabled_networks_cdma_only_lte_choices);
+ mPreference.setEntryValues(R.array.enabled_networks_cdma_only_lte_values);
+ CharSequence[] testEntries1 = {mContext.getString(R.string.network_5G)
+ + mContext.getString(R.string.network_recommended)
+ , mContext.getString(R.string.network_lte_pure)
+ , mContext.getString(R.string.network_global)};
+ CharSequence[] testEntryValues1 = {"25", "8", "27"};
+
+ mController.add5gListItem(mPreference);
+
+ assertThat(mPreference.getEntries()).isEqualTo(testEntries1);
+ assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues1);
+ }
+
+ /**
+ * @string/enabled_networks_except_gsm_4g_choices
+ * Before | After
+ * @string/network_4G , 9 |@string/network_5G + @string/network_recommended , 26
+ * @string/network_3G , 0 |@string/network_4G_pure , 9
+ * |@string/network_3G , 0
+ *
+ * @string/enabled_networks_except_gsm_choices
+ * Before | After
+ * @string/network_lte, 9 |@string/network_5G + @string/network_recommended , 26
+ * @string/network_3G , 0 |@string/network_lte_pure, 9
+ * |@string/network_3G , 0
+ *
+ * @string/enabled_networks_4g_choices
+ * Before | After
+ * @string/network_4G , 9 |@string/network_5G + @string/network_recommended , 26
+ * @string/network_3G , 0 |@string/network_4G_pure , 9
+ * @string/network_2G , 1 |@string/network_3G , 0
+ * |@string/network_2G , 1
+ *
+ * @string/enabled_networks_choices
+ * Before | After
+ * @string/network_lte, 9 |@string/network_5G + @string/network_recommended , 26
+ * @string/network_3G , 0 |@string/network_lte_pure, 9
+ * @string/network_2G , 1 |@string/network_3G , 0
+ * |@string/network_2G , 1
+ */
+ @Test
+ public void add5gListItem_lteGsm_5gLteGsm() {
+ //csae#1
+ mPreference.setEntries(R.array.enabled_networks_except_gsm_4g_choices);
+ mPreference.setEntryValues(R.array.enabled_networks_except_gsm_values);
+ CharSequence[] testEntries = {mContext.getString(R.string.network_5G)
+ + mContext.getString(R.string.network_recommended)
+ , mContext.getString(R.string.network_4G_pure)
+ , mContext.getString(R.string.network_3G)};
+ CharSequence[] testEntryValues = {"26", "9", "0"};
+
+ mController.add5gListItem(mPreference);
+
+ assertThat(mPreference.getEntries()).isEqualTo(testEntries);
+ assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
+
+ //case#2
+ mPreference.setEntries(R.array.enabled_networks_except_gsm_choices);
+ mPreference.setEntryValues(R.array.enabled_networks_except_gsm_values);
+ CharSequence[] testEntries1 = {mContext.getString(R.string.network_5G)
+ + mContext.getString(R.string.network_recommended)
+ , mContext.getString(R.string.network_lte_pure)
+ , mContext.getString(R.string.network_3G)};
+ CharSequence[] testEntryValues1 = {"26", "9", "0"};
+
+ mController.add5gListItem(mPreference);
+
+ assertThat(mPreference.getEntries()).isEqualTo(testEntries1);
+ assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues1);
+
+ //case#3
+ mPreference.setEntries(R.array.enabled_networks_4g_choices);
+ mPreference.setEntryValues(R.array.enabled_networks_values);
+ CharSequence[] testEntries2 = {mContext.getString(R.string.network_5G)
+ + mContext.getString(R.string.network_recommended)
+ , mContext.getString(R.string.network_4G_pure)
+ , mContext.getString(R.string.network_3G)
+ , mContext.getString(R.string.network_2G)};
+ CharSequence[] testEntryValues2 = {"26", "9", "0", "1"};
+
+ mController.add5gListItem(mPreference);
+
+ assertThat(mPreference.getEntries()).isEqualTo(testEntries2);
+ assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues2);
+
+ //case#4
+ mPreference.setEntries(R.array.enabled_networks_choices);
+ mPreference.setEntryValues(R.array.enabled_networks_values);
+ CharSequence[] testEntries3 = {mContext.getString(R.string.network_5G)
+ + mContext.getString(R.string.network_recommended)
+ , mContext.getString(R.string.network_lte_pure)
+ , mContext.getString(R.string.network_3G)
+ , mContext.getString(R.string.network_2G)};
+ CharSequence[] testEntryValues3 = {"26", "9", "0", "1"};
+
+ mController.add5gListItem(mPreference);
+
+ assertThat(mPreference.getEntries()).isEqualTo(testEntries3);
+ assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues3);
+ }
+
+ /**
+ * @string/preferred_network_mode_choices_world_mode
+ * Before | After
+ * "Global" , 10|@string/network_global , 27
+ * "LTE / CDMA" , 8 |"LTE / CDMA" , 8
+ * "LTE / GSM / UMTS" , 9 |"LTE / GSM / UMTS" , 9
+ */
+ @Test
+ public void add5gListItem_worldPhone_Global() {
+ mPreference.setEntries(R.array.preferred_network_mode_choices_world_mode);
+ mPreference.setEntryValues(R.array.preferred_network_mode_values_world_mode);
+ CharSequence[] testEntries = {mContext.getString(R.string.network_global)
+ , "LTE / CDMA"
+ , "LTE / GSM / UMTS"};
+ CharSequence[] testEntryValues = {"27", "8", "9"};
+
+ mController.add5gListItem(mPreference);
+
+ assertThat(mPreference.getEntries()).isEqualTo(testEntries);
+ assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
+ }
+
+ /**
+ * @string/enabled_networks_tdscdma_choices
+ * Before | After
+ * @string/network_lte, 22|@string/network_5G + @string/network_recommended , 33
+ * @string/network_3G , 18|@string/network_lte_pure, 22
+ * @string/network_2G , 1 |@string/network_3G , 18
+ * |@string/network_2G , 1
+ */
+ @Test
+ public void add5gListItem_td_5gTd() {
+ mPreference.setEntries(R.array.enabled_networks_tdscdma_choices);
+ mPreference.setEntryValues(R.array.enabled_networks_tdscdma_values);
+ CharSequence[] testEntries = {mContext.getString(R.string.network_5G)
+ + mContext.getString(R.string.network_recommended)
+ , mContext.getString(R.string.network_lte_pure)
+ , mContext.getString(R.string.network_3G)
+ , mContext.getString(R.string.network_2G)};
+ CharSequence[] testEntryValues = {"33", "22", "18", "1"};
+
+ mController.add5gListItem(mPreference);
+
+ assertThat(mPreference.getEntries()).isEqualTo(testEntries);
+ assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
+ }
+
+ @Test
+ public void add5gListItem_noLte_no5g() {
+ mPreference.setEntries(R.array.enabled_networks_except_lte_choices);
+ mPreference.setEntryValues(R.array.enabled_networks_except_lte_values);
+ CharSequence[] testEntries = {mContext.getString(R.string.network_3G)
+ , mContext.getString(R.string.network_2G)};
+ CharSequence[] testEntryValues = {"0", "1"};
+
+ mController.add5gListItem(mPreference);
+
+ assertThat(mPreference.getEntries()).isEqualTo(testEntries);
+ assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
+ }
+
@Test
public void onPreferenceChange_updateSuccess() {
doReturn(true).when(mTelephonyManager).setPreferredNetworkType(SUB_ID,
@@ -161,4 +414,31 @@
Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID, 0)).isNotEqualTo(
TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA);
}
+
+ @Test
+ public void preferredNetworkModeNotification_preferenceUpdates() {
+ PreferenceScreen screen = mock(PreferenceScreen.class);
+ doReturn(mPreference).when(screen).findPreference(KEY);
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+ TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
+ mController.displayPreference(screen);
+ mController.updateState(mPreference);
+ mLifecycle.handleLifecycleEvent(ON_START);
+
+ assertThat(Integer.parseInt(mPreference.getValue())).isEqualTo(
+ TelephonyManager.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
+ assertThat(mPreference.getSummary()).isEqualTo("3G");
+
+
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+ TelephonyManager.NETWORK_MODE_GSM_ONLY);
+ final Uri uri = Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID);
+ mContext.getContentResolver().notifyChange(uri, null);
+
+ assertThat(Integer.parseInt(mPreference.getValue())).isEqualTo(
+ TelephonyManager.NETWORK_MODE_GSM_ONLY);
+ assertThat(mPreference.getSummary()).isEqualTo("2G");
+ }
}
diff --git a/tests/robotests/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceControllerTest.java
index 6807ab6..9c03389 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceControllerTest.java
@@ -23,11 +23,13 @@
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.PersistableBundle;
import android.provider.Settings;
import android.telephony.CarrierConfigManager;
+import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -54,6 +56,8 @@
private TelephonyManager mInvalidTelephonyManager;
@Mock
private CarrierConfigManager mCarrierConfigManager;
+ @Mock
+ private ServiceState mServiceState;
private PersistableBundle mPersistableBundle;
private PreferredNetworkModePreferenceController mController;
@@ -71,6 +75,7 @@
doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID);
doReturn(mInvalidTelephonyManager).when(mTelephonyManager).createForSubscriptionId(
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+ doReturn(mServiceState).when(mTelephonyManager).getServiceState();
mPersistableBundle = new PersistableBundle();
doReturn(mPersistableBundle).when(mCarrierConfigManager).getConfigForSubId(SUB_ID);
@@ -100,6 +105,25 @@
}
@Test
+ public void getAvailabilityStatus_hidePreferredNetworkType_returnUnavailable() {
+ mPersistableBundle.putBoolean(CarrierConfigManager.KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL,
+ true);
+
+ when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE);
+ when(mServiceState.getDataRegState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE);
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+
+ when(mServiceState.getState()).thenReturn(ServiceState.STATE_IN_SERVICE);
+ when(mServiceState.getDataRegState()).thenReturn(ServiceState.STATE_IN_SERVICE);
+
+ when(mServiceState.getRoaming()).thenReturn(false);
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+
+ when(mServiceState.getRoaming()).thenReturn(true);
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
public void updateState_updateByNetworkMode() {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
diff --git a/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java b/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java
index 0739ef0..3d948f2 100644
--- a/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java
+++ b/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java
@@ -431,7 +431,7 @@
responseIntent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
responseIntent.putExtra(TetherService.EXTRA_RESULT, response);
context.sendBroadcast(
- responseIntent, android.Manifest.permission.CONNECTIVITY_INTERNAL);
+ responseIntent, android.Manifest.permission.TETHER_PRIVILEGED);
}
}