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

Commit e81556b2 authored by Xiangyu/Malcolm Chen's avatar Xiangyu/Malcolm Chen Committed by android-build-merger
Browse files

Merge "Update MultiSimSettingControllerTest to use all public APIs" into qt-dev

am: 37c605ac

Change-Id: I5cb30025804ea1a0704481b780e8f2d4460ed91d
parents 83ffb7e9 37c605ac
Loading
Loading
Loading
Loading
+7 −14
Original line number Diff line number Diff line
@@ -181,8 +181,7 @@ public class MultiSimSettingController extends Handler {
     * If user is enabling a non-default non-opportunistic subscription, make it default
     * data subscription.
     */
    @VisibleForTesting
    public void onUserDataEnabled(int subId, boolean enable) {
    private void onUserDataEnabled(int subId, boolean enable) {
        if (DBG) log("onUserDataEnabled");
        // Make sure MOBILE_DATA of subscriptions in same group are synced.
        setUserDataEnabledForGroup(subId, enable);
@@ -197,8 +196,7 @@ public class MultiSimSettingController extends Handler {
    /**
     * Make sure DATA_ROAMING of subscriptions in same group are synced.
     */
    @VisibleForTesting
    public void onRoamingDataEnabled(int subId, boolean enable) {
    private void onRoamingDataEnabled(int subId, boolean enable) {
        if (DBG) log("onRoamingDataEnabled");
        setRoamingDataEnabledForGroup(subId, enable);

@@ -210,8 +208,7 @@ public class MultiSimSettingController extends Handler {
     * Upon initialization, update defaults and mobile data enabling.
     * Should only be triggered once.
     */
    @VisibleForTesting
    public void onAllSubscriptionsLoaded() {
    private void onAllSubscriptionsLoaded() {
        if (DBG) log("onAllSubscriptionsLoaded");
        updateDefaults();
        disableDataForNonDefaultNonOpportunisticSubscriptions();
@@ -222,8 +219,7 @@ public class MultiSimSettingController extends Handler {
     *
     * Make sure non-default non-opportunistic subscriptions has data off.
     */
    @VisibleForTesting
    public void onSubscriptionsChanged() {
    private void onSubscriptionsChanged() {
        if (DBG) log("onSubscriptionsChanged");
        if (!SubscriptionInfoUpdater.isSubInfoInitialized()) return;
        updateDefaults();
@@ -233,8 +229,7 @@ public class MultiSimSettingController extends Handler {
    /**
     * Make sure non-default non-opportunistic subscriptions has data disabled.
     */
    @VisibleForTesting
    public void onDefaultDataSettingChanged() {
    private void onDefaultDataSettingChanged() {
        if (DBG) log("onDefaultDataSettingChanged");
        disableDataForNonDefaultNonOpportunisticSubscriptions();
    }
@@ -245,8 +240,7 @@ public class MultiSimSettingController extends Handler {
     * TODO: b/130258159 have a separate database table for grouped subscriptions so we don't
     * manually sync each setting.
     */
    @VisibleForTesting
    public void onSubscriptionGroupChanged(ParcelUuid groupUuid) {
    private void onSubscriptionGroupChanged(ParcelUuid groupUuid) {
        if (DBG) log("onSubscriptionGroupChanged");

        List<SubscriptionInfo> infoList = mSubController.getSubscriptionsInGroup(
@@ -306,8 +300,7 @@ public class MultiSimSettingController extends Handler {
     *    not a user settable value anymore.
     * 4) If non above is met, clear the default value to INVALID.
     */
    @VisibleForTesting
    public void updateDefaults() {
    private void updateDefaults() {
        if (DBG) log("updateDefaults");

        if (!SubscriptionInfoUpdater.isSubInfoInitialized()) return;
+1 −1
Original line number Diff line number Diff line
@@ -912,7 +912,7 @@ public class SubscriptionInfoUpdater extends Handler {
                    .getUriForSubscriptionId(currentSubId), cv, null, null) > 0) {
            sc.refreshCachedActiveSubscriptionInfoList();
            sc.notifySubscriptionInfoChanged();
            MultiSimSettingController.getInstance().onSubscriptionGroupChanged(groupUuid);
            MultiSimSettingController.getInstance().notifySubscriptionGroupChanged(groupUuid);
        }
    }

+54 −18
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;

import android.os.HandlerThread;
import android.os.ParcelUuid;
import android.provider.Settings;
import android.telephony.SubscriptionInfo;
@@ -60,6 +61,7 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
    private DataEnabledSettings mDataEnabledSettingsMock1;
    @Mock
    private DataEnabledSettings mDataEnabledSettingsMock2;
    private HandlerThread mHandlerThread;
    private Phone[] mPhones;

    ParcelUuid mGroupUuid1 = new ParcelUuid(UUID.randomUUID());
@@ -123,30 +125,50 @@ public class MultiSimSettingControllerTest extends TelephonyTest {

        replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
        replaceInstance(SubscriptionController.class, "sInstance", null, mSubControllerMock);
        mMultiSimSettingControllerUT = new MultiSimSettingController(mContext, mSubControllerMock);
        mHandlerThread = new HandlerThread("MultiSimSettingControllerTestThread") {
            @Override
            public void onLooperPrepared() {
                mMultiSimSettingControllerUT = new MultiSimSettingController(
                        mContext, mSubControllerMock);
            }
        };

        mHandlerThread.start();
        waitABit();
    }

    @After
    public void tearDown() throws Exception {
        mHandlerThread.quit();
        super.tearDown();
    }

    private void waitABit() {
        try {
            Thread.sleep(250);
        } catch (Exception e) {
        }
    }

    @Test
    @SmallTest
    public void testSimpleDsds() {
        doReturn(true).when(mPhoneMock1).isUserDataEnabled();
        doReturn(true).when(mPhoneMock2).isUserDataEnabled();
        // After initialization, sub 2 should have mobile data off.
        mMultiSimSettingControllerUT.onAllSubscriptionsLoaded();
        mMultiSimSettingControllerUT.notifyAllSubscriptionLoaded();
        waitABit();
        verify(mDataEnabledSettingsMock2).setUserDataEnabled(false);

        // Enable on non-default sub should trigger setDefaultDataSubId.
        mMultiSimSettingControllerUT.onUserDataEnabled(2, true);
        mMultiSimSettingControllerUT.notifyUserDataEnabled(2, true);
        waitABit();
        verify(mSubControllerMock).setDefaultDataSubId(2);

        // Changing default data to sub 2 should trigger disabling data on sub 1.
        doReturn(2).when(mSubControllerMock).getDefaultDataSubId();
        mMultiSimSettingControllerUT.onDefaultDataSettingChanged();
        mMultiSimSettingControllerUT.notifyDefaultDataSubChanged();
        waitABit();
        verify(mDataEnabledSettingsMock1).setUserDataEnabled(false);

        doReturn(1).when(mSubControllerMock).getDefaultDataSubId();
@@ -157,7 +179,8 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        clearInvocations(mSubControllerMock);
        List<SubscriptionInfo> infoList = Arrays.asList(mSubInfo2);
        doReturn(infoList).when(mSubControllerMock).getActiveSubscriptionInfoList(anyString());
        mMultiSimSettingControllerUT.updateDefaults();
        mMultiSimSettingControllerUT.notifySubscriptionInfoChanged();
        waitABit();
        verify(mSubControllerMock).setDefaultDataSubId(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        verify(mSubControllerMock).setDefaultSmsSubId(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        verify(mSubControllerMock, never()).setDefaultVoiceSubId(anyInt());
@@ -171,12 +194,14 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        doReturn(true).when(mPhoneMock2).isUserDataEnabled();
        GlobalSettingsHelper.setBoolean(mContext, Settings.Global.MOBILE_DATA, 2, true);
        GlobalSettingsHelper.setBoolean(mContext, Settings.Global.DATA_ROAMING, 2, false);
        mMultiSimSettingControllerUT.onAllSubscriptionsLoaded();
        mMultiSimSettingControllerUT.notifyAllSubscriptionLoaded();
        waitABit();

        // Create subscription grouping.
        doReturn(Arrays.asList(mSubInfo2, mSubInfo3, mSubInfo4)).when(mSubControllerMock)
                .getSubscriptionsInGroup(any(), anyString());
        mMultiSimSettingControllerUT.onSubscriptionGroupChanged(mGroupUuid1);
        mMultiSimSettingControllerUT.notifySubscriptionGroupChanged(mGroupUuid1);
        waitABit();
        // This should result in setting sync.
        assertTrue(GlobalSettingsHelper.getBoolean(
                mContext, Settings.Global.MOBILE_DATA, 3, false));
@@ -190,9 +215,11 @@ public class MultiSimSettingControllerTest extends TelephonyTest {

        // Making sub 1 default data sub should result in disabling data on sub 2, 3, 4.
        doReturn(1).when(mSubControllerMock).getDefaultDataSubId();
        mMultiSimSettingControllerUT.onDefaultDataSettingChanged();
        mMultiSimSettingControllerUT.notifyDefaultDataSubChanged();
        waitABit();
        verify(mDataEnabledSettingsMock2).setUserDataEnabled(false);
        mMultiSimSettingControllerUT.onUserDataEnabled(2, false);
        mMultiSimSettingControllerUT.notifyUserDataEnabled(2, false);
        waitABit();
        assertFalse(GlobalSettingsHelper.getBoolean(
                mContext, Settings.Global.MOBILE_DATA, 3, true));
        assertFalse(GlobalSettingsHelper.getBoolean(
@@ -207,7 +234,10 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        List<SubscriptionInfo> infoList = Arrays.asList(mSubInfo1, mSubInfo3);
        doReturn(mGroupUuid1).when(mSubControllerMock).getGroupUuid(2);
        doReturn(infoList).when(mSubControllerMock).getActiveSubscriptionInfoList(anyString());
        mMultiSimSettingControllerUT.updateDefaults();

        mMultiSimSettingControllerUT.notifySubscriptionInfoChanged();
        waitABit();

        verify(mSubControllerMock).setDefaultDataSubId(3);
        verify(mSubControllerMock).setDefaultSmsSubId(3);
        verify(mSubControllerMock, never()).setDefaultVoiceSubId(anyInt());
@@ -224,7 +254,8 @@ public class MultiSimSettingControllerTest extends TelephonyTest {

        // Notify subscriptions ready. Sub 2 should become the default. But shouldn't turn off
        // data of oppt sub 1.
        mMultiSimSettingControllerUT.onAllSubscriptionsLoaded();
        mMultiSimSettingControllerUT.notifyAllSubscriptionLoaded();
        waitABit();
        verify(mSubControllerMock).setDefaultDataSubId(2);
        verify(mDataEnabledSettingsMock1, never()).setUserDataEnabled(anyBoolean());

@@ -233,11 +264,13 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        clearInvocations(mDataEnabledSettingsMock2);
        doReturn(2).when(mSubControllerMock).getDefaultDataSubId();
        // Toggle data on sub 1 or sub 2. Nothing should happen as they are independent.
        mMultiSimSettingControllerUT.onUserDataEnabled(1, false);
        mMultiSimSettingControllerUT.onUserDataEnabled(1, true);
        mMultiSimSettingControllerUT.notifyUserDataEnabled(1, false);
        mMultiSimSettingControllerUT.notifyUserDataEnabled(1, true);
        waitABit();
        verify(mSubControllerMock, never()).setDefaultDataSubId(anyInt());
        mMultiSimSettingControllerUT.onUserDataEnabled(2, false);
        mMultiSimSettingControllerUT.onUserDataEnabled(2, true);
        mMultiSimSettingControllerUT.notifyUserDataEnabled(2, false);
        mMultiSimSettingControllerUT.notifyUserDataEnabled(2, true);
        waitABit();
        verify(mSubControllerMock, never()).setDefaultDataSubId(anyInt());
        verify(mDataEnabledSettingsMock1, never()).setUserDataEnabled(anyBoolean());
        verify(mDataEnabledSettingsMock2, never()).setUserDataEnabled(anyBoolean());
@@ -256,7 +289,8 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        GlobalSettingsHelper.setBoolean(mContext, Settings.Global.DATA_ROAMING, 2, false);

        // Notify subscriptions ready. Sub 2 should become the default, as sub 1 is opportunistic.
        mMultiSimSettingControllerUT.onAllSubscriptionsLoaded();
        mMultiSimSettingControllerUT.notifyAllSubscriptionLoaded();
        waitABit();
        verify(mSubControllerMock).setDefaultDataSubId(2);

        // Mark sub 2 as data off.
@@ -265,7 +299,8 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        // Group sub 1 with sub 2.
        doReturn(Arrays.asList(mSubInfo1, mSubInfo2)).when(mSubControllerMock)
                .getSubscriptionsInGroup(any(), anyString());
        mMultiSimSettingControllerUT.onSubscriptionGroupChanged(mGroupUuid1);
        mMultiSimSettingControllerUT.notifySubscriptionGroupChanged(mGroupUuid1);
        waitABit();
        // This should result in setting sync.
        verify(mDataEnabledSettingsMock1).setUserDataEnabled(false);
        assertFalse(GlobalSettingsHelper.getBoolean(
@@ -274,7 +309,8 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        doReturn(false).when(mPhoneMock1).isUserDataEnabled();
        doReturn(false).when(mPhoneMock2).isUserDataEnabled();
        // Turning data on on sub 2. Sub 1 should also be turned on.
        mMultiSimSettingControllerUT.onUserDataEnabled(2, true);
        mMultiSimSettingControllerUT.notifyUserDataEnabled(2, true);
        waitABit();
        verify(mDataEnabledSettingsMock1).setUserDataEnabled(true);
    }
}