Merge "[Settings] BT and WiFi reset menu might covers VPN"

This commit is contained in:
Bonian Chen
2022-12-08 00:50:08 +00:00
committed by Android (Google) Code Review
2 changed files with 81 additions and 11 deletions

View File

@@ -125,7 +125,7 @@ public class BluetoothWiFiResetPreferenceController extends BasePreferenceContro
final AtomicReference<Exception> exceptionDuringReset = final AtomicReference<Exception> exceptionDuringReset =
new AtomicReference<Exception>(); new AtomicReference<Exception>();
try { try {
resetOperation(); resetOperation().run();
} catch (Exception exception) { } catch (Exception exception) {
exceptionDuringReset.set(exception); exceptionDuringReset.set(exception);
} }
@@ -144,13 +144,28 @@ public class BluetoothWiFiResetPreferenceController extends BasePreferenceContro
} }
@VisibleForTesting @VisibleForTesting
protected void resetOperation() throws Exception { protected Runnable resetOperation() throws Exception {
new ResetNetworkRequest( 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_MANAGER |
ResetNetworkRequest.RESET_WIFI_P2P_MANAGER | ResetNetworkRequest.RESET_WIFI_P2P_MANAGER |
ResetNetworkRequest.RESET_BLUETOOTH_MANAGER ResetNetworkRequest.RESET_BLUETOOTH_MANAGER)
).toResetNetworkOperationBuilder(mContext, Looper.getMainLooper()) .toResetNetworkOperationBuilder(mContext, Looper.getMainLooper())
.build().run(); .resetTelephonyAndNetworkPolicyManager(ResetNetworkRequest.ALL_SUBSCRIPTION_ID)
.build();
} }
@VisibleForTesting @VisibleForTesting

View File

@@ -17,15 +17,24 @@
package com.android.settings.network; package com.android.settings.network;
import static com.google.common.truth.Truth.assertThat; 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.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context; 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 com.android.settings.R;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
@@ -36,23 +45,69 @@ public class BluetoothWiFiResetPreferenceControllerTest {
private static final String PREFERENCE_KEY = "network_reset_bluetooth_wifi_pref"; 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 Context mContext;
private BluetoothWiFiResetPreferenceController mTarget;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); 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 @Test
public void endOfReset_toastMessage_whenSuccess() { 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( target.endOfReset(null);
mContext.getString(R.string.reset_bluetooth_wifi_complete_toast));
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);
}
} }