summaryrefslogtreecommitdiffstats
path: root/core/java/android/net
diff options
context:
space:
mode:
authorPaul Jensen <pauljensen@google.com>2014-08-19 16:00:24 -0400
committerPaul Jensen <pauljensen@google.com>2014-08-25 15:09:25 -0400
commit0784eeab28da094a87437ed454fe3dca01b1f9f2 (patch)
tree7f411b05fb11378bc30cea39c9511efec7175194 /core/java/android/net
parent4412e5c03376fce393bbd0a2c195bb70296c261b (diff)
downloadframeworks_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.java30
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;
}