Add Editable PAC field to Proxy Configuration

Make PAC URL field not read only but now settable in advanced wifi
configuration options.

Bug: 14885470
Change-Id: I2c647f823d5c8a75b5fbf74434cbf0efcc4c50bf
This commit is contained in:
Jason Monk
2014-05-08 13:44:07 -04:00
parent a821f8324a
commit 0485b7c373
4 changed files with 68 additions and 22 deletions

View File

@@ -197,11 +197,6 @@
android:prompt="@string/proxy_settings_title"
android:entries="@array/wifi_proxy_settings" />
<TextView android:id="@+id/proxy_pac_info"
style="@style/wifi_item_content"
android:textStyle="bold"
android:textAlignment="viewStart"
android:visibility="gone"/>
</LinearLayout>
<LinearLayout android:id="@+id/proxy_warning_limited_support"
@@ -216,6 +211,21 @@
android:text="@string/proxy_warning_limited_support" />
</LinearLayout>
<LinearLayout android:id="@+id/proxy_pac_field"
style="@style/wifi_section"
android:visibility="gone">
<LinearLayout style="@style/wifi_item">
<TextView
style="@style/wifi_item_label"
android:text="@string/proxy_url_title" />
<EditText android:id="@+id/proxy_pac"
style="@style/wifi_item_content"
android:hint="@string/proxy_url_hint"
android:inputType="textNoSuggestions"
android:singleLine="true"/>
</LinearLayout>
</LinearLayout>
<LinearLayout android:id="@+id/proxy_fields"
style="@style/wifi_section"
android:visibility="gone">

View File

@@ -469,6 +469,8 @@
<item>None</item>
<!-- Manual HTTP proxy settings are used for the current wifi network [CHAR LIMIT=25] -->
<item>Manual</item>
<!-- Proxy Auto-Config URL that is used for the current wifi network [CHAR LIMIT=25] -->
<item>Proxy Auto-Config</item>
</string-array>
<!-- Sound settings for emergency tone. -->

View File

@@ -445,8 +445,10 @@
<!-- HTTP proxy settings. Warning message about limited application support [CHAR LIMIT=100]-->
<string name="proxy_warning_limited_support">The HTTP proxy is used by the browser but may not be used by the other apps.</string>
<!-- HTTP proxy settings. Title for Proxy-Auto Config URL. [CHAR LIMIT=NONE]-->
<string name="proxy_url">"PAC URL: "</string>
<!-- HTTP proxy settings. Title for Proxy-Auto Config URL. [CHAR LIMIT=25] -->
<string name="proxy_url_title">"PAC URL: "</string>
<!-- HTTP proxy settings. Hint for Proxy-Auto Config URL. -->
<string name="proxy_url_hint" translatable="false">https://www.example.com/proxy.pac</string>
<!-- Radio Info screen. Label for a status item. Used for diagnostic info screens, precise translation isn't needed -->
<string name="radio_info_signal_location_label">Location:</string>

View File

@@ -29,6 +29,7 @@ import android.net.NetworkInfo.DetailedState;
import android.net.NetworkUtils;
import android.net.ProxyInfo;
import android.net.RouteInfo;
import android.net.Uri;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiConfiguration.AuthAlgorithm;
import android.net.wifi.WifiConfiguration.KeyMgmt;
@@ -105,6 +106,7 @@ public class WifiConfigController implements TextWatcher,
/* These values come from "wifi_proxy_settings" resource array */
public static final int PROXY_NONE = 0;
public static final int PROXY_STATIC = 1;
public static final int PROXY_PAC = 2;
/* These values come from "wifi_eap_method" resource array */
public static final int WIFI_EAP_METHOD_PEAP = 0;
@@ -130,6 +132,7 @@ public class WifiConfigController implements TextWatcher,
private TextView mProxyHostView;
private TextView mProxyPortView;
private TextView mProxyExclusionListView;
private TextView mProxyPacView;
private IpAssignment mIpAssignment = IpAssignment.UNASSIGNED;
private ProxySettings mProxySettings = ProxySettings.UNASSIGNED;
@@ -257,11 +260,7 @@ public class WifiConfigController implements TextWatcher,
mProxySettingsSpinner.setSelection(PROXY_STATIC);
showAdvancedFields = true;
} else if (config.getProxySettings() == ProxySettings.PAC) {
mProxySettingsSpinner.setVisibility(View.GONE);
TextView textView = (TextView)mView.findViewById(R.id.proxy_pac_info);
textView.setVisibility(View.VISIBLE);
textView.setText(context.getString(R.string.proxy_url) +
config.getLinkProperties().getHttpProxy().getPacFileUrl());
mProxySettingsSpinner.setSelection(PROXY_PAC);
showAdvancedFields = true;
} else {
mProxySettingsSpinner.setSelection(PROXY_NONE);
@@ -466,11 +465,10 @@ public class WifiConfigController implements TextWatcher,
}
}
mProxySettings = (mProxySettingsSpinner != null &&
mProxySettingsSpinner.getSelectedItemPosition() == PROXY_STATIC) ?
ProxySettings.STATIC : ProxySettings.NONE;
if (mProxySettings == ProxySettings.STATIC && mProxyHostView != null) {
final int selectedPosition = mProxySettingsSpinner.getSelectedItemPosition();
mProxySettings = ProxySettings.NONE;
if (selectedPosition == PROXY_STATIC && mProxyHostView != null) {
mProxySettings = ProxySettings.STATIC;
String host = mProxyHostView.getText().toString();
String portStr = mProxyPortView.getText().toString();
String exclusionList = mProxyExclusionListView.getText().toString();
@@ -488,6 +486,18 @@ public class WifiConfigController implements TextWatcher,
} else {
return false;
}
} else if (selectedPosition == PROXY_PAC && mProxyPacView != null) {
mProxySettings = ProxySettings.PAC;
CharSequence uriSequence = mProxyPacView.getText();
if (TextUtils.isEmpty(uriSequence)) {
return false;
}
Uri uri = Uri.parse(uriSequence.toString());
if (uri == null) {
return false;
}
ProxyInfo proxyInfo = new ProxyInfo(uri);
mLinkProperties.setHttpProxy(proxyInfo);
}
return true;
}
@@ -811,8 +821,9 @@ public class WifiConfigController implements TextWatcher,
}
if (mProxySettingsSpinner.getSelectedItemPosition() == PROXY_STATIC) {
mView.findViewById(R.id.proxy_warning_limited_support).setVisibility(View.VISIBLE);
mView.findViewById(R.id.proxy_fields).setVisibility(View.VISIBLE);
setVisibility(R.id.proxy_warning_limited_support, View.VISIBLE);
setVisibility(R.id.proxy_fields, View.VISIBLE);
setVisibility(R.id.proxy_pac_field, View.GONE);
if (mProxyHostView == null) {
mProxyHostView = (TextView) mView.findViewById(R.id.proxy_hostname);
mProxyHostView.addTextChangedListener(this);
@@ -829,13 +840,34 @@ public class WifiConfigController implements TextWatcher,
mProxyExclusionListView.setText(proxyProperties.getExclusionListAsString());
}
}
} else if (mProxySettingsSpinner.getSelectedItemPosition() == PROXY_PAC) {
setVisibility(R.id.proxy_warning_limited_support, View.GONE);
setVisibility(R.id.proxy_fields, View.GONE);
setVisibility(R.id.proxy_pac_field, View.VISIBLE);
if (mProxyPacView == null) {
mProxyPacView = (TextView) mView.findViewById(R.id.proxy_pac);
mProxyPacView.addTextChangedListener(this);
}
if (config != null) {
ProxyInfo proxyInfo = config.getLinkProperties().getHttpProxy();
if (proxyInfo != null) {
mProxyPacView.setText(proxyInfo.getPacFileUrl().toString());
}
}
} else {
mView.findViewById(R.id.proxy_warning_limited_support).setVisibility(View.GONE);
mView.findViewById(R.id.proxy_fields).setVisibility(View.GONE);
setVisibility(R.id.proxy_warning_limited_support, View.GONE);
setVisibility(R.id.proxy_fields, View.GONE);
setVisibility(R.id.proxy_pac_field, View.GONE);
}
}
private void setVisibility(int id, int visibility) {
final View v = mView.findViewById(id);
if (v != null) {
v.setVisibility(visibility);
}
}
private void loadCertificates(Spinner spinner, String prefix) {
final Context context = mConfigUi.getContext();