From 8af118bd87dba6e927160a6a8ea643978d1d2a71 Mon Sep 17 00:00:00 2001 From: Antony Sargent Date: Wed, 6 Feb 2019 13:55:08 -0800 Subject: [PATCH] Fix mobile data on/off switch for multi-sim case In multi-sim, the on/off switch for mobile data on the mobile network details page doesn't quite work right. The thing it's missing is checking whether the current sim is the default one used for data - if it's not the default, then the switch should be off even if mobile data is turned on. And clicking to enable needs to prompt the user to ask if this sim should be become the new default one, which we already have code for, but we weren't triggering it properly. Bug: 124005813 Test: make RunSettingsRoboTests Change-Id: Ifdf58addfde94b3bac85c68e4b22ddfbaf01dff7 --- .../MobileDataPreferenceController.java | 5 +++-- .../MobileDataPreferenceControllerTest.java | 17 +++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java index 9ebeda0fb4f..47822b6fce3 100644 --- a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java +++ b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java @@ -118,7 +118,8 @@ public class MobileDataPreferenceController extends TogglePreferenceController @Override public boolean isChecked() { - return mTelephonyManager.isDataEnabled(); + return mTelephonyManager.isDataEnabled() + && mSubId == SubscriptionManager.getDefaultDataSubscriptionId(); } public void init(FragmentManager fragmentManager, int subId) { @@ -129,7 +130,7 @@ public class MobileDataPreferenceController extends TogglePreferenceController @VisibleForTesting boolean isDialogNeeded() { - final boolean enableData = !mTelephonyManager.isDataEnabled(); + final boolean enableData = !isChecked(); final boolean isMultiSim = (mTelephonyManager.getSimCount() > 1); final int defaultSubId = mSubscriptionManager.getDefaultDataSubscriptionId(); final boolean needToDisableOthers = mSubscriptionManager 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 e0bfce44e4b..4c242c147d0 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerTest.java @@ -20,7 +20,6 @@ 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; @@ -31,10 +30,6 @@ import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; -import androidx.preference.SwitchPreference; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -42,10 +37,18 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.shadows.ShadowSubscriptionManager; + +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; +import androidx.preference.SwitchPreference; @RunWith(RobolectricTestRunner.class) +@Config(shadows = ShadowSubscriptionManager.class) public class MobileDataPreferenceControllerTest { private static final int SUB_ID = 2; + private static final int SUB_ID_OTHER = 3; @Mock private FragmentManager mFragmentManager; @@ -78,6 +81,7 @@ public class MobileDataPreferenceControllerTest { mPreference = new SwitchPreference(mContext); mController = new MobileDataPreferenceController(mContext, "mobile_data"); + ShadowSubscriptionManager.setDefaultDataSubscriptionId(SUB_ID); mController.init(mFragmentManager, SUB_ID); mPreference.setKey(mController.getPreferenceKey()); } @@ -104,7 +108,8 @@ public class MobileDataPreferenceControllerTest { public void isDialogNeeded_enableNonDefaultSimInMultiSimMode_returnTrue() { doReturn(false).when(mTelephonyManager).isDataEnabled(); doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(SUB_ID); - doReturn(true).when(mSubscriptionManager).isActiveSubscriptionId(anyInt()); + doReturn(true).when(mSubscriptionManager).isActiveSubscriptionId(SUB_ID_OTHER); + ShadowSubscriptionManager.setDefaultDataSubscriptionId(SUB_ID_OTHER); doReturn(2).when(mTelephonyManager).getSimCount(); assertThat(mController.isDialogNeeded()).isTrue();