Loading src/java/com/android/internal/telephony/NetworkTypeController.java +43 −8 Original line number Diff line number Diff line Loading @@ -98,6 +98,7 @@ public class NetworkTypeController extends StateMachine { private static final int EVENT_INITIALIZE = 12; private static final int EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED = 13; private static final int EVENT_PCO_DATA_CHANGED = 14; private static final int EVENT_BANDWIDTH_CHANGED = 15; private static final String[] sEvents = new String[EVENT_PCO_DATA_CHANGED + 1]; static { Loading Loading @@ -142,6 +143,7 @@ public class NetworkTypeController extends StateMachine { private boolean mIsSecondaryTimerActive; private boolean mIsTimerResetEnabledForLegacyStateRRCIdle; private int mLtePlusThresholdBandwidth; private int mNrAdvancedThresholdBandwidth; private int[] mAdditionalNrAdvancedBandsList; private String mPrimaryTimerState; private String mSecondaryTimerState; Loading @@ -151,6 +153,7 @@ public class NetworkTypeController extends StateMachine { private Boolean mIsNrAdvancedAllowedByPco = false; private int mNrAdvancedCapablePcoId = 0; private boolean mIsUsingUserDataForRrcDetection = false; private boolean mEnableNrAdvancedWhileRoaming = true; /** * NetworkTypeController constructor. Loading Loading @@ -200,6 +203,8 @@ public class NetworkTypeController extends StateMachine { mPhone.getServiceStateTracker().registerForDataRegStateOrRatChanged( AccessNetworkConstants.TRANSPORT_TYPE_WWAN, getHandler(), EVENT_DATA_RAT_CHANGED, null); mPhone.getServiceStateTracker().registerForBandwidthChanged( getHandler(), EVENT_BANDWIDTH_CHANGED, null); mIsPhysicalChannelConfig16Supported = mPhone.getContext().getSystemService( TelephonyManager.class).isRadioInterfaceCapabilitySupported( TelephonyManager.CAPABILITY_PHYSICAL_CHANNEL_CONFIG_1_6_SUPPORTED); Loading Loading @@ -246,6 +251,10 @@ public class NetworkTypeController extends StateMachine { CarrierConfigManager.KEY_NR_TIMERS_RESET_IF_NON_ENDC_AND_RRC_IDLE_BOOL); mLtePlusThresholdBandwidth = CarrierConfigManager.getDefaultConfig().getInt( CarrierConfigManager.KEY_LTE_PLUS_THRESHOLD_BANDWIDTH_KHZ_INT); mNrAdvancedThresholdBandwidth = CarrierConfigManager.getDefaultConfig().getInt( CarrierConfigManager.KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT); mEnableNrAdvancedWhileRoaming = CarrierConfigManager.getDefaultConfig().getBoolean( CarrierConfigManager.KEY_ENABLE_NR_ADVANCED_WHILE_ROAMING_BOOL); CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext() .getSystemService(Context.CARRIER_CONFIG_SERVICE); Loading Loading @@ -276,10 +285,15 @@ public class NetworkTypeController extends StateMachine { mLtePlusThresholdBandwidth = b.getInt( CarrierConfigManager.KEY_LTE_PLUS_THRESHOLD_BANDWIDTH_KHZ_INT, mLtePlusThresholdBandwidth); mNrAdvancedThresholdBandwidth = b.getInt( CarrierConfigManager.KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT, mNrAdvancedThresholdBandwidth); mAdditionalNrAdvancedBandsList = b.getIntArray( CarrierConfigManager.KEY_ADDITIONAL_NR_ADVANCED_BANDS_INT_ARRAY); mNrAdvancedCapablePcoId = b.getInt( CarrierConfigManager.KEY_NR_ADVANCED_CAPABLE_PCO_ID_INT); mEnableNrAdvancedWhileRoaming = b.getBoolean( CarrierConfigManager.KEY_ENABLE_NR_ADVANCED_WHILE_ROAMING_BOOL); mIsUsingUserDataForRrcDetection = b.getBoolean( CarrierConfigManager.KEY_LTE_ENDC_USING_USER_DATA_FOR_RRC_DETECTION_BOOL); if (mIsPhysicalChannelConfig16Supported && mIsUsingUserDataForRrcDetection) { Loading Loading @@ -508,6 +522,7 @@ public class NetworkTypeController extends StateMachine { case EVENT_NR_STATE_CHANGED: case EVENT_NR_FREQUENCY_CHANGED: case EVENT_PCO_DATA_CHANGED: case EVENT_BANDWIDTH_CHANGED: // ignored break; case EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED: Loading Loading @@ -877,6 +892,9 @@ public class NetworkTypeController extends StateMachine { sendMessage(EVENT_NR_STATE_CHANGED); } break; case EVENT_BANDWIDTH_CHANGED: updateNrAdvancedState(); break; default: return NOT_HANDLED; } Loading Loading @@ -1135,8 +1153,32 @@ public class NetworkTypeController extends StateMachine { == NetworkRegistrationInfo.NR_STATE_RESTRICTED; } /** * @return {@code true} if the device is in NR advanced mode (i.e. 5G+). */ private boolean isNrAdvanced() { return isNrAdvancedCapable() && (isNrMmwave() || isAdditionalNrAdvancedBand()); // Check PCO requirement. For carriers using PCO to indicate whether the data connection is // NR advanced capable, mNrAdvancedCapablePcoId should be configured to non-zero. if (mNrAdvancedCapablePcoId > 0 && !mIsNrAdvancedAllowedByPco) { return false; } // Check if NR advanced is enabled when the device is roaming. Some carriers disable it // while the device is roaming. if (mPhone.getServiceState().getDataRoaming() && !mEnableNrAdvancedWhileRoaming) { return false; } // Check if meeting minimum bandwidth requirement. For most carriers, there is no minimum // bandwidth requirement and mNrAdvancedThresholdBandwidth is 0. if (IntStream.of(mPhone.getServiceState().getCellBandwidths()).sum() < mNrAdvancedThresholdBandwidth) { return false; } // If all above tests passed, then check if the device is using millimeter wave bands or // carrier designated bands. return isNrMmwave() || isAdditionalNrAdvancedBand(); } private boolean isNrMmwave() { Loading @@ -1160,13 +1202,6 @@ public class NetworkTypeController extends StateMachine { return false; } private boolean isNrAdvancedCapable() { if (mNrAdvancedCapablePcoId > 0) { return mIsNrAdvancedAllowedByPco; } return true; } private boolean isLte(int rat) { return rat == TelephonyManager.NETWORK_TYPE_LTE || rat == TelephonyManager.NETWORK_TYPE_LTE_CA; Loading src/java/com/android/internal/telephony/ServiceStateTracker.java +27 −0 Original line number Diff line number Diff line Loading @@ -239,6 +239,7 @@ public class ServiceStateTracker extends Handler { private RegistrantList mNrStateChangedRegistrants = new RegistrantList(); private RegistrantList mNrFrequencyChangedRegistrants = new RegistrantList(); private RegistrantList mCssIndicatorChangedRegistrants = new RegistrantList(); private final RegistrantList mBandwidthChangedRegistrants = new RegistrantList(); private final RegistrantList mAirplaneModeChangedRegistrants = new RegistrantList(); private final RegistrantList mAreaCodeChangedRegistrants = new RegistrantList(); Loading Loading @@ -3650,6 +3651,8 @@ public class ServiceStateTracker extends Handler { boolean hasCssIndicatorChanged = (mSS.getCssIndicator() != mNewSS.getCssIndicator()); boolean hasBandwidthChanged = mSS.getCellBandwidths() != mNewSS.getCellBandwidths(); boolean has4gHandoff = false; boolean hasMultiApnSupport = false; boolean hasLostMultiApnSupport = false; Loading Loading @@ -3693,6 +3696,7 @@ public class ServiceStateTracker extends Handler { + " hasCssIndicatorChanged = " + hasCssIndicatorChanged + " hasNrFrequencyRangeChanged = " + hasNrFrequencyRangeChanged + " hasNrStateChanged = " + hasNrStateChanged + " hasBandwidthChanged = " + hasBandwidthChanged + " hasAirplaneModeOnlChanged = " + hasAirplaneModeOnChanged); } Loading Loading @@ -3774,6 +3778,10 @@ public class ServiceStateTracker extends Handler { mCssIndicatorChangedRegistrants.notifyRegistrants(); } if (hasBandwidthChanged) { mBandwidthChangedRegistrants.notifyRegistrants(); } if (hasRejectCauseChanged) { setNotification(CS_REJECT_CAUSE_ENABLED); } Loading Loading @@ -6221,6 +6229,25 @@ public class ServiceStateTracker extends Handler { mCssIndicatorChangedRegistrants.remove(h); } /** * Registers for cell bandwidth changed. * @param h handler to notify * @param what what code of message when delivered * @param obj placed in Message.obj */ public void registerForBandwidthChanged(Handler h, int what, Object obj) { Registrant r = new Registrant(h, what, obj); mBandwidthChangedRegistrants.add(r); } /** * Unregisters for cell bandwidth changed. * @param h handler to notify */ public void unregisterForBandwidthChanged(Handler h) { mBandwidthChangedRegistrants.remove(h); } /** * Get the NR data connection context ids. * Loading tests/telephonytests/src/com/android/internal/telephony/NetworkTypeControllerTest.java +46 −0 Original line number Diff line number Diff line Loading @@ -114,6 +114,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { mPhone).getCachedAllowedNetworkTypesBitmask(); doReturn(false).when(mTelephonyManager).isRadioInterfaceCapabilitySupported( TelephonyManager.CAPABILITY_PHYSICAL_CHANNEL_CONFIG_1_6_SUPPORTED); doReturn(new int[] {0}).when(mServiceState).getCellBandwidths(); mNetworkTypeController = new NetworkTypeController(mPhone, mDisplayInfoController); processAllMessages(); } Loading Loading @@ -1233,4 +1234,49 @@ public class NetworkTypeControllerTest extends TelephonyTest { } doReturn(lastPhysicalChannelConfigList).when(mSST).getPhysicalChannelConfigList(); } @Test public void testTransitionToCurrentStateNrConnectedWithLowBandwidth() throws Exception { assertEquals("DefaultState", getCurrentState().getName()); 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[] {19999}).when(mServiceState).getCellBandwidths(); mBundle.putInt(CarrierConfigManager.KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT, 20000); broadcastCarrierConfigs(); mNetworkTypeController.sendMessage(NetworkTypeController.EVENT_UPDATE); processAllMessages(); assertEquals("connected", getCurrentState().getName()); } @Test public void testTransitionToCurrentStateNrConnectedWithHighBandwidth() throws Exception { assertEquals("DefaultState", getCurrentState().getName()); 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(); mBundle.putInt(CarrierConfigManager.KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT, 20000); broadcastCarrierConfigs(); mNetworkTypeController.sendMessage(NetworkTypeController.EVENT_UPDATE); processAllMessages(); assertEquals("connected_mmwave", getCurrentState().getName()); } @Test public void testNrAdvancedDisabledWhileRoaming() throws Exception { assertEquals("DefaultState", getCurrentState().getName()); doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(true).when(mServiceState).getDataRoaming(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(mServiceState).getNrFrequencyRange(); mBundle.putBoolean(CarrierConfigManager.KEY_ENABLE_NR_ADVANCED_WHILE_ROAMING_BOOL, false); broadcastCarrierConfigs(); mNetworkTypeController.sendMessage(NetworkTypeController.EVENT_UPDATE); processAllMessages(); assertEquals("connected", getCurrentState().getName()); } } Loading
src/java/com/android/internal/telephony/NetworkTypeController.java +43 −8 Original line number Diff line number Diff line Loading @@ -98,6 +98,7 @@ public class NetworkTypeController extends StateMachine { private static final int EVENT_INITIALIZE = 12; private static final int EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED = 13; private static final int EVENT_PCO_DATA_CHANGED = 14; private static final int EVENT_BANDWIDTH_CHANGED = 15; private static final String[] sEvents = new String[EVENT_PCO_DATA_CHANGED + 1]; static { Loading Loading @@ -142,6 +143,7 @@ public class NetworkTypeController extends StateMachine { private boolean mIsSecondaryTimerActive; private boolean mIsTimerResetEnabledForLegacyStateRRCIdle; private int mLtePlusThresholdBandwidth; private int mNrAdvancedThresholdBandwidth; private int[] mAdditionalNrAdvancedBandsList; private String mPrimaryTimerState; private String mSecondaryTimerState; Loading @@ -151,6 +153,7 @@ public class NetworkTypeController extends StateMachine { private Boolean mIsNrAdvancedAllowedByPco = false; private int mNrAdvancedCapablePcoId = 0; private boolean mIsUsingUserDataForRrcDetection = false; private boolean mEnableNrAdvancedWhileRoaming = true; /** * NetworkTypeController constructor. Loading Loading @@ -200,6 +203,8 @@ public class NetworkTypeController extends StateMachine { mPhone.getServiceStateTracker().registerForDataRegStateOrRatChanged( AccessNetworkConstants.TRANSPORT_TYPE_WWAN, getHandler(), EVENT_DATA_RAT_CHANGED, null); mPhone.getServiceStateTracker().registerForBandwidthChanged( getHandler(), EVENT_BANDWIDTH_CHANGED, null); mIsPhysicalChannelConfig16Supported = mPhone.getContext().getSystemService( TelephonyManager.class).isRadioInterfaceCapabilitySupported( TelephonyManager.CAPABILITY_PHYSICAL_CHANNEL_CONFIG_1_6_SUPPORTED); Loading Loading @@ -246,6 +251,10 @@ public class NetworkTypeController extends StateMachine { CarrierConfigManager.KEY_NR_TIMERS_RESET_IF_NON_ENDC_AND_RRC_IDLE_BOOL); mLtePlusThresholdBandwidth = CarrierConfigManager.getDefaultConfig().getInt( CarrierConfigManager.KEY_LTE_PLUS_THRESHOLD_BANDWIDTH_KHZ_INT); mNrAdvancedThresholdBandwidth = CarrierConfigManager.getDefaultConfig().getInt( CarrierConfigManager.KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT); mEnableNrAdvancedWhileRoaming = CarrierConfigManager.getDefaultConfig().getBoolean( CarrierConfigManager.KEY_ENABLE_NR_ADVANCED_WHILE_ROAMING_BOOL); CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext() .getSystemService(Context.CARRIER_CONFIG_SERVICE); Loading Loading @@ -276,10 +285,15 @@ public class NetworkTypeController extends StateMachine { mLtePlusThresholdBandwidth = b.getInt( CarrierConfigManager.KEY_LTE_PLUS_THRESHOLD_BANDWIDTH_KHZ_INT, mLtePlusThresholdBandwidth); mNrAdvancedThresholdBandwidth = b.getInt( CarrierConfigManager.KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT, mNrAdvancedThresholdBandwidth); mAdditionalNrAdvancedBandsList = b.getIntArray( CarrierConfigManager.KEY_ADDITIONAL_NR_ADVANCED_BANDS_INT_ARRAY); mNrAdvancedCapablePcoId = b.getInt( CarrierConfigManager.KEY_NR_ADVANCED_CAPABLE_PCO_ID_INT); mEnableNrAdvancedWhileRoaming = b.getBoolean( CarrierConfigManager.KEY_ENABLE_NR_ADVANCED_WHILE_ROAMING_BOOL); mIsUsingUserDataForRrcDetection = b.getBoolean( CarrierConfigManager.KEY_LTE_ENDC_USING_USER_DATA_FOR_RRC_DETECTION_BOOL); if (mIsPhysicalChannelConfig16Supported && mIsUsingUserDataForRrcDetection) { Loading Loading @@ -508,6 +522,7 @@ public class NetworkTypeController extends StateMachine { case EVENT_NR_STATE_CHANGED: case EVENT_NR_FREQUENCY_CHANGED: case EVENT_PCO_DATA_CHANGED: case EVENT_BANDWIDTH_CHANGED: // ignored break; case EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED: Loading Loading @@ -877,6 +892,9 @@ public class NetworkTypeController extends StateMachine { sendMessage(EVENT_NR_STATE_CHANGED); } break; case EVENT_BANDWIDTH_CHANGED: updateNrAdvancedState(); break; default: return NOT_HANDLED; } Loading Loading @@ -1135,8 +1153,32 @@ public class NetworkTypeController extends StateMachine { == NetworkRegistrationInfo.NR_STATE_RESTRICTED; } /** * @return {@code true} if the device is in NR advanced mode (i.e. 5G+). */ private boolean isNrAdvanced() { return isNrAdvancedCapable() && (isNrMmwave() || isAdditionalNrAdvancedBand()); // Check PCO requirement. For carriers using PCO to indicate whether the data connection is // NR advanced capable, mNrAdvancedCapablePcoId should be configured to non-zero. if (mNrAdvancedCapablePcoId > 0 && !mIsNrAdvancedAllowedByPco) { return false; } // Check if NR advanced is enabled when the device is roaming. Some carriers disable it // while the device is roaming. if (mPhone.getServiceState().getDataRoaming() && !mEnableNrAdvancedWhileRoaming) { return false; } // Check if meeting minimum bandwidth requirement. For most carriers, there is no minimum // bandwidth requirement and mNrAdvancedThresholdBandwidth is 0. if (IntStream.of(mPhone.getServiceState().getCellBandwidths()).sum() < mNrAdvancedThresholdBandwidth) { return false; } // If all above tests passed, then check if the device is using millimeter wave bands or // carrier designated bands. return isNrMmwave() || isAdditionalNrAdvancedBand(); } private boolean isNrMmwave() { Loading @@ -1160,13 +1202,6 @@ public class NetworkTypeController extends StateMachine { return false; } private boolean isNrAdvancedCapable() { if (mNrAdvancedCapablePcoId > 0) { return mIsNrAdvancedAllowedByPco; } return true; } private boolean isLte(int rat) { return rat == TelephonyManager.NETWORK_TYPE_LTE || rat == TelephonyManager.NETWORK_TYPE_LTE_CA; Loading
src/java/com/android/internal/telephony/ServiceStateTracker.java +27 −0 Original line number Diff line number Diff line Loading @@ -239,6 +239,7 @@ public class ServiceStateTracker extends Handler { private RegistrantList mNrStateChangedRegistrants = new RegistrantList(); private RegistrantList mNrFrequencyChangedRegistrants = new RegistrantList(); private RegistrantList mCssIndicatorChangedRegistrants = new RegistrantList(); private final RegistrantList mBandwidthChangedRegistrants = new RegistrantList(); private final RegistrantList mAirplaneModeChangedRegistrants = new RegistrantList(); private final RegistrantList mAreaCodeChangedRegistrants = new RegistrantList(); Loading Loading @@ -3650,6 +3651,8 @@ public class ServiceStateTracker extends Handler { boolean hasCssIndicatorChanged = (mSS.getCssIndicator() != mNewSS.getCssIndicator()); boolean hasBandwidthChanged = mSS.getCellBandwidths() != mNewSS.getCellBandwidths(); boolean has4gHandoff = false; boolean hasMultiApnSupport = false; boolean hasLostMultiApnSupport = false; Loading Loading @@ -3693,6 +3696,7 @@ public class ServiceStateTracker extends Handler { + " hasCssIndicatorChanged = " + hasCssIndicatorChanged + " hasNrFrequencyRangeChanged = " + hasNrFrequencyRangeChanged + " hasNrStateChanged = " + hasNrStateChanged + " hasBandwidthChanged = " + hasBandwidthChanged + " hasAirplaneModeOnlChanged = " + hasAirplaneModeOnChanged); } Loading Loading @@ -3774,6 +3778,10 @@ public class ServiceStateTracker extends Handler { mCssIndicatorChangedRegistrants.notifyRegistrants(); } if (hasBandwidthChanged) { mBandwidthChangedRegistrants.notifyRegistrants(); } if (hasRejectCauseChanged) { setNotification(CS_REJECT_CAUSE_ENABLED); } Loading Loading @@ -6221,6 +6229,25 @@ public class ServiceStateTracker extends Handler { mCssIndicatorChangedRegistrants.remove(h); } /** * Registers for cell bandwidth changed. * @param h handler to notify * @param what what code of message when delivered * @param obj placed in Message.obj */ public void registerForBandwidthChanged(Handler h, int what, Object obj) { Registrant r = new Registrant(h, what, obj); mBandwidthChangedRegistrants.add(r); } /** * Unregisters for cell bandwidth changed. * @param h handler to notify */ public void unregisterForBandwidthChanged(Handler h) { mBandwidthChangedRegistrants.remove(h); } /** * Get the NR data connection context ids. * Loading
tests/telephonytests/src/com/android/internal/telephony/NetworkTypeControllerTest.java +46 −0 Original line number Diff line number Diff line Loading @@ -114,6 +114,7 @@ public class NetworkTypeControllerTest extends TelephonyTest { mPhone).getCachedAllowedNetworkTypesBitmask(); doReturn(false).when(mTelephonyManager).isRadioInterfaceCapabilitySupported( TelephonyManager.CAPABILITY_PHYSICAL_CHANNEL_CONFIG_1_6_SUPPORTED); doReturn(new int[] {0}).when(mServiceState).getCellBandwidths(); mNetworkTypeController = new NetworkTypeController(mPhone, mDisplayInfoController); processAllMessages(); } Loading Loading @@ -1233,4 +1234,49 @@ public class NetworkTypeControllerTest extends TelephonyTest { } doReturn(lastPhysicalChannelConfigList).when(mSST).getPhysicalChannelConfigList(); } @Test public void testTransitionToCurrentStateNrConnectedWithLowBandwidth() throws Exception { assertEquals("DefaultState", getCurrentState().getName()); 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[] {19999}).when(mServiceState).getCellBandwidths(); mBundle.putInt(CarrierConfigManager.KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT, 20000); broadcastCarrierConfigs(); mNetworkTypeController.sendMessage(NetworkTypeController.EVENT_UPDATE); processAllMessages(); assertEquals("connected", getCurrentState().getName()); } @Test public void testTransitionToCurrentStateNrConnectedWithHighBandwidth() throws Exception { assertEquals("DefaultState", getCurrentState().getName()); 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(); mBundle.putInt(CarrierConfigManager.KEY_NR_ADVANCED_THRESHOLD_BANDWIDTH_KHZ_INT, 20000); broadcastCarrierConfigs(); mNetworkTypeController.sendMessage(NetworkTypeController.EVENT_UPDATE); processAllMessages(); assertEquals("connected_mmwave", getCurrentState().getName()); } @Test public void testNrAdvancedDisabledWhileRoaming() throws Exception { assertEquals("DefaultState", getCurrentState().getName()); doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType(); doReturn(true).when(mServiceState).getDataRoaming(); doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState(); doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(mServiceState).getNrFrequencyRange(); mBundle.putBoolean(CarrierConfigManager.KEY_ENABLE_NR_ADVANCED_WHILE_ROAMING_BOOL, false); broadcastCarrierConfigs(); mNetworkTypeController.sendMessage(NetworkTypeController.EVENT_UPDATE); processAllMessages(); assertEquals("connected", getCurrentState().getName()); } }