Loading src/java/com/android/internal/telephony/data/DataNetworkController.java +7 −2 Original line number Diff line number Diff line Loading @@ -1831,8 +1831,13 @@ public class DataNetworkController extends Handler { // Matching the rules by the configured order. Bail out if find first matching rule. for (HandoverRule rule : handoverRules) { // Check if the rule is only for roaming and we are not roaming. if (rule.isOnlyForRoaming && !mServiceState.getDataRoaming()) continue; // Check if the rule is only for roaming and we are not roaming. Use the real // roaming state reported by modem instead of using the overridden roaming state. if (rule.isOnlyForRoaming && !mServiceState.getDataRoamingFromRegistration()) { // If the rule is for roaming only, and the device is not roaming, then bypass // this rule. continue; } if (rule.sourceAccessNetworks.contains(sourceAccessNetwork) && rule.targetAccessNetworks.contains(targetAccessNetwork)) { Loading tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +51 −0 Original line number Diff line number Diff line Loading @@ -461,6 +461,8 @@ public class DataNetworkControllerTest extends TelephonyTest { .setRegistrationState(regState) .setDomain(NetworkRegistrationInfo.DOMAIN_CS) .build()); ss.setDataRoamingFromRegistration(regState == NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING); doReturn(ss).when(mSST).getServiceState(); doReturn(ss).when(mPhone).getServiceState(); Loading Loading @@ -1728,6 +1730,55 @@ public class DataNetworkControllerTest extends TelephonyTest { any()); } @Test public void testHandoverDataNetworkNotAllowedByRoamingPolicy() throws Exception { mCarrierConfig.putStringArray(CarrierConfigManager.KEY_IWLAN_HANDOVER_POLICY_STRING_ARRAY, new String[]{"source=EUTRAN|NGRAN|IWLAN, target=EUTRAN|NGRAN|IWLAN, roaming=true, " + "type=disallowed, capabilities=IMS"}); serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING); // Force data config manager to reload the carrier config. mDataNetworkControllerUT.getDataConfigManager().obtainMessage( 1/*EVENT_CARRIER_CONFIG_CHANGED*/).sendToTarget(); doReturn(AccessNetworkConstants.TRANSPORT_TYPE_WLAN).when(mAccessNetworksManager) .getPreferredTransportByNetworkCapability(NetworkCapabilities.NET_CAPABILITY_IMS); processAllMessages(); // Bring up IMS PDN on IWLAN testSetupImsDataNetwork(); doReturn(AccessNetworkConstants.TRANSPORT_TYPE_WWAN).when(mAccessNetworksManager) .getPreferredTransportByNetworkCapability(NetworkCapabilities.NET_CAPABILITY_IMS); mAccessNetworksManagerCallback.onPreferredTransportChanged( NetworkCapabilities.NET_CAPABILITY_IMS); // Verify IMS PDN is connected. verifyConnectedNetworkHasCapabilities(NetworkCapabilities.NET_CAPABILITY_IMS); // After this, IMS data network should be disconnected, and DNC should attempt to // establish a new one on cellular processAllMessages(); // Verify all data disconnected. verify(mMockedDataNetworkControllerCallback).onAnyDataNetworkExistingChanged(eq(false)); // Should setup a new one instead of handover. verify(mMockedWwanDataServiceManager).setupDataCall(anyInt(), any(DataProfile.class), anyBoolean(), anyBoolean(), eq(DataService.REQUEST_REASON_NORMAL), any(), anyInt(), any(), any(), anyBoolean(), any(Message.class)); // A new data network should be connected on IWLAN List<DataNetwork> dataNetworkList = getDataNetworks(); assertThat(dataNetworkList).hasSize(1); assertThat(dataNetworkList.get(0).isConnected()).isTrue(); assertThat(dataNetworkList.get(0).getNetworkCapabilities().hasCapability( NetworkCapabilities.NET_CAPABILITY_IMS)).isTrue(); assertThat(dataNetworkList.get(0).getTransport()) .isEqualTo(AccessNetworkConstants.TRANSPORT_TYPE_WWAN); } @Test public void testHandoverDataNetworkRetry() throws Exception { testSetupImsDataNetwork(); Loading Loading
src/java/com/android/internal/telephony/data/DataNetworkController.java +7 −2 Original line number Diff line number Diff line Loading @@ -1831,8 +1831,13 @@ public class DataNetworkController extends Handler { // Matching the rules by the configured order. Bail out if find first matching rule. for (HandoverRule rule : handoverRules) { // Check if the rule is only for roaming and we are not roaming. if (rule.isOnlyForRoaming && !mServiceState.getDataRoaming()) continue; // Check if the rule is only for roaming and we are not roaming. Use the real // roaming state reported by modem instead of using the overridden roaming state. if (rule.isOnlyForRoaming && !mServiceState.getDataRoamingFromRegistration()) { // If the rule is for roaming only, and the device is not roaming, then bypass // this rule. continue; } if (rule.sourceAccessNetworks.contains(sourceAccessNetwork) && rule.targetAccessNetworks.contains(targetAccessNetwork)) { Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +51 −0 Original line number Diff line number Diff line Loading @@ -461,6 +461,8 @@ public class DataNetworkControllerTest extends TelephonyTest { .setRegistrationState(regState) .setDomain(NetworkRegistrationInfo.DOMAIN_CS) .build()); ss.setDataRoamingFromRegistration(regState == NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING); doReturn(ss).when(mSST).getServiceState(); doReturn(ss).when(mPhone).getServiceState(); Loading Loading @@ -1728,6 +1730,55 @@ public class DataNetworkControllerTest extends TelephonyTest { any()); } @Test public void testHandoverDataNetworkNotAllowedByRoamingPolicy() throws Exception { mCarrierConfig.putStringArray(CarrierConfigManager.KEY_IWLAN_HANDOVER_POLICY_STRING_ARRAY, new String[]{"source=EUTRAN|NGRAN|IWLAN, target=EUTRAN|NGRAN|IWLAN, roaming=true, " + "type=disallowed, capabilities=IMS"}); serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING); // Force data config manager to reload the carrier config. mDataNetworkControllerUT.getDataConfigManager().obtainMessage( 1/*EVENT_CARRIER_CONFIG_CHANGED*/).sendToTarget(); doReturn(AccessNetworkConstants.TRANSPORT_TYPE_WLAN).when(mAccessNetworksManager) .getPreferredTransportByNetworkCapability(NetworkCapabilities.NET_CAPABILITY_IMS); processAllMessages(); // Bring up IMS PDN on IWLAN testSetupImsDataNetwork(); doReturn(AccessNetworkConstants.TRANSPORT_TYPE_WWAN).when(mAccessNetworksManager) .getPreferredTransportByNetworkCapability(NetworkCapabilities.NET_CAPABILITY_IMS); mAccessNetworksManagerCallback.onPreferredTransportChanged( NetworkCapabilities.NET_CAPABILITY_IMS); // Verify IMS PDN is connected. verifyConnectedNetworkHasCapabilities(NetworkCapabilities.NET_CAPABILITY_IMS); // After this, IMS data network should be disconnected, and DNC should attempt to // establish a new one on cellular processAllMessages(); // Verify all data disconnected. verify(mMockedDataNetworkControllerCallback).onAnyDataNetworkExistingChanged(eq(false)); // Should setup a new one instead of handover. verify(mMockedWwanDataServiceManager).setupDataCall(anyInt(), any(DataProfile.class), anyBoolean(), anyBoolean(), eq(DataService.REQUEST_REASON_NORMAL), any(), anyInt(), any(), any(), anyBoolean(), any(Message.class)); // A new data network should be connected on IWLAN List<DataNetwork> dataNetworkList = getDataNetworks(); assertThat(dataNetworkList).hasSize(1); assertThat(dataNetworkList.get(0).isConnected()).isTrue(); assertThat(dataNetworkList.get(0).getNetworkCapabilities().hasCapability( NetworkCapabilities.NET_CAPABILITY_IMS)).isTrue(); assertThat(dataNetworkList.get(0).getTransport()) .isEqualTo(AccessNetworkConstants.TRANSPORT_TYPE_WWAN); } @Test public void testHandoverDataNetworkRetry() throws Exception { testSetupImsDataNetwork(); Loading