Merge changes I62c58967,I1dd57fa2

* changes:
  Remove ConnectivityManager from EnterprisePrivacyFeatureProvider.
  Stop using ConnectivityManager for VPNs.
This commit is contained in:
Treehugger Robot
2021-02-18 15:47:13 +00:00
committed by Gerrit Code Review
12 changed files with 48 additions and 80 deletions

View File

@@ -84,11 +84,6 @@ public interface EnterprisePrivacyFeatureProvider {
*/ */
boolean isAlwaysOnVpnSetInManagedProfile(); boolean isAlwaysOnVpnSetInManagedProfile();
/**
* Returns whether the Device Owner set a recommended global HTTP proxy.
*/
boolean isGlobalHttpProxySet();
/** /**
* Returns the number of failed login attempts that the Device Owner or Profile Owner allows * Returns the number of failed login attempts that the Device Owner or Profile Owner allows
* before the current user is wiped, or zero if no such limit is set. * before the current user is wiped, or zero if no such limit is set.

View File

@@ -25,6 +25,7 @@ import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo; import android.content.pm.UserInfo;
import android.content.res.Resources; import android.content.res.Resources;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.VpnManager;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.provider.Settings; import android.provider.Settings;
@@ -45,18 +46,20 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe
private final PackageManager mPm; private final PackageManager mPm;
private final UserManager mUm; private final UserManager mUm;
private final ConnectivityManager mCm; private final ConnectivityManager mCm;
private final VpnManager mVm;
private final Resources mResources; private final Resources mResources;
private static final int MY_USER_ID = UserHandle.myUserId(); private static final int MY_USER_ID = UserHandle.myUserId();
public EnterprisePrivacyFeatureProviderImpl(Context context, DevicePolicyManager dpm, public EnterprisePrivacyFeatureProviderImpl(Context context, DevicePolicyManager dpm,
PackageManager pm, UserManager um, ConnectivityManager cm, PackageManager pm, UserManager um, ConnectivityManager cm, VpnManager vm,
Resources resources) { Resources resources) {
mContext = context.getApplicationContext(); mContext = context.getApplicationContext();
mDpm = dpm; mDpm = dpm;
mPm = pm; mPm = pm;
mUm = um; mUm = um;
mCm = cm; mCm = cm;
mVm = vm;
mResources = resources; mResources = resources;
} }
@@ -130,19 +133,14 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe
@Override @Override
public boolean isAlwaysOnVpnSetInCurrentUser() { public boolean isAlwaysOnVpnSetInCurrentUser() {
return VpnUtils.isAlwaysOnVpnSet(mCm, MY_USER_ID); return VpnUtils.isAlwaysOnVpnSet(mVm, MY_USER_ID);
} }
@Override @Override
public boolean isAlwaysOnVpnSetInManagedProfile() { public boolean isAlwaysOnVpnSetInManagedProfile() {
final int managedProfileUserId = getManagedProfileUserId(); final int managedProfileUserId = getManagedProfileUserId();
return managedProfileUserId != UserHandle.USER_NULL && return managedProfileUserId != UserHandle.USER_NULL &&
VpnUtils.isAlwaysOnVpnSet(mCm, managedProfileUserId); VpnUtils.isAlwaysOnVpnSet(mVm, managedProfileUserId);
}
@Override
public boolean isGlobalHttpProxySet() {
return mCm.getGlobalProxy() != null;
} }
@Override @Override

View File

@@ -14,26 +14,25 @@
package com.android.settings.enterprise; package com.android.settings.enterprise;
import android.content.Context; import android.content.Context;
import android.net.ConnectivityManager;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
public class GlobalHttpProxyPreferenceController extends AbstractPreferenceController implements public class GlobalHttpProxyPreferenceController extends AbstractPreferenceController implements
PreferenceControllerMixin { PreferenceControllerMixin {
private static final String KEY_GLOBAL_HTTP_PROXY = "global_http_proxy"; private static final String KEY_GLOBAL_HTTP_PROXY = "global_http_proxy";
private final EnterprisePrivacyFeatureProvider mFeatureProvider; private final ConnectivityManager mCm;
public GlobalHttpProxyPreferenceController(Context context) { public GlobalHttpProxyPreferenceController(Context context) {
super(context); super(context);
mFeatureProvider = FeatureFactory.getFactory(context) mCm = context.getSystemService(ConnectivityManager.class);
.getEnterprisePrivacyFeatureProvider(context);
} }
@Override @Override
public boolean isAvailable() { public boolean isAvailable() {
return mFeatureProvider.isGlobalHttpProxySet(); return mCm.getGlobalProxy() != null;
} }
@Override @Override

View File

@@ -20,6 +20,7 @@ import android.app.AppGlobals;
import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyManager;
import android.content.Context; import android.content.Context;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.VpnManager;
import android.os.UserManager; import android.os.UserManager;
import androidx.annotation.Keep; import androidx.annotation.Keep;
@@ -169,7 +170,8 @@ public class FeatureFactoryImpl extends FeatureFactory {
Context.DEVICE_POLICY_SERVICE), Context.DEVICE_POLICY_SERVICE),
appContext.getPackageManager(), appContext.getPackageManager(),
UserManager.get(appContext), UserManager.get(appContext),
(ConnectivityManager) appContext.getSystemService(Context.CONNECTIVITY_SERVICE), appContext.getSystemService(ConnectivityManager.class),
appContext.getSystemService(VpnManager.class),
appContext.getResources()); appContext.getResources());
} }
return mEnterprisePrivacyFeatureProvider; return mEnterprisePrivacyFeatureProvider;

View File

@@ -20,7 +20,6 @@ import android.app.Dialog;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.net.ConnectivityManager;
import android.net.VpnManager; import android.net.VpnManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserHandle; import android.os.UserHandle;
@@ -48,7 +47,6 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App
private PackageInfo mPackageInfo; private PackageInfo mPackageInfo;
private Listener mListener; private Listener mListener;
private ConnectivityManager mConnectivityManager;
private UserManager mUserManager; private UserManager mUserManager;
private VpnManager mVpnManager; private VpnManager mVpnManager;
@@ -93,7 +91,6 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
mConnectivityManager = getContext().getSystemService(ConnectivityManager.class);
mUserManager = UserManager.get(getContext()); mUserManager = UserManager.get(getContext());
mVpnManager = getContext().getSystemService(VpnManager.class); mVpnManager = getContext().getSystemService(VpnManager.class);
} }
@@ -158,8 +155,8 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App
} }
final int userId = getUserId(); final int userId = getUserId();
if (mPackageInfo.packageName.equals(VpnUtils.getConnectedPackage(mVpnManager, userId))) { if (mPackageInfo.packageName.equals(VpnUtils.getConnectedPackage(mVpnManager, userId))) {
mConnectivityManager.setAlwaysOnVpnPackageForUser(userId, null, mVpnManager.setAlwaysOnVpnPackageForUser(userId, null, /* lockdownEnabled */ false,
/* lockdownEnabled */ false, /* lockdownAllowlist */ null); /* lockdownAllowlist */ null);
mVpnManager.prepareVpn(mPackageInfo.packageName, VpnConfig.LEGACY_VPN, userId); mVpnManager.prepareVpn(mPackageInfo.packageName, VpnConfig.LEGACY_VPN, userId);
} }
} }

View File

@@ -28,7 +28,6 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
import android.net.VpnManager; import android.net.VpnManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserHandle; import android.os.UserHandle;
@@ -69,7 +68,6 @@ public class AppManagementFragment extends SettingsPreferenceFragment
private PackageManager mPackageManager; private PackageManager mPackageManager;
private DevicePolicyManager mDevicePolicyManager; private DevicePolicyManager mDevicePolicyManager;
private ConnectivityManager mConnectivityManager;
private VpnManager mVpnManager; private VpnManager mVpnManager;
// VPN app info // VPN app info
@@ -122,7 +120,6 @@ public class AppManagementFragment extends SettingsPreferenceFragment
mPackageManager = getContext().getPackageManager(); mPackageManager = getContext().getPackageManager();
mDevicePolicyManager = getContext().getSystemService(DevicePolicyManager.class); mDevicePolicyManager = getContext().getSystemService(DevicePolicyManager.class);
mConnectivityManager = getContext().getSystemService(ConnectivityManager.class);
mVpnManager = getContext().getSystemService(VpnManager.class); mVpnManager = getContext().getSystemService(VpnManager.class);
mPreferenceVersion = findPreference(KEY_VERSION); mPreferenceVersion = findPreference(KEY_VERSION);
@@ -227,8 +224,8 @@ public class AppManagementFragment extends SettingsPreferenceFragment
} }
private boolean setAlwaysOnVpn(boolean isEnabled, boolean isLockdown) { private boolean setAlwaysOnVpn(boolean isEnabled, boolean isLockdown) {
return mConnectivityManager.setAlwaysOnVpnPackageForUser(mUserId, return mVpnManager.setAlwaysOnVpnPackageForUser(mUserId,
isEnabled ? mPackageName : null, isLockdown, /* lockdownWhitelist */ null); isEnabled ? mPackageName : null, isLockdown, /* lockdownAllowlist */ null);
} }
private void updateUI() { private void updateUI() {
@@ -261,7 +258,7 @@ public class AppManagementFragment extends SettingsPreferenceFragment
mPreferenceLockdown.setDisabledByAdmin(admin); mPreferenceLockdown.setDisabledByAdmin(admin);
} }
} }
if (mConnectivityManager.isAlwaysOnVpnPackageSupportedForUser(mUserId, mPackageName)) { if (mVpnManager.isAlwaysOnVpnPackageSupportedForUser(mUserId, mPackageName)) {
// setSummary doesn't override the admin message when user restriction is applied // setSummary doesn't override the admin message when user restriction is applied
mPreferenceAlwaysOn.setSummary(R.string.vpn_always_on_summary); mPreferenceAlwaysOn.setSummary(R.string.vpn_always_on_summary);
// setEnabled is not required here, as checkRestrictionAndSetDisabled // setEnabled is not required here, as checkRestrictionAndSetDisabled
@@ -275,7 +272,7 @@ public class AppManagementFragment extends SettingsPreferenceFragment
} }
private String getAlwaysOnVpnPackage() { private String getAlwaysOnVpnPackage() {
return mConnectivityManager.getAlwaysOnVpnPackageForUser(mUserId); return mVpnManager.getAlwaysOnVpnPackageForUser(mUserId);
} }
private boolean isVpnAlwaysOn() { private boolean isVpnAlwaysOn() {

View File

@@ -20,7 +20,6 @@ import android.app.Dialog;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.net.ConnectivityManager;
import android.net.VpnManager; import android.net.VpnManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.RemoteException; import android.os.RemoteException;
@@ -177,9 +176,8 @@ public class ConfigDialogFragment extends InstrumentedDialogFragment implements
return; return;
} }
final ConnectivityManager conn = ConnectivityManager.from(mContext); mService.setAlwaysOnVpnPackageForUser(UserHandle.myUserId(), null,
conn.setAlwaysOnVpnPackageForUser(UserHandle.myUserId(), null, /* lockdownEnabled */ false, /* lockdownAllowlist */ null);
/* lockdownEnabled */ false, /* lockdownWhitelist */ null);
VpnUtils.setLockdownVpn(mContext, profile.key); VpnUtils.setLockdownVpn(mContext, profile.key);
} else { } else {
// update only if lockdown vpn has been changed // update only if lockdown vpn has been changed

View File

@@ -490,7 +490,7 @@ public class VpnSettings extends RestrictedSettingsFragment implements
Set<AppVpnInfo> result = new ArraySet<>(); Set<AppVpnInfo> result = new ArraySet<>();
for (UserHandle profile : mUserManager.getUserProfiles()) { for (UserHandle profile : mUserManager.getUserProfiles()) {
final int profileId = profile.getIdentifier(); final int profileId = profile.getIdentifier();
final String packageName = mConnectivityManager.getAlwaysOnVpnPackageForUser(profileId); final String packageName = mVpnManager.getAlwaysOnVpnPackageForUser(profileId);
if (packageName != null) { if (packageName != null) {
result.add(new AppVpnInfo(profileId, packageName)); result.add(new AppVpnInfo(profileId, packageName));
} }

View File

@@ -16,7 +16,6 @@
package com.android.settings.vpn2; package com.android.settings.vpn2;
import android.content.Context; import android.content.Context;
import android.net.ConnectivityManager;
import android.net.VpnManager; import android.net.VpnManager;
import android.os.RemoteException; import android.os.RemoteException;
import android.provider.Settings; import android.provider.Settings;
@@ -43,15 +42,15 @@ public class VpnUtils {
public static void clearLockdownVpn(Context context) { public static void clearLockdownVpn(Context context) {
KeyStore.getInstance().delete(Credentials.LOCKDOWN_VPN); KeyStore.getInstance().delete(Credentials.LOCKDOWN_VPN);
// Always notify ConnectivityManager after keystore update // Always notify VpnManager after keystore update
getConnectivityManager(context).updateLockdownVpn(); getVpnManager(context).updateLockdownVpn();
} }
public static void setLockdownVpn(Context context, String lockdownKey) { public static void setLockdownVpn(Context context, String lockdownKey) {
KeyStore.getInstance().put(Credentials.LOCKDOWN_VPN, lockdownKey.getBytes(), KeyStore.getInstance().put(Credentials.LOCKDOWN_VPN, lockdownKey.getBytes(),
KeyStore.UID_SELF, /* flags */ 0); KeyStore.UID_SELF, /* flags */ 0);
// Always notify ConnectivityManager after keystore update // Always notify VpnManager after keystore update
getConnectivityManager(context).updateLockdownVpn(); getVpnManager(context).updateLockdownVpn();
} }
public static boolean isVpnLockdown(String key) { public static boolean isVpnLockdown(String key) {
@@ -63,7 +62,7 @@ public class VpnUtils {
if (getLockdownVpn() != null) { if (getLockdownVpn() != null) {
return true; return true;
} }
return getConnectivityManager(context).getAlwaysOnVpnPackageForUser(userId) != null return getVpnManager(context).getAlwaysOnVpnPackageForUser(userId) != null
&& Settings.Secure.getIntForUser(context.getContentResolver(), && Settings.Secure.getIntForUser(context.getContentResolver(),
Settings.Secure.ALWAYS_ON_VPN_LOCKDOWN, /* default */ 0, userId) != 0; Settings.Secure.ALWAYS_ON_VPN_LOCKDOWN, /* default */ 0, userId) != 0;
} }
@@ -77,16 +76,12 @@ public class VpnUtils {
return config != null ? config.user : null; return config != null ? config.user : null;
} }
private static ConnectivityManager getConnectivityManager(Context context) {
return context.getSystemService(ConnectivityManager.class);
}
private static VpnManager getVpnManager(Context context) { private static VpnManager getVpnManager(Context context) {
return context.getSystemService(VpnManager.class); return context.getSystemService(VpnManager.class);
} }
public static boolean isAlwaysOnVpnSet(ConnectivityManager cm, final int userId) { public static boolean isAlwaysOnVpnSet(VpnManager vm, final int userId) {
return cm.getAlwaysOnVpnPackageForUser(userId) != null; return vm.getAlwaysOnVpnPackageForUser(userId) != null;
} }
public static boolean disconnectLegacyVpn(Context context) { public static boolean disconnectLegacyVpn(Context context) {

View File

@@ -39,7 +39,7 @@ import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo; import android.content.pm.UserInfo;
import android.content.res.Resources; import android.content.res.Resources;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.ProxyInfo; import android.net.VpnManager;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.provider.Settings; import android.provider.Settings;
@@ -84,6 +84,7 @@ public class EnterprisePrivacyFeatureProviderImplTest {
private @Mock PackageManager mPackageManager; private @Mock PackageManager mPackageManager;
private @Mock UserManager mUserManager; private @Mock UserManager mUserManager;
private @Mock ConnectivityManager mConnectivityManger; private @Mock ConnectivityManager mConnectivityManger;
private @Mock VpnManager mVpnManager;
private Resources mResources; private Resources mResources;
private EnterprisePrivacyFeatureProvider mProvider; private EnterprisePrivacyFeatureProvider mProvider;
@@ -99,7 +100,7 @@ public class EnterprisePrivacyFeatureProviderImplTest {
mResources = RuntimeEnvironment.application.getResources(); mResources = RuntimeEnvironment.application.getResources();
mProvider = new EnterprisePrivacyFeatureProviderImpl(mContext, mDevicePolicyManager, mProvider = new EnterprisePrivacyFeatureProviderImpl(mContext, mDevicePolicyManager,
mPackageManager, mUserManager, mConnectivityManger, mResources); mPackageManager, mUserManager, mConnectivityManger, mVpnManager, mResources);
} }
@Test @Test
@@ -201,11 +202,10 @@ public class EnterprisePrivacyFeatureProviderImplTest {
@Test @Test
public void testIsAlwaysOnVpnSetInCurrentUser() { public void testIsAlwaysOnVpnSetInCurrentUser() {
when(mConnectivityManger.getAlwaysOnVpnPackageForUser(MY_USER_ID)).thenReturn(null); when(mVpnManager.getAlwaysOnVpnPackageForUser(MY_USER_ID)).thenReturn(null);
assertThat(mProvider.isAlwaysOnVpnSetInCurrentUser()).isFalse(); assertThat(mProvider.isAlwaysOnVpnSetInCurrentUser()).isFalse();
when(mConnectivityManger.getAlwaysOnVpnPackageForUser(MY_USER_ID)) when(mVpnManager.getAlwaysOnVpnPackageForUser(MY_USER_ID)).thenReturn(VPN_PACKAGE_ID);
.thenReturn(VPN_PACKAGE_ID);
assertThat(mProvider.isAlwaysOnVpnSetInCurrentUser()).isTrue(); assertThat(mProvider.isAlwaysOnVpnSetInCurrentUser()).isTrue();
} }
@@ -215,25 +215,14 @@ public class EnterprisePrivacyFeatureProviderImplTest {
mProfiles.add(new UserInfo(MANAGED_PROFILE_USER_ID, "", "", UserInfo.FLAG_MANAGED_PROFILE)); mProfiles.add(new UserInfo(MANAGED_PROFILE_USER_ID, "", "", UserInfo.FLAG_MANAGED_PROFILE));
when(mConnectivityManger.getAlwaysOnVpnPackageForUser(MANAGED_PROFILE_USER_ID)) when(mVpnManager.getAlwaysOnVpnPackageForUser(MANAGED_PROFILE_USER_ID)).thenReturn(null);
.thenReturn(null);
assertThat(mProvider.isAlwaysOnVpnSetInManagedProfile()).isFalse(); assertThat(mProvider.isAlwaysOnVpnSetInManagedProfile()).isFalse();
when(mConnectivityManger.getAlwaysOnVpnPackageForUser(MANAGED_PROFILE_USER_ID)) when(mVpnManager.getAlwaysOnVpnPackageForUser(MANAGED_PROFILE_USER_ID))
.thenReturn(VPN_PACKAGE_ID); .thenReturn(VPN_PACKAGE_ID);
assertThat(mProvider.isAlwaysOnVpnSetInManagedProfile()).isTrue(); assertThat(mProvider.isAlwaysOnVpnSetInManagedProfile()).isTrue();
} }
@Test
public void testIsGlobalHttpProxySet() {
when(mConnectivityManger.getGlobalProxy()).thenReturn(null);
assertThat(mProvider.isGlobalHttpProxySet()).isFalse();
when(mConnectivityManger.getGlobalProxy())
.thenReturn(ProxyInfo.buildDirectProxy("localhost", 123));
assertThat(mProvider.isGlobalHttpProxySet()).isTrue();
}
@Test @Test
public void testGetMaximumFailedPasswordsForWipeInCurrentUser() { public void testGetMaximumFailedPasswordsForWipeInCurrentUser() {
when(mDevicePolicyManager.getDeviceOwnerComponentOnCallingUser()).thenReturn(null); when(mDevicePolicyManager.getDeviceOwnerComponentOnCallingUser()).thenReturn(null);

View File

@@ -21,11 +21,11 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.net.ConnectivityManager;
import android.net.ProxyInfo;
import androidx.preference.Preference; import androidx.preference.Preference;
import com.android.settings.testutils.FakeFeatureFactory;
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;
@@ -41,25 +41,23 @@ public class GlobalHttpProxyPreferenceControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Context mContext; private Context mContext;
private FakeFeatureFactory mFeatureFactory; @Mock
private ConnectivityManager mCm;
private GlobalHttpProxyPreferenceController mController; private GlobalHttpProxyPreferenceController mController;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mFeatureFactory = FakeFeatureFactory.setupForTest();
mController = new GlobalHttpProxyPreferenceController(mContext); mController = new GlobalHttpProxyPreferenceController(mContext);
} }
@Test @Test
public void testIsAvailable() { public void testIsAvailable() {
when(mFeatureFactory.enterprisePrivacyFeatureProvider.isGlobalHttpProxySet()) when(mCm.getGlobalProxy()).thenReturn(null);
.thenReturn(false);
assertThat(mController.isAvailable()).isFalse(); assertThat(mController.isAvailable()).isFalse();
when(mFeatureFactory.enterprisePrivacyFeatureProvider.isGlobalHttpProxySet()) when(mCm.getGlobalProxy()).thenReturn(ProxyInfo.buildDirectProxy("localhost", 123));
.thenReturn(true);
assertThat(mController.isAvailable()).isTrue(); assertThat(mController.isAvailable()).isTrue();
} }

View File

@@ -21,7 +21,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.net.ConnectivityManager; import android.net.VpnManager;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -31,11 +31,11 @@ import org.robolectric.RobolectricTestRunner;
public final class VpnUtilsTest { public final class VpnUtilsTest {
@Test @Test
public void testIsAlwaysOnVpnSet() { public void testIsAlwaysOnVpnSet() {
final ConnectivityManager cm = mock(ConnectivityManager.class); final VpnManager vm = mock(VpnManager.class);
when(cm.getAlwaysOnVpnPackageForUser(0)).thenReturn("com.example.vpn"); when(vm.getAlwaysOnVpnPackageForUser(0)).thenReturn("com.example.vpn");
assertThat(VpnUtils.isAlwaysOnVpnSet(cm, 0)).isTrue(); assertThat(VpnUtils.isAlwaysOnVpnSet(vm, 0)).isTrue();
when(cm.getAlwaysOnVpnPackageForUser(0)).thenReturn(null); when(vm.getAlwaysOnVpnPackageForUser(0)).thenReturn(null);
assertThat(VpnUtils.isAlwaysOnVpnSet(cm, 0)).isFalse(); assertThat(VpnUtils.isAlwaysOnVpnSet(vm, 0)).isFalse();
} }
} }