diff --git a/src/com/android/settings/network/BluetoothWiFiResetPreferenceController.java b/src/com/android/settings/network/BluetoothWiFiResetPreferenceController.java index c469304480c..6eb470b014d 100644 --- a/src/com/android/settings/network/BluetoothWiFiResetPreferenceController.java +++ b/src/com/android/settings/network/BluetoothWiFiResetPreferenceController.java @@ -125,7 +125,7 @@ public class BluetoothWiFiResetPreferenceController extends BasePreferenceContro final AtomicReference exceptionDuringReset = new AtomicReference(); try { - resetOperation(); + resetOperation().run(); } catch (Exception exception) { exceptionDuringReset.set(exception); } @@ -144,13 +144,28 @@ public class BluetoothWiFiResetPreferenceController extends BasePreferenceContro } @VisibleForTesting - protected void resetOperation() throws Exception { - new ResetNetworkRequest( + protected Runnable resetOperation() throws Exception { + if (SubscriptionUtil.isSimHardwareVisible(mContext)) { + return new ResetNetworkRequest( + ResetNetworkRequest.RESET_WIFI_MANAGER | + ResetNetworkRequest.RESET_WIFI_P2P_MANAGER | + ResetNetworkRequest.RESET_BLUETOOTH_MANAGER) + .toResetNetworkOperationBuilder(mContext, Looper.getMainLooper()) + .build(); + } + + /** + * For device without SIMs visible to the user + */ + return new ResetNetworkRequest( + ResetNetworkRequest.RESET_CONNECTIVITY_MANAGER | + ResetNetworkRequest.RESET_VPN_MANAGER | ResetNetworkRequest.RESET_WIFI_MANAGER | ResetNetworkRequest.RESET_WIFI_P2P_MANAGER | - ResetNetworkRequest.RESET_BLUETOOTH_MANAGER - ).toResetNetworkOperationBuilder(mContext, Looper.getMainLooper()) - .build().run(); + ResetNetworkRequest.RESET_BLUETOOTH_MANAGER) + .toResetNetworkOperationBuilder(mContext, Looper.getMainLooper()) + .resetTelephonyAndNetworkPolicyManager(ResetNetworkRequest.ALL_SUBSCRIPTION_ID) + .build(); } @VisibleForTesting diff --git a/tests/robotests/src/com/android/settings/network/BluetoothWiFiResetPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/BluetoothWiFiResetPreferenceControllerTest.java index 4714afee82a..3aea4a87cb7 100644 --- a/tests/robotests/src/com/android/settings/network/BluetoothWiFiResetPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/BluetoothWiFiResetPreferenceControllerTest.java @@ -17,15 +17,24 @@ package com.android.settings.network; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import android.content.Context; +import android.content.res.Resources; +import android.net.ConnectivityManager; +import android.os.UserManager; +import android.telephony.TelephonyManager; import com.android.settings.R; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @@ -36,23 +45,69 @@ public class BluetoothWiFiResetPreferenceControllerTest { private static final String PREFERENCE_KEY = "network_reset_bluetooth_wifi_pref"; + @Mock + private UserManager mUserManager; + @Mock + private Resources mResources; + @Mock + private ConnectivityManager mConnectivityManager; + @Mock + private TelephonyManager mTelephonyManager; + private Context mContext; - private BluetoothWiFiResetPreferenceController mTarget; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); + when(mContext.getResources()).thenReturn(mResources); - mTarget = spy(new BluetoothWiFiResetPreferenceController(mContext, PREFERENCE_KEY)); + mockService(Context.CONNECTIVITY_SERVICE, ConnectivityManager.class, + mConnectivityManager); + mockService(Context.TELEPHONY_SERVICE, TelephonyManager.class, mTelephonyManager); + } + + @Test + public void getAvailabilityStatus_returnAvailable_asOwnerUser() { + mockService(Context.USER_SERVICE, UserManager.class, mUserManager); + doReturn(true).when(mUserManager).isAdminUser(); + + BluetoothWiFiResetPreferenceController target = + new BluetoothWiFiResetPreferenceController(mContext, PREFERENCE_KEY); + + assertThat(target.getAvailabilityStatus()).isEqualTo( + BluetoothWiFiResetPreferenceController.AVAILABLE); + } + + @Test + public void resetOperation_notResetConnectivity_onDeviceWithSimVisible() { + mockService(Context.CONNECTIVITY_SERVICE, ConnectivityManager.class, + mConnectivityManager); + when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true); + + BluetoothWiFiResetPreferenceController target = + new BluetoothWiFiResetPreferenceController(mContext, PREFERENCE_KEY); + + try { + target.resetOperation().run(); + } catch (Exception exception) {} + verify(mConnectivityManager, never()).factoryReset(); } @Test public void endOfReset_toastMessage_whenSuccess() { - mTarget.endOfReset(null); + String testText = "reset_bluetooth_wifi_complete_toast"; + when(mResources.getString(R.string.reset_bluetooth_wifi_complete_toast)).thenReturn(testText); + BluetoothWiFiResetPreferenceController target = + new BluetoothWiFiResetPreferenceController(mContext, PREFERENCE_KEY); - assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo( - mContext.getString(R.string.reset_bluetooth_wifi_complete_toast)); + target.endOfReset(null); + + assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(testText); } + private void mockService(String serviceName, Class serviceClass, T service) { + when(mContext.getSystemServiceName(serviceClass)).thenReturn(serviceName); + when(mContext.getSystemService(serviceName)).thenReturn(service); + } }