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

Commit d9bdc230 authored by Jack Yu's avatar Jack Yu
Browse files

Only disallow data when device in CDMA ECBM

Test: atest DataNetworkControllerTest
Fix: 227131959
Merged-In: Iaa09111e7b1b638fcedde342360bb47bf58e1c08
Change-Id: Iaa09111e7b1b638fcedde342360bb47bf58e1c08
parent 86ab87b9
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -2935,6 +2935,11 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        return false;
    }

    public boolean isInCdmaEcm() {
        return getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA && isInEcm()
                && (mImsPhone == null || !mImsPhone.isInImsEcm());
    }

    public void setIsInEcm(boolean isInEcm) {
        if (!getUnitTestMode()) {
            TelephonyProperties.in_ecm_mode(isInEcm);
+2 −2
Original line number Diff line number Diff line
@@ -261,8 +261,8 @@ public class DataEvaluation {
        NO_SUITABLE_DATA_PROFILE(true),
        /** Current data network type not allowed. */
        DATA_NETWORK_TYPE_NOT_ALLOWED(true),
        /** Device is currently in an emergency call. */
        EMERGENCY_CALL(true),
        /** Device is currently in CDMA ECBM. */
        CDMA_EMERGENCY_CALLBACK_MODE(true),
        /** There is already a retry setup/handover scheduled. */
        RETRY_SCHEDULED(true),
        /** Network has explicitly request to throttle setup attempt. */
+5 −5
Original line number Diff line number Diff line
@@ -272,7 +272,7 @@ public class DataNetwork extends StateMachine {
                    TEAR_DOWN_REASON_DATA_CONFIG_NOT_READY,
                    TEAR_DOWN_REASON_PENDING_TEAR_DOWN_ALL,
                    TEAR_DOWN_REASON_NO_SUITABLE_DATA_PROFILE,
                    TEAR_DOWN_REASON_EMERGENCY_CALL,
                    TEAR_DOWN_REASON_CDMA_EMERGENCY_CALLBACK_MODE,
                    TEAR_DOWN_REASON_RETRY_SCHEDULED,
                    TEAR_DOWN_REASON_DATA_THROTTLED,
                    TEAR_DOWN_REASON_DATA_PROFILE_INVALID,
@@ -346,8 +346,8 @@ public class DataNetwork extends StateMachine {
    /** Data network tear down due to no suitable data profile. */
    public static final int TEAR_DOWN_REASON_NO_SUITABLE_DATA_PROFILE = 21;

    /** Data network tear down due to emergency call. */
    public static final int TEAR_DOWN_REASON_EMERGENCY_CALL = 22;
    /** Data network tear down due to CDMA ECBM. */
    public static final int TEAR_DOWN_REASON_CDMA_EMERGENCY_CALLBACK_MODE = 22;

    /** Data network tear down due to retry scheduled. */
    public static final int TEAR_DOWN_REASON_RETRY_SCHEDULED = 23;
@@ -2879,8 +2879,8 @@ public class DataNetwork extends StateMachine {
                return "TEAR_DOWN_REASON_PENDING_TEAR_DOWN_ALL";
            case TEAR_DOWN_REASON_NO_SUITABLE_DATA_PROFILE:
                return "TEAR_DOWN_REASON_NO_SUITABLE_DATA_PROFILE";
            case TEAR_DOWN_REASON_EMERGENCY_CALL:
                return "TEAR_DOWN_REASON_EMERGENCY_CALL";
            case TEAR_DOWN_REASON_CDMA_EMERGENCY_CALLBACK_MODE:
                return "TEAR_DOWN_REASON_CDMA_EMERGENCY_CALLBACK_MODE";
            case TEAR_DOWN_REASON_RETRY_SCHEDULED:
                return "TEAR_DOWN_REASON_RETRY_SCHEDULED";
            case TEAR_DOWN_REASON_DATA_THROTTLED:
+8 −8
Original line number Diff line number Diff line
@@ -1382,9 +1382,9 @@ public class DataNetworkController extends Handler {
            evaluation.addDataDisallowedReason(DataDisallowedReason.DATA_SERVICE_NOT_READY);
        }

        // Check if device is CDMA and is currently in ECBM
        if (mPhone.isInEcm() && mPhone.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA) {
            evaluation.addDataDisallowedReason(DataDisallowedReason.EMERGENCY_CALL);
        // Check if device is in CDMA ECBM
        if (mPhone.isInCdmaEcm()) {
            evaluation.addDataDisallowedReason(DataDisallowedReason.CDMA_EMERGENCY_CALLBACK_MODE);
        }

        // Check if only one data network is allowed.
@@ -1573,9 +1573,9 @@ public class DataNetworkController extends Handler {
            }
        }

        // Check if device is CDMA and is currently in ECBM
        if (mPhone.isInEcm() && mPhone.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA) {
            evaluation.addDataDisallowedReason(DataDisallowedReason.EMERGENCY_CALL);
        // Check if device is in CDMA ECBM
        if (mPhone.isInCdmaEcm()) {
            evaluation.addDataDisallowedReason(DataDisallowedReason.CDMA_EMERGENCY_CALLBACK_MODE);
        }

        // Check if there are other network that has higher priority, and only single data network
@@ -1820,8 +1820,8 @@ public class DataNetworkController extends Handler {
                    return DataNetwork.TEAR_DOWN_REASON_NO_SUITABLE_DATA_PROFILE;
                case DATA_NETWORK_TYPE_NOT_ALLOWED:
                    return DataNetwork.TEAR_DOWN_REASON_RAT_NOT_ALLOWED;
                case EMERGENCY_CALL:
                    return DataNetwork.TEAR_DOWN_REASON_EMERGENCY_CALL;
                case CDMA_EMERGENCY_CALLBACK_MODE:
                    return DataNetwork.TEAR_DOWN_REASON_CDMA_EMERGENCY_CALLBACK_MODE;
                case RETRY_SCHEDULED:
                    return DataNetwork.TEAR_DOWN_REASON_RETRY_SCHEDULED;
                case DATA_THROTTLED:
+5 −6
Original line number Diff line number Diff line
@@ -1009,18 +1009,17 @@ public class DataNetworkControllerTest extends TelephonyTest {
    }

    @Test
    public void testEmergencyCallChanged() throws Exception {
        doReturn(PhoneConstants.PHONE_TYPE_CDMA).when(mPhone).getPhoneType();
        doReturn(true).when(mPhone).isInEcm();
    public void testEcbmChanged() throws Exception {
        doReturn(true).when(mPhone).isInCdmaEcm();
        mDataNetworkControllerUT.addNetworkRequest(
                createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_INTERNET));
        processAllMessages();

        // Data should not be allowed when the device is in an emergency call.
        // Data should not be allowed when the device is in ECBM.
        verifyNoConnectedNetworkHasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);

        // Emergency call ended
        doReturn(false).when(mPhone).isInEcm();
        // Exit ECBM
        doReturn(false).when(mPhone).isInCdmaEcm();
        mDataNetworkControllerUT.obtainMessage(20/*EVENT_EMERGENCY_CALL_CHANGED*/).sendToTarget();
        processAllMessages();