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:
@@ -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
|
||||||
|
@@ -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();
|
||||||
|
Reference in New Issue
Block a user