diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl index 0814e0fc4b..b2fc3be27d 100644 --- a/core/java/android/net/IConnectivityManager.aidl +++ b/core/java/android/net/IConnectivityManager.aidl @@ -108,6 +108,8 @@ interface IConnectivityManager boolean prepareVpn(String oldPackage, String newPackage); + void setVpnPackageAuthorization(boolean authorized); + ParcelFileDescriptor establishVpn(in VpnConfig config); VpnConfig getVpnConfig(); diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 5b216eda8d..491f5a6dd5 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -2662,6 +2662,20 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } + /** + * Set whether the current VPN package has the ability to launch VPNs without + * user intervention. This method is used by system UIs and not available + * in ConnectivityManager. Permissions are checked in Vpn class. + * @hide + */ + @Override + public void setVpnPackageAuthorization(boolean authorized) { + int user = UserHandle.getUserId(Binder.getCallingUid()); + synchronized(mVpns) { + mVpns.get(user).setPackageAuthorization(authorized); + } + } + /** * Configure a TUN interface and return its file descriptor. Parameters * are encoded and opaque to this class. This method is used by VpnBuilder