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

Commit 5b83d07b authored by Jack Yu's avatar Jack Yu
Browse files

Fixed roaming related issues

1. the data enable check will be performed in trySetupData so
there is no need to add additional check in onRoamingOff and
onRoamingOn.

2. Do not trigger set initial attach apn and set data profile
in onRoamingOn (revert this behavior back to N-MR2).

3. Renamed getDataOnRoamingEnabled to getDataRoamingEnabled
for consistency.

bug: 30936226, 37280015
Test: Telephony sanity tests

Change-Id: I30ce763468b3068ecd80ab2a6a313b6284016909
parent 84f770a2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1864,12 +1864,12 @@ public class GsmCdmaPhone extends Phone {

    @Override
    public boolean getDataRoamingEnabled() {
        return mDcTracker.getDataOnRoamingEnabled();
        return mDcTracker.getDataRoamingEnabled();
    }

    @Override
    public void setDataRoamingEnabled(boolean enable) {
        mDcTracker.setDataOnRoamingEnabled(enable);
        mDcTracker.setDataRoamingEnabled(enable);
    }

    @Override
+37 −41
Original line number Diff line number Diff line
@@ -909,8 +909,7 @@ public class DcTracker extends Handler {
                    Settings.Global.putInt(mResolver, Settings.Global.MOBILE_DATA + phoneSubId,
                            enabled ? 1 : 0);
                }
                if (getDataOnRoamingEnabled() == false &&
                        mPhone.getServiceState().getDataRoaming() == true) {
                if (!getDataRoamingEnabled() && mPhone.getServiceState().getDataRoaming()) {
                    if (enabled) {
                        notifyOffApnsOfAvailability(Phone.REASON_ROAMING_ON);
                    } else {
@@ -1437,7 +1436,7 @@ public class DcTracker extends Handler {
            failureReason.addDataAllowFailReason(
                    DataAllowFailReasonType.DEFAULT_DATA_UNSELECTED);
        }
        if (mPhone.getServiceState().getDataRoaming() && !getDataOnRoamingEnabled()) {
        if (mPhone.getServiceState().getDataRoaming() && !getDataRoamingEnabled()) {
            if(failureReason == null) return false;
            failureReason.addDataAllowFailReason(DataAllowFailReasonType.ROAMING_DISABLED);
        }
@@ -2733,9 +2732,9 @@ public class DcTracker extends Handler {
    /**
     * Modify {@link android.provider.Settings.Global#DATA_ROAMING} value.
     */
    public void setDataOnRoamingEnabled(boolean enabled) {
    public void setDataRoamingEnabled(boolean enabled) {
        final int phoneSubId = mPhone.getSubId();
        if (getDataOnRoamingEnabled() != enabled) {
        if (getDataRoamingEnabled() != enabled) {
            int roaming = enabled ? 1 : 0;

            // For single SIM phones, this is a per phone property.
@@ -2749,12 +2748,12 @@ public class DcTracker extends Handler {
            mSubscriptionManager.setDataRoaming(roaming, phoneSubId);
            // will trigger handleDataOnRoamingChange() through observer
            if (DBG) {
               log("setDataOnRoamingEnabled: set phoneSubId=" + phoneSubId
                log("setDataRoamingEnabled: set phoneSubId=" + phoneSubId
                        + " isRoaming=" + enabled);
            }
        } else {
            if (DBG) {
                log("setDataOnRoamingEnabled: unchanged phoneSubId=" + phoneSubId
                log("setDataRoamingEnabled: unchanged phoneSubId=" + phoneSubId
                        + " isRoaming=" + enabled);
             }
        }
@@ -2763,7 +2762,7 @@ public class DcTracker extends Handler {
    /**
     * Return current {@link android.provider.Settings.Global#DATA_ROAMING} value.
     */
    public boolean getDataOnRoamingEnabled() {
    public boolean getDataRoamingEnabled() {
        boolean isDataRoamingEnabled = "true".equalsIgnoreCase(SystemProperties.get(
                "ro.com.android.dataroaming", "false"));
        final int phoneSubId = mPhone.getSubId();
@@ -2778,18 +2777,20 @@ public class DcTracker extends Handler {
                        Settings.Global.DATA_ROAMING, phoneSubId) != 0;
            }
        } catch (SettingNotFoundException snfe) {
            if (DBG) log("getDataOnRoamingEnabled: SettingNofFoundException snfe=" + snfe);
            if (DBG) log("getDataRoamingEnabled: SettingNofFoundException snfe=" + snfe);
        }
        if (VDBG) {
            log("getDataOnRoamingEnabled: phoneSubId=" + phoneSubId +
                    " isDataRoamingEnabled=" + isDataRoamingEnabled);
            log("getDataRoamingEnabled: phoneSubId=" + phoneSubId
                    + " isDataRoamingEnabled=" + isDataRoamingEnabled);
        }
        return isDataRoamingEnabled;
    }

    private void onRoamingOff() {
        if (DBG) log("onRoamingOff");
    // When the data roaming status changes from roaming to non-roaming.
    private void onDataRoamingOff() {
        if (DBG) log("onDataRoamingOff");

        if (!getDataRoamingEnabled()) {
            // TODO: Remove this once all old vendor RILs are gone. We don't need to set initial apn
            // attach and send the data profile again as the modem should have both roaming and
            // non-roaming protocol in place. Modem should choose the right protocol based on the
@@ -2797,9 +2798,9 @@ public class DcTracker extends Handler {
            setInitialAttachApn();
            setDataProfilesAsNeeded();

        if (!mDataEnabledSettings.isUserDataEnabled()) return;
            // If the user did not enable data roaming, now when we transit from roaming to
            // non-roaming, we should try to reestablish the data connection.

        if (getDataOnRoamingEnabled() == false) {
            notifyOffApnsOfAvailability(Phone.REASON_ROAMING_OFF);
            setupDataOnConnectableApns(Phone.REASON_ROAMING_OFF);
        } else {
@@ -2807,20 +2808,11 @@ public class DcTracker extends Handler {
        }
    }

    private void onRoamingOn() {
        if (DBG) log("onRoamingOn");

        // TODO: Remove this once all old vendor RILs are gone. We don't need to set initial apn
        // attach and send the data profile again as the modem should have both roaming and
        // non-roaming protocol in place. Modem should choose the right protocol based on the
        // roaming condition.
        setInitialAttachApn();
        setDataProfilesAsNeeded();

        if (!mDataEnabledSettings.isUserDataEnabled()) {
            if (DBG) log("data not enabled by user");
            return;
        }
    // This method is called
    // 1. When the data roaming status changes from non-roaming to roaming.
    // 2. When allowed data roaming settings is changed by the user.
    private void onDataRoamingOnOrSettingsChanged() {
        if (DBG) log("onDataRoamingOnOrSettingsChanged");

        // Check if the device is actually data roaming
        if (!mPhone.getServiceState().getDataRoaming()) {
@@ -2828,12 +2820,16 @@ public class DcTracker extends Handler {
            return;
        }

        if (getDataOnRoamingEnabled()) {
            if (DBG) log("onRoamingOn: setup data on roaming");
        if (getDataRoamingEnabled()) {
            if (DBG) log("onDataRoamingOnOrSettingsChanged: setup data on roaming");

            setupDataOnConnectableApns(Phone.REASON_ROAMING_ON);
            notifyDataConnection(Phone.REASON_ROAMING_ON);
        } else {
            if (DBG) log("onRoamingOn: Tear down data connection on roaming.");
            // If the user does not turn on data roaming, when we transit from non-roaming to
            // roaming, we need to tear down the data connection otherwise the user might be
            // charged for data roaming usage.
            if (DBG) log("onDataRoamingOnOrSettingsChanged: Tear down data connection on roaming.");
            cleanUpAllConnections(true, Phone.REASON_ROAMING_ON);
            notifyOffApnsOfAvailability(Phone.REASON_ROAMING_ON);
        }
@@ -3850,11 +3846,11 @@ public class DcTracker extends Handler {
                break;

            case DctConstants.EVENT_ROAMING_OFF:
                onRoamingOff();
                onDataRoamingOff();
                break;

            case DctConstants.EVENT_ROAMING_ON:
                onRoamingOn();
                onDataRoamingOnOrSettingsChanged();
                break;

            case DctConstants.EVENT_DEVICE_PROVISIONED_CHANGE:
+6 −6
Original line number Diff line number Diff line
@@ -625,7 +625,7 @@ public class DcTrackerTest extends TelephonyTest {
        //step 4: only tear down metered data connections.

        //set Default and MMS to be metered in the CarrierConfigManager
        boolean roamingEnabled = mDct.getDataOnRoamingEnabled();
        boolean roamingEnabled = mDct.getDataRoamingEnabled();
        boolean dataEnabled = mDct.getDataEnabled();

        mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS,
@@ -654,7 +654,7 @@ public class DcTrackerTest extends TelephonyTest {
        //user is in roaming
        doReturn(true).when(mServiceState).getDataRoaming();
        logd("Sending DISABLE_ROAMING_CMD");
        mDct.setDataOnRoamingEnabled(false);
        mDct.setDataRoamingEnabled(false);
        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_ROAMING_ON));
        waitForMs(200);

@@ -666,7 +666,7 @@ public class DcTrackerTest extends TelephonyTest {
        assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_IMS));

        // reset roaming settings / data enabled settings at end of this test
        mDct.setDataOnRoamingEnabled(roamingEnabled);
        mDct.setDataRoamingEnabled(roamingEnabled);
        mDct.setDataEnabled(dataEnabled);
        waitForMs(200);
    }
@@ -679,7 +679,7 @@ public class DcTrackerTest extends TelephonyTest {
        //step 2: user toggled data settings on
        //step 3: only non-metered data call is established

        boolean roamingEnabled = mDct.getDataOnRoamingEnabled();
        boolean roamingEnabled = mDct.getDataRoamingEnabled();
        boolean dataEnabled = mDct.getDataEnabled();

        //set Default and MMS to be metered in the CarrierConfigManager
@@ -690,7 +690,7 @@ public class DcTrackerTest extends TelephonyTest {
        doReturn(true).when(mServiceState).getDataRoaming();

        logd("Sending DISABLE_ROAMING_CMD");
        mDct.setDataOnRoamingEnabled(false);
        mDct.setDataRoamingEnabled(false);

        logd("Sending EVENT_RECORDS_LOADED");
        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null));
@@ -715,7 +715,7 @@ public class DcTrackerTest extends TelephonyTest {
        assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_IMS));

        // reset roaming settings / data enabled settings at end of this test
        mDct.setDataOnRoamingEnabled(roamingEnabled);
        mDct.setDataRoamingEnabled(roamingEnabled);
        mDct.setDataEnabled(dataEnabled);
        waitForMs(200);
    }
+2 −3
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.net.LinkProperties;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.LocalLog;

@@ -106,11 +105,11 @@ public class DcTrackerMock extends DcTracker {
        throw new RuntimeException("Not Implemented");
    }
    @Override
    public void setDataOnRoamingEnabled(boolean enabled) {
    public void setDataRoamingEnabled(boolean enabled) {
        throw new RuntimeException("Not Implemented");
    }
    @Override
    public boolean getDataOnRoamingEnabled() {
    public boolean getDataRoamingEnabled() {
        throw new RuntimeException("Not Implemented");
    }
    @Override