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

Commit 3cb9b30c authored by Aishwarya Mallampati's avatar Aishwarya Mallampati Committed by Android (Google) Code Review
Browse files

Merge "Give low priority to satellite while doing auto data switch." into main

parents 5eddfcc7 adc65c56
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