diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java index 46f9b71f230..22fe76019d4 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java @@ -84,11 +84,6 @@ public interface EnterprisePrivacyFeatureProvider { */ 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 * before the current user is wiped, or zero if no such limit is set. diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java index 429c537d985..ad57c3cfda9 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,19 +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); - } - - @Override - public boolean isGlobalHttpProxySet() { - return mCm.getGlobalProxy() != null; + VpnUtils.isAlwaysOnVpnSet(mVm, managedProfileUserId); } @Override diff --git a/src/com/android/settings/enterprise/GlobalHttpProxyPreferenceController.java b/src/com/android/settings/enterprise/GlobalHttpProxyPreferenceController.java index 04e63aa1e8b..6de6cde359e 100644 --- a/src/com/android/settings/enterprise/GlobalHttpProxyPreferenceController.java +++ b/src/com/android/settings/enterprise/GlobalHttpProxyPreferenceController.java @@ -14,26 +14,25 @@ package com.android.settings.enterprise; import android.content.Context; +import android.net.ConnectivityManager; import com.android.settings.core.PreferenceControllerMixin; -import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.AbstractPreferenceController; public class GlobalHttpProxyPreferenceController extends AbstractPreferenceController implements PreferenceControllerMixin { private static final String KEY_GLOBAL_HTTP_PROXY = "global_http_proxy"; - private final EnterprisePrivacyFeatureProvider mFeatureProvider; + private final ConnectivityManager mCm; public GlobalHttpProxyPreferenceController(Context context) { super(context); - mFeatureProvider = FeatureFactory.getFactory(context) - .getEnterprisePrivacyFeatureProvider(context); + mCm = context.getSystemService(ConnectivityManager.class); } @Override public boolean isAvailable() { - return mFeatureProvider.isGlobalHttpProxySet(); + return mCm.getGlobalProxy() != null; } @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..43fe0f612c9 100644 --- a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java @@ -39,7 +39,7 @@ import android.content.pm.ResolveInfo; 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 +84,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 +100,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 +202,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,25 +215,14 @@ 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(); } - @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 public void testGetMaximumFailedPasswordsForWipeInCurrentUser() { when(mDevicePolicyManager.getDeviceOwnerComponentOnCallingUser()).thenReturn(null); diff --git a/tests/robotests/src/com/android/settings/enterprise/GlobalHttpProxyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/GlobalHttpProxyPreferenceControllerTest.java index 05d1c640fd0..11676a28378 100644 --- a/tests/robotests/src/com/android/settings/enterprise/GlobalHttpProxyPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/GlobalHttpProxyPreferenceControllerTest.java @@ -21,11 +21,11 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.when; import android.content.Context; +import android.net.ConnectivityManager; +import android.net.ProxyInfo; import androidx.preference.Preference; -import com.android.settings.testutils.FakeFeatureFactory; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -41,25 +41,23 @@ public class GlobalHttpProxyPreferenceControllerTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Context mContext; - private FakeFeatureFactory mFeatureFactory; + @Mock + private ConnectivityManager mCm; private GlobalHttpProxyPreferenceController mController; @Before public void setUp() { MockitoAnnotations.initMocks(this); - mFeatureFactory = FakeFeatureFactory.setupForTest(); mController = new GlobalHttpProxyPreferenceController(mContext); } @Test public void testIsAvailable() { - when(mFeatureFactory.enterprisePrivacyFeatureProvider.isGlobalHttpProxySet()) - .thenReturn(false); + when(mCm.getGlobalProxy()).thenReturn(null); assertThat(mController.isAvailable()).isFalse(); - when(mFeatureFactory.enterprisePrivacyFeatureProvider.isGlobalHttpProxySet()) - .thenReturn(true); + when(mCm.getGlobalProxy()).thenReturn(ProxyInfo.buildDirectProxy("localhost", 123)); assertThat(mController.isAvailable()).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(); } }