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

Commit 3ced483c authored by Jack Yu's avatar Jack Yu
Browse files

Fixed crash when RAT changes with tethering on

We should use the orignal APN setting used for data setup
to determine if the data connection has DUN capability.

Test: Manual
Bug: 78592192
Change-Id: I57c823061d49238c9c76deb54c59dbcf95153108
parent 5febcd55
Loading
Loading
Loading
Loading
+3 −9
Original line number Diff line number Diff line
@@ -936,7 +936,6 @@ public class DataConnection extends StateMachine {
        result.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);

        if (mApnSetting != null) {
            ApnSetting securedDunApn = mDct.fetchDunApn();
            for (String type : mApnSetting.types) {
                if (!mRestrictedNetworkOverride
                        && (mConnectionParams != null && mConnectionParams.mUnmeteredUseOnly)
@@ -953,11 +952,7 @@ public class DataConnection extends StateMachine {
                        result.addCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
                        result.addCapability(NetworkCapabilities.NET_CAPABILITY_CBS);
                        result.addCapability(NetworkCapabilities.NET_CAPABILITY_IA);
                        // check if this is the DUN apn as well as returned by fetchDunApn().
                        // If yes, add DUN capability too.
                        if (mApnSetting.equals(securedDunApn)) {
                        result.addCapability(NetworkCapabilities.NET_CAPABILITY_DUN);
                        }
                        break;
                    }
                    case PhoneConstants.APN_TYPE_DEFAULT: {
@@ -973,9 +968,7 @@ public class DataConnection extends StateMachine {
                        break;
                    }
                    case PhoneConstants.APN_TYPE_DUN: {
                        if (securedDunApn == null || securedDunApn.equals(mApnSetting)) {
                        result.addCapability(NetworkCapabilities.NET_CAPABILITY_DUN);
                        }
                        break;
                    }
                    case PhoneConstants.APN_TYPE_FOTA: {
@@ -1725,6 +1718,7 @@ public class DataConnection extends StateMachine {
            misc.subscriberId = mPhone.getSubscriberId();

            setNetworkRestriction();
            if (DBG) log("mRestrictedNetworkOverride = " + mRestrictedNetworkOverride);
            mNetworkAgent = new DcNetworkAgent(getHandler().getLooper(), mPhone.getContext(),
                    "DcNetworkAgent", mNetworkInfo, getNetworkCapabilities(), mLinkProperties,
                    50, misc);
+59 −0
Original line number Diff line number Diff line
@@ -129,6 +129,34 @@ public class DataConnectionTest extends TelephonyTest {
            "",                     // mvno_type
            "");                    // mnvo_match_data

    private ApnSetting mApn2 = new ApnSetting(
            2164,                   // id
            "44010",                // numeric
            "sp-mode",              // name
            "spmode.ne.jp",         // apn
            "",                     // proxy
            "",                     // port
            "",                     // mmsc
            "",                     // mmsproxy
            "",                     // mmsport
            "",                     // user
            "",                     // password
            -1,                     // authtype
            new String[]{"default", "dun"},     // types
            "IP",                   // protocol
            "IP",                   // roaming_protocol
            true,                   // carrier_enabled
            0,                      // bearer
            0,                      // bearer_bitmask
            0,                      // profile_id
            false,                  // modem_cognitive
            0,                      // max_conns
            0,                      // wait_time
            0,                      // max_conns_time
            0,                      // mtu
            "",                     // mvno_type
            "");                    // mnvo_match_data

    private class DataConnectionTestHandler extends HandlerThread {

        private DataConnectionTestHandler(String name) {
@@ -174,6 +202,7 @@ public class DataConnectionTest extends TelephonyTest {
                ServiceState.RIL_RADIO_TECHNOLOGY_UMTS);
        doReturn(mApn1).when(mApnContext).getApnSetting();
        doReturn(PhoneConstants.APN_TYPE_DEFAULT).when(mApnContext).getApnType();
        doReturn(true).when(mDcTracker).isDataEnabled();

        mDcFailBringUp.saveParameters(0, 0, -2);
        doReturn(mDcFailBringUp).when(mDcTesterFailBringUpAll).getDcFailBringUp();
@@ -374,6 +403,36 @@ public class DataConnectionTest extends TelephonyTest {
        return (NetworkCapabilities) method.invoke(mDc);
    }

    @Test
    @SmallTest
    public void testNetworkCapability() throws Exception {
        mContextFixture.getCarrierConfigBundle().putStringArray(
                CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS,
                new String[] { "default" });
        doReturn(mApn2).when(mApnContext).getApnSetting();
        testConnectEvent();

        assertTrue("capabilities: " + getNetworkCapabilities(), getNetworkCapabilities()
                .hasCapability(NetworkCapabilities.NET_CAPABILITY_DUN));
        assertTrue("capabilities: " + getNetworkCapabilities(), getNetworkCapabilities()
                .hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET));
        assertFalse("capabilities: " + getNetworkCapabilities(), getNetworkCapabilities()
                .hasCapability(NetworkCapabilities.NET_CAPABILITY_MMS));

        mDc.sendMessage(DataConnection.EVENT_DISCONNECT, mDcp);
        waitForMs(100);
        doReturn(mApn1).when(mApnContext).getApnSetting();
        mDc.sendMessage(DataConnection.EVENT_CONNECT, mCp);
        waitForMs(200);

        assertFalse("capabilities: " + getNetworkCapabilities(), getNetworkCapabilities()
                .hasCapability(NetworkCapabilities.NET_CAPABILITY_DUN));
        assertTrue("capabilities: " + getNetworkCapabilities(), getNetworkCapabilities()
                .hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET));
        assertTrue("capabilities: " + getNetworkCapabilities(), getNetworkCapabilities()
                .hasCapability(NetworkCapabilities.NET_CAPABILITY_SUPL));
    }

    @Test
    @SmallTest
    public void testMeteredCapability() throws Exception {