Merge "Switch Settings from IConnectivityManager to VpnManager."
This commit is contained in:
@@ -19,12 +19,10 @@ import android.content.Context;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.UserInfo;
|
import android.content.pm.UserInfo;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.IConnectivityManager;
|
|
||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
import android.net.NetworkCapabilities;
|
import android.net.NetworkCapabilities;
|
||||||
import android.net.NetworkRequest;
|
import android.net.NetworkRequest;
|
||||||
import android.os.RemoteException;
|
import android.net.VpnManager;
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
@@ -64,7 +62,7 @@ public class VpnPreferenceController extends AbstractPreferenceController
|
|||||||
private final String mToggleable;
|
private final String mToggleable;
|
||||||
private final UserManager mUserManager;
|
private final UserManager mUserManager;
|
||||||
private final ConnectivityManager mConnectivityManager;
|
private final ConnectivityManager mConnectivityManager;
|
||||||
private final IConnectivityManager mConnectivityManagerService;
|
private final VpnManager mVpnManager;
|
||||||
private Preference mPreference;
|
private Preference mPreference;
|
||||||
|
|
||||||
public VpnPreferenceController(Context context) {
|
public VpnPreferenceController(Context context) {
|
||||||
@@ -74,8 +72,7 @@ public class VpnPreferenceController extends AbstractPreferenceController
|
|||||||
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
||||||
mConnectivityManager =
|
mConnectivityManager =
|
||||||
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
mConnectivityManagerService = IConnectivityManager.Stub.asInterface(
|
mVpnManager = context.getSystemService(VpnManager.class);
|
||||||
ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -122,27 +119,20 @@ public class VpnPreferenceController extends AbstractPreferenceController
|
|||||||
}
|
}
|
||||||
// Copied from SystemUI::SecurityControllerImpl
|
// Copied from SystemUI::SecurityControllerImpl
|
||||||
SparseArray<VpnConfig> vpns = new SparseArray<>();
|
SparseArray<VpnConfig> vpns = new SparseArray<>();
|
||||||
try {
|
final List<UserInfo> users = mUserManager.getUsers();
|
||||||
final List<UserInfo> users = mUserManager.getUsers();
|
for (UserInfo user : users) {
|
||||||
for (UserInfo user : users) {
|
VpnConfig cfg = mVpnManager.getVpnConfig(user.id);
|
||||||
VpnConfig cfg = mConnectivityManagerService.getVpnConfig(user.id);
|
if (cfg == null) {
|
||||||
if (cfg == null) {
|
continue;
|
||||||
|
} else if (cfg.legacy) {
|
||||||
|
// Legacy VPNs should do nothing if the network is disconnected. Third-party
|
||||||
|
// VPN warnings need to continue as traffic can still go to the app.
|
||||||
|
final LegacyVpnInfo legacyVpn = mVpnManager.getLegacyVpnInfo(user.id);
|
||||||
|
if (legacyVpn == null || legacyVpn.state != LegacyVpnInfo.STATE_CONNECTED) {
|
||||||
continue;
|
continue;
|
||||||
} else if (cfg.legacy) {
|
|
||||||
// Legacy VPNs should do nothing if the network is disconnected. Third-party
|
|
||||||
// VPN warnings need to continue as traffic can still go to the app.
|
|
||||||
final LegacyVpnInfo legacyVpn =
|
|
||||||
mConnectivityManagerService.getLegacyVpnInfo(user.id);
|
|
||||||
if (legacyVpn == null || legacyVpn.state != LegacyVpnInfo.STATE_CONNECTED) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
vpns.put(user.id, cfg);
|
|
||||||
}
|
}
|
||||||
} catch (RemoteException rme) {
|
vpns.put(user.id, cfg);
|
||||||
// Roll back to previous state
|
|
||||||
Log.e(TAG, "Unable to list active VPNs", rme);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
final UserInfo userInfo = mUserManager.getUserInfo(UserHandle.myUserId());
|
final UserInfo userInfo = mUserManager.getUserInfo(UserHandle.myUserId());
|
||||||
final int uid;
|
final int uid;
|
||||||
|
@@ -18,17 +18,13 @@ package com.android.settings.vpn2;
|
|||||||
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.net.IConnectivityManager;
|
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.ServiceManager;
|
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
@@ -52,9 +48,9 @@ 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 final IConnectivityManager mService = IConnectivityManager.Stub.asInterface(
|
private VpnManager mVpnManager;
|
||||||
ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMetricsCategory() {
|
public int getMetricsCategory() {
|
||||||
@@ -97,7 +93,9 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -145,14 +143,9 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final int userId = getUserId();
|
final int userId = getUserId();
|
||||||
try {
|
mVpnManager.setVpnPackageAuthorization(
|
||||||
mService.setVpnPackageAuthorization(
|
mPackageInfo.packageName, userId, VpnManager.TYPE_VPN_NONE);
|
||||||
mPackageInfo.packageName, userId, VpnManager.TYPE_VPN_NONE);
|
onDisconnect(dialog);
|
||||||
onDisconnect(dialog);
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.e(TAG, "Failed to forget authorization of " + mPackageInfo.packageName +
|
|
||||||
" for user " + userId, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mListener != null) {
|
if (mListener != null) {
|
||||||
mListener.onForget();
|
mListener.onForget();
|
||||||
@@ -164,15 +157,10 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final int userId = getUserId();
|
final int userId = getUserId();
|
||||||
try {
|
if (mPackageInfo.packageName.equals(VpnUtils.getConnectedPackage(mVpnManager, userId))) {
|
||||||
if (mPackageInfo.packageName.equals(VpnUtils.getConnectedPackage(mService, userId))) {
|
mConnectivityManager.setAlwaysOnVpnPackageForUser(userId, null,
|
||||||
mService.setAlwaysOnVpnPackage(userId, null, /* lockdownEnabled */ false,
|
/* lockdownEnabled */ false, /* lockdownAllowlist */ null);
|
||||||
/* lockdownWhitelist */ null);
|
mVpnManager.prepareVpn(mPackageInfo.packageName, VpnConfig.LEGACY_VPN, userId);
|
||||||
mService.prepareVpn(mPackageInfo.packageName, VpnConfig.LEGACY_VPN, userId);
|
|
||||||
}
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.e(TAG, "Failed to disconnect package " + mPackageInfo.packageName +
|
|
||||||
" for user " + userId, e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -29,10 +29,8 @@ 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.ConnectivityManager;
|
||||||
import android.net.IConnectivityManager;
|
import android.net.VpnManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.RemoteException;
|
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@@ -72,7 +70,7 @@ public class AppManagementFragment extends SettingsPreferenceFragment
|
|||||||
private PackageManager mPackageManager;
|
private PackageManager mPackageManager;
|
||||||
private DevicePolicyManager mDevicePolicyManager;
|
private DevicePolicyManager mDevicePolicyManager;
|
||||||
private ConnectivityManager mConnectivityManager;
|
private ConnectivityManager mConnectivityManager;
|
||||||
private IConnectivityManager mConnectivityService;
|
private VpnManager mVpnManager;
|
||||||
|
|
||||||
// VPN app info
|
// VPN app info
|
||||||
private final int mUserId = UserHandle.myUserId();
|
private final int mUserId = UserHandle.myUserId();
|
||||||
@@ -125,8 +123,7 @@ 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);
|
mConnectivityManager = getContext().getSystemService(ConnectivityManager.class);
|
||||||
mConnectivityService = IConnectivityManager.Stub
|
mVpnManager = getContext().getSystemService(VpnManager.class);
|
||||||
.asInterface(ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
|
|
||||||
|
|
||||||
mPreferenceVersion = findPreference(KEY_VERSION);
|
mPreferenceVersion = findPreference(KEY_VERSION);
|
||||||
mPreferenceAlwaysOn = (RestrictedSwitchPreference) findPreference(KEY_ALWAYS_ON_VPN);
|
mPreferenceAlwaysOn = (RestrictedSwitchPreference) findPreference(KEY_ALWAYS_ON_VPN);
|
||||||
@@ -335,13 +332,8 @@ public class AppManagementFragment extends SettingsPreferenceFragment
|
|||||||
* @return {@code true} if another VPN (VpnService or legacy) is connected or set as always-on.
|
* @return {@code true} if another VPN (VpnService or legacy) is connected or set as always-on.
|
||||||
*/
|
*/
|
||||||
private boolean isAnotherVpnActive() {
|
private boolean isAnotherVpnActive() {
|
||||||
try {
|
final VpnConfig config = mVpnManager.getVpnConfig(mUserId);
|
||||||
final VpnConfig config = mConnectivityService.getVpnConfig(mUserId);
|
return config != null && !TextUtils.equals(config.user, mPackageName);
|
||||||
return config != null && !TextUtils.equals(config.user, mPackageName);
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.w(TAG, "Failure to look up active VPN", e);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class CannotConnectFragment extends InstrumentedDialogFragment {
|
public static class CannotConnectFragment extends InstrumentedDialogFragment {
|
||||||
|
@@ -21,10 +21,9 @@ 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.ConnectivityManager;
|
||||||
import android.net.IConnectivityManager;
|
import android.net.VpnManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.security.Credentials;
|
import android.security.Credentials;
|
||||||
import android.security.KeyStore;
|
import android.security.KeyStore;
|
||||||
@@ -52,9 +51,8 @@ public class ConfigDialogFragment extends InstrumentedDialogFragment implements
|
|||||||
private static final String ARG_EDITING = "editing";
|
private static final String ARG_EDITING = "editing";
|
||||||
private static final String ARG_EXISTS = "exists";
|
private static final String ARG_EXISTS = "exists";
|
||||||
|
|
||||||
private final IConnectivityManager mService = IConnectivityManager.Stub.asInterface(
|
|
||||||
ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
private VpnManager mService;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -80,6 +78,7 @@ public class ConfigDialogFragment extends InstrumentedDialogFragment implements
|
|||||||
public void onAttach(final Context context) {
|
public void onAttach(final Context context) {
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
mContext = context;
|
mContext = context;
|
||||||
|
mService = context.getSystemService(VpnManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -212,8 +211,6 @@ public class ConfigDialogFragment extends InstrumentedDialogFragment implements
|
|||||||
mService.startLegacyVpn(profile);
|
mService.startLegacyVpn(profile);
|
||||||
} catch (IllegalStateException e) {
|
} catch (IllegalStateException e) {
|
||||||
Toast.makeText(mContext, R.string.vpn_no_network, Toast.LENGTH_LONG).show();
|
Toast.makeText(mContext, R.string.vpn_no_network, Toast.LENGTH_LONG).show();
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.e(TAG, "Failed to connect", e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -30,16 +30,14 @@ import android.content.pm.PackageInfo;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.ConnectivityManager.NetworkCallback;
|
import android.net.ConnectivityManager.NetworkCallback;
|
||||||
import android.net.IConnectivityManager;
|
|
||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
import android.net.NetworkCapabilities;
|
import android.net.NetworkCapabilities;
|
||||||
import android.net.NetworkRequest;
|
import android.net.NetworkRequest;
|
||||||
|
import android.net.VpnManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.RemoteException;
|
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.security.Credentials;
|
import android.security.Credentials;
|
||||||
@@ -92,10 +90,9 @@ public class VpnSettings extends RestrictedSettingsFragment implements
|
|||||||
.removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED)
|
.removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
private final IConnectivityManager mConnectivityService = IConnectivityManager.Stub
|
|
||||||
.asInterface(ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
|
|
||||||
private ConnectivityManager mConnectivityManager;
|
private ConnectivityManager mConnectivityManager;
|
||||||
private UserManager mUserManager;
|
private UserManager mUserManager;
|
||||||
|
private VpnManager mVpnManager;
|
||||||
|
|
||||||
private final KeyStore mKeyStore = KeyStore.getInstance();
|
private final KeyStore mKeyStore = KeyStore.getInstance();
|
||||||
|
|
||||||
@@ -124,6 +121,7 @@ public class VpnSettings extends RestrictedSettingsFragment implements
|
|||||||
|
|
||||||
mUserManager = (UserManager) getSystemService(Context.USER_SERVICE);
|
mUserManager = (UserManager) getSystemService(Context.USER_SERVICE);
|
||||||
mConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
mConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
mVpnManager = (VpnManager) getSystemService(Context.VPN_MANAGEMENT_SERVICE);
|
||||||
|
|
||||||
mUnavailable = isUiRestricted();
|
mUnavailable = isUiRestricted();
|
||||||
setHasOptionsMenu(!mUnavailable);
|
setHasOptionsMenu(!mUnavailable);
|
||||||
@@ -467,13 +465,9 @@ public class VpnSettings extends RestrictedSettingsFragment implements
|
|||||||
|
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
private Map<String, LegacyVpnInfo> getConnectedLegacyVpns() {
|
private Map<String, LegacyVpnInfo> getConnectedLegacyVpns() {
|
||||||
try {
|
mConnectedLegacyVpn = mVpnManager.getLegacyVpnInfo(UserHandle.myUserId());
|
||||||
mConnectedLegacyVpn = mConnectivityService.getLegacyVpnInfo(UserHandle.myUserId());
|
if (mConnectedLegacyVpn != null) {
|
||||||
if (mConnectedLegacyVpn != null) {
|
return Collections.singletonMap(mConnectedLegacyVpn.key, mConnectedLegacyVpn);
|
||||||
return Collections.singletonMap(mConnectedLegacyVpn.key, mConnectedLegacyVpn);
|
|
||||||
}
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.e(LOG_TAG, "Failure updating VPN list with connected legacy VPNs", e);
|
|
||||||
}
|
}
|
||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
@@ -482,15 +476,11 @@ public class VpnSettings extends RestrictedSettingsFragment implements
|
|||||||
private Set<AppVpnInfo> getConnectedAppVpns() {
|
private Set<AppVpnInfo> getConnectedAppVpns() {
|
||||||
// Mark connected third-party services
|
// Mark connected third-party services
|
||||||
Set<AppVpnInfo> connections = new ArraySet<>();
|
Set<AppVpnInfo> connections = new ArraySet<>();
|
||||||
try {
|
for (UserHandle profile : mUserManager.getUserProfiles()) {
|
||||||
for (UserHandle profile : mUserManager.getUserProfiles()) {
|
VpnConfig config = mVpnManager.getVpnConfig(profile.getIdentifier());
|
||||||
VpnConfig config = mConnectivityService.getVpnConfig(profile.getIdentifier());
|
if (config != null && !config.legacy) {
|
||||||
if (config != null && !config.legacy) {
|
connections.add(new AppVpnInfo(profile.getIdentifier(), config.user));
|
||||||
connections.add(new AppVpnInfo(profile.getIdentifier(), config.user));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.e(LOG_TAG, "Failure updating VPN list with connected app VPNs", e);
|
|
||||||
}
|
}
|
||||||
return connections;
|
return connections;
|
||||||
}
|
}
|
||||||
|
@@ -17,13 +17,11 @@ package com.android.settings.vpn2;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.IConnectivityManager;
|
import android.net.VpnManager;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.security.Credentials;
|
import android.security.Credentials;
|
||||||
import android.security.KeyStore;
|
import android.security.KeyStore;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import com.android.internal.net.LegacyVpnInfo;
|
import com.android.internal.net.LegacyVpnInfo;
|
||||||
import com.android.internal.net.VpnConfig;
|
import com.android.internal.net.VpnConfig;
|
||||||
@@ -71,12 +69,11 @@ public class VpnUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isVpnActive(Context context) throws RemoteException {
|
public static boolean isVpnActive(Context context) throws RemoteException {
|
||||||
return getIConnectivityManager().getVpnConfig(context.getUserId()) != null;
|
return getVpnManager(context).getVpnConfig(context.getUserId()) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getConnectedPackage(IConnectivityManager service, final int userId)
|
public static String getConnectedPackage(VpnManager vpnManager, final int userId) {
|
||||||
throws RemoteException {
|
final VpnConfig config = vpnManager.getVpnConfig(userId);
|
||||||
final VpnConfig config = service.getVpnConfig(userId);
|
|
||||||
return config != null ? config.user : null;
|
return config != null ? config.user : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,9 +81,8 @@ public class VpnUtils {
|
|||||||
return context.getSystemService(ConnectivityManager.class);
|
return context.getSystemService(ConnectivityManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IConnectivityManager getIConnectivityManager() {
|
private static VpnManager getVpnManager(Context context) {
|
||||||
return IConnectivityManager.Stub.asInterface(
|
return context.getSystemService(VpnManager.class);
|
||||||
ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isAlwaysOnVpnSet(ConnectivityManager cm, final int userId) {
|
public static boolean isAlwaysOnVpnSet(ConnectivityManager cm, final int userId) {
|
||||||
@@ -94,17 +90,12 @@ public class VpnUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean disconnectLegacyVpn(Context context) {
|
public static boolean disconnectLegacyVpn(Context context) {
|
||||||
try {
|
int userId = context.getUserId();
|
||||||
int userId = context.getUserId();
|
LegacyVpnInfo currentLegacyVpn = getVpnManager(context).getLegacyVpnInfo(userId);
|
||||||
IConnectivityManager connectivityService = getIConnectivityManager();
|
if (currentLegacyVpn != null) {
|
||||||
LegacyVpnInfo currentLegacyVpn = connectivityService.getLegacyVpnInfo(userId);
|
clearLockdownVpn(context);
|
||||||
if (currentLegacyVpn != null) {
|
getVpnManager(context).prepareVpn(null, VpnConfig.LEGACY_VPN, userId);
|
||||||
clearLockdownVpn(context);
|
return true;
|
||||||
connectivityService.prepareVpn(null, VpnConfig.LEGACY_VPN, userId);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.e(TAG, "Legacy VPN could not be disconnected", e);
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user