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

Commit 7611bfd8 authored by Jack Yu's avatar Jack Yu Committed by Android (Google) Code Review
Browse files

Merge "Fixed roaming related issues" into oc-dev

parents f2aa53cc 5b83d07b
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