Use NR configs for minimum NR advanced bandwidth threshold
Test: manual verify
Test: atest NetworkTypeControllerTest
Bug: 257135958
Bug: 260007418
Change-Id: I41eb1a08e9c04820e4ec188eb6dfd2c7f73ff591
diff --git a/src/java/com/android/internal/telephony/NetworkTypeController.java b/src/java/com/android/internal/telephony/NetworkTypeController.java
index 2091eff..2e6da82 100644
--- a/src/java/com/android/internal/telephony/NetworkTypeController.java
+++ b/src/java/com/android/internal/telephony/NetworkTypeController.java
@@ -524,7 +524,8 @@
int value = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE;
if ((getDataNetworkType() == TelephonyManager.NETWORK_TYPE_LTE_CA
|| mServiceState.isUsingCarrierAggregation())
- && getBandwidth() > mLtePlusThresholdBandwidth) {
+ && IntStream.of(mServiceState.getCellBandwidths()).sum()
+ > mLtePlusThresholdBandwidth) {
value = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA;
}
if (isLteEnhancedAvailable()) {
@@ -1286,9 +1287,19 @@
return false;
}
+ int bandwidths = 0;
+ if (mPhone.getServiceStateTracker().getPhysicalChannelConfigList() != null) {
+ bandwidths = mPhone.getServiceStateTracker().getPhysicalChannelConfigList()
+ .stream()
+ .filter(config -> config.getNetworkType() == TelephonyManager.NETWORK_TYPE_NR)
+ .map(PhysicalChannelConfig::getCellBandwidthDownlinkKhz)
+ .mapToInt(Integer::intValue)
+ .sum();
+ }
+
// Check if meeting minimum bandwidth requirement. For most carriers, there is no minimum
// bandwidth requirement and mNrAdvancedThresholdBandwidth is 0.
- if (mNrAdvancedThresholdBandwidth > 0 && getBandwidth() < mNrAdvancedThresholdBandwidth) {
+ if (mNrAdvancedThresholdBandwidth > 0 && bandwidths < mNrAdvancedThresholdBandwidth) {
return false;
}
@@ -1329,10 +1340,6 @@
? DataCallResponse.LINK_STATUS_DORMANT : DataCallResponse.LINK_STATUS_ACTIVE;
}
- private int getBandwidth() {
- return IntStream.of(mServiceState.getCellBandwidths()).sum();
- }
-
private String getEventName(int event) {
try {
return sEvents[event];
diff --git a/tests/telephonytests/src/com/android/internal/telephony/NetworkTypeControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/NetworkTypeControllerTest.java
index 91d936d..bf62978 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/NetworkTypeControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/NetworkTypeControllerTest.java
@@ -1240,11 +1240,16 @@
doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType();
doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState();
doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(mServiceState).getNrFrequencyRange();
- doReturn(new int[] {20001}).when(mServiceState).getCellBandwidths();
+ List<PhysicalChannelConfig> lastPhysicalChannelConfigList = new ArrayList<>();
+ lastPhysicalChannelConfigList.add(new PhysicalChannelConfig.Builder()
+ .setNetworkType(TelephonyManager.NETWORK_TYPE_NR)
+ .setCellBandwidthDownlinkKhz(20001)
+ .build());
+ doReturn(lastPhysicalChannelConfigList).when(mSST).getPhysicalChannelConfigList();
mBundle.putInt(CarrierConfigManager.KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT, 20000);
broadcastCarrierConfigs();
- mNetworkTypeController.sendMessage(3 /* EVENT_SERVICE_STATE_CHANGED */);
+ mNetworkTypeController.sendMessage(11 /* EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED */);
processAllMessages();
assertEquals("connected_mmwave", getCurrentState().getName());
}