diff options
author | Paul Jensen <pauljensen@google.com> | 2014-08-19 16:00:24 -0400 |
---|---|---|
committer | Paul Jensen <pauljensen@google.com> | 2014-08-25 15:09:25 -0400 |
commit | 0784eeab28da094a87437ed454fe3dca01b1f9f2 (patch) | |
tree | 7f411b05fb11378bc30cea39c9511efec7175194 /core/java/android/net | |
parent | 4412e5c03376fce393bbd0a2c195bb70296c261b (diff) | |
download | frameworks_base-0784eeab28da094a87437ed454fe3dca01b1f9f2.zip frameworks_base-0784eeab28da094a87437ed454fe3dca01b1f9f2.tar.gz frameworks_base-0784eeab28da094a87437ed454fe3dca01b1f9f2.tar.bz2 |
Implement VpnConfig.addAllowedApplication().
bug:17109588
bug:13651397
Change-Id: Ibb944794627117728373f0105e24f196f3eeb9e9
Diffstat (limited to 'core/java/android/net')
-rw-r--r-- | core/java/android/net/VpnService.java | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/core/java/android/net/VpnService.java b/core/java/android/net/VpnService.java index 99bccd0..9a6d8ee 100644 --- a/core/java/android/net/VpnService.java +++ b/core/java/android/net/VpnService.java @@ -24,6 +24,7 @@ import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; +import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.net.NetworkUtils; import android.os.Binder; @@ -32,6 +33,7 @@ import android.os.Parcel; import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.ServiceManager; +import android.os.UserHandle; import com.android.internal.net.VpnConfig; @@ -518,6 +520,16 @@ public class VpnService extends Service { return this; } + private void verifyApp(String packageName) throws PackageManager.NameNotFoundException { + IPackageManager pm = IPackageManager.Stub.asInterface( + ServiceManager.getService("package")); + try { + pm.getApplicationInfo(packageName, 0, UserHandle.getCallingUserId()); + } catch (RemoteException e) { + throw new IllegalStateException(e); + } + } + /** * Adds an application that's allowed to access the VPN connection. * @@ -540,7 +552,14 @@ public class VpnService extends Service { */ public Builder addAllowedApplication(String packageName) throws PackageManager.NameNotFoundException { - // TODO + if (mConfig.disallowedApplications != null) { + throw new UnsupportedOperationException("addDisallowedApplication already called"); + } + verifyApp(packageName); + if (mConfig.allowedApplications == null) { + mConfig.allowedApplications = new ArrayList<String>(); + } + mConfig.allowedApplications.add(packageName); return this; } @@ -565,7 +584,14 @@ public class VpnService extends Service { */ public Builder addDisallowedApplication(String packageName) throws PackageManager.NameNotFoundException { - // TODO + if (mConfig.allowedApplications != null) { + throw new UnsupportedOperationException("addAllowedApplication already called"); + } + verifyApp(packageName); + if (mConfig.disallowedApplications == null) { + mConfig.disallowedApplications = new ArrayList<String>(); + } + mConfig.disallowedApplications.add(packageName); return this; } |