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

Commit 06a41dc7 authored by Ling Ma's avatar Ling Ma
Browse files

Allow satellite to bypass roaming settings

With carrier config satellite_ignore_data_roaming_setting_bool, satellite can bypass user's roaming settings.

Fix: 399429819
Test: basic voice call + data browsing
Flag: EXEMPT bugfix
Change-Id: Iabb744ab6bfaa339d303e631591aabaa6fdb36a6
parent 77c23265
Loading
Loading
Loading
Loading
+22 −24
Original line number Diff line number Diff line
@@ -312,18 +312,19 @@ public class AutoDataSwitchController extends Handler {
                    (serviceState != null) && serviceState.isUsingNonTerrestrialNetwork();

            return switch (mDataRegState) {
                case NetworkRegistrationInfo.REGISTRATION_STATE_HOME -> {
                    if (isUsingNonTerrestrialNetwork) {
                        yield UsableState.NON_TERRESTRIAL;
                    }
                    yield UsableState.HOME;
                }
                case NetworkRegistrationInfo.REGISTRATION_STATE_HOME ->
                        isUsingNonTerrestrialNetwork
                                ? UsableState.NON_TERRESTRIAL : UsableState.HOME;
                case NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING -> {
                    if (mPhone.getDataRoamingEnabled()) {
                    // Satellite may bypass User's roaming settings
                    if (isUsingNonTerrestrialNetwork) {
                            yield UsableState.NON_TERRESTRIAL;
                        boolean byPassRoamingSettings = mPhone.getDataNetworkController()
                                .getDataConfigManager().isIgnoringDataRoamingSettingForSatellite();
                        if (byPassRoamingSettings) yield UsableState.NON_TERRESTRIAL;
                    }
                        yield UsableState.ROAMING_ENABLED;
                    if (mPhone.getDataRoamingEnabled()) {
                        yield isUsingNonTerrestrialNetwork
                                ? UsableState.NON_TERRESTRIAL : UsableState.ROAMING_ENABLED;
                    }
                    yield UsableState.NOT_USABLE;
                }
@@ -513,29 +514,29 @@ public class AutoDataSwitchController extends Handler {
        Object obj;
        int phoneId;
        switch (msg.what) {
            case EVENT_SERVICE_STATE_CHANGED:
            case EVENT_SERVICE_STATE_CHANGED -> {
                ar = (AsyncResult) msg.obj;
                phoneId = (int) ar.userObj;
                onServiceStateChanged(phoneId);
                break;
            case EVENT_DISPLAY_INFO_CHANGED:
            }
            case EVENT_DISPLAY_INFO_CHANGED -> {
                ar = (AsyncResult) msg.obj;
                phoneId = (int) ar.userObj;
                onDisplayInfoChanged(phoneId);
                break;
            case EVENT_SIGNAL_STRENGTH_CHANGED:
            }
            case EVENT_SIGNAL_STRENGTH_CHANGED -> {
                ar = (AsyncResult) msg.obj;
                phoneId = (int) ar.userObj;
                onSignalStrengthChanged(phoneId);
                break;
            case EVENT_EVALUATE_AUTO_SWITCH:
            }
            case EVENT_EVALUATE_AUTO_SWITCH -> {
                obj = mScheduledEventsToExtras.get(EVENT_EVALUATE_AUTO_SWITCH);
                if (obj instanceof EvaluateEventExtra extra) {
                    mScheduledEventsToExtras.remove(EVENT_EVALUATE_AUTO_SWITCH);
                    onEvaluateAutoDataSwitch(extra.evaluateReason);
                }
                break;
            case EVENT_STABILITY_CHECK_PASSED:
            }
            case EVENT_STABILITY_CHECK_PASSED -> {
                obj = mScheduledEventsToExtras.get(EVENT_STABILITY_CHECK_PASSED);
                if (obj instanceof StabilityEventExtra extra) {
                    int targetPhoneId = extra.targetPhoneId;
@@ -545,12 +546,9 @@ public class AutoDataSwitchController extends Handler {
                    mScheduledEventsToExtras.remove(EVENT_STABILITY_CHECK_PASSED);
                    mPhoneSwitcherCallback.onRequireValidation(targetPhoneId, needValidation);
                }
                break;
            case EVENT_SUBSCRIPTIONS_CHANGED:
                onSubscriptionsChanged();
                break;
            default:
                loge("Unexpected event " + msg.what);
            }
            case EVENT_SUBSCRIPTIONS_CHANGED -> onSubscriptionsChanged();
            default -> loge("Unexpected event " + msg.what);
        }
    }

+18 −1
Original line number Diff line number Diff line
@@ -294,7 +294,7 @@ public class AutoDataSwitchControllerTest extends TelephonyTest {
    }

    @Test
    public void testRoaming_prefer_roam_over_nonTerrestrial() {
    public void testRoaming_prefer_roam_over_satellite() {
        // DDS -> nDDS: Prefer Roaming over non-terrestrial
        prepareIdealUsesNonDdsCondition();
        mIsNonTerrestrialNetwork = true;
@@ -318,6 +318,23 @@ public class AutoDataSwitchControllerTest extends TelephonyTest {
        mIsNonTerrestrialNetwork = false;
    }

    @Test
    public void testRoaming_satellite_bypass_settings() {
        prepareIdealUsesNonDdsCondition();

        doReturn(true).when(mDataConfigManager).isIgnoringDataRoamingSettingForSatellite();
        doReturn(false).when(mPhone).getDataRoamingEnabled();

        mIsNonTerrestrialNetwork = true;
        serviceStateChanged(PHONE_1, NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING);
        mIsNonTerrestrialNetwork = false;
        serviceStateChanged(PHONE_2, NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING);
        processAllFutureMessages();

        verify(mMockedPhoneSwitcherCallback).onRequireValidation(PHONE_2, true/*needValidation*/);
    }


    @Test
    public void testRoaming_roaming_but_roam_disabled() {
        // Disable RAT + signalStrength base switching.