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

Commit d392e338 authored by Pengquan Meng's avatar Pengquan Meng Committed by Android (Google) Code Review
Browse files

Merge "Change data connection state logic"

parents 2c2fbf86 55a508de
Loading
Loading
Loading
Loading
+4 −10
Original line number Diff line number Diff line
@@ -525,12 +525,6 @@ public class GsmCdmaPhone extends Phone {
            ret = PhoneConstants.DataState.DISCONNECTED;
        } else { /* mSST.gprsState == ServiceState.STATE_IN_SERVICE */
            switch (mDcTracker.getState(apnType)) {
                case RETRYING:
                case FAILED:
                case IDLE:
                    ret = PhoneConstants.DataState.DISCONNECTED;
                break;

                case CONNECTED:
                case DISCONNECTING:
                    if ( mCT.mState != PhoneConstants.State.IDLE
@@ -540,11 +534,11 @@ public class GsmCdmaPhone extends Phone {
                        ret = PhoneConstants.DataState.CONNECTED;
                    }
                    break;

                case CONNECTING:
                case SCANNING:
                    ret = PhoneConstants.DataState.CONNECTING;
                    break;
                default:
                    ret = PhoneConstants.DataState.DISCONNECTED;
            }
        }

+14 −2
Original line number Diff line number Diff line
@@ -297,10 +297,22 @@ public class DataConnection extends StateMachine {
        return new LinkProperties(mLinkProperties);
    }

    boolean getIsInactive() {
    boolean isInactive() {
        return getCurrentState() == mInactiveState;
    }

    boolean isDisconnecting() {
        return getCurrentState() == mDisconnectingState;
    }

    boolean isActive() {
        return getCurrentState() == mActiveState;
    }

    boolean isActivating() {
        return getCurrentState() == mActivatingState;
    }

    int getCid() {
        return mCid;
    }
@@ -1271,7 +1283,7 @@ public class DataConnection extends StateMachine {
                    break;
                }
                case DcAsyncChannel.REQ_IS_INACTIVE: {
                    boolean val = getIsInactive();
                    boolean val = isInactive();
                    if (VDBG) log("REQ_IS_INACTIVE  isInactive=" + val);
                    mAc.replyToMessage(msg, DcAsyncChannel.RSP_IS_INACTIVE, val ? 1 : 0);
                    break;
+1 −1
Original line number Diff line number Diff line
@@ -153,7 +153,7 @@ public class DcAsyncChannel extends AsyncChannel {
                value = false;
            }
        } else {
            value = mDc.getIsInactive();
            value = mDc.isInactive();
        }
        return value;
    }
+22 −5
Original line number Diff line number Diff line
@@ -1082,13 +1082,30 @@ public class DcTracker extends Handler {
        return null;
    }

    // Return state of specific apn type
    /**
     * Returns {@link DctConstants.State} based on the state of the {@link DataConnection} that
     * contains a {@link ApnSetting} that supported the given apn type {@code anpType}.
     *
     * <p>
     * Assumes there is less than one {@link ApnSetting} can support the given apn type.
     */
    public DctConstants.State getState(String apnType) {
        ApnContext apnContext = mApnContexts.get(apnType);
        if (apnContext != null) {
            return apnContext.getState();
        for (DataConnection dc : mDataConnections.values()) {
            ApnSetting apnSetting = dc.getApnSetting();
            if (apnSetting != null && apnSetting.canHandleType(apnType)) {
                if (dc.isActive()) {
                    return DctConstants.State.CONNECTED;
                } else if (dc.isActivating()) {
                    return DctConstants.State.CONNECTING;
                } else if (dc.isInactive()) {
                    return DctConstants.State.IDLE;
                } else if (dc.isDisconnecting()) {
                    return DctConstants.State.DISCONNECTING;
                }
        return DctConstants.State.FAILED;
            }
        }

        return DctConstants.State.IDLE;
    }

    // Return if apn type is a provisioning apn.
+40 −12
Original line number Diff line number Diff line
@@ -577,7 +577,7 @@ public class DcTrackerTest extends TelephonyTest {

        logd("Sending EVENT_ENABLE_NEW_APN");
        // APN id 0 is APN_TYPE_DEFAULT
        mDct.setEnabled(0, true);
        mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true);
        waitForMs(200);

        dataConnectionReasons = new DataConnectionReasons();
@@ -651,7 +651,7 @@ public class DcTrackerTest extends TelephonyTest {

        logd("Sending EVENT_ENABLE_NEW_APN");
        // APN id 0 is APN_TYPE_DEFAULT
        mDct.setEnabled(0, true);
        mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true);
        waitForMs(200);


@@ -710,8 +710,8 @@ public class DcTrackerTest extends TelephonyTest {
        boolean dataEnabled = mDct.isUserDataEnabled();
        mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS,
                new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS});
        mDct.setEnabled(5, true);
        mDct.setEnabled(0, true);
        mDct.setEnabled(DctConstants.APN_IMS_ID, true);
        mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true);

        logd("Sending EVENT_RECORDS_LOADED");
        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null));
@@ -764,8 +764,9 @@ public class DcTrackerTest extends TelephonyTest {

        mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS,
                new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS});
        mDct.setEnabled(5, true);
        mDct.setEnabled(0, true);

        mDct.setEnabled(DctConstants.APN_IMS_ID, true);
        mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true);

        logd("Sending EVENT_RECORDS_LOADED");
        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null));
@@ -822,8 +823,8 @@ public class DcTrackerTest extends TelephonyTest {
        //set Default and MMS to be metered in the CarrierConfigManager
        mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS,
                new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS});
        mDct.setEnabled(5, true);
        mDct.setEnabled(0, true);
        mDct.setEnabled(DctConstants.APN_IMS_ID, true);
        mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true);

        logd("Sending DATA_ENABLED_CMD");
        mDct.setUserDataEnabled(true);
@@ -937,8 +938,8 @@ public class DcTrackerTest extends TelephonyTest {
        boolean dataEnabled = mDct.isUserDataEnabled();
        mDct.setUserDataEnabled(true);

        mDct.setEnabled(5, true);
        mDct.setEnabled(0, true);
        mDct.setEnabled(DctConstants.APN_IMS_ID, true);
        mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true);

        logd("Sending EVENT_RECORDS_LOADED");
        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null));
@@ -1003,6 +1004,33 @@ public class DcTrackerTest extends TelephonyTest {
                any(Message.class));
    }

    @Test
    @SmallTest
    public void testGetDataConnectionState() throws Exception {
        initApns(PhoneConstants.APN_TYPE_SUPL,
                new String[]{PhoneConstants.APN_TYPE_SUPL, PhoneConstants.APN_TYPE_DEFAULT});
        mDct.setUserDataEnabled(false);

        mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS,
                new String[]{PhoneConstants.APN_TYPE_DEFAULT});

        logd("Sending EVENT_RECORDS_LOADED");
        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null));
        waitForMs(200);

        logd("Sending EVENT_DATA_CONNECTION_ATTACHED");
        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null));
        waitForMs(200);

        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_TRY_SETUP_DATA, mApnContext));
        waitForMs(200);

        // Assert that both APN_TYPE_SUPL & APN_TYPE_DEFAULT are connected even we only setup data
        // for APN_TYPE_SUPL
        assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_SUPL));
        assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT));
    }

    // Test the unmetered APN setup when data is disabled.
    @Test
    @SmallTest
@@ -1206,7 +1234,7 @@ public class DcTrackerTest extends TelephonyTest {
                .getRilDataRadioTechnology();
        mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS,
                new String[]{PhoneConstants.APN_TYPE_DEFAULT});
        mDct.setEnabled(0, true);
        mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true);
        mDct.setUserDataEnabled(true);
        initApns(PhoneConstants.APN_TYPE_DEFAULT, new String[]{PhoneConstants.APN_TYPE_ALL});

@@ -1293,7 +1321,7 @@ public class DcTrackerTest extends TelephonyTest {
                .getRilDataRadioTechnology();
        mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS,
                new String[]{PhoneConstants.APN_TYPE_DEFAULT});
        mDct.setEnabled(0, true);
        mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true);
        mDct.setUserDataEnabled(true);
        initApns(PhoneConstants.APN_TYPE_DEFAULT, new String[]{PhoneConstants.APN_TYPE_ALL});