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

Commit adc65c56 authored by Aishwarya Mallampati's avatar Aishwarya Mallampati
Browse files

Give low priority to satellite while doing auto data switch.

Bug: 319122166
Test: atest AutoDataSwitchControllerTest.java
Test Request Bug: 319505439

Change-Id: Ifb1db264999bd257f5a01988100ac261e6f33482
parent d5aa1125
Loading
Loading
Loading
Loading
+26 −9
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import android.provider.Settings;
import android.telephony.AccessNetworkConstants;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.NetworkRegistrationInfo.RegistrationState;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
@@ -48,6 +49,7 @@ import android.util.LocalLog;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.flags.FeatureFlagsImpl;
import com.android.internal.telephony.subscription.SubscriptionInfoInternal;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
import com.android.internal.telephony.util.NotificationChannelController;
@@ -126,7 +128,7 @@ public class AutoDataSwitchController extends Handler {

    private final @NonNull LocalLog mLocalLog = new LocalLog(128);
    private final @NonNull Context mContext;
    private final @NonNull FeatureFlags mFlags;
    private static @NonNull FeatureFlags sFeatureFlags = new FeatureFlagsImpl();
    private final @NonNull SubscriptionManagerService mSubscriptionManagerService;
    private final @NonNull PhoneSwitcher mPhoneSwitcher;
    private final @NonNull AutoDataSwitchControllerCallback mPhoneSwitcherCallback;
@@ -173,7 +175,10 @@ public class AutoDataSwitchController extends Handler {
         * How preferred the current phone is.
         */
        enum UsableState {
            HOME(1), ROAMING_ENABLED(0), NOT_USABLE(-1);
            HOME(2),
            ROAMING_ENABLED(1),
            NON_TERRESTRIAL(0),
            NOT_USABLE(-1);
            /**
             * The higher the score, the more preferred.
             * HOME is preferred over ROAMING assuming roaming is metered.
@@ -214,12 +219,24 @@ public class AutoDataSwitchController extends Handler {
         * @return The current usable state of the phone.
         */
        private UsableState getUsableState() {
            ServiceState serviceState = mPhone.getServiceState();
            boolean isUsingNonTerrestrialNetwork = sFeatureFlags.carrierEnabledSatelliteFlag()
                    && (serviceState != null) && serviceState.isUsingNonTerrestrialNetwork();

            switch (mDataRegState) {
                case NetworkRegistrationInfo.REGISTRATION_STATE_HOME:
                    if (isUsingNonTerrestrialNetwork) {
                        return UsableState.NON_TERRESTRIAL;
                    }
                    return UsableState.HOME;
                case NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING:
                    return mPhone.getDataRoamingEnabled()
                            ? UsableState.ROAMING_ENABLED : UsableState.NOT_USABLE;
                    if (mPhone.getDataRoamingEnabled()) {
                        if (isUsingNonTerrestrialNetwork) {
                            return UsableState.NON_TERRESTRIAL;
                        }
                        return UsableState.ROAMING_ENABLED;
                    }
                    return UsableState.NOT_USABLE;
                default:
                    return UsableState.NOT_USABLE;
            }
@@ -275,7 +292,7 @@ public class AutoDataSwitchController extends Handler {
            @NonNull AutoDataSwitchControllerCallback phoneSwitcherCallback) {
        super(looper);
        mContext = context;
        mFlags = featureFlags;
        sFeatureFlags = featureFlags;
        mSubscriptionManagerService = SubscriptionManagerService.getInstance();
        mPhoneSwitcher = phoneSwitcher;
        mPhoneSwitcherCallback = phoneSwitcherCallback;
@@ -599,7 +616,7 @@ public class AutoDataSwitchController extends Handler {
            boolean backToDefault = false;
            boolean needValidation = true;

            if (mFlags.autoSwitchAllowRoaming()) {
            if (sFeatureFlags.autoSwitchAllowRoaming()) {
                if (mDefaultNetworkIsOnNonCellular) {
                    debugMessage.append(", back to default as default network")
                            .append(" is active on nonCellular transport");
@@ -719,7 +736,7 @@ public class AutoDataSwitchController extends Handler {
            return INVALID_PHONE_INDEX;
        }

        if (mFlags.autoSwitchAllowRoaming()) {
        if (sFeatureFlags.autoSwitchAllowRoaming()) {
            // check whether primary and secondary signal status are worth switching
            if (!isRatSignalStrengthBasedSwitchEnabled()
                    && isHomeService(mPhonesSignalStatus[defaultPhoneId].mDataRegState)) {
@@ -741,7 +758,7 @@ public class AutoDataSwitchController extends Handler {

            Phone secondaryDataPhone = null;
            PhoneSignalStatus candidatePhoneStatus = mPhonesSignalStatus[phoneId];
            if (mFlags.autoSwitchAllowRoaming()) {
            if (sFeatureFlags.autoSwitchAllowRoaming()) {
                PhoneSignalStatus.UsableState currentUsableState =
                        mPhonesSignalStatus[defaultPhoneId].getUsableState();
                PhoneSignalStatus.UsableState candidatePhoneUsableRank =
@@ -811,7 +828,7 @@ public class AutoDataSwitchController extends Handler {
     * @return {@code true} If the feature of switching base on RAT and signal strength is enabled.
     */
    private boolean isRatSignalStrengthBasedSwitchEnabled() {
        return mFlags.autoDataSwitchRatSs() && mScoreTolerance >= 0;
        return sFeatureFlags.autoDataSwitchRatSs() && mScoreTolerance >= 0;
    }

    /**
+28 −0
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ public class AutoDataSwitchControllerTest extends TelephonyTest {
    private static final int SCORE_TOLERANCE = 100;
    private static final int GOOD_RAT_SIGNAL_SCORE = 200;
    private static final int BAD_RAT_SIGNAL_SCORE = 50;
    private boolean mIsNonTerrestrialNetwork = false;
    // Mocked
    private AutoDataSwitchController.AutoDataSwitchControllerCallback mMockedPhoneSwitcherCallback;

@@ -155,6 +156,7 @@ public class AutoDataSwitchControllerTest extends TelephonyTest {
                mPhoneSwitcher, mFeatureFlags, mMockedPhoneSwitcherCallback);

        doReturn(true).when(mFeatureFlags).autoSwitchAllowRoaming();
        doReturn(true).when(mFeatureFlags).carrierEnabledSatelliteFlag();
    }

    @After
@@ -245,6 +247,31 @@ public class AutoDataSwitchControllerTest extends TelephonyTest {
                true/*needValidation*/);
    }

    @Test
    public void testRoaming_prefer_roam_over_nonTerrestrial() {
        // DDS -> nDDS: Prefer Roaming over non-terrestrial
        prepareIdealUsesNonDdsCondition();
        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*/);

        // nDDS -> DDS: Prefer Roaming over non-terrestrial
        doReturn(PHONE_2).when(mPhoneSwitcher).getPreferredDataPhoneId();
        mIsNonTerrestrialNetwork = false;
        serviceStateChanged(PHONE_1, NetworkRegistrationInfo.REGISTRATION_STATE_HOME);
        mIsNonTerrestrialNetwork = true;
        serviceStateChanged(PHONE_2, NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING);
        processAllFutureMessages();

        verify(mMockedPhoneSwitcherCallback).onRequireValidation(DEFAULT_PHONE_INDEX,
                true/*needValidation*/);
        mIsNonTerrestrialNetwork = false;
    }

    @Test
    public void testRoaming_roaming_but_roam_disabled() {
        // Disable RAT + signalStrength base switching.
@@ -677,6 +704,7 @@ public class AutoDataSwitchControllerTest extends TelephonyTest {
                .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
                .setRegistrationState(dataRegState)
                .setDomain(NetworkRegistrationInfo.DOMAIN_PS)
                .setIsNonTerrestrialNetwork(mIsNonTerrestrialNetwork)
                .build());

        ss.setDataRoamingFromRegistration(dataRegState