[Settings] BT and WiFi reset menu might covers VPN
VPN would be reset by BT and WiFi reset menu under device without a SIM
available.
Bug: 260034791
Test: local and auto
Change-Id: I3c66cd629977cc11172758ebbe314167b5220419
diff --git a/src/com/android/settings/network/BluetoothWiFiResetPreferenceController.java b/src/com/android/settings/network/BluetoothWiFiResetPreferenceController.java
index c469304..6eb470b 100644
--- a/src/com/android/settings/network/BluetoothWiFiResetPreferenceController.java
+++ b/src/com/android/settings/network/BluetoothWiFiResetPreferenceController.java
@@ -125,7 +125,7 @@
final AtomicReference<Exception> exceptionDuringReset =
new AtomicReference<Exception>();
try {
- resetOperation();
+ resetOperation().run();
} catch (Exception exception) {
exceptionDuringReset.set(exception);
}
@@ -144,13 +144,28 @@
}
@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 4714afe..3aea4a8 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 @@
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 <T> void mockService(String serviceName, Class<T> serviceClass, T service) {
+ when(mContext.getSystemServiceName(serviceClass)).thenReturn(serviceName);
+ when(mContext.getSystemService(serviceName)).thenReturn(service);
+ }
}