Add PAC URL support to Device Owner Wifi setup
Trying to keep some feature parity between EDU and enterprise.
Change-Id: I5a48d8babe2a3d2940efd21dac54c4aaf11e48ab
diff --git a/src/com/android/managedprovisioning/DeviceOwnerProvisioningService.java b/src/com/android/managedprovisioning/DeviceOwnerProvisioningService.java
index 0923601..d133a4e 100644
--- a/src/com/android/managedprovisioning/DeviceOwnerProvisioningService.java
+++ b/src/com/android/managedprovisioning/DeviceOwnerProvisioningService.java
@@ -132,7 +132,7 @@
mAddWifiNetworkTask = new AddWifiNetworkTask(this, params.mWifiSsid,
params.mWifiHidden, params.mWifiSecurityType, params.mWifiPassword,
params.mWifiProxyHost, params.mWifiProxyPort, params.mWifiProxyBypassHosts,
- new AddWifiNetworkTask.Callback() {
+ params.mWifiPacUrl, new AddWifiNetworkTask.Callback() {
@Override
public void onSuccess() {
if (mDownloadPackageTask.downloadLocationWasProvided()) {
diff --git a/src/com/android/managedprovisioning/MessageParser.java b/src/com/android/managedprovisioning/MessageParser.java
index 4b6d7cf..98dc0ec 100644
--- a/src/com/android/managedprovisioning/MessageParser.java
+++ b/src/com/android/managedprovisioning/MessageParser.java
@@ -79,6 +79,7 @@
private static final String WIFI_PROXY_HOST_KEY = "wifiProxyHost";
private static final String WIFI_PROXY_PORT_KEY = "wifiProxyPort"; // int
private static final String WIFI_PROXY_BYPASS_KEY = "wifiProxyBypassHosts";
+ private static final String WIFI_PAC_URL_KEY = "wifiPacUrl";
private static final String DEVICE_ADMIN_PACKAGE_KEY = "deviceAdminPackage";
private static final String OWNER_KEY = "owner";
private static final String DOWNLOAD_LOCATION_KEY = "downloadLocation";
@@ -99,6 +100,7 @@
private static final int OWNER_ID = 11;
private static final int DOWNLOAD_LOCATION_ID = 12;
private static final int HASH_ID = 13;
+ private static final int WIFI_PAC_URL_ID = 14;
// Map from keys to ids.
private static final HashMap<String, Integer> mKeyToId = new HashMap<String, Integer>();
@@ -114,6 +116,7 @@
mKeyToId.put(WIFI_PROXY_HOST_KEY, WIFI_PROXY_HOST_ID);
mKeyToId.put(WIFI_PROXY_PORT_KEY, WIFI_PROXY_PORT_ID);
mKeyToId.put(WIFI_PROXY_BYPASS_KEY, WIFI_PROXY_BYPASS_ID);
+ mKeyToId.put(WIFI_PAC_URL_KEY, WIFI_PAC_URL_ID);
mKeyToId.put(DEVICE_ADMIN_PACKAGE_KEY, DEVICE_ADMIN_PACKAGE_ID);
mKeyToId.put(OWNER_KEY, OWNER_ID);
mKeyToId.put(DOWNLOAD_LOCATION_KEY, DOWNLOAD_LOCATION_ID);
@@ -231,6 +234,9 @@
case WIFI_PROXY_BYPASS_ID:
params.mWifiProxyBypassHosts = value;
break;
+ case WIFI_PAC_URL_ID:
+ params.mWifiPacUrl = value;
+ break;
case DEVICE_ADMIN_PACKAGE_ID:
params.mDeviceAdminPackageName = value;
break;
diff --git a/src/com/android/managedprovisioning/ProvisioningParams.java b/src/com/android/managedprovisioning/ProvisioningParams.java
index a8fa912..072a4ba 100644
--- a/src/com/android/managedprovisioning/ProvisioningParams.java
+++ b/src/com/android/managedprovisioning/ProvisioningParams.java
@@ -33,6 +33,7 @@
public static String mWifiProxyHost;
public static int mWifiProxyPort = 0;
public static String mWifiProxyBypassHosts;
+ public static String mWifiPacUrl;
public static String mDeviceAdminPackageName; // Package name of the device admin package.
public static String mOwner; // Human readable name of the institution that owns this device.
diff --git a/src/com/android/managedprovisioning/WifiConfig.java b/src/com/android/managedprovisioning/WifiConfig.java
index 6ad6cce..b20bcba 100644
--- a/src/com/android/managedprovisioning/WifiConfig.java
+++ b/src/com/android/managedprovisioning/WifiConfig.java
@@ -43,7 +43,7 @@
* Adds a new WiFi network.
*/
public int addNetwork(String ssid, boolean hidden, String type, String password,
- String proxyHost, int proxyPort, String proxyBypassHosts) {
+ String proxyHost, int proxyPort, String proxyBypassHosts, String pacUrl) {
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(true);
}
@@ -77,7 +77,7 @@
break;
}
- updateForProxy(wifiConf, proxyHost, proxyPort, proxyBypassHosts);
+ updateForProxy(wifiConf, proxyHost, proxyPort, proxyBypassHosts, pacUrl);
int netId = mWifiManager.addNetwork(wifiConf);
@@ -122,11 +122,16 @@
}
private void updateForProxy(WifiConfiguration wifiConf, String proxyHost, int proxyPort,
- String proxyBypassHosts) {
- if (proxyHost == null) {
+ String proxyBypassHosts, String pacUrl) {
+ if (TextUtils.isEmpty(proxyHost) && TextUtils.isEmpty(pacUrl)) {
return;
}
- ProxyInfo proxy = new ProxyInfo(proxyHost, proxyPort, proxyBypassHosts);
- wifiConf.setProxy(ProxySettings.STATIC, proxy);
+ if (!TextUtils.isEmpty(proxyHost)) {
+ ProxyInfo proxy = new ProxyInfo(proxyHost, proxyPort, proxyBypassHosts);
+ wifiConf.setProxy(ProxySettings.STATIC, proxy);
+ } else {
+ ProxyInfo proxy = new ProxyInfo(pacUrl);
+ wifiConf.setProxy(ProxySettings.PAC, proxy);
+ }
}
}
diff --git a/src/com/android/managedprovisioning/task/AddWifiNetworkTask.java b/src/com/android/managedprovisioning/task/AddWifiNetworkTask.java
index 5d40a97..6756bbc 100644
--- a/src/com/android/managedprovisioning/task/AddWifiNetworkTask.java
+++ b/src/com/android/managedprovisioning/task/AddWifiNetworkTask.java
@@ -36,6 +36,7 @@
private final String mProxyHost;
private final int mProxyPort;
private final String mProxyBypassHosts;
+ private final String mPacUrl;
private final Callback mCallback;
private WifiManager mWifiManager;
@@ -43,7 +44,7 @@
public AddWifiNetworkTask(Context context, String ssid, boolean hidden, String securityType,
String password, String proxyHost, int proxyPort, String proxyBypassHosts,
- Callback callback) {
+ String pacUrl, Callback callback) {
mCallback = callback;
mContext = context;
mSsid = ssid;
@@ -53,6 +54,7 @@
mProxyHost = proxyHost;
mProxyPort = proxyPort;
mProxyBypassHosts = proxyBypassHosts;
+ mPacUrl = pacUrl;
mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
}
@@ -71,7 +73,7 @@
mNetworkMonitor = new NetworkMonitor(mContext, this);
int netId = wifiConfig.addNetwork(mSsid, mHidden, mSecurityType, mPassword, mProxyHost,
- mProxyPort, mProxyBypassHosts);
+ mProxyPort, mProxyBypassHosts, mPacUrl);
if (netId == -1) {
ProvisionLogger.loge("Failed to save network.");