diff --git a/src/com/android/settings/wifi/CellularFallbackPreferenceController.java b/src/com/android/settings/wifi/CellularFallbackPreferenceController.java index cbb8fb8e26a..c411abaa3b1 100644 --- a/src/com/android/settings/wifi/CellularFallbackPreferenceController.java +++ b/src/com/android/settings/wifi/CellularFallbackPreferenceController.java @@ -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() { diff --git a/tests/robotests/src/com/android/settings/wifi/CellularFallbackPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/CellularFallbackPreferenceControllerTest.java index c5bd555fa9a..e5d5d8fda77 100644 --- a/tests/robotests/src/com/android/settings/wifi/CellularFallbackPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/CellularFallbackPreferenceControllerTest.java @@ -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 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); + } }