From 42055cbe50b80e58ca3e886f6a8c92fe0249f67b Mon Sep 17 00:00:00 2001 From: Malcolm Chen Date: Wed, 5 Dec 2018 12:48:00 -0800 Subject: [PATCH] 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 --- .../telephony/MobileDataPreferenceController.java | 13 ++++--------- .../network/telephony/MobileNetworkUtils.java | 3 ++- .../MobileDataPreferenceControllerTest.java | 4 ++-- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java index b1124f8eee1..9ebeda0fb4f 100644 --- a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java +++ b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java @@ -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; } diff --git a/src/com/android/settings/network/telephony/MobileNetworkUtils.java b/src/com/android/settings/network/telephony/MobileNetworkUtils.java index dc184d3df3f..27cc3673061 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkUtils.java +++ b/src/com/android/settings/network/telephony/MobileNetworkUtils.java @@ -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); } diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerTest.java index 2fc3d987463..e1ad93bdb8e 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerTest.java @@ -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(