Merge "Hide the 5G opiton when 5G has been disallowed" into rvc-dev
This commit is contained in:
@@ -28,10 +28,8 @@ import android.provider.Settings;
|
||||
import android.telephony.CarrierConfigManager;
|
||||
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;
|
||||
@@ -43,6 +41,7 @@ import com.android.settings.R;
|
||||
import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -53,19 +52,14 @@ public class EnabledNetworkModePreferenceController extends
|
||||
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;
|
||||
private TelephonyManager mTelephonyManager;
|
||||
private CarrierConfigManager mCarrierConfigManager;
|
||||
private PreferenceEntriesBuilder mBuilder;
|
||||
|
||||
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) {
|
||||
@@ -101,7 +95,8 @@ public class EnabledNetworkModePreferenceController extends
|
||||
@OnLifecycleEvent(ON_START)
|
||||
public void onStart() {
|
||||
mContext.getContentResolver().registerContentObserver(
|
||||
Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + mSubId), true,
|
||||
Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + mSubId),
|
||||
true,
|
||||
mPreferredNetworkModeObserver);
|
||||
}
|
||||
|
||||
@@ -120,444 +115,539 @@ public class EnabledNetworkModePreferenceController extends
|
||||
public void updateState(Preference preference) {
|
||||
super.updateState(preference);
|
||||
final ListPreference listPreference = (ListPreference) preference;
|
||||
final int networkMode = getPreferredNetworkMode();
|
||||
Log.d(LOG_TAG, "updateState networkMode: " + networkMode);
|
||||
|
||||
updatePreferenceEntries(listPreference);
|
||||
updatePreferenceValueAndSummary(listPreference, networkMode);
|
||||
mBuilder.setPreferenceEntries();
|
||||
mBuilder.setPreferenceValueAndSummary();
|
||||
|
||||
listPreference.setEntries(mBuilder.getEntries());
|
||||
listPreference.setEntryValues(mBuilder.getEntryValues());
|
||||
listPreference.setValue(Integer.toString(mBuilder.getSelectedEntryValue()));
|
||||
listPreference.setSummary(mBuilder.getSummary());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object object) {
|
||||
final int newPreferredNetworkMode = Integer.parseInt((String) object);
|
||||
final ListPreference listPreference = (ListPreference) preference;
|
||||
|
||||
if (mTelephonyManager.setPreferredNetworkTypeBitmask(
|
||||
MobileNetworkUtils.getRafFromNetworkType(newPreferredNetworkMode))) {
|
||||
updatePreferenceValueAndSummary((ListPreference) preference, newPreferredNetworkMode);
|
||||
mBuilder.setPreferenceValueAndSummary(newPreferredNetworkMode);
|
||||
listPreference.setValue(Integer.toString(mBuilder.getSelectedEntryValue()));
|
||||
listPreference.setSummary(mBuilder.getSummary());
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void init(Lifecycle lifecycle, int subId) {
|
||||
mSubId = subId;
|
||||
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
|
||||
mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
|
||||
.createForSubscriptionId(mSubId);
|
||||
mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class);
|
||||
mBuilder = new PreferenceEntriesBuilder(mContext, mSubId);
|
||||
|
||||
mIsGlobalCdma = mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled()
|
||||
&& carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
|
||||
mShow4GForLTE = carrierConfig != null
|
||||
? carrierConfig.getBoolean(
|
||||
CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL)
|
||||
: false;
|
||||
|
||||
final long supportedRadioBitmask = mTelephonyManager.getSupportedRadioAccessFamily();
|
||||
final boolean is5gEnabledByCarrier = (mTelephonyManager.getAllowedNetworkTypes()
|
||||
& TelephonyManager.NETWORK_TYPE_BITMASK_NR) > 0;
|
||||
mDisplay5gList = checkSupportedRadioBitmask(
|
||||
supportedRadioBitmask, mTelephonyManager.NETWORK_TYPE_BITMASK_NR)
|
||||
&& is5gEnabledByCarrier;
|
||||
lifecycle.addObserver(this);
|
||||
}
|
||||
|
||||
private int getPreferredNetworkMode() {
|
||||
long preferredNetworkBitMask = MobileNetworkUtils.getRafFromNetworkType(
|
||||
Settings.Global.getInt(mContext.getContentResolver(),
|
||||
Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
|
||||
TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE));
|
||||
return MobileNetworkUtils.getNetworkTypeFromRaf((int)
|
||||
(preferredNetworkBitMask & mTelephonyManager.getAllowedNetworkTypes()));
|
||||
}
|
||||
private final static class PreferenceEntriesBuilder {
|
||||
private CarrierConfigManager mCarrierConfigManager;
|
||||
private Context mContext;
|
||||
private TelephonyManager mTelephonyManager;
|
||||
|
||||
private void updatePreferenceEntries(ListPreference preference) {
|
||||
final int phoneType = mTelephonyManager.getPhoneType();
|
||||
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
|
||||
if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
|
||||
final int lteForced = android.provider.Settings.Global.getInt(
|
||||
mContext.getContentResolver(),
|
||||
android.provider.Settings.Global.LTE_SERVICE_FORCED + mSubId,
|
||||
0);
|
||||
final int settingsNetworkMode = getPreferredNetworkMode();
|
||||
if (mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled()) {
|
||||
if (lteForced == 0) {
|
||||
preference.setEntries(
|
||||
R.array.enabled_networks_cdma_choices);
|
||||
preference.setEntryValues(
|
||||
R.array.enabled_networks_cdma_values);
|
||||
} else {
|
||||
switch (settingsNetworkMode) {
|
||||
case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
|
||||
preference.setEntries(
|
||||
R.array.enabled_networks_cdma_no_lte_choices);
|
||||
preference.setEntryValues(
|
||||
R.array.enabled_networks_cdma_no_lte_values);
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
|
||||
preference.setEntries(
|
||||
R.array.enabled_networks_cdma_only_lte_choices);
|
||||
preference.setEntryValues(
|
||||
R.array.enabled_networks_cdma_only_lte_values);
|
||||
break;
|
||||
default:
|
||||
preference.setEntries(
|
||||
R.array.enabled_networks_cdma_choices);
|
||||
preference.setEntryValues(
|
||||
R.array.enabled_networks_cdma_values);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
|
||||
if (MobileNetworkUtils.isTdscdmaSupported(mContext, mSubId)) {
|
||||
preference.setEntries(
|
||||
R.array.enabled_networks_tdscdma_choices);
|
||||
preference.setEntryValues(
|
||||
R.array.enabled_networks_tdscdma_values);
|
||||
} else if (carrierConfig != null
|
||||
&& !carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)
|
||||
&& !carrierConfig.getBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL)) {
|
||||
preference.setEntries(R.array.enabled_networks_except_gsm_lte_choices);
|
||||
preference.setEntryValues(R.array.enabled_networks_except_gsm_lte_values);
|
||||
} else if (carrierConfig != null
|
||||
&& !carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)) {
|
||||
int select = mShow4GForLTE
|
||||
? R.array.enabled_networks_except_gsm_4g_choices
|
||||
: R.array.enabled_networks_except_gsm_choices;
|
||||
preference.setEntries(select);
|
||||
preference.setEntryValues(
|
||||
R.array.enabled_networks_except_gsm_values);
|
||||
} else if (carrierConfig != null
|
||||
&& !carrierConfig.getBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL)) {
|
||||
preference.setEntries(
|
||||
R.array.enabled_networks_except_lte_choices);
|
||||
preference.setEntryValues(
|
||||
R.array.enabled_networks_except_lte_values);
|
||||
} else if (mIsGlobalCdma) {
|
||||
preference.setEntries(R.array.enabled_networks_cdma_choices);
|
||||
preference.setEntryValues(R.array.enabled_networks_cdma_values);
|
||||
} else {
|
||||
int select = mShow4GForLTE ? R.array.enabled_networks_4g_choices
|
||||
: R.array.enabled_networks_choices;
|
||||
preference.setEntries(select);
|
||||
preference.setEntryValues(R.array.enabled_networks_values);
|
||||
}
|
||||
}
|
||||
//TODO(b/117881708): figure out what world mode is, then we can optimize code. Otherwise
|
||||
// I prefer to keep this old code
|
||||
if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
|
||||
preference.setEntries(
|
||||
R.array.preferred_network_mode_choices_world_mode);
|
||||
preference.setEntryValues(
|
||||
R.array.preferred_network_mode_values_world_mode);
|
||||
private boolean mAllowed5gNetworkType;
|
||||
private boolean mIsGlobalCdma;
|
||||
private boolean mIs5gEntryDisplayed;
|
||||
private boolean mShow4gForLTE;
|
||||
private boolean mSupported5gRadioAccessFamily;
|
||||
private int mSelectedEntry;
|
||||
private int mSubId;
|
||||
private String mSummary;
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
if (mDisplay5gList) {
|
||||
add5gListItem(preference);
|
||||
}
|
||||
}
|
||||
PreferenceEntriesBuilder(Context context, int subId) {
|
||||
this.mContext = context;
|
||||
this.mSubId = subId;
|
||||
|
||||
@VisibleForTesting
|
||||
boolean checkSupportedRadioBitmask(long supportedRadioBitmask, long targetBitmask) {
|
||||
Log.d(LOG_TAG, "supportedRadioBitmask: " + supportedRadioBitmask);
|
||||
if ((targetBitmask & supportedRadioBitmask) > 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class);
|
||||
mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
|
||||
.createForSubscriptionId(mSubId);
|
||||
|
||||
/***
|
||||
* Generate preferred network choices list for 5G
|
||||
*
|
||||
* @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: TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA
|
||||
oldEntryValue = Integer.toString(
|
||||
TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
|
||||
}
|
||||
|
||||
if (!TextUtils.isEmpty(new5gEntry)) {
|
||||
newEntries.add(new5gEntry);
|
||||
newEntryValues.add(new5gEntryValue);
|
||||
}
|
||||
newEntries.add(oldEntry);
|
||||
newEntryValues.add(oldEntryValue);
|
||||
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
|
||||
mAllowed5gNetworkType = checkSupportedRadioBitmask(
|
||||
mTelephonyManager.getAllowedNetworkTypes(),
|
||||
TelephonyManager.NETWORK_TYPE_BITMASK_NR);
|
||||
mSupported5gRadioAccessFamily = checkSupportedRadioBitmask(
|
||||
mTelephonyManager.getSupportedRadioAccessFamily(),
|
||||
TelephonyManager.NETWORK_TYPE_BITMASK_NR);
|
||||
mIsGlobalCdma = mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled()
|
||||
&& carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
|
||||
mShow4gForLTE = carrierConfig != null && carrierConfig.getBoolean(
|
||||
CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL);
|
||||
}
|
||||
|
||||
preference.setEntries(newEntries.toArray(new CharSequence[newEntries.size()]));
|
||||
preference.setEntryValues(newEntryValues.toArray(new CharSequence[newEntryValues.size()]));
|
||||
}
|
||||
|
||||
/**
|
||||
* transform LTE network mode to 5G network mode.
|
||||
*
|
||||
* @param networkMode an LTE network mode without 5G.
|
||||
* @return the corresponding network mode with 5G.
|
||||
*/
|
||||
private CharSequence transformLteEntryValueTo5gEntryValue(CharSequence networkMode) {
|
||||
int networkModeInt = Integer.valueOf(networkMode.toString());
|
||||
return Integer.toString(addNrToLteNetworkType(networkModeInt));
|
||||
}
|
||||
private int addNrToLteNetworkType(int networkType) {
|
||||
switch(networkType) {
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_WCDMA;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
|
||||
default:
|
||||
return networkType; // not LTE
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the display string for the network mode choice and selects the corresponding item
|
||||
*
|
||||
* @param preference ListPreference for selecting the preferred network mode.
|
||||
* @param networkMode the current network mode. The current mode might not be an option in the
|
||||
* choice list. The nearest choice is selected instead
|
||||
*/
|
||||
private void updatePreferenceValueAndSummary(ListPreference preference, int networkMode) {
|
||||
preference.setValue(Integer.toString(networkMode));
|
||||
switch (networkMode) {
|
||||
case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_WCDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM:
|
||||
preference.setValue(
|
||||
Integer.toString(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA));
|
||||
preference.setSummary(R.string.network_3G);
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_WCDMA_ONLY:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_GSM_UMTS:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF:
|
||||
if (!mIsGlobalCdma) {
|
||||
preference.setValue(Integer.toString(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF));
|
||||
preference.setSummary(R.string.network_3G);
|
||||
} else {
|
||||
preference.setValue(Integer.toString(TelephonyManagerConstants
|
||||
.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
|
||||
preference.setSummary(R.string.network_global);
|
||||
}
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY:
|
||||
if (!mIsGlobalCdma) {
|
||||
preference.setValue(
|
||||
Integer.toString(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY));
|
||||
preference.setSummary(R.string.network_2G);
|
||||
} else {
|
||||
preference.setValue(
|
||||
Integer.toString(TelephonyManagerConstants
|
||||
.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
|
||||
preference.setSummary(R.string.network_global);
|
||||
}
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
|
||||
if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
|
||||
preference.setSummary(
|
||||
R.string.preferred_network_mode_lte_gsm_umts_summary);
|
||||
void setPreferenceEntries() {
|
||||
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();
|
||||
break;
|
||||
}
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
|
||||
if (!mIsGlobalCdma) {
|
||||
preference.setValue(
|
||||
Integer.toString(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
|
||||
preference.setSummary(
|
||||
mShow4GForLTE ? R.string.network_4G : R.string.network_lte);
|
||||
} else {
|
||||
preference.setValue(
|
||||
Integer.toString(TelephonyManagerConstants
|
||||
.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
|
||||
preference.setSummary(R.string.network_global);
|
||||
}
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
|
||||
if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
|
||||
preference.setSummary(
|
||||
R.string.preferred_network_mode_lte_cdma_summary);
|
||||
} else {
|
||||
preference.setValue(
|
||||
Integer.toString(TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO));
|
||||
preference.setSummary(
|
||||
mDisplay5gList ? R.string.network_lte_pure : R.string.network_lte);
|
||||
}
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
|
||||
preference.setValue(Integer.toString(TelephonyManagerConstants
|
||||
.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
|
||||
preference.setSummary(R.string.network_3G);
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
|
||||
preference.setValue(
|
||||
Integer.toString(TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO));
|
||||
preference.setSummary(R.string.network_3G);
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
|
||||
preference.setValue(
|
||||
Integer.toString(TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO));
|
||||
preference.setSummary(R.string.network_1x);
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY:
|
||||
preference.setValue(
|
||||
Integer.toString(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY));
|
||||
preference.setSummary(R.string.network_3G);
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
|
||||
if (MobileNetworkUtils.isTdscdmaSupported(mContext, mSubId)) {
|
||||
preference.setValue(
|
||||
Integer.toString(TelephonyManagerConstants
|
||||
.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
|
||||
preference.setSummary(
|
||||
mDisplay5gList ? R.string.network_lte_pure : R.string.network_lte);
|
||||
} else {
|
||||
preference.setValue(
|
||||
Integer.toString(TelephonyManagerConstants
|
||||
.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
|
||||
if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA
|
||||
|| mIsGlobalCdma
|
||||
|| MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
|
||||
preference.setSummary(R.string.network_global);
|
||||
case ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES:
|
||||
add3gEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO);
|
||||
add1xEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO);
|
||||
break;
|
||||
case ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES:
|
||||
addLteEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO);
|
||||
addGlobalEntry();
|
||||
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);
|
||||
break;
|
||||
case ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES:
|
||||
add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
|
||||
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);
|
||||
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);
|
||||
break;
|
||||
case ENABLED_NETWORKS_EXCEPT_LTE_CHOICES:
|
||||
add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
|
||||
add2gEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
|
||||
break;
|
||||
case ENABLED_NETWORKS_4G_CHOICES:
|
||||
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);
|
||||
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);
|
||||
break;
|
||||
case PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE:
|
||||
addGlobalEntry();
|
||||
addCustomEntry(mContext.getString(R.string.network_world_mode_cdma_lte),
|
||||
TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO);
|
||||
addCustomEntry(mContext.getString(R.string.network_world_mode_gsm_lte),
|
||||
TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Not supported enabled network types.");
|
||||
}
|
||||
}
|
||||
|
||||
private int getPreferredNetworkMode() {
|
||||
return Settings.Global.getInt(mContext.getContentResolver(),
|
||||
Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
|
||||
TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE);
|
||||
}
|
||||
|
||||
private EnabledNetworks getEnabledNetworkType() {
|
||||
EnabledNetworks enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_UNKNOWN;
|
||||
final int phoneType = mTelephonyManager.getPhoneType();
|
||||
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
|
||||
|
||||
if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
|
||||
final int lteForced = android.provider.Settings.Global.getInt(
|
||||
mContext.getContentResolver(),
|
||||
android.provider.Settings.Global.LTE_SERVICE_FORCED + mSubId,
|
||||
0);
|
||||
final int settingsNetworkMode = getPreferredNetworkMode();
|
||||
if (mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled()) {
|
||||
if (lteForced == 0) {
|
||||
enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_CDMA_CHOICES;
|
||||
} else {
|
||||
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);
|
||||
switch (settingsNetworkMode) {
|
||||
case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
|
||||
enabledNetworkType =
|
||||
EnabledNetworks.ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES;
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
|
||||
enabledNetworkType =
|
||||
EnabledNetworks.ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES;
|
||||
break;
|
||||
default:
|
||||
enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_CDMA_CHOICES;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO:
|
||||
case TelephonyManagerConstants.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 TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA:
|
||||
preference.setValue(
|
||||
Integer.toString(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA));
|
||||
if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA
|
||||
|| mIsGlobalCdma
|
||||
|| MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
|
||||
preference.setSummary(R.string.network_global);
|
||||
} else if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
|
||||
if (MobileNetworkUtils.isTdscdmaSupported(mContext, mSubId)) {
|
||||
enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_TDSCDMA_CHOICES;
|
||||
} else if (carrierConfig != null
|
||||
&& !carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)
|
||||
&& !carrierConfig.getBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL)) {
|
||||
enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES;
|
||||
} else if (carrierConfig != null
|
||||
&& !carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)) {
|
||||
enabledNetworkType = mShow4gForLTE
|
||||
? EnabledNetworks.ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES
|
||||
: EnabledNetworks.ENABLED_NETWORKS_EXCEPT_GSM_CHOICES;
|
||||
} else if (carrierConfig != null
|
||||
&& !carrierConfig.getBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL)) {
|
||||
enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_EXCEPT_LTE_CHOICES;
|
||||
} else if (mIsGlobalCdma) {
|
||||
enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_CDMA_CHOICES;
|
||||
} else {
|
||||
preference.setSummary(mContext.getString(R.string.network_5G)
|
||||
+ mContext.getString(R.string.network_recommended));
|
||||
enabledNetworkType = mShow4gForLTE ? EnabledNetworks.ENABLED_NETWORKS_4G_CHOICES
|
||||
: EnabledNetworks.ENABLED_NETWORKS_CHOICES;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
preference.setSummary(
|
||||
mContext.getString(R.string.mobile_network_mode_error, networkMode));
|
||||
}
|
||||
//TODO(b/117881708): figure out what world mode is, then we can optimize code. Otherwise
|
||||
// I prefer to keep this old code
|
||||
if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
|
||||
enabledNetworkType = EnabledNetworks.PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE;
|
||||
}
|
||||
|
||||
Log.d(LOG_TAG, "enabledNetworkType: " + enabledNetworkType);
|
||||
return enabledNetworkType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the display string for the network mode choice and selects the corresponding item
|
||||
*
|
||||
* @param networkMode the current network mode. The current mode might not be an option in
|
||||
* the choice list. The nearest choice is selected instead
|
||||
*/
|
||||
void setPreferenceValueAndSummary(int networkMode) {
|
||||
setSelectedEntry(networkMode);
|
||||
switch (networkMode) {
|
||||
case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_WCDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM:
|
||||
setSelectedEntry(
|
||||
TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
|
||||
setSummary(R.string.network_3G);
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_WCDMA_ONLY:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_GSM_UMTS:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF:
|
||||
if (!mIsGlobalCdma) {
|
||||
setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
|
||||
setSummary(R.string.network_3G);
|
||||
} else {
|
||||
setSelectedEntry(
|
||||
TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
|
||||
setSummary(R.string.network_global);
|
||||
}
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY:
|
||||
if (!mIsGlobalCdma) {
|
||||
setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
|
||||
setSummary(R.string.network_2G);
|
||||
} else {
|
||||
setSelectedEntry(
|
||||
TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
|
||||
setSummary(R.string.network_global);
|
||||
}
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
|
||||
if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
|
||||
setSummary(
|
||||
R.string.preferred_network_mode_lte_gsm_umts_summary);
|
||||
break;
|
||||
}
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
|
||||
if (!mIsGlobalCdma) {
|
||||
setSelectedEntry(
|
||||
TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
|
||||
setSummary(
|
||||
mShow4gForLTE ? R.string.network_4G : R.string.network_lte);
|
||||
} else {
|
||||
setSelectedEntry(
|
||||
TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
|
||||
setSummary(R.string.network_global);
|
||||
}
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
|
||||
if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
|
||||
setSummary(
|
||||
R.string.preferred_network_mode_lte_cdma_summary);
|
||||
} else {
|
||||
setSelectedEntry(
|
||||
TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO);
|
||||
setSummary(is5gEntryDisplayed()
|
||||
? R.string.network_lte_pure : R.string.network_lte);
|
||||
}
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
|
||||
setSelectedEntry(
|
||||
TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA);
|
||||
setSummary(R.string.network_3G);
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
|
||||
setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO);
|
||||
setSummary(R.string.network_3G);
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
|
||||
setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO);
|
||||
setSummary(R.string.network_1x);
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY:
|
||||
setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY);
|
||||
setSummary(R.string.network_3G);
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
|
||||
if (MobileNetworkUtils.isTdscdmaSupported(mContext, mSubId)) {
|
||||
setSelectedEntry(
|
||||
TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA);
|
||||
setSummary(is5gEntryDisplayed()
|
||||
? R.string.network_lte_pure : R.string.network_lte);
|
||||
} else {
|
||||
setSelectedEntry(
|
||||
TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
|
||||
if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA
|
||||
|| mIsGlobalCdma
|
||||
|| MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
|
||||
setSummary(R.string.network_global);
|
||||
} else {
|
||||
if (is5gEntryDisplayed()) {
|
||||
setSummary(mShow4gForLTE
|
||||
? R.string.network_4G_pure : R.string.network_lte_pure);
|
||||
} else {
|
||||
setSummary(mShow4gForLTE
|
||||
? R.string.network_4G : R.string.network_lte);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO:
|
||||
case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
|
||||
setSelectedEntry(networkMode);
|
||||
setSummary(mContext.getString(R.string.network_5G)
|
||||
+ mContext.getString(R.string.network_recommended));
|
||||
break;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA:
|
||||
setSelectedEntry(
|
||||
TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
|
||||
if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA
|
||||
|| mIsGlobalCdma
|
||||
|| MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
|
||||
setSummary(R.string.network_global);
|
||||
} else {
|
||||
setSummary(mContext.getString(R.string.network_5G)
|
||||
+ mContext.getString(R.string.network_recommended));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
setSummary(
|
||||
mContext.getString(R.string.mobile_network_mode_error, networkMode));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform LTE network mode to 5G network mode.
|
||||
*
|
||||
* @param networkType an LTE network mode without 5G.
|
||||
* @return the corresponding network mode with 5G.
|
||||
*/
|
||||
private static int addNrToLteNetworkType(int networkType) {
|
||||
switch(networkType) {
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_WCDMA;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA;
|
||||
case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
|
||||
return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
|
||||
default:
|
||||
return networkType; // not LTE
|
||||
}
|
||||
}
|
||||
|
||||
private void setPreferenceValueAndSummary() {
|
||||
setPreferenceValueAndSummary(getPreferredNetworkMode());
|
||||
}
|
||||
|
||||
private boolean checkSupportedRadioBitmask(long supportedRadioBitmask, long targetBitmask) {
|
||||
return (targetBitmask & supportedRadioBitmask) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add 5G option. Only show the UI when device supported 5G and allowed 5G.
|
||||
*/
|
||||
private void add5gEntry(int value) {
|
||||
boolean isNRValue = value >= TelephonyManagerConstants.NETWORK_MODE_NR_ONLY;
|
||||
if (mSupported5gRadioAccessFamily && mAllowed5gNetworkType && isNRValue) {
|
||||
mEntries.add(mContext.getString(R.string.network_5G)
|
||||
+ mContext.getString(R.string.network_recommended));
|
||||
mEntriesValue.add(value);
|
||||
mIs5gEntryDisplayed = true;
|
||||
} else {
|
||||
Log.d(LOG_TAG, "Hide 5G option. "
|
||||
+ " supported5GRadioAccessFamily: " + mSupported5gRadioAccessFamily
|
||||
+ " allowed5GNetworkType: " + mAllowed5gNetworkType
|
||||
+ " isNRValue: " + isNRValue);
|
||||
}
|
||||
}
|
||||
|
||||
private void addGlobalEntry() {
|
||||
Log.d(LOG_TAG, "addGlobalEntry. "
|
||||
+ " supported5GRadioAccessFamily: " + mSupported5gRadioAccessFamily
|
||||
+ " allowed5GNetworkType: " + mAllowed5gNetworkType);
|
||||
mEntries.add(mContext.getString(R.string.network_global));
|
||||
if (mSupported5gRadioAccessFamily & mAllowed5gNetworkType) {
|
||||
mEntriesValue.add(
|
||||
TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
|
||||
} else {
|
||||
mEntriesValue.add(
|
||||
TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add LTE entry. If device supported 5G, show "LTE" instead of "LTE (recommended)".
|
||||
*/
|
||||
private void addLteEntry(int value) {
|
||||
if (mSupported5gRadioAccessFamily) {
|
||||
mEntries.add(mContext.getString(R.string.network_lte_pure));
|
||||
} else {
|
||||
mEntries.add(mContext.getString(R.string.network_lte));
|
||||
}
|
||||
mEntriesValue.add(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add 4G entry. If device supported 5G, show "4G" instead of "4G (recommended)".
|
||||
*/
|
||||
private void add4gEntry(int value) {
|
||||
if (mSupported5gRadioAccessFamily) {
|
||||
mEntries.add(mContext.getString(R.string.network_4G_pure));
|
||||
} else {
|
||||
mEntries.add(mContext.getString(R.string.network_4G));
|
||||
}
|
||||
mEntriesValue.add(value);
|
||||
}
|
||||
|
||||
private void add3gEntry(int value) {
|
||||
mEntries.add(mContext.getString(R.string.network_3G));
|
||||
mEntriesValue.add(value);
|
||||
}
|
||||
|
||||
private void add2gEntry(int value) {
|
||||
mEntries.add(mContext.getString(R.string.network_2G));
|
||||
mEntriesValue.add(value);
|
||||
}
|
||||
|
||||
private void add1xEntry(int value) {
|
||||
mEntries.add(mContext.getString(R.string.network_1x));
|
||||
mEntriesValue.add(value);
|
||||
}
|
||||
|
||||
private void addCustomEntry(String name, int value) {
|
||||
mEntries.add(name);
|
||||
mEntriesValue.add(value);
|
||||
}
|
||||
|
||||
private String[] getEntries() {
|
||||
return mEntries.toArray(new String[0]);
|
||||
}
|
||||
|
||||
private String[] getEntryValues() {
|
||||
Integer intArr[] = mEntriesValue.toArray(new Integer[0]);
|
||||
return Arrays.stream(intArr)
|
||||
.map(String::valueOf)
|
||||
.toArray(String[]::new);
|
||||
}
|
||||
|
||||
private int getSelectedEntryValue() {
|
||||
return mSelectedEntry;
|
||||
}
|
||||
|
||||
private void setSelectedEntry(int value) {
|
||||
boolean isInEntriesValue = mEntriesValue.stream()
|
||||
.anyMatch(v -> v == value);
|
||||
|
||||
if (isInEntriesValue) {
|
||||
mSelectedEntry = value;
|
||||
} else if (mEntriesValue.size() > 0) {
|
||||
// if the value isn't in entriesValue, select on the first one.
|
||||
mSelectedEntry = mEntriesValue.get(0);
|
||||
} else {
|
||||
Log.e(LOG_TAG, "entriesValue is empty");
|
||||
}
|
||||
}
|
||||
|
||||
private String getSummary() {
|
||||
return mSummary;
|
||||
}
|
||||
|
||||
private void setSummary(int summaryResId) {
|
||||
setSummary(mContext.getString(summaryResId));
|
||||
}
|
||||
|
||||
private void setSummary(String summary) {
|
||||
this.mSummary = summary;
|
||||
}
|
||||
|
||||
private boolean is5gEntryDisplayed() {
|
||||
return mIs5gEntryDisplayed;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user