[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
This commit is contained in:
Bonian Chen
2022-12-07 12:32:57 +00:00
parent f17d3c4697
commit 7b06d5f0e1
2 changed files with 81 additions and 11 deletions

View File

@@ -125,7 +125,7 @@ public class BluetoothWiFiResetPreferenceController extends BasePreferenceContro
final AtomicReference<Exception> exceptionDuringReset =
new AtomicReference<Exception>();
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

View File

@@ -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 <T> void mockService(String serviceName, Class<T> serviceClass, T service) {
when(mContext.getSystemServiceName(serviceClass)).thenReturn(serviceName);
when(mContext.getSystemService(serviceName)).thenReturn(service);
}
}