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

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

Prevent wrong data selection pop up while

activating a new subscription in DSDS.

Do not set default data subId in onSubscriptionGroupChanged() if device contains
active non-opportunistic subscriptions not part of the group.

Bug: 227134302
Test: Manual Testing, atest
com.android.internal.telephony.MultiSimSettingControllerTest

Change-Id: I053cc1811ab40b2e406b5a891420c4e92f770c2e
parent 9f428151
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -303,7 +303,7 @@ public class MultiSimSettingController extends Handler {
            case EVENT_USER_DATA_ENABLED: {
                int subId = msg.arg1;
                boolean enable = msg.arg2 != 0;
                onUserDataEnabled(subId, enable);
                onUserDataEnabled(subId, enable, true);
                break;
            }
            case EVENT_ROAMING_DATA_ENABLED: {
@@ -352,14 +352,15 @@ public class MultiSimSettingController extends Handler {
     * If user is enabling a non-default non-opportunistic subscription, make it default
     * data subscription.
     */
    protected void onUserDataEnabled(int subId, boolean enable) {
        if (DBG) log("onUserDataEnabled");
    private void onUserDataEnabled(int subId, boolean enable, boolean setDefaultData) {
        if (DBG) log("[onUserDataEnabled] subId=" + subId + " enable=" + enable +
        " setDefaultData=" + setDefaultData);
        // Make sure MOBILE_DATA of subscriptions in same group are synced.
        setUserDataEnabledForGroup(subId, enable);

        // If user is enabling a non-default non-opportunistic subscription, make it default.
        if (mSubController.getDefaultDataSubId() != subId && !mSubController.isOpportunistic(subId)
                && enable && mSubController.isActiveSubId(subId)) {
                && enable && mSubController.isActiveSubId(subId) && setDefaultData) {
             android.provider.Settings.Global.putInt(mContext.getContentResolver(),
                 SETTING_USER_PREF_DATA_SUB, subId);
            mSubController.setDefaultDataSubId(subId);
@@ -546,13 +547,23 @@ public class MultiSimSettingController extends Handler {
        try {
            enable = GlobalSettingsHelper.getBoolean(
                    mContext, Settings.Global.MOBILE_DATA, refSubId);
            onUserDataEnabled(refSubId, enable);
        } catch (SettingNotFoundException exception) {
            //pass invalid refSubId to fetch the single-sim setting
            enable = GlobalSettingsHelper.getBoolean(
                    mContext, Settings.Global.MOBILE_DATA, INVALID_SUBSCRIPTION_ID, enable);
            onUserDataEnabled(refSubId, enable);
        }
        boolean setDefaultData = true;
        List<SubscriptionInfo> activeSubList = mSubController.getActiveSubscriptionInfoList(
                mContext.getOpPackageName(), mContext.getAttributionTag());
        for (SubscriptionInfo activeInfo : activeSubList) {
            if (!(groupUuid.equals(activeInfo.getGroupUuid()))) {
                // Do not set refSubId as defaultDataSubId if there are other active
                // subscriptions which does not belong to this groupUuid
                setDefaultData = false;
                break;
            }
        }
        onUserDataEnabled(refSubId, enable, setDefaultData);

        enable = false;
        try {
+31 −1
Original line number Diff line number Diff line
@@ -909,4 +909,34 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        verify(mSubControllerMock).getActiveSubInfoCountMax();
        verify(mSubControllerMock).setDefaultDataSubId(anyInt());
    }

    @Test
    public void onSubscriptionGroupChanged_hasActiveSubNotPartOfGroup() {
        // sub1 and sub2 are active subs already
        // Create a subscription group with only sub2
        doReturn(mGroupUuid1).when(mSubControllerMock).getGroupUuid(2);
        doReturn(Arrays.asList(mSubInfo2)).when(mSubControllerMock)
                .getSubscriptionsInGroup(any(), anyString(), nullable(String.class));
        mMultiSimSettingControllerUT.notifySubscriptionGroupChanged(mGroupUuid1);
        processAllMessages();
        // Default data is not modified as sub1 is active sub not part of this groupUuid
        verify(mSubControllerMock, never()).setDefaultDataSubId(anyInt());
    }

    @Test
    public void onSubscriptionGroupChanged_allActiveSubArePartOfGroup() throws Exception {
        doReturn(3).when(mSubControllerMock).getDefaultDataSubId();
        // Create subscription grouping of subs 1 and 2.
        replaceInstance(SubscriptionInfo.class, "mGroupUUID", mSubInfo1, mGroupUuid1);
        doReturn(mGroupUuid1).when(mSubControllerMock).getGroupUuid(1);
        doReturn(mGroupUuid1).when(mSubControllerMock).getGroupUuid(2);
        GlobalSettingsHelper.setBoolean(mContext, Settings.Global.MOBILE_DATA, 1, true);
        doReturn(Arrays.asList(mSubInfo1, mSubInfo2)).when(mSubControllerMock)
                .getSubscriptionsInGroup(any(), anyString(), nullable(String.class));

        mMultiSimSettingControllerUT.notifySubscriptionGroupChanged(mGroupUuid1);
        processAllMessages();
        // Default data is set to sub1
        verify(mSubControllerMock).setDefaultDataSubId(1);
    }
}
 No newline at end of file