diff options
author | Geremy Condra <gcondra@google.com> | 2013-07-23 17:55:44 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-07-23 17:55:45 +0000 |
commit | 1b6868cc4b8455e8660ba35ccdcc34abbaa43ffa (patch) | |
tree | c04b66c71909dc7943969e4e402f0ee7e112205e | |
parent | a874c6762d0ca381a1eb5788fee39bc1b807d877 (diff) | |
parent | bf6ff2c025405a3af496fe558dfc4468a9b45cc8 (diff) | |
download | frameworks_base-1b6868cc4b8455e8660ba35ccdcc34abbaa43ffa.zip frameworks_base-1b6868cc4b8455e8660ba35ccdcc34abbaa43ffa.tar.gz frameworks_base-1b6868cc4b8455e8660ba35ccdcc34abbaa43ffa.tar.bz2 |
Merge "Support multiple Vpn ManageDialogs"
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); |