diff --git a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java index 60170d38ee2..fd296ecc86e 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java +++ b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java @@ -22,6 +22,7 @@ import static androidx.lifecycle.Lifecycle.Event.ON_RESUME; import android.content.Context; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; +import android.util.Log; import com.android.settings.R; import com.android.settings.core.BasePreferenceController; @@ -80,8 +81,9 @@ public class MobileNetworkSwitchController extends BasePreferenceController impl R.string.mobile_network_use_sim_off); mSwitchBar.addOnSwitchChangeListener((switchView, isChecked) -> { - if (mSubscriptionManager.isSubscriptionEnabled(mSubId) != isChecked) { - mSubscriptionManager.setSubscriptionEnabled(mSubId, isChecked); + if (mSubscriptionManager.isSubscriptionEnabled(mSubId) != isChecked + && (!mSubscriptionManager.setSubscriptionEnabled(mSubId, isChecked))) { + mSwitchBar.setChecked(!isChecked); } }); update(); diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java index 2a596d971a6..6d85826ade4 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java @@ -18,6 +18,7 @@ package com.android.settings.network.telephony; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; @@ -71,6 +72,8 @@ public class MobileNetworkSwitchControllerTest { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager); + when(mSubscriptionManager.setSubscriptionEnabled(eq(mSubId), anyBoolean())) + .thenReturn(true); mLifecycleOwner = () -> mLifecycle; mLifecycle = new Lifecycle(mLifecycleOwner); @@ -128,6 +131,19 @@ public class MobileNetworkSwitchControllerTest { verify(mSubscriptionManager).setSubscriptionEnabled(eq(mSubId), eq(false)); } + @Test + public void switchChangeListener_fromEnabledToDisabled_setSubscriptionEnabledFailed() { + when(mSubscriptionManager.setSubscriptionEnabled(eq(mSubId), anyBoolean())) + .thenReturn(false); + when(mSubscriptionManager.isSubscriptionEnabled(mSubId)).thenReturn(true); + mController.displayPreference(mScreen); + assertThat(mSwitchBar.isShowing()).isTrue(); + assertThat(mSwitchBar.isChecked()).isTrue(); + mSwitchBar.setChecked(false); + verify(mSubscriptionManager).setSubscriptionEnabled(eq(mSubId), eq(false)); + assertThat(mSwitchBar.isChecked()).isTrue(); + } + @Test public void switchChangeListener_fromDisabledToEnabled_setSubscriptionEnabledCalledCorrectly() { when(mSubscriptionManager.isSubscriptionEnabled(mSubId)).thenReturn(false);