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

Commit 05381bf0 authored by Arc Wang's avatar Arc Wang Committed by Android (Google) Code Review
Browse files

Merge "[Wi-Fi] Fix multi SIM devices switch to mobile data automatically settings missing problem"

parents 032ca466 fe9a794e
Loading
Loading
Loading
Loading
+24 −2
Original line number Diff line number Diff line
@@ -17,8 +17,12 @@
package com.android.settings.wifi;

import android.content.Context;
import android.content.res.Resources;
import android.provider.Settings;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;

import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.core.TogglePreferenceController;

/**
@@ -49,8 +53,26 @@ public class CellularFallbackPreferenceController extends TogglePreferenceContro
    }

    private boolean avoidBadWifiConfig() {
        return mContext.getResources().getInteger(
                com.android.internal.R.integer.config_networkAvoidBadWifi) == 1;
        boolean avoidBadWifiConfig = true;
        final SubscriptionManager subscriptionManager =
                mContext.getSystemService(SubscriptionManager.class);

        for (SubscriptionInfo subscriptionInfo :
                subscriptionManager.getActiveSubscriptionInfoList()) {
            final Resources resources = getResourcesForSubId(subscriptionInfo.getSubscriptionId());
            if (resources.getInteger(
                    com.android.internal.R.integer.config_networkAvoidBadWifi) == 0) {
                avoidBadWifiConfig = false;
                break;
            }
        }
        return avoidBadWifiConfig;
    }

    @VisibleForTesting
    Resources getResourcesForSubId(int subscriptionId) {
        return SubscriptionManager.getResourcesForSubId(mContext, subscriptionId,
                false /* useRootLocale */);
    }

    private boolean avoidBadWifiCurrentSettings() {
+39 −6
Original line number Diff line number Diff line
@@ -18,36 +18,55 @@ package com.android.settings.wifi;

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.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.res.Resources;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;

import java.util.ArrayList;
import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowApplication;

@RunWith(RobolectricTestRunner.class)
public class CellularFallbackPreferenceControllerTest {
    private static final String KEY_CELLULAR_FALLBACK = "wifi_cellular_data_fallback";

    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private Context mContext;
    @Mock
    private SubscriptionManager mSubscriptionManager;

    private CellularFallbackPreferenceController mController;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mController = new CellularFallbackPreferenceController(mContext, KEY_CELLULAR_FALLBACK);
        ShadowApplication shadowApplication = ShadowApplication.getInstance();
        shadowApplication.setSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE,
                mSubscriptionManager);
        mController = spy(new CellularFallbackPreferenceController(RuntimeEnvironment.application,
                KEY_CELLULAR_FALLBACK));
    }

    @Test
    public void isAvailable_avoidBadWifiConfigIsFalse_shouldReturnTrue() {
        when(mContext.getResources().getInteger(
        setupMockIcc();
        final Resources resources = mock(Resources.class);

        doReturn(resources).when(mController).getResourcesForSubId(anyInt());
        when(resources.getInteger(
                com.android.internal.R.integer.config_networkAvoidBadWifi))
                .thenReturn(0);

@@ -56,10 +75,24 @@ public class CellularFallbackPreferenceControllerTest {

    @Test
    public void isAvailable_avoidBadWifiConfigIsTrue_shouldReturnFalse() {
        when(mContext.getResources().getInteger(
        setupMockIcc();
        final Resources resources = mock(Resources.class);

        doReturn(resources).when(mController).getResourcesForSubId(anyInt());
        when(resources.getInteger(
                com.android.internal.R.integer.config_networkAvoidBadWifi))
                .thenReturn(1);

        assertThat(mController.isAvailable()).isFalse();
    }

    private void setupMockIcc() {
        final List<SubscriptionInfo> subscriptionInfoList = new ArrayList<>();
        final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
        final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
        subscriptionInfoList.add(info1);
        subscriptionInfoList.add(info2);
        when(mSubscriptionManager.getActiveSubscriptionInfoList())
                .thenReturn(subscriptionInfoList);
    }
}