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

Commit 42055cbe authored by Malcolm Chen's avatar Malcolm Chen Committed by Xiangyu/Malcolm Chen
Browse files

Only enable data for one SIM in DSDS.

Only enable mobile data for one SIM for simplicity. Which means When
turning on mobile data on non-default sub, pop a notification to user
that it will turn off data of the other one.

Bug: 120515679
Test: manual and unittest
Change-Id: I7c190bb70d771b7f280c246038a380e4fc7338a3
parent 1ad5c980
Loading
Loading
Loading
Loading
+4 −9
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@@ -131,16 +130,12 @@ public class MobileDataPreferenceController extends TogglePreferenceController
    @VisibleForTesting
    boolean isDialogNeeded() {
        final boolean enableData = !mTelephonyManager.isDataEnabled();
        final SubscriptionInfo currentSir = mSubscriptionManager.getActiveSubscriptionInfo(
                mSubId);
        final SubscriptionInfo nextSir = mSubscriptionManager.getDefaultDataSubscriptionInfo();
        final boolean isMultiSim = (mTelephonyManager.getSimCount() > 1);
        final boolean isMultipleDataOnCapable =
                (mTelephonyManager.getNumberOfModemsWithSimultaneousDataConnections() > 1);
        final boolean isDefaultDataSubscription = (nextSir != null && currentSir != null
                && currentSir.getSubscriptionId() == nextSir.getSubscriptionId());
        final int defaultSubId = mSubscriptionManager.getDefaultDataSubscriptionId();
        final boolean needToDisableOthers = mSubscriptionManager
                .isActiveSubscriptionId(defaultSubId) && defaultSubId != mSubId;
        if (enableData) {
            if (isMultiSim && !isMultipleDataOnCapable && !isDefaultDataSubscription) {
            if (isMultiSim && needToDisableOthers) {
                mDialogType = MobileDataDialogFragment.TYPE_MULTI_SIM_DIALOG;
                return true;
            }
+2 −1
Original line number Diff line number Diff line
@@ -230,7 +230,8 @@ public class MobileNetworkUtils {
                    subscriptionManager.getActiveSubscriptionInfoList();
            if (subInfoList != null) {
                for (SubscriptionInfo subInfo : subInfoList) {
                    if (subInfo.getSubscriptionId() != subId) {
                    // We never disable mobile data for opportunistic subscriptions.
                    if (subInfo.getSubscriptionId() != subId && !subInfo.isOpportunistic()) {
                        context.getSystemService(TelephonyManager.class).createForSubscriptionId(
                                subInfo.getSubscriptionId()).setDataEnabled(false);
                    }
+2 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_U

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -104,9 +105,8 @@ public class MobileDataPreferenceControllerTest {
    public void isDialogNeeded_enableNonDefaultSimInMultiSimMode_returnTrue() {
        doReturn(false).when(mTelephonyManager).isDataEnabled();
        doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(SUB_ID);
        doReturn(null).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
        doReturn(true).when(mSubscriptionManager).isActiveSubscriptionId(anyInt());
        doReturn(2).when(mTelephonyManager).getSimCount();
        doReturn(1).when(mTelephonyManager).getNumberOfModemsWithSimultaneousDataConnections();

        assertThat(mController.isDialogNeeded()).isTrue();
        assertThat(mController.mDialogType).isEqualTo(