Extract and fix logic for showing rac dialog.

Added tests to make sure the logic makes sense.

Bug: 335745726
Test: make, manual, atest SubscriptionUtilRoboTest, atest SubscriptionUtilTest, atest ResetNetworkTest
Change-Id: I7092f2747f1ca1f9ef4dc99275a916b9e24d8b28
This commit is contained in:
Rafael Higuera Silva
2024-04-23 17:31:23 +00:00
parent c6005fb22a
commit 36d99e8b09
5 changed files with 87 additions and 13 deletions

View File

@@ -19,11 +19,13 @@ package com.android.settings.network;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import static org.robolectric.Shadows.shadowOf;
import android.content.Context;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
import android.telephony.SubscriptionManager;
@@ -42,6 +44,8 @@ import org.robolectric.shadows.ShadowSubscriptionManager;
public class SubscriptionUtilRoboTest {
private static final int SUBID_1 = 1;
private static final int SUBID_2 = 2;
private static final int RAC_CARRIER_ID = 1;
private static final int CARRIER_ID = 2;
private Context mContext;
private NetworkCapabilities mNetworkCapabilities;
@@ -49,13 +53,16 @@ public class SubscriptionUtilRoboTest {
@Mock
private ConnectivityManager mConnectivityManager;
@Mock private Resources mResources;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(ApplicationProvider.getApplicationContext());
mShadowSubscriptionManager = shadowOf(mContext.getSystemService(SubscriptionManager.class));
when(mContext.getResources()).thenReturn(mResources);
when(mContext.getSystemService(ConnectivityManager.class)).thenReturn(mConnectivityManager);
when(mResources.getIntArray(anyInt())).thenReturn(new int[] {RAC_CARRIER_ID});
}
@Test
@@ -74,6 +81,58 @@ public class SubscriptionUtilRoboTest {
assertFalse(SubscriptionUtil.isConnectedToMobileDataWithDifferentSubId(mContext, SUBID_1));
}
@Test
public void carrierIsNotRAC_showRacDialogForEsim_returnFalse() {
assertFalse(
SubscriptionUtil.shouldShowRacDialogWhenErasingEsim(mContext, SUBID_1, CARRIER_ID));
}
@Test
public void carrierIsNotRAC_noWifi_noDataConnection_showRacDialogForEsimreturnFalse() {
addNetworkTransportType(NetworkCapabilities.TRANSPORT_BLUETOOTH);
assertFalse(
SubscriptionUtil.shouldShowRacDialogWhenErasingEsim(mContext, SUBID_1, CARRIER_ID));
}
@Test
public void carrierIsRAC_isConnectedToDataOnSubId2_showRacDialogForEsim_returnFalse() {
addNetworkTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
mShadowSubscriptionManager.setActiveDataSubscriptionId(SUBID_2);
assertFalse(
SubscriptionUtil.shouldShowRacDialogWhenErasingEsim(
mContext, SUBID_1, RAC_CARRIER_ID));
}
@Test
public void carrierIsRAC_hasWifi_showRacDialogForEsim_returnFalse() {
addNetworkTransportType(NetworkCapabilities.TRANSPORT_WIFI);
assertFalse(
SubscriptionUtil.shouldShowRacDialogWhenErasingEsim(
mContext, SUBID_1, RAC_CARRIER_ID));
}
@Test
public void carrierIsRAC_isConnectedToDataOnSubId1_noWifi_showRacDialogForEsim_returnTrue() {
addNetworkTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
mShadowSubscriptionManager.setActiveDataSubscriptionId(SUBID_1);
assertTrue(
SubscriptionUtil.shouldShowRacDialogWhenErasingEsim(
mContext, SUBID_1, RAC_CARRIER_ID));
}
@Test
public void carrierIsRAC_noData_noWifi_showRacDialogForEsim_returnTrue() {
addNetworkTransportType(NetworkCapabilities.TRANSPORT_BLUETOOTH);
assertTrue(
SubscriptionUtil.shouldShowRacDialogWhenErasingEsim(
mContext, SUBID_1, RAC_CARRIER_ID));
}
private void addNetworkTransportType(int networkType) {
mNetworkCapabilities =
new NetworkCapabilities.Builder().addTransportType(networkType).build();

View File

@@ -658,36 +658,36 @@ public class SubscriptionUtilTest {
}
@Test
public void hasSubscriptionWithRacCarrier_hasNoWifi_showRacDialog_returnTrue() {
public void hasSubscriptionWithRacCarrier_hasNoWifi_showRacDialogForAllEsims_returnTrue() {
when(mResources.getIntArray(anyInt())).thenReturn(CARRIERS_THAT_USE_RAC);
final SubscriptionInfo info = mock(SubscriptionInfo.class);
when(info.getCarrierId()).thenReturn(RAC_CARRIER_ID);
when(mSubMgr.getAvailableSubscriptionInfoList()).thenReturn(Arrays.asList(info));
addNetworkTransportType(NetworkCapabilities.TRANSPORT_BLUETOOTH);
assertTrue(SubscriptionUtil.shouldShowRacDialog(mContext));
assertTrue(SubscriptionUtil.shouldShowRacDialogWhenErasingAllEsims(mContext));
}
@Test
public void hasSubscriptionWithRacCarrier_hasWifi_showRacDialog_returnFalse() {
public void hasSubscriptionWithRacCarrier_hasWifi_showRacDialogForAllEsims_returnFalse() {
when(mResources.getIntArray(anyInt())).thenReturn(CARRIERS_THAT_USE_RAC);
final SubscriptionInfo info = mock(SubscriptionInfo.class);
when(info.getCarrierId()).thenReturn(RAC_CARRIER_ID);
when(mSubMgr.getAvailableSubscriptionInfoList()).thenReturn(Arrays.asList(info));
addNetworkTransportType(NetworkCapabilities.TRANSPORT_WIFI);
assertFalse(SubscriptionUtil.shouldShowRacDialog(mContext));
assertFalse(SubscriptionUtil.shouldShowRacDialogWhenErasingAllEsims(mContext));
}
@Test
public void hasNoSubscriptionWithRacCarrier_hasNoWifi_showRacDialog_returnFalse() {
public void hasNoSubscriptionWithRacCarrier_hasNoWifi_showRacDialogForAllEsims_returnFalse() {
when(mResources.getIntArray(anyInt())).thenReturn(CARRIERS_THAT_USE_RAC);
final SubscriptionInfo info = mock(SubscriptionInfo.class);
when(info.getCarrierId()).thenReturn(NO_RAC_CARRIER_ID);
when(mSubMgr.getAvailableSubscriptionInfoList()).thenReturn(Arrays.asList(info));
addNetworkTransportType(NetworkCapabilities.TRANSPORT_WIFI);
assertFalse(SubscriptionUtil.shouldShowRacDialog(mContext));
assertFalse(SubscriptionUtil.shouldShowRacDialogWhenErasingAllEsims(mContext));
}
private void addNetworkTransportType(int networkType) {