diff --git a/src/com/android/settings/network/MobileNetworkListController.java b/src/com/android/settings/network/MobileNetworkListController.java index f1980b26ac9..77c93ffec1f 100644 --- a/src/com/android/settings/network/MobileNetworkListController.java +++ b/src/com/android/settings/network/MobileNetworkListController.java @@ -128,7 +128,7 @@ public class MobileNetworkListController extends AbstractPreferenceController im pref.setOnPreferenceClickListener(clickedPref -> { if (!info.isEmbedded() && !mSubscriptionManager.isActiveSubscriptionId(subId) && !SubscriptionUtil.showToggleForPhysicalSim(mSubscriptionManager)) { - mSubscriptionManager.setSubscriptionEnabled(subId, true); + SubscriptionUtil.startToggleSubscriptionDialogActivity(mContext, subId, true); } else { final Intent intent = new Intent(mContext, MobileNetworkActivity.class); intent.putExtra(Settings.EXTRA_SUB_ID, info.getSubscriptionId()); diff --git a/src/com/android/settings/network/MobileNetworkSummaryController.java b/src/com/android/settings/network/MobileNetworkSummaryController.java index 405d365cadd..08da41abfa4 100644 --- a/src/com/android/settings/network/MobileNetworkSummaryController.java +++ b/src/com/android/settings/network/MobileNetworkSummaryController.java @@ -189,7 +189,8 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController final int subId = info.getSubscriptionId(); if (!info.isEmbedded() && !mSubscriptionManager.isActiveSubscriptionId(subId) && !SubscriptionUtil.showToggleForPhysicalSim(mSubscriptionManager)) { - mSubscriptionManager.setSubscriptionEnabled(subId, true); + SubscriptionUtil.startToggleSubscriptionDialogActivity( + mContext, subId, true); } else { final Intent intent = new Intent(mContext, MobileNetworkActivity.class); intent.putExtra(Settings.EXTRA_SUB_ID, subs.get(0).getSubscriptionId()); diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java index e2c899789a2..cff8f554a32 100644 --- a/src/com/android/settings/network/SubscriptionUtil.java +++ b/src/com/android/settings/network/SubscriptionUtil.java @@ -28,6 +28,7 @@ import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.UiccSlotInfo; +import android.util.Log; import androidx.annotation.VisibleForTesting; @@ -284,14 +285,31 @@ public class SubscriptionUtil { } } - /** Starts a dialog activity to handle SIM enabling/disabling. */ + /** + * Starts a dialog activity to handle SIM enabling/disabling. + * @param context {@code Context} + * @param subId The id of subscription need to be enabled or disabled. + * @param enable Whether the subscription with {@code subId} should be enabled or disabled. + */ public static void startToggleSubscriptionDialogActivity( Context context, int subId, boolean enable) { + if (!SubscriptionManager.isUsableSubscriptionId(subId)) { + Log.i(TAG, "Unable to toggle subscription due to invalid subscription ID."); + return; + } context.startActivity(ToggleSubscriptionDialogActivity.getIntent(context, subId, enable)); } - /** Starts a dialog activity to handle eSIM deletion. */ + /** + * Starts a dialog activity to handle eSIM deletion. + * @param context {@code Context} + * @param subId The id of subscription need to be deleted. + */ public static void startDeleteEuiccSubscriptionDialogActivity(Context context, int subId) { + if (!SubscriptionManager.isUsableSubscriptionId(subId)) { + Log.i(TAG, "Unable to delete subscription due to invalid subscription ID."); + return; + } context.startActivity(DeleteEuiccSubscriptionDialogActivity.getIntent(context, subId)); } diff --git a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java index 46c5234e4a5..1fdc19109a3 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java +++ b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java @@ -78,8 +78,8 @@ public class MobileNetworkSwitchController extends BasePreferenceController impl mSwitchBar.getSwitch().setOnBeforeCheckedChangeListener((toggleSwitch, isChecked) -> { // TODO b/135222940: re-evaluate whether to use // mSubscriptionManager#isSubscriptionEnabled - if (mSubscriptionManager.isActiveSubscriptionId(mSubId) != isChecked - && (!mSubscriptionManager.setSubscriptionEnabled(mSubId, isChecked))) { + if (mSubscriptionManager.isActiveSubscriptionId(mSubId) != isChecked) { + SubscriptionUtil.startToggleSubscriptionDialogActivity(mContext, mSubId, isChecked); return true; } return false; diff --git a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java index 919415b53e0..fc443b294a4 100644 --- a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java +++ b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java @@ -27,6 +27,7 @@ import android.telephony.UiccSlotInfo; import android.text.TextUtils; import android.util.Log; +import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; import com.android.settings.SidecarFragment; import com.android.settings.network.EnableMultiSimSidecar; @@ -45,7 +46,8 @@ public class ToggleSubscriptionDialogActivity extends SubscriptionActionDialogAc private static final String TAG = "ToggleSubscriptionDialogActivity"; // Arguments - private static final String ARG_enable = "enable"; + @VisibleForTesting + public static final String ARG_enable = "enable"; // Dialog tags private static final int DIALOG_TAG_DISABLE_SIM_CONFIRMATION = 1; private static final int DIALOG_TAG_ENABLE_SIM_CONFIRMATION = 2; diff --git a/tests/unit/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java index 39c7bbd637a..0559cc4db73 100644 --- a/tests/unit/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java +++ b/tests/unit/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java @@ -18,15 +18,20 @@ package com.android.settings.network.telephony; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; +import android.content.Intent; +import android.os.Bundle; import android.os.Looper; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; @@ -47,6 +52,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -168,9 +174,15 @@ public class MobileNetworkSwitchControllerTest { assertThat(mSwitchBar.isShowing()).isTrue(); assertThat(mSwitchBar.isChecked()).isTrue(); + final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); + doNothing().when(mContext).startActivity(intentCaptor.capture()); mSwitchBar.setChecked(false); + Bundle extra = intentCaptor.getValue().getExtras(); - verify(mSubscriptionManager).setSubscriptionEnabled(eq(mSubId), eq(false)); + verify(mContext, times(1)).startActivity(any()); + assertThat(extra.getInt(ToggleSubscriptionDialogActivity.ARG_SUB_ID)).isEqualTo(mSubId); + assertThat(extra.getBoolean(ToggleSubscriptionDialogActivity.ARG_enable)) + .isEqualTo(false); } @Test @@ -183,9 +195,15 @@ public class MobileNetworkSwitchControllerTest { assertThat(mSwitchBar.isShowing()).isTrue(); assertThat(mSwitchBar.isChecked()).isTrue(); + final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); + doNothing().when(mContext).startActivity(intentCaptor.capture()); mSwitchBar.setChecked(false); + Bundle extra = intentCaptor.getValue().getExtras(); - verify(mSubscriptionManager).setSubscriptionEnabled(eq(mSubId), eq(false)); + verify(mContext, times(1)).startActivity(any()); + assertThat(extra.getInt(ToggleSubscriptionDialogActivity.ARG_SUB_ID)).isEqualTo(mSubId); + assertThat(extra.getBoolean(ToggleSubscriptionDialogActivity.ARG_enable)) + .isEqualTo(false); assertThat(mSwitchBar.isChecked()).isTrue(); } @@ -197,8 +215,13 @@ public class MobileNetworkSwitchControllerTest { assertThat(mSwitchBar.isShowing()).isTrue(); assertThat(mSwitchBar.isChecked()).isFalse(); + final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); + doNothing().when(mContext).startActivity(intentCaptor.capture()); mSwitchBar.setChecked(true); + Bundle extra = intentCaptor.getValue().getExtras(); - verify(mSubscriptionManager).setSubscriptionEnabled(eq(mSubId), eq(true)); + verify(mContext, times(1)).startActivity(any()); + assertThat(extra.getInt(ToggleSubscriptionDialogActivity.ARG_SUB_ID)).isEqualTo(mSubId); + assertThat(extra.getBoolean(ToggleSubscriptionDialogActivity.ARG_enable)).isEqualTo(true); } }