Loading src/java/com/android/internal/telephony/data/DataNetworkController.java +5 −0 Original line number Diff line number Diff line Loading @@ -3784,6 +3784,11 @@ public class DataNetworkController extends Handler { * de-registered yet. */ private boolean isSafeToTearDown(@NonNull DataNetwork dataNetwork) { if (dataNetwork.hasNetworkCapabilityInNetworkRequests( NetworkCapabilities.NET_CAPABILITY_EIMS)) { // FWK currently doesn't track emergency registration state for graceful tear down. return true; } for (int imsFeature : SUPPORTED_IMS_FEATURES) { String imsFeaturePackage = mImsFeaturePackageName.get(imsFeature); if (imsFeaturePackage != null) { Loading tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +44 −0 Original line number Diff line number Diff line Loading @@ -3946,6 +3946,50 @@ public class DataNetworkControllerTest extends TelephonyTest { assertThat(pdcs.getState()).isEqualTo(TelephonyManager.DATA_DISCONNECTED); } @Test public void testNoGracefulTearDownForEmergencyDataNetwork() throws Exception { setImsRegistered(true); mCarrierConfig.putStringArray(CarrierConfigManager.KEY_IWLAN_HANDOVER_POLICY_STRING_ARRAY, new String[]{"source=EUTRAN, target=IWLAN, type=disallowed, capabilities=EIMS|IMS", "source=IWLAN, target=EUTRAN, type=disallowed, capabilities=MMS"}); // Force data config manager to reload the carrier config. carrierConfigChanged(); processAllMessages(); // setup emergency data network. NetworkCapabilities netCaps = new NetworkCapabilities(); netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS); netCaps.setRequestorPackageName(FAKE_MMTEL_PACKAGE); NetworkRequest nativeNetworkRequest = new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST); TelephonyNetworkRequest networkRequest = new TelephonyNetworkRequest( nativeNetworkRequest, mPhone); mDataNetworkControllerUT.addNetworkRequest(networkRequest); processAllMessages(); verifyConnectedNetworkHasCapabilities(NetworkCapabilities.NET_CAPABILITY_EIMS); updateTransport(NetworkCapabilities.NET_CAPABILITY_EIMS, AccessNetworkConstants.TRANSPORT_TYPE_WLAN); // Verify all data disconnected. verify(mMockedDataNetworkControllerCallback).onAnyDataNetworkExistingChanged(eq(false)); verify(mMockedDataNetworkControllerCallback).onPhysicalLinkStatusChanged( eq(DataCallResponse.LINK_STATUS_INACTIVE)); // 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_EIMS)).isTrue(); assertThat(dataNetworkList.get(0).getTransport()) .isEqualTo(AccessNetworkConstants.TRANSPORT_TYPE_WLAN); } @Test public void testNetworkRequestRemovedBeforeRetry() { setFailedSetupDataResponse(mMockedWwanDataServiceManager, DataFailCause.CONGESTION, Loading Loading
src/java/com/android/internal/telephony/data/DataNetworkController.java +5 −0 Original line number Diff line number Diff line Loading @@ -3784,6 +3784,11 @@ public class DataNetworkController extends Handler { * de-registered yet. */ private boolean isSafeToTearDown(@NonNull DataNetwork dataNetwork) { if (dataNetwork.hasNetworkCapabilityInNetworkRequests( NetworkCapabilities.NET_CAPABILITY_EIMS)) { // FWK currently doesn't track emergency registration state for graceful tear down. return true; } for (int imsFeature : SUPPORTED_IMS_FEATURES) { String imsFeaturePackage = mImsFeaturePackageName.get(imsFeature); if (imsFeaturePackage != null) { Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +44 −0 Original line number Diff line number Diff line Loading @@ -3946,6 +3946,50 @@ public class DataNetworkControllerTest extends TelephonyTest { assertThat(pdcs.getState()).isEqualTo(TelephonyManager.DATA_DISCONNECTED); } @Test public void testNoGracefulTearDownForEmergencyDataNetwork() throws Exception { setImsRegistered(true); mCarrierConfig.putStringArray(CarrierConfigManager.KEY_IWLAN_HANDOVER_POLICY_STRING_ARRAY, new String[]{"source=EUTRAN, target=IWLAN, type=disallowed, capabilities=EIMS|IMS", "source=IWLAN, target=EUTRAN, type=disallowed, capabilities=MMS"}); // Force data config manager to reload the carrier config. carrierConfigChanged(); processAllMessages(); // setup emergency data network. NetworkCapabilities netCaps = new NetworkCapabilities(); netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS); netCaps.setRequestorPackageName(FAKE_MMTEL_PACKAGE); NetworkRequest nativeNetworkRequest = new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST); TelephonyNetworkRequest networkRequest = new TelephonyNetworkRequest( nativeNetworkRequest, mPhone); mDataNetworkControllerUT.addNetworkRequest(networkRequest); processAllMessages(); verifyConnectedNetworkHasCapabilities(NetworkCapabilities.NET_CAPABILITY_EIMS); updateTransport(NetworkCapabilities.NET_CAPABILITY_EIMS, AccessNetworkConstants.TRANSPORT_TYPE_WLAN); // Verify all data disconnected. verify(mMockedDataNetworkControllerCallback).onAnyDataNetworkExistingChanged(eq(false)); verify(mMockedDataNetworkControllerCallback).onPhysicalLinkStatusChanged( eq(DataCallResponse.LINK_STATUS_INACTIVE)); // 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_EIMS)).isTrue(); assertThat(dataNetworkList.get(0).getTransport()) .isEqualTo(AccessNetworkConstants.TRANSPORT_TYPE_WLAN); } @Test public void testNetworkRequestRemovedBeforeRetry() { setFailedSetupDataResponse(mMockedWwanDataServiceManager, DataFailCause.CONGESTION, Loading