Merge "Extract and fix logic for showing rac dialog." into 24D1-dev
diff --git a/src/com/android/settings/ResetNetwork.java b/src/com/android/settings/ResetNetwork.java
index 05c8598..6ef4237 100644
--- a/src/com/android/settings/ResetNetwork.java
+++ b/src/com/android/settings/ResetNetwork.java
@@ -158,7 +158,7 @@
.setTitleRes(R.string.reset_mobile_network_settings_confirm_title)
.setSourceMetricsCategory(getMetricsCategory());
- if (resetSims && SubscriptionUtil.shouldShowRacDialog(context)) {
+ if (resetSims && SubscriptionUtil.shouldShowRacDialogWhenErasingAllEsims(context)) {
context.startActivity(
EuiccRacConnectivityDialogActivity.getIntent(context, launcher.toIntent()));
} else {
diff --git a/src/com/android/settings/network/EraseEuiccDataController.java b/src/com/android/settings/network/EraseEuiccDataController.java
index 4e89da0..a12d853 100644
--- a/src/com/android/settings/network/EraseEuiccDataController.java
+++ b/src/com/android/settings/network/EraseEuiccDataController.java
@@ -50,7 +50,7 @@
if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
return false;
}
- if (SubscriptionUtil.shouldShowRacDialog(mContext)) {
+ if (SubscriptionUtil.shouldShowRacDialogWhenErasingAllEsims(mContext)) {
EuiccRacConnectivityDialogFragment.show(mHostFragment);
} else {
EraseEuiccDataDialogFragment.show(mHostFragment);
diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java
index 9277417..c0ef042 100644
--- a/src/com/android/settings/network/SubscriptionUtil.java
+++ b/src/com/android/settings/network/SubscriptionUtil.java
@@ -542,9 +542,7 @@
return;
}
- if (isCarrierRac(context, carrierId)
- && (!isConnectedToWifi(context)
- || isConnectedToMobileDataWithDifferentSubId(context, subId))) {
+ if (shouldShowRacDialogWhenErasingEsim(context, subId, carrierId)) {
context.startActivity(EuiccRacConnectivityDialogActivity.getIntent(context, subId));
} else {
context.startActivity(DeleteEuiccSubscriptionDialogActivity.getIntent(context, subId));
@@ -883,19 +881,36 @@
}
/**
- * 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.
* @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) {
return sEnableRacDialogForTesting;
}
+
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.
*
* @param context context
diff --git a/tests/robotests/src/com/android/settings/network/SubscriptionUtilRoboTest.java b/tests/robotests/src/com/android/settings/network/SubscriptionUtilRoboTest.java
index ae504be..a6c9ef6 100644
--- a/tests/robotests/src/com/android/settings/network/SubscriptionUtilRoboTest.java
+++ b/tests/robotests/src/com/android/settings/network/SubscriptionUtilRoboTest.java
@@ -19,11 +19,13 @@
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 @@
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 @@
@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 @@
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();
diff --git a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
index 46c281f..0de0907 100644
--- a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
+++ b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
@@ -658,36 +658,36 @@
}
@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) {