summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeremy Condra <gcondra@google.com>2013-07-23 17:55:44 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-07-23 17:55:45 +0000
commit1b6868cc4b8455e8660ba35ccdcc34abbaa43ffa (patch)
treec04b66c71909dc7943969e4e402f0ee7e112205e
parenta874c6762d0ca381a1eb5788fee39bc1b807d877 (diff)
parentbf6ff2c025405a3af496fe558dfc4468a9b45cc8 (diff)
downloadframeworks_base-1b6868cc4b8455e8660ba35ccdcc34abbaa43ffa.zip
frameworks_base-1b6868cc4b8455e8660ba35ccdcc34abbaa43ffa.tar.gz
frameworks_base-1b6868cc4b8455e8660ba35ccdcc34abbaa43ffa.tar.bz2
Merge "Support multiple Vpn ManageDialogs"
-rw-r--r--core/java/android/net/IConnectivityManager.aidl2
-rw-r--r--core/java/com/android/internal/net/VpnConfig.java8
-rw-r--r--packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java9
-rw-r--r--services/java/com/android/server/ConnectivityService.java14
-rw-r--r--services/java/com/android/server/connectivity/Vpn.java10
5 files changed, 36 insertions, 7 deletions
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index d6a3e37..b0f7fc6 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -124,6 +124,8 @@ interface IConnectivityManager
ParcelFileDescriptor establishVpn(in VpnConfig config);
+ VpnConfig getVpnConfig();
+
void startLegacyVpn(in VpnProfile profile);
LegacyVpnInfo getLegacyVpnInfo();
diff --git a/core/java/com/android/internal/net/VpnConfig.java b/core/java/com/android/internal/net/VpnConfig.java
index abf99a3..98599d0 100644
--- a/core/java/com/android/internal/net/VpnConfig.java
+++ b/core/java/com/android/internal/net/VpnConfig.java
@@ -21,6 +21,7 @@ import android.content.Context;
import android.content.Intent;
import android.os.Parcel;
import android.os.Parcelable;
+import android.os.UserHandle;
import android.net.RouteInfo;
import android.net.LinkAddress;
@@ -50,15 +51,12 @@ public class VpnConfig implements Parcelable {
return intent;
}
- public static PendingIntent getIntentForStatusPanel(Context context, VpnConfig config) {
- Preconditions.checkNotNull(config);
-
+ public static PendingIntent getIntentForStatusPanel(Context context) {
Intent intent = new Intent();
intent.setClassName(DIALOGS_PACKAGE, DIALOGS_PACKAGE + ".ManageDialog");
- intent.putExtra("config", config);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY |
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
- return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
+ return PendingIntent.getActivityAsUser(context, 0, intent, 0, null, UserHandle.CURRENT);
}
public String user;
diff --git a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
index 96de1b9..42b8cce 100644
--- a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
+++ b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
@@ -65,11 +65,18 @@ public class ManageDialog extends AlertActivity implements
}
try {
- mConfig = getIntent().getParcelableExtra("config");
mService = IConnectivityManager.Stub.asInterface(
ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
+ mConfig = mService.getVpnConfig();
+
+ // mConfig can be null if we are a restricted user, in that case don't show this dialog
+ if (mConfig == null) {
+ finish();
+ return;
+ }
+
View view = View.inflate(this, R.layout.manage, null);
if (mConfig.session != null) {
((TextView) view.findViewById(R.id.session)).setText(mConfig.session);
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 0608b6a..f66fa23 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -3447,6 +3447,20 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
/**
+ * Returns the information of the ongoing VPN. This method is used by VpnDialogs and
+ * not available in ConnectivityManager.
+ * Permissions are checked in Vpn class.
+ * @hide
+ */
+ @Override
+ public VpnConfig getVpnConfig() {
+ int user = UserHandle.getUserId(Binder.getCallingUid());
+ synchronized(mVpns) {
+ return mVpns.get(user).getVpnConfig();
+ }
+ }
+
+ /**
* Callback for VPN subsystem. Currently VPN is not adapted to the service
* through NetworkStateTracker since it works differently. For example, it
* needs to override DNS servers but never takes the default routes. It
diff --git a/services/java/com/android/server/connectivity/Vpn.java b/services/java/com/android/server/connectivity/Vpn.java
index 3a2391f..8cc5b4f 100644
--- a/services/java/com/android/server/connectivity/Vpn.java
+++ b/services/java/com/android/server/connectivity/Vpn.java
@@ -519,6 +519,14 @@ public class Vpn extends BaseNetworkStateTracker {
}
}
+ /**
+ * Return the configuration of the currently running VPN.
+ */
+ public VpnConfig getVpnConfig() {
+ enforceControlPermission();
+ return mConfig;
+ }
+
@Deprecated
public synchronized void interfaceStatusChanged(String iface, boolean up) {
try {
@@ -610,7 +618,7 @@ public class Vpn extends BaseNetworkStateTracker {
private void showNotification(String label, Bitmap icon, int user) {
if (!mEnableNotif) return;
- mStatusIntent = VpnConfig.getIntentForStatusPanel(mContext, mConfig);
+ mStatusIntent = VpnConfig.getIntentForStatusPanel(mContext);
NotificationManager nm = (NotificationManager)
mContext.getSystemService(Context.NOTIFICATION_SERVICE);