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

Commit 958b737f authored by Rafael Higuera Silva's avatar Rafael Higuera Silva Committed by Android (Google) Code Review
Browse files

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

parents 1ece0152 36d99e8b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -158,7 +158,7 @@ public class ResetNetwork extends InstrumentedFragment {
                        .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 {
+1 −1
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ public class EraseEuiccDataController extends BasePreferenceController {
        if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
            return false;
        }
        if (SubscriptionUtil.shouldShowRacDialog(mContext)) {
        if (SubscriptionUtil.shouldShowRacDialogWhenErasingAllEsims(mContext)) {
            EuiccRacConnectivityDialogFragment.show(mHostFragment);
        } else {
            EraseEuiccDataDialogFragment.show(mHostFragment);
+20 −5
Original line number Diff line number Diff line
@@ -542,9 +542,7 @@ public class SubscriptionUtil {
            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,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.
     * @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.
     *
+59 −0
Original line number Diff line number Diff line
@@ -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();
+6 −6
Original line number Diff line number Diff line
@@ -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) {