Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a263ca72 authored by Sewook Seo's avatar Sewook Seo
Browse files

Do not apply graceful teardown logic for EIMS PDN.

Bug: 270049989
Test: Device test with Anritsu b/266189145 (AP domain selection validation)
Change-Id: I9b1a0ad4a1390a8c8e330770907d9f9cc358c147
parent 9ed00ef9
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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) {
+44 −0
Original line number Diff line number Diff line
@@ -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,