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
This commit is contained in:
Antony Sargent
2019-02-06 13:55:08 -08:00
parent 12cec79889
commit 8af118bd87
2 changed files with 14 additions and 8 deletions

View File

@@ -118,7 +118,8 @@ public class MobileDataPreferenceController extends TogglePreferenceController
@Override @Override
public boolean isChecked() { public boolean isChecked() {
return mTelephonyManager.isDataEnabled(); return mTelephonyManager.isDataEnabled()
&& mSubId == SubscriptionManager.getDefaultDataSubscriptionId();
} }
public void init(FragmentManager fragmentManager, int subId) { public void init(FragmentManager fragmentManager, int subId) {
@@ -129,7 +130,7 @@ public class MobileDataPreferenceController extends TogglePreferenceController
@VisibleForTesting @VisibleForTesting
boolean isDialogNeeded() { boolean isDialogNeeded() {
final boolean enableData = !mTelephonyManager.isDataEnabled(); final boolean enableData = !isChecked();
final boolean isMultiSim = (mTelephonyManager.getSimCount() > 1); final boolean isMultiSim = (mTelephonyManager.getSimCount() > 1);
final int defaultSubId = mSubscriptionManager.getDefaultDataSubscriptionId(); final int defaultSubId = mSubscriptionManager.getDefaultDataSubscriptionId();
final boolean needToDisableOthers = mSubscriptionManager final boolean needToDisableOthers = mSubscriptionManager

View File

@@ -20,7 +20,6 @@ import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_U
import static com.google.common.truth.Truth.assertThat; 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.doReturn;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
@@ -31,10 +30,6 @@ import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; 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.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -42,10 +37,18 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; 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) @RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowSubscriptionManager.class)
public class MobileDataPreferenceControllerTest { public class MobileDataPreferenceControllerTest {
private static final int SUB_ID = 2; private static final int SUB_ID = 2;
private static final int SUB_ID_OTHER = 3;
@Mock @Mock
private FragmentManager mFragmentManager; private FragmentManager mFragmentManager;
@@ -78,6 +81,7 @@ public class MobileDataPreferenceControllerTest {
mPreference = new SwitchPreference(mContext); mPreference = new SwitchPreference(mContext);
mController = new MobileDataPreferenceController(mContext, "mobile_data"); mController = new MobileDataPreferenceController(mContext, "mobile_data");
ShadowSubscriptionManager.setDefaultDataSubscriptionId(SUB_ID);
mController.init(mFragmentManager, SUB_ID); mController.init(mFragmentManager, SUB_ID);
mPreference.setKey(mController.getPreferenceKey()); mPreference.setKey(mController.getPreferenceKey());
} }
@@ -104,7 +108,8 @@ public class MobileDataPreferenceControllerTest {
public void isDialogNeeded_enableNonDefaultSimInMultiSimMode_returnTrue() { public void isDialogNeeded_enableNonDefaultSimInMultiSimMode_returnTrue() {
doReturn(false).when(mTelephonyManager).isDataEnabled(); doReturn(false).when(mTelephonyManager).isDataEnabled();
doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(SUB_ID); 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(); doReturn(2).when(mTelephonyManager).getSimCount();
assertThat(mController.isDialogNeeded()).isTrue(); assertThat(mController.isDialogNeeded()).isTrue();