From 5db03df1fff4900eb485304d4fd185110bea1a0c Mon Sep 17 00:00:00 2001 From: Chia-chi Yeh Date: Thu, 30 Jun 2011 23:52:29 -0700 Subject: [PATCH] VpnDialogs: prepare for the usages of legacy VPN. - Use PendingIntent to start activities. - Handle configs without package names. - Switch to system UID. Change-Id: Ia78112a97e3628b603d9e059705e32694ebe142b --- .../com/android/internal/net/VpnConfig.java | 6 +-- packages/VpnDialogs/Android.mk | 2 + packages/VpnDialogs/AndroidManifest.xml | 3 +- packages/VpnDialogs/res/values/strings.xml | 1 + .../com/android/vpndialogs/ManageDialog.java | 37 ++++++++++++------- 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/core/java/com/android/internal/net/VpnConfig.java b/core/java/com/android/internal/net/VpnConfig.java index 773be5bc2b21f..06ee9d1cf0b02 100644 --- a/core/java/com/android/internal/net/VpnConfig.java +++ b/core/java/com/android/internal/net/VpnConfig.java @@ -58,7 +58,7 @@ public class VpnConfig implements Parcelable { public String packageName; public String sessionName; public String interfaceName; - public String configureActivity; + public PendingIntent configureIntent; public int mtu = -1; public String addresses; public String routes; @@ -75,7 +75,7 @@ public class VpnConfig implements Parcelable { out.writeString(packageName); out.writeString(sessionName); out.writeString(interfaceName); - out.writeString(configureActivity); + out.writeParcelable(configureIntent, flags); out.writeInt(mtu); out.writeString(addresses); out.writeString(routes); @@ -91,7 +91,7 @@ public class VpnConfig implements Parcelable { config.packageName = in.readString(); config.sessionName = in.readString(); config.interfaceName = in.readString(); - config.configureActivity = in.readString(); + config.configureIntent = in.readParcelable(null); config.mtu = in.readInt(); config.addresses = in.readString(); config.routes = in.readString(); diff --git a/packages/VpnDialogs/Android.mk b/packages/VpnDialogs/Android.mk index 89f010aaebcb1..ac84125f8f4ee 100644 --- a/packages/VpnDialogs/Android.mk +++ b/packages/VpnDialogs/Android.mk @@ -20,6 +20,8 @@ include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional +LOCAL_CERTIFICATE := platform + LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_PACKAGE_NAME := VpnDialogs diff --git a/packages/VpnDialogs/AndroidManifest.xml b/packages/VpnDialogs/AndroidManifest.xml index 4e6784ce0884c..c0b0a08067cf4 100644 --- a/packages/VpnDialogs/AndroidManifest.xml +++ b/packages/VpnDialogs/AndroidManifest.xml @@ -1,5 +1,6 @@ + package="com.android.vpndialogs" + android:sharedUserId="android.uid.system"> I trust this application. + VPN is connected Configure Disconnect diff --git a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java index ba3f3448f0668..c076ba0bfd2fa 100644 --- a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java +++ b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java @@ -64,9 +64,6 @@ public class ManageDialog extends Activity implements Handler.Callback, mService = IConnectivityManager.Stub.asInterface( ServiceManager.getService(Context.CONNECTIVITY_SERVICE)); - PackageManager pm = getPackageManager(); - ApplicationInfo app = pm.getApplicationInfo(mConfig.packageName, 0); - View view = View.inflate(this, R.layout.manage, null); if (mConfig.sessionName != null) { ((TextView) view.findViewById(R.id.session)).setText(mConfig.sessionName); @@ -75,15 +72,29 @@ public class ManageDialog extends Activity implements Handler.Callback, mDataTransmitted = (TextView) view.findViewById(R.id.data_transmitted); mDataReceived = (TextView) view.findViewById(R.id.data_received); - mDialog = new AlertDialog.Builder(this) - .setIcon(app.loadIcon(pm)) - .setTitle(app.loadLabel(pm)) - .setView(view) - .setNeutralButton(R.string.disconnect, this) - .setNegativeButton(android.R.string.cancel, this) - .create(); + if (mConfig.packageName == null) { + // Legacy VPN does not have a package name. + mDialog = new AlertDialog.Builder(this) + .setIcon(android.R.drawable.ic_dialog_info) + .setTitle(R.string.legacy_title) + .setView(view) + .setNeutralButton(R.string.disconnect, this) + .setNegativeButton(android.R.string.cancel, this) + .create(); + } else { + PackageManager pm = getPackageManager(); + ApplicationInfo app = pm.getApplicationInfo(mConfig.packageName, 0); - if (mConfig.configureActivity != null) { + mDialog = new AlertDialog.Builder(this) + .setIcon(app.loadIcon(pm)) + .setTitle(app.loadLabel(pm)) + .setView(view) + .setNeutralButton(R.string.disconnect, this) + .setNegativeButton(android.R.string.cancel, this) + .create(); + } + + if (mConfig.configureIntent != null) { mDialog.setButton(DialogInterface.BUTTON_POSITIVE, getText(R.string.configure), this); } @@ -113,9 +124,7 @@ public class ManageDialog extends Activity implements Handler.Callback, public void onClick(DialogInterface dialog, int which) { try { if (which == AlertDialog.BUTTON_POSITIVE) { - Intent intent = new Intent(); - intent.setClassName(mConfig.packageName, mConfig.configureActivity); - startActivity(intent); + mConfig.configureIntent.send(); } else if (which == AlertDialog.BUTTON_NEUTRAL) { mService.prepareVpn(""); }