diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java index 429c537d985..59036a2c81d 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java @@ -25,6 +25,7 @@ import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; import android.content.res.Resources; import android.net.ConnectivityManager; +import android.net.VpnManager; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; @@ -45,18 +46,20 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe private final PackageManager mPm; private final UserManager mUm; private final ConnectivityManager mCm; + private final VpnManager mVm; private final Resources mResources; private static final int MY_USER_ID = UserHandle.myUserId(); public EnterprisePrivacyFeatureProviderImpl(Context context, DevicePolicyManager dpm, - PackageManager pm, UserManager um, ConnectivityManager cm, + PackageManager pm, UserManager um, ConnectivityManager cm, VpnManager vm, Resources resources) { mContext = context.getApplicationContext(); mDpm = dpm; mPm = pm; mUm = um; mCm = cm; + mVm = vm; mResources = resources; } @@ -130,14 +133,14 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe @Override public boolean isAlwaysOnVpnSetInCurrentUser() { - return VpnUtils.isAlwaysOnVpnSet(mCm, MY_USER_ID); + return VpnUtils.isAlwaysOnVpnSet(mVm, MY_USER_ID); } @Override public boolean isAlwaysOnVpnSetInManagedProfile() { final int managedProfileUserId = getManagedProfileUserId(); return managedProfileUserId != UserHandle.USER_NULL && - VpnUtils.isAlwaysOnVpnSet(mCm, managedProfileUserId); + VpnUtils.isAlwaysOnVpnSet(mVm, managedProfileUserId); } @Override diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java index d4d396f80b9..41bfb21d112 100644 --- a/src/com/android/settings/overlay/FeatureFactoryImpl.java +++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java @@ -20,6 +20,7 @@ import android.app.AppGlobals; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.net.ConnectivityManager; +import android.net.VpnManager; import android.os.UserManager; import androidx.annotation.Keep; @@ -169,7 +170,8 @@ public class FeatureFactoryImpl extends FeatureFactory { Context.DEVICE_POLICY_SERVICE), appContext.getPackageManager(), UserManager.get(appContext), - (ConnectivityManager) appContext.getSystemService(Context.CONNECTIVITY_SERVICE), + appContext.getSystemService(ConnectivityManager.class), + appContext.getSystemService(VpnManager.class), appContext.getResources()); } return mEnterprisePrivacyFeatureProvider; diff --git a/src/com/android/settings/vpn2/AppDialogFragment.java b/src/com/android/settings/vpn2/AppDialogFragment.java index 45fb9bdb820..626a271e7fc 100644 --- a/src/com/android/settings/vpn2/AppDialogFragment.java +++ b/src/com/android/settings/vpn2/AppDialogFragment.java @@ -20,7 +20,6 @@ import android.app.Dialog; import android.app.settings.SettingsEnums; import android.content.DialogInterface; import android.content.pm.PackageInfo; -import android.net.ConnectivityManager; import android.net.VpnManager; import android.os.Bundle; import android.os.UserHandle; @@ -48,7 +47,6 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App private PackageInfo mPackageInfo; private Listener mListener; - private ConnectivityManager mConnectivityManager; private UserManager mUserManager; private VpnManager mVpnManager; @@ -93,7 +91,6 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mConnectivityManager = getContext().getSystemService(ConnectivityManager.class); mUserManager = UserManager.get(getContext()); mVpnManager = getContext().getSystemService(VpnManager.class); } @@ -158,8 +155,8 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App } final int userId = getUserId(); if (mPackageInfo.packageName.equals(VpnUtils.getConnectedPackage(mVpnManager, userId))) { - mConnectivityManager.setAlwaysOnVpnPackageForUser(userId, null, - /* lockdownEnabled */ false, /* lockdownAllowlist */ null); + mVpnManager.setAlwaysOnVpnPackageForUser(userId, null, /* lockdownEnabled */ false, + /* lockdownAllowlist */ null); mVpnManager.prepareVpn(mPackageInfo.packageName, VpnConfig.LEGACY_VPN, userId); } } diff --git a/src/com/android/settings/vpn2/AppManagementFragment.java b/src/com/android/settings/vpn2/AppManagementFragment.java index 8ab6a4f2b4f..0543fee7dbe 100644 --- a/src/com/android/settings/vpn2/AppManagementFragment.java +++ b/src/com/android/settings/vpn2/AppManagementFragment.java @@ -28,7 +28,6 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; -import android.net.ConnectivityManager; import android.net.VpnManager; import android.os.Bundle; import android.os.UserHandle; @@ -69,7 +68,6 @@ public class AppManagementFragment extends SettingsPreferenceFragment private PackageManager mPackageManager; private DevicePolicyManager mDevicePolicyManager; - private ConnectivityManager mConnectivityManager; private VpnManager mVpnManager; // VPN app info @@ -122,7 +120,6 @@ public class AppManagementFragment extends SettingsPreferenceFragment mPackageManager = getContext().getPackageManager(); mDevicePolicyManager = getContext().getSystemService(DevicePolicyManager.class); - mConnectivityManager = getContext().getSystemService(ConnectivityManager.class); mVpnManager = getContext().getSystemService(VpnManager.class); mPreferenceVersion = findPreference(KEY_VERSION); @@ -227,8 +224,8 @@ public class AppManagementFragment extends SettingsPreferenceFragment } private boolean setAlwaysOnVpn(boolean isEnabled, boolean isLockdown) { - return mConnectivityManager.setAlwaysOnVpnPackageForUser(mUserId, - isEnabled ? mPackageName : null, isLockdown, /* lockdownWhitelist */ null); + return mVpnManager.setAlwaysOnVpnPackageForUser(mUserId, + isEnabled ? mPackageName : null, isLockdown, /* lockdownAllowlist */ null); } private void updateUI() { @@ -261,7 +258,7 @@ public class AppManagementFragment extends SettingsPreferenceFragment 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 mPreferenceAlwaysOn.setSummary(R.string.vpn_always_on_summary); // setEnabled is not required here, as checkRestrictionAndSetDisabled @@ -275,7 +272,7 @@ public class AppManagementFragment extends SettingsPreferenceFragment } private String getAlwaysOnVpnPackage() { - return mConnectivityManager.getAlwaysOnVpnPackageForUser(mUserId); + return mVpnManager.getAlwaysOnVpnPackageForUser(mUserId); } private boolean isVpnAlwaysOn() { diff --git a/src/com/android/settings/vpn2/ConfigDialogFragment.java b/src/com/android/settings/vpn2/ConfigDialogFragment.java index a478eb9deb5..f339a694c03 100644 --- a/src/com/android/settings/vpn2/ConfigDialogFragment.java +++ b/src/com/android/settings/vpn2/ConfigDialogFragment.java @@ -20,7 +20,6 @@ import android.app.Dialog; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.DialogInterface; -import android.net.ConnectivityManager; import android.net.VpnManager; import android.os.Bundle; import android.os.RemoteException; @@ -177,9 +176,8 @@ public class ConfigDialogFragment extends InstrumentedDialogFragment implements return; } - final ConnectivityManager conn = ConnectivityManager.from(mContext); - conn.setAlwaysOnVpnPackageForUser(UserHandle.myUserId(), null, - /* lockdownEnabled */ false, /* lockdownWhitelist */ null); + mService.setAlwaysOnVpnPackageForUser(UserHandle.myUserId(), null, + /* lockdownEnabled */ false, /* lockdownAllowlist */ null); VpnUtils.setLockdownVpn(mContext, profile.key); } else { // update only if lockdown vpn has been changed diff --git a/src/com/android/settings/vpn2/VpnSettings.java b/src/com/android/settings/vpn2/VpnSettings.java index 79f6be3c75b..0a3b2b01cd7 100644 --- a/src/com/android/settings/vpn2/VpnSettings.java +++ b/src/com/android/settings/vpn2/VpnSettings.java @@ -490,7 +490,7 @@ public class VpnSettings extends RestrictedSettingsFragment implements Set result = new ArraySet<>(); for (UserHandle profile : mUserManager.getUserProfiles()) { final int profileId = profile.getIdentifier(); - final String packageName = mConnectivityManager.getAlwaysOnVpnPackageForUser(profileId); + final String packageName = mVpnManager.getAlwaysOnVpnPackageForUser(profileId); if (packageName != null) { result.add(new AppVpnInfo(profileId, packageName)); } diff --git a/src/com/android/settings/vpn2/VpnUtils.java b/src/com/android/settings/vpn2/VpnUtils.java index c6b79b4432b..4c9338ccd68 100644 --- a/src/com/android/settings/vpn2/VpnUtils.java +++ b/src/com/android/settings/vpn2/VpnUtils.java @@ -16,7 +16,6 @@ package com.android.settings.vpn2; import android.content.Context; -import android.net.ConnectivityManager; import android.net.VpnManager; import android.os.RemoteException; import android.provider.Settings; @@ -43,15 +42,15 @@ public class VpnUtils { public static void clearLockdownVpn(Context context) { KeyStore.getInstance().delete(Credentials.LOCKDOWN_VPN); - // Always notify ConnectivityManager after keystore update - getConnectivityManager(context).updateLockdownVpn(); + // Always notify VpnManager after keystore update + getVpnManager(context).updateLockdownVpn(); } public static void setLockdownVpn(Context context, String lockdownKey) { KeyStore.getInstance().put(Credentials.LOCKDOWN_VPN, lockdownKey.getBytes(), KeyStore.UID_SELF, /* flags */ 0); - // Always notify ConnectivityManager after keystore update - getConnectivityManager(context).updateLockdownVpn(); + // Always notify VpnManager after keystore update + getVpnManager(context).updateLockdownVpn(); } public static boolean isVpnLockdown(String key) { @@ -63,7 +62,7 @@ public class VpnUtils { if (getLockdownVpn() != null) { return true; } - return getConnectivityManager(context).getAlwaysOnVpnPackageForUser(userId) != null + return getVpnManager(context).getAlwaysOnVpnPackageForUser(userId) != null && Settings.Secure.getIntForUser(context.getContentResolver(), Settings.Secure.ALWAYS_ON_VPN_LOCKDOWN, /* default */ 0, userId) != 0; } @@ -77,16 +76,12 @@ public class VpnUtils { return config != null ? config.user : null; } - private static ConnectivityManager getConnectivityManager(Context context) { - return context.getSystemService(ConnectivityManager.class); - } - private static VpnManager getVpnManager(Context context) { return context.getSystemService(VpnManager.class); } - public static boolean isAlwaysOnVpnSet(ConnectivityManager cm, final int userId) { - return cm.getAlwaysOnVpnPackageForUser(userId) != null; + public static boolean isAlwaysOnVpnSet(VpnManager vm, final int userId) { + return vm.getAlwaysOnVpnPackageForUser(userId) != null; } public static boolean disconnectLegacyVpn(Context context) { diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java index f5393508dfd..07c9b3d40e3 100644 --- a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java @@ -40,6 +40,7 @@ import android.content.pm.UserInfo; import android.content.res.Resources; import android.net.ConnectivityManager; import android.net.ProxyInfo; +import android.net.VpnManager; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; @@ -84,6 +85,7 @@ public class EnterprisePrivacyFeatureProviderImplTest { private @Mock PackageManager mPackageManager; private @Mock UserManager mUserManager; private @Mock ConnectivityManager mConnectivityManger; + private @Mock VpnManager mVpnManager; private Resources mResources; private EnterprisePrivacyFeatureProvider mProvider; @@ -99,7 +101,7 @@ public class EnterprisePrivacyFeatureProviderImplTest { mResources = RuntimeEnvironment.application.getResources(); mProvider = new EnterprisePrivacyFeatureProviderImpl(mContext, mDevicePolicyManager, - mPackageManager, mUserManager, mConnectivityManger, mResources); + mPackageManager, mUserManager, mConnectivityManger, mVpnManager, mResources); } @Test @@ -201,11 +203,10 @@ public class EnterprisePrivacyFeatureProviderImplTest { @Test public void testIsAlwaysOnVpnSetInCurrentUser() { - when(mConnectivityManger.getAlwaysOnVpnPackageForUser(MY_USER_ID)).thenReturn(null); + when(mVpnManager.getAlwaysOnVpnPackageForUser(MY_USER_ID)).thenReturn(null); assertThat(mProvider.isAlwaysOnVpnSetInCurrentUser()).isFalse(); - when(mConnectivityManger.getAlwaysOnVpnPackageForUser(MY_USER_ID)) - .thenReturn(VPN_PACKAGE_ID); + when(mVpnManager.getAlwaysOnVpnPackageForUser(MY_USER_ID)).thenReturn(VPN_PACKAGE_ID); assertThat(mProvider.isAlwaysOnVpnSetInCurrentUser()).isTrue(); } @@ -215,11 +216,10 @@ public class EnterprisePrivacyFeatureProviderImplTest { mProfiles.add(new UserInfo(MANAGED_PROFILE_USER_ID, "", "", UserInfo.FLAG_MANAGED_PROFILE)); - when(mConnectivityManger.getAlwaysOnVpnPackageForUser(MANAGED_PROFILE_USER_ID)) - .thenReturn(null); + when(mVpnManager.getAlwaysOnVpnPackageForUser(MANAGED_PROFILE_USER_ID)).thenReturn(null); assertThat(mProvider.isAlwaysOnVpnSetInManagedProfile()).isFalse(); - when(mConnectivityManger.getAlwaysOnVpnPackageForUser(MANAGED_PROFILE_USER_ID)) + when(mVpnManager.getAlwaysOnVpnPackageForUser(MANAGED_PROFILE_USER_ID)) .thenReturn(VPN_PACKAGE_ID); assertThat(mProvider.isAlwaysOnVpnSetInManagedProfile()).isTrue(); } diff --git a/tests/robotests/src/com/android/settings/vpn2/VpnUtilsTest.java b/tests/robotests/src/com/android/settings/vpn2/VpnUtilsTest.java index 7856b06a0b3..08a92428395 100644 --- a/tests/robotests/src/com/android/settings/vpn2/VpnUtilsTest.java +++ b/tests/robotests/src/com/android/settings/vpn2/VpnUtilsTest.java @@ -21,7 +21,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import android.net.ConnectivityManager; +import android.net.VpnManager; import org.junit.Test; import org.junit.runner.RunWith; @@ -31,11 +31,11 @@ import org.robolectric.RobolectricTestRunner; public final class VpnUtilsTest { @Test public void testIsAlwaysOnVpnSet() { - final ConnectivityManager cm = mock(ConnectivityManager.class); - when(cm.getAlwaysOnVpnPackageForUser(0)).thenReturn("com.example.vpn"); - assertThat(VpnUtils.isAlwaysOnVpnSet(cm, 0)).isTrue(); + final VpnManager vm = mock(VpnManager.class); + when(vm.getAlwaysOnVpnPackageForUser(0)).thenReturn("com.example.vpn"); + assertThat(VpnUtils.isAlwaysOnVpnSet(vm, 0)).isTrue(); - when(cm.getAlwaysOnVpnPackageForUser(0)).thenReturn(null); - assertThat(VpnUtils.isAlwaysOnVpnSet(cm, 0)).isFalse(); + when(vm.getAlwaysOnVpnPackageForUser(0)).thenReturn(null); + assertThat(VpnUtils.isAlwaysOnVpnSet(vm, 0)).isFalse(); } }