diff options
author | Yuhao Zheng <yuhaozheng@google.com> | 2014-02-28 17:09:43 -0800 |
---|---|---|
committer | Yuhao Zheng <yuhaozheng@google.com> | 2014-03-03 11:22:52 -0800 |
commit | 1f7a190fd70c73a6c119b1c30dc4e4c034d8f343 (patch) | |
tree | 6e6d11b8a5b6eac8edf468fe1e629b2ea68c8217 /src/com/android/settings/ProxySelector.java | |
parent | 0f9ab453766bd20a26d3ce5dc8fbf233023ecd16 (diff) | |
download | packages_apps_Settings-1f7a190fd70c73a6c119b1c30dc4e4c034d8f343.zip packages_apps_Settings-1f7a190fd70c73a6c119b1c30dc4e4c034d8f343.tar.gz packages_apps_Settings-1f7a190fd70c73a6c119b1c30dc4e4c034d8f343.tar.bz2 |
Make Setting UI use system proxy validity check
Setting UI performs some validity check on proxy settings, such that user
can't click "Save" until inputs are valid. However, it uses a different
validity pattern than framework, such that user may still be able to click
"Save" but the changes are silently rejected by framework. Fixed by using
the system proxy validity check routine.
bug: 13248097
Change-Id: Ia1eef53588e6923a838cb5629e373697001a8ba6
Diffstat (limited to 'src/com/android/settings/ProxySelector.java')
-rw-r--r-- | src/com/android/settings/ProxySelector.java | 61 |
1 files changed, 16 insertions, 45 deletions
diff --git a/src/com/android/settings/ProxySelector.java b/src/com/android/settings/ProxySelector.java index 21e717a..052ea0a 100644 --- a/src/com/android/settings/ProxySelector.java +++ b/src/com/android/settings/ProxySelector.java @@ -45,8 +45,6 @@ import android.widget.EditText; import android.widget.TextView; import java.net.InetSocketAddress; -import java.util.regex.Matcher; -import java.util.regex.Pattern; public class ProxySelector extends Fragment implements DialogCreatable { private static final String TAG = "ProxySelector"; @@ -58,22 +56,6 @@ public class ProxySelector extends Fragment implements DialogCreatable { Button mClearButton; Button mDefaultButton; - // Allows underscore char to supports proxies that do not - // follow the spec - private static final String HC = "a-zA-Z0-9\\_"; - - // Matches blank input, ips, and domain names - private static final String HOSTNAME_REGEXP = - "^$|^[" + HC + "]+(\\-[" + HC + "]+)*(\\.[" + HC + "]+(\\-[" + HC + "]+)*)*$"; - private static final Pattern HOSTNAME_PATTERN; - private static final String EXCLUSION_REGEXP = - "$|^(\\*)?\\.?[" + HC + "]+(\\-[" + HC + "]+)*(\\.[" + HC + "]+(\\-[" + HC + "]+)*)*$"; - private static final Pattern EXCLUSION_PATTERN; - static { - HOSTNAME_PATTERN = Pattern.compile(HOSTNAME_REGEXP); - EXCLUSION_PATTERN = Pattern.compile(EXCLUSION_REGEXP); - } - private static final int ERROR_DIALOG_ID = 0; private SettingsDialogFragment mDialogFragment; @@ -203,35 +185,24 @@ public class ProxySelector extends Fragment implements DialogCreatable { * @return 0 on success, string resource ID on failure */ public static int validate(String hostname, String port, String exclList) { - Matcher match = HOSTNAME_PATTERN.matcher(hostname); - String exclListArray[] = exclList.split(","); - - if (!match.matches()) return R.string.proxy_error_invalid_host; - - for (String excl : exclListArray) { - Matcher m = EXCLUSION_PATTERN.matcher(excl); - if (!m.matches()) return R.string.proxy_error_invalid_exclusion_list; - } - - if (hostname.length() > 0 && port.length() == 0) { - return R.string.proxy_error_empty_port; - } - - if (port.length() > 0) { - if (hostname.length() == 0) { + switch (Proxy.validate(hostname, port, exclList)) { + case Proxy.PROXY_VALID: + return 0; + case Proxy.PROXY_HOSTNAME_EMPTY: return R.string.proxy_error_empty_host_set_port; - } - int portVal = -1; - try { - portVal = Integer.parseInt(port); - } catch (NumberFormatException ex) { + case Proxy.PROXY_HOSTNAME_INVALID: + return R.string.proxy_error_invalid_host; + case Proxy.PROXY_PORT_EMPTY: + return R.string.proxy_error_empty_port; + case Proxy.PROXY_PORT_INVALID: return R.string.proxy_error_invalid_port; - } - if (portVal <= 0 || portVal > 0xFFFF) { - return R.string.proxy_error_invalid_port; - } + case Proxy.PROXY_EXCLLIST_INVALID: + return R.string.proxy_error_invalid_exclusion_list; + default: + // should neven happen + Log.e(TAG, "Unknown proxy settings error"); + return -1; } - return 0; } /** @@ -245,7 +216,7 @@ public class ProxySelector extends Fragment implements DialogCreatable { int port = 0; int result = validate(hostname, portStr, exclList); - if (result > 0) { + if (result != 0) { showDialog(ERROR_DIALOG_ID); return false; } |