From e85bb5058ddc4b2676d38a23a5f2da3b3cbd060f Mon Sep 17 00:00:00 2001 From: SongFerngWang Date: Wed, 8 Feb 2023 06:12:54 +0800 Subject: [PATCH] Add a config to hide the 3G option at preferred network mode UI Add a config config_display_network_mode_3g_option to hide the 3G option at preferred network mode UI Bug: 261615630 Test: build pass. local test pass. atest EnabledNetworkModePreferenceControllerTest Change-Id: I4f94971add1d1eddc9f7c7458b8fc8fdcec3935e (cherry picked from commit f7685dd715874cc11360be252c212c673bd78b5c) Merged-In: I4f94971add1d1eddc9f7c7458b8fc8fdcec3935e --- protos/network_mode_choices.proto | 32 +++- res/values/arrays.xml | 4 + res/values/config.xml | 2 + ...nabledNetworkModePreferenceController.java | 165 +++++++++++------- ...edNetworkModePreferenceControllerTest.java | 1 + 5 files changed, 130 insertions(+), 74 deletions(-) diff --git a/protos/network_mode_choices.proto b/protos/network_mode_choices.proto index 8c3ec931dec..9c2b9b46365 100644 --- a/protos/network_mode_choices.proto +++ b/protos/network_mode_choices.proto @@ -8,7 +8,8 @@ option java_outer_classname = "NetworkModeChoicesProto"; // EnabledNetworks is a list which tries to categorized the entries of popup menu // based on carrier network types available to the end user. -// Next tag: 13 +// Next tag: 15 +// TODO(b/268145152): rename the ENABLED_NETWORKS for good readability. enum EnabledNetworks { // No EnabledNetworks specified. ENABLED_NETWORKS_UNSPECIFIED = 0; @@ -17,39 +18,56 @@ enum EnabledNetworks { ENABLED_NETWORKS_UNKNOWN = 1; // For the case where CDMA is supported and LTE is not prioritized over - // CDMA. + // CDMA (LTE, 3G, 1x, global). ENABLED_NETWORKS_CDMA_CHOICES = 2; // For the case where CDMA is supported and LTE is not available. + // CDMA (3G, 1x) ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES = 3; // For the case where CDMA is supported and LTE is available. + // CDMA (LTE, Global) ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES = 4; // For the case where TDSCDMA is primary network type. + // TDSCDMA (LTE, 3G, 2G) ENABLED_NETWORKS_TDSCDMA_CHOICES = 5; // For the case where GSM and LTE options are removed from the menu. + // (3G) ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES = 6; - // For the case where GSM and 4G options are removed from the menu. + // For the case where GSM option are removed from the menu. The wording of LTE is '4G'. + // (4G, 3G) ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES = 7; - // For the case where GSM is removed from the menu, and both 4G/LTE are not an - // option. + // For the case where GSM option are removed from the menu. The wording of LTE is 'LTE'. + // (LTE, 3G) ENABLED_NETWORKS_EXCEPT_GSM_CHOICES = 8; // For the case where LTE is disabled. + // (3G, 3G) ENABLED_NETWORKS_EXCEPT_LTE_CHOICES = 9; - // For the case where GSM related carrier with 4G/LTE supported. + // For the case where GSM related carrier with 4G/LTE supported. The wording of LTE is '4G'. + // (2G, 3G, 4G) ENABLED_NETWORKS_4G_CHOICES = 10; - // For the case where GSM related carrier without 4G/LTE supported. + // For the case where GSM related carrier with 4G/LTE supported. The wording of LTE is 'LTE'. + // (2G, 3G, LTE) ENABLED_NETWORKS_CHOICES = 11; // For the case where world mode is enabled. + // ("Global", "LTE / CDMA", "LTE / GSM / UMTS") PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE = 12; + + // For the case where GSM, 3G options are removed from the menu. The wording of LTE is '4G'. + // (4G) + ENABLED_NETWORKS_4G_CHOICES_EXCEPT_GSM_3G = 13; + + // For the case where GSM and 3G are removed from the menu. The wording of LTE is 'LTE'. + // (LTE) + ENABLED_NETWORKS_CHOICES_EXCEPT_GSM_3G = 14; } // A request for popup menu. diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 42d60eee989..ea4e6d3f534 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -1374,6 +1374,10 @@ "0" + + "9" + + "0" "1" diff --git a/res/values/config.xml b/res/values/config.xml index f49eff736a5..125715aa278 100755 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -671,4 +671,6 @@ false + + true diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java index 43b3cc0e4c4..e6bafbb71e5 100644 --- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java +++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java @@ -101,6 +101,7 @@ public class EnabledNetworkModePreferenceController extends return visible ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } + protected boolean isCallStateIdle() { return mCallState == TelephonyManager.CALL_STATE_IDLE; } @@ -198,6 +199,9 @@ public class EnabledNetworkModePreferenceController extends private boolean mIs5gEntryDisplayed; private boolean mShow4gForLTE; private boolean mSupported5gRadioAccessFamily; + private boolean mDisplay2gOptions; + private boolean mDisplay3gOptions; + private boolean mLteEnabled; private int mSelectedEntry; private int mSubId; private String mSummary; @@ -224,23 +228,32 @@ public class EnabledNetworkModePreferenceController extends mSupported5gRadioAccessFamily = checkSupportedRadioBitmask( mTelephonyManager.getSupportedRadioAccessFamily(), TelephonyManager.NETWORK_TYPE_BITMASK_NR); - mIsGlobalCdma = mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled() - && carrierConfig != null - && carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL); - mShow4gForLTE = carrierConfig != null && carrierConfig.getBoolean( - CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL); + if (carrierConfig != null) { + mIsGlobalCdma = mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled() + && carrierConfig.getBoolean( + CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL); + mShow4gForLTE = carrierConfig.getBoolean( + CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL); + mDisplay2gOptions = carrierConfig.getBoolean( + CarrierConfigManager.KEY_PREFER_2G_BOOL); + // TODO: Using the carrier config. + mDisplay3gOptions = getResourcesForSubId().getBoolean( + R.bool.config_display_network_mode_3g_option); + mLteEnabled = carrierConfig.getBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL); + } Log.d(LOG_TAG, "PreferenceEntriesBuilder: subId" + mSubId - + ",Supported5gRadioAccessFamily :" + mSupported5gRadioAccessFamily - + ",mAllowed5gNetworkType :" + mAllowed5gNetworkType - + ",IsGlobalCdma :" + mIsGlobalCdma - + ",Show4gForLTE :" + mShow4gForLTE); + + " ,Supported5gRadioAccessFamily :" + mSupported5gRadioAccessFamily + + " ,mAllowed5gNetworkType :" + mAllowed5gNetworkType + + " ,IsGlobalCdma :" + mIsGlobalCdma + + " ,Display2gOptions:" + mDisplay2gOptions + + " ,Display3gOptions:" + mDisplay3gOptions + + " ,Display4gOptions" + mLteEnabled + + " ,Show4gForLTE :" + mShow4gForLTE); } void setPreferenceEntries() { mTelephonyManager = mTelephonyManager.createForSubscriptionId(mSubId); - final PersistableBundle carrierConfig = mCarrierConfigCache.getConfigForSubId(mSubId); - final boolean display2gOptions = carrierConfig - .getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL); + clearAllEntries(); UiOptions.Builder uiOptions = UiOptions.newBuilder(); uiOptions.setType(getEnabledNetworkType()); @@ -316,6 +329,16 @@ public class EnabledNetworkModePreferenceController extends .addFormat(UiOptions.PresentFormat.addWorldModeCdmaEntry) .addFormat(UiOptions.PresentFormat.addWorldModeGsmEntry); break; + case ENABLED_NETWORKS_4G_CHOICES_EXCEPT_GSM_3G: + uiOptions = uiOptions + .setChoices(R.array.enabled_networks_except_gsm_3g_values) + .addFormat(UiOptions.PresentFormat.add5gAnd4gEntry); + break; + case ENABLED_NETWORKS_CHOICES_EXCEPT_GSM_3G: + uiOptions = uiOptions + .setChoices(R.array.enabled_networks_values) + .addFormat(UiOptions.PresentFormat.add5gAndLteEntry); + break; default: throw new IllegalArgumentException("Not supported enabled network types."); } @@ -331,53 +354,55 @@ public class EnabledNetworkModePreferenceController extends // Compose options based on given values and formats. IntStream.range(0, formatList.size()).forEach(entryIndex -> { switch (formatList.get(entryIndex)) { - case add1xEntry: - if (display2gOptions) { - add1xEntry(entryValuesInt[entryIndex]); - } - break; - case add2gEntry: - if (display2gOptions) { - add2gEntry(entryValuesInt[entryIndex]); - } - break; - case add3gEntry: - add3gEntry(entryValuesInt[entryIndex]); - break; - case addGlobalEntry: - addGlobalEntry(entryValuesInt[entryIndex]); - break; - case addWorldModeCdmaEntry: - addCustomEntry( - getResourcesForSubId().getString( - R.string.network_world_mode_cdma_lte), - entryValuesInt[entryIndex]); - break; - case addWorldModeGsmEntry: - addCustomEntry( - getResourcesForSubId().getString( - R.string.network_world_mode_gsm_lte), - entryValuesInt[entryIndex]); - break; - case add4gEntry: - add4gEntry(entryValuesInt[entryIndex]); - break; - case addLteEntry: - addLteEntry(entryValuesInt[entryIndex]); - break; - case add5gEntry: - add5gEntry(addNrToLteNetworkType(entryValuesInt[entryIndex])); - break; - case add5gAnd4gEntry: - add5gEntry(addNrToLteNetworkType(entryValuesInt[entryIndex])); - add4gEntry(entryValuesInt[entryIndex]); - break; - case add5gAndLteEntry: - add5gEntry(addNrToLteNetworkType(entryValuesInt[entryIndex])); - addLteEntry(entryValuesInt[entryIndex]); - break; - default: - throw new IllegalArgumentException("Not supported ui options format."); + case add1xEntry: + if (mDisplay2gOptions) { + add1xEntry(entryValuesInt[entryIndex]); + } + break; + case add2gEntry: + if (mDisplay2gOptions) { + add2gEntry(entryValuesInt[entryIndex]); + } + break; + case add3gEntry: + if (mDisplay3gOptions) { + add3gEntry(entryValuesInt[entryIndex]); + } + break; + case addGlobalEntry: + addGlobalEntry(entryValuesInt[entryIndex]); + break; + case addWorldModeCdmaEntry: + addCustomEntry( + getResourcesForSubId().getString( + R.string.network_world_mode_cdma_lte), + entryValuesInt[entryIndex]); + break; + case addWorldModeGsmEntry: + addCustomEntry( + getResourcesForSubId().getString( + R.string.network_world_mode_gsm_lte), + entryValuesInt[entryIndex]); + break; + case add4gEntry: + add4gEntry(entryValuesInt[entryIndex]); + break; + case addLteEntry: + addLteEntry(entryValuesInt[entryIndex]); + break; + case add5gEntry: + add5gEntry(addNrToLteNetworkType(entryValuesInt[entryIndex])); + break; + case add5gAnd4gEntry: + add5gEntry(addNrToLteNetworkType(entryValuesInt[entryIndex])); + add4gEntry(entryValuesInt[entryIndex]); + break; + case add5gAndLteEntry: + add5gEntry(addNrToLteNetworkType(entryValuesInt[entryIndex])); + addLteEntry(entryValuesInt[entryIndex]); + break; + default: + throw new IllegalArgumentException("Not supported ui options format."); } }); } @@ -397,7 +422,6 @@ public class EnabledNetworkModePreferenceController extends private EnabledNetworks getEnabledNetworkType() { EnabledNetworks enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_UNKNOWN; final int phoneType = mTelephonyManager.getPhoneType(); - final PersistableBundle carrierConfig = mCarrierConfigCache.getConfigForSubId(mSubId); if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) { final int lteForced = android.provider.Settings.Global.getInt( @@ -432,17 +456,17 @@ public class EnabledNetworkModePreferenceController extends } 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)) { + } else if (!mDisplay2gOptions && !mDisplay3gOptions) { + enabledNetworkType = mShow4gForLTE + ? EnabledNetworks.ENABLED_NETWORKS_4G_CHOICES_EXCEPT_GSM_3G + : EnabledNetworks.ENABLED_NETWORKS_CHOICES_EXCEPT_GSM_3G; + } else if (!mDisplay2gOptions && !mLteEnabled) { enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES; - } else if (carrierConfig != null - && !carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)) { + } else if (!mDisplay2gOptions) { 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)) { + } else if (!mLteEnabled) { enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_EXCEPT_LTE_CHOICES; } else if (mIsGlobalCdma) { enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_CDMA_CHOICES; @@ -457,6 +481,13 @@ public class EnabledNetworkModePreferenceController extends enabledNetworkType = EnabledNetworks.PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE; } + if (phoneType == TelephonyManager.PHONE_TYPE_NONE) { + Log.d(LOG_TAG, "phoneType: PHONE_TYPE_NONE"); + enabledNetworkType = mShow4gForLTE + ? EnabledNetworks.ENABLED_NETWORKS_4G_CHOICES_EXCEPT_GSM_3G + : EnabledNetworks.ENABLED_NETWORKS_CHOICES_EXCEPT_GSM_3G; + } + Log.d(LOG_TAG, "enabledNetworkType: " + enabledNetworkType); return enabledNetworkType; } diff --git a/tests/unit/src/com/android/settings/network/EnabledNetworkModePreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/EnabledNetworkModePreferenceControllerTest.java index 4b996465dfb..7f170b566fe 100644 --- a/tests/unit/src/com/android/settings/network/EnabledNetworkModePreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/network/EnabledNetworkModePreferenceControllerTest.java @@ -497,6 +497,7 @@ public class EnabledNetworkModePreferenceControllerTest { mPersistableBundle.putBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL, true); mPersistableBundle.putBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL, true); } + mController.init(SUB_ID); } private void mockAllowedNetworkTypes(long allowedNetworkType) {