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

Commit 2faa1ebc authored by Sarah Chin's avatar Sarah Chin
Browse files

Suspended checks mDataRegState instead of getCurrentDataConnectionState

Test: atest DataConnectionTest
Bug: 187761518
Change-Id: I3e532322ce2c875bcadade608eeffe7fcb0201b8
parent f3ace853
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -87,7 +87,6 @@ import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.RIL;
import com.android.internal.telephony.RILConstants;
import com.android.internal.telephony.RetryManager;
import com.android.internal.telephony.ServiceStateTracker;
import com.android.internal.telephony.TelephonyStatsLog;
import com.android.internal.telephony.dataconnection.DcTracker.ReleaseNetworkType;
import com.android.internal.telephony.dataconnection.DcTracker.RequestNetworkType;
@@ -488,10 +487,6 @@ public class DataConnection extends StateMachine {
        return new LinkProperties(mLinkProperties);
    }

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

    boolean isSuspended() {
        // Data can only be (temporarily) suspended while data is in active state
        if (getCurrentState() != mActiveState) return false;
@@ -502,13 +497,12 @@ public class DataConnection extends StateMachine {
        }

        // if we are not in-service change to SUSPENDED
        final ServiceStateTracker sst = mPhone.getServiceStateTracker();
        if (sst.getCurrentDataConnectionState() != ServiceState.STATE_IN_SERVICE) {
        if (mDataRegState != ServiceState.STATE_IN_SERVICE) {
            return true;
        }

        // check for voice call and concurrency issues
        if (!sst.isConcurrentVoiceAndDataAllowed()) {
        if (!mPhone.getServiceStateTracker().isConcurrentVoiceAndDataAllowed()) {
            return mPhone.getCallTracker().getState() != PhoneConstants.State.IDLE;
        }

@@ -525,6 +519,11 @@ public class DataConnection extends StateMachine {
        return getCurrentState() == mActiveState;
    }

    @VisibleForTesting
    public boolean isInactive() {
        return getCurrentState() == mInactiveState;
    }

    boolean isActivating() {
        return getCurrentState() == mActivatingState;
    }
+83 −25
Original line number Diff line number Diff line
@@ -66,14 +66,13 @@ import android.test.suitebuilder.annotation.MediumTest;
import android.test.suitebuilder.annotation.SmallTest;

import com.android.internal.R;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.RetryManager;
import com.android.internal.telephony.TelephonyTest;
import com.android.internal.telephony.dataconnection.DataConnection.ConnectionParams;
import com.android.internal.telephony.dataconnection.DataConnection.DisconnectParams;
import com.android.internal.telephony.dataconnection.DataConnection.SetupResult;
import com.android.internal.telephony.metrics.DataCallSessionStats;
import com.android.internal.util.IState;
import com.android.internal.util.StateMachine;

import org.junit.After;
import org.junit.Before;
@@ -166,7 +165,7 @@ public class DataConnectionTest extends TelephonyTest {
            "");                    // mnvo_match_data

    private ApnSetting mApn3 = ApnSetting.makeApnSetting(
            2164,                   // id
            2165,                   // id
            "44010",                // numeric
            "sp-mode",              // name
            "spmode.ne.jp",         // apn
@@ -196,7 +195,7 @@ public class DataConnectionTest extends TelephonyTest {
            1);                     // skip_464xlat

    private ApnSetting mApn4 = ApnSetting.makeApnSetting(
            2164,                   // id
            2166,                   // id
            "44010",                // numeric
            "sp-mode",              // name
            "spmode.ne.jp",         // apn
@@ -223,7 +222,7 @@ public class DataConnectionTest extends TelephonyTest {
            "");                    // mnvo_match_data

    private ApnSetting mApn5 = ApnSetting.makeApnSetting(
            2164,                   // id
            2167,                   // id
            "44010",                // numeric
            "sp-mode",              // name
            "spmode.ne.jp",         // apn
@@ -252,6 +251,33 @@ public class DataConnectionTest extends TelephonyTest {
            -1,                     // carrier_id
            0);                     // skip_464xlat

    private ApnSetting mApn6 = ApnSetting.makeApnSetting(
            2168,                   // id
            "44010",                // numeric
            "sp-mode",              // name
            "spmode.ne.jp",         // apn
            null,                   // proxy
            -1,                     // port
            null,                   // mmsc
            null,                   // mmsproxy
            -1,                     // mmsport
            "",                     // user
            "",                     // password
            -1,                     // authtype
            ApnSetting.TYPE_EMERGENCY, // types
            ApnSetting.PROTOCOL_IP, // protocol
            ApnSetting.PROTOCOL_IP, // roaming_protocol
            true,                   // carrier_enabled
            0,                      // networktype_bitmask
            0,                      // profile_id
            false,                  // modem_cognitive
            0,                      // max_conns
            0,                      // wait_time
            0,                      // max_conns_time
            0,                      // mtu
            -1,                     // mvno_type
            "");                    // mnvo_match_data

    private class DataConnectionTestHandler extends HandlerThread {

        private DataConnectionTestHandler(String name) {
@@ -340,12 +366,6 @@ public class DataConnectionTest extends TelephonyTest {
        super.tearDown();
    }

    private IState getCurrentState() throws Exception {
        Method method = StateMachine.class.getDeclaredMethod("getCurrentState");
        method.setAccessible(true);
        return (IState) method.invoke(mDc);
    }

    private long getSuggestedRetryDelay(DataCallResponse response) throws Exception {
        Class[] cArgs = new Class[1];
        cArgs[0] = DataCallResponse.class;
@@ -366,6 +386,12 @@ public class DataConnectionTest extends TelephonyTest {
        return (boolean) method.invoke(mDc);
    }

    private boolean isSuspended() throws Exception {
        Method method = DataConnection.class.getDeclaredMethod("isSuspended");
        method.setAccessible(true);
        return (boolean) method.invoke(mDc);
    }

    private SetupResult setLinkProperties(DataCallResponse response, LinkProperties linkProperties)
            throws Exception {
        Class[] cArgs = new Class[2];
@@ -378,14 +404,8 @@ public class DataConnectionTest extends TelephonyTest {

    @Test
    @SmallTest
    public void testSanity() throws Exception {
        assertEquals("DcInactiveState", getCurrentState().getName());
    }

    @Test
    @SmallTest
    public void testConnectEvent() throws Exception {
        testSanity();
    public void testConnectEvent() {
        assertTrue(mDc.isInactive());
        connectEvent(true);

        verify(mCT, times(1)).registerForVoiceCallStarted(any(Handler.class),
@@ -463,7 +483,7 @@ public class DataConnectionTest extends TelephonyTest {

        // Verify that ENTERPRISE wasn't set up
        connectEvent(false);
        assertEquals("DcInactiveState", getCurrentState().getName());
        assertTrue(mDc.isInactive());

        // Change the CID
        result.cid = DEFAULT_DC_CID + 1;
@@ -487,7 +507,7 @@ public class DataConnectionTest extends TelephonyTest {

        // Verify that ENTERPRISE wasn't set up
        connectEvent(false);
        assertEquals("DcInactiveState", getCurrentState().getName());
        assertTrue(mDc.isInactive());

        // Set up default data
        replaceInstance(ConnectionParams.class, "mApnContext", mCp, mApnContext);
@@ -511,7 +531,7 @@ public class DataConnectionTest extends TelephonyTest {

    @Test
    @SmallTest
    public void testDisconnectEvent() throws Exception {
    public void testDisconnectEvent() {
        testConnectEvent();

        mDc.setPduSessionId(5);
@@ -525,7 +545,7 @@ public class DataConnectionTest extends TelephonyTest {
        verify(mSimulatedCommandsVerifier, times(1))
                .releasePduSessionId(any(), eq(5));

        assertEquals("DcInactiveState", getCurrentState().getName());
        assertTrue(mDc.isInactive());
    }

    @Test
@@ -874,10 +894,10 @@ public class DataConnectionTest extends TelephonyTest {
        }
    }

    private void disconnectEvent() throws Exception {
    private void disconnectEvent() {
        mDc.sendMessage(DataConnection.EVENT_DISCONNECT, mDcp);
        waitForMs(100);
        assertEquals("DcInactiveState", getCurrentState().getName());
        assertTrue(mDc.isInactive());
    }

    @Test
@@ -1217,4 +1237,42 @@ public class DataConnectionTest extends TelephonyTest {
        assertEquals(ApnSetting.TYPE_MMS | ApnSetting.TYPE_SUPL | ApnSetting.TYPE_FOTA,
                getDisallowedApnTypes());
    }

    @Test
    public void testIsSuspended() throws Exception {
        // Return false if not active state
        assertTrue(mDc.isInactive());
        assertFalse(isSuspended());

        // Return false for emergency APN
        doReturn(mApn6).when(mApnContext).getApnSetting();
        doReturn(ApnSetting.TYPE_EMERGENCY).when(mApnContext).getApnTypeBitmask();
        connectEvent(true);
        assertFalse(isSuspended());

        // Back to DEFAULT APN
        disconnectEvent();
        assertTrue(mDc.isInactive());
        doReturn(mApn1).when(mApnContext).getApnSetting();
        doReturn(ApnSetting.TYPE_DEFAULT).when(mApnContext).getApnTypeBitmask();
        connectEvent(true);

        // Return true if combined reg state is not in service
        doReturn(ServiceState.STATE_OUT_OF_SERVICE).when(mServiceState).getDataRegistrationState();
        assertTrue(isSuspended());

        // Return false if in service and concurrent voice and data is allowed
        doReturn(ServiceState.STATE_IN_SERVICE).when(mServiceState).getDataRegistrationState();
        doReturn(true).when(mSST).isConcurrentVoiceAndDataAllowed();
        assertFalse(isSuspended());

        // Return false if in service and concurrent voice/data not allowed but call state is idle
        doReturn(false).when(mSST).isConcurrentVoiceAndDataAllowed();
        doReturn(PhoneConstants.State.IDLE).when(mCT).getState();
        assertFalse(isSuspended());

        // Return true if in service, concurrent voice/data not allowed, and call state not idle
        doReturn(PhoneConstants.State.RINGING).when(mCT).getState();
        assertTrue(isSuspended());
    }
}