Merge "Extract and fix logic for showing rac dialog." into 24D1-dev

This commit is contained in:
Rafael Higuera Silva
2024-04-25 18:27:53 +00:00
committed by Android (Google) Code Review
5 changed files with 87 additions and 13 deletions

View File

@@ -158,7 +158,7 @@ public class ResetNetwork extends InstrumentedFragment {
.setTitleRes(R.string.reset_mobile_network_settings_confirm_title) .setTitleRes(R.string.reset_mobile_network_settings_confirm_title)
.setSourceMetricsCategory(getMetricsCategory()); .setSourceMetricsCategory(getMetricsCategory());
if (resetSims && SubscriptionUtil.shouldShowRacDialog(context)) { if (resetSims && SubscriptionUtil.shouldShowRacDialogWhenErasingAllEsims(context)) {
context.startActivity( context.startActivity(
EuiccRacConnectivityDialogActivity.getIntent(context, launcher.toIntent())); EuiccRacConnectivityDialogActivity.getIntent(context, launcher.toIntent()));
} else { } else {

View File

@@ -50,7 +50,7 @@ public class EraseEuiccDataController extends BasePreferenceController {
if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) { if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
return false; return false;
} }
if (SubscriptionUtil.shouldShowRacDialog(mContext)) { if (SubscriptionUtil.shouldShowRacDialogWhenErasingAllEsims(mContext)) {
EuiccRacConnectivityDialogFragment.show(mHostFragment); EuiccRacConnectivityDialogFragment.show(mHostFragment);
} else { } else {
EraseEuiccDataDialogFragment.show(mHostFragment); EraseEuiccDataDialogFragment.show(mHostFragment);

View File

@@ -542,9 +542,7 @@ public class SubscriptionUtil {
return; return;
} }
if (isCarrierRac(context, carrierId) if (shouldShowRacDialogWhenErasingEsim(context, subId, carrierId)) {
&& (!isConnectedToWifi(context)
|| isConnectedToMobileDataWithDifferentSubId(context, subId))) {
context.startActivity(EuiccRacConnectivityDialogActivity.getIntent(context, subId)); context.startActivity(EuiccRacConnectivityDialogActivity.getIntent(context, subId));
} else { } else {
context.startActivity(DeleteEuiccSubscriptionDialogActivity.getIntent(context, subId)); context.startActivity(DeleteEuiccSubscriptionDialogActivity.getIntent(context, subId));
@@ -883,18 +881,35 @@ public class SubscriptionUtil {
} }
/** /**
* Check if warning dialog should be presented when erasing all eSIMS. * Check if warning dialog should be presented when erasing all eSIMs.
* *
* @param context Context to check if any sim carrier use RAC and device Wi-Fi connection. * @param context Context to check if any sim carrier use RAC and device Wi-Fi connection.
* @return {@code true} if dialog should be presented to the user. * @return {@code true} if dialog should be presented to the user.
*/ */
public static boolean shouldShowRacDialog(@NonNull Context context) { public static boolean shouldShowRacDialogWhenErasingAllEsims(@NonNull Context context) {
if (sEnableRacDialogForTesting != null) { if (sEnableRacDialogForTesting != null) {
return sEnableRacDialogForTesting; return sEnableRacDialogForTesting;
} }
return !isConnectedToWifi(context) && hasSubscriptionWithRacCarrier(context); return !isConnectedToWifi(context) && hasSubscriptionWithRacCarrier(context);
} }
/**
* Check if warning dialog should be presented when erasing eSIM.
*
* @param context Context to check if any sim carrier use RAC and device Wi-Fi connection.
* @param subId Subscription ID for the single eSIM.
* @param carrierId Carrier ID for the single eSIM.
* @return {@code true} if dialog should be presented to the user.
*/
@VisibleForTesting
static boolean shouldShowRacDialogWhenErasingEsim(
@NonNull Context context, int subId, int carrierId) {
return isCarrierRac(context, carrierId)
&& !isConnectedToWifi(context)
&& !isConnectedToMobileDataWithDifferentSubId(context, subId);
}
/** /**
* Retrieves NetworkCapabilities for the active network. * Retrieves NetworkCapabilities for the active network.
* *

View File

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

View File

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