WifiConfigController.java revision 265dfd22e3681edfff14f068c1a113a28b4cd45c
1d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa/* 2d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * Copyright (C) 2010 The Android Open Source Project 3d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * 4d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License"); 5d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * you may not use this file except in compliance with the License. 6d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * You may obtain a copy of the License at 7d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * 8d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * http://www.apache.org/licenses/LICENSE-2.0 9d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * 10d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software 11d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS, 12d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * See the License for the specific language governing permissions and 14d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * limitations under the License. 15d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa */ 16d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 17d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawapackage com.android.settings.wifi; 18d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 19e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport static android.net.wifi.WifiConfiguration.INVALID_NETWORK_ID; 20e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 21d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.content.Context; 22d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.content.res.Resources; 2334ce343004ae925b653664f445eea627355e33abIrfan Sheriffimport android.net.LinkAddress; 2434ce343004ae925b653664f445eea627355e33abIrfan Sheriffimport android.net.LinkProperties; 25d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.net.NetworkInfo.DetailedState; 2634ce343004ae925b653664f445eea627355e33abIrfan Sheriffimport android.net.NetworkUtils; 27c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriffimport android.net.ProxyProperties; 283c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwaltimport android.net.RouteInfo; 29d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.net.wifi.WifiConfiguration; 30d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.net.wifi.WifiConfiguration.AuthAlgorithm; 31e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport android.net.wifi.WifiConfiguration.IpAssignment; 32d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.net.wifi.WifiConfiguration.KeyMgmt; 33c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriffimport android.net.wifi.WifiConfiguration.ProxySettings; 34f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriffimport android.net.wifi.WifiEnterpriseConfig; 35f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriffimport android.net.wifi.WifiEnterpriseConfig.Eap; 36f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriffimport android.net.wifi.WifiEnterpriseConfig.Phase2; 37d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.net.wifi.WifiInfo; 38d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriffimport android.os.Handler; 39d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.security.Credentials; 40d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.security.KeyStore; 41d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.text.Editable; 42d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.text.InputType; 43d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.text.TextWatcher; 44db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriffimport android.text.TextUtils; 4534ce343004ae925b653664f445eea627355e33abIrfan Sheriffimport android.util.Log; 46d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.view.View; 47d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.view.ViewGroup; 48d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.AdapterView; 49d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.ArrayAdapter; 505640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriffimport android.widget.Button; 51d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.CheckBox; 52265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasaniimport android.widget.CompoundButton; 53bd3d66cac5f2f2135c6d0fcd86cb7912cf936403Irfan Sheriffimport android.widget.EditText; 54d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.Spinner; 55d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.TextView; 56265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasaniimport android.widget.CompoundButton.OnCheckedChangeListener; 57d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 58c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriffimport com.android.settings.ProxySelector; 59d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport com.android.settings.R; 60c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 61c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriffimport java.net.InetAddress; 6234ce343004ae925b653664f445eea627355e33abIrfan Sheriffimport java.util.Iterator; 63d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 64d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa/** 65e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * The class for allowing UIs like {@link WifiDialog} and {@link WifiConfigUiBase} to 66d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * share the logic for controlling buttons, text fields, etc. 67d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa */ 68d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawapublic class WifiConfigController implements TextWatcher, 69d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa View.OnClickListener, AdapterView.OnItemSelectedListener { 70d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private final WifiConfigUiBase mConfigUi; 71d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private final View mView; 72d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private final AccessPoint mAccessPoint; 73d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 74d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private boolean mEdit; 75d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 76f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private TextView mSsidView; 77d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 78d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa // e.g. AccessPoint.SECURITY_NONE 79f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private int mAccessPointSecurity; 80d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private TextView mPasswordView; 81265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani private CheckBox mShowPassword; 82d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 83de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff private String unspecifiedCert = "unspecified"; 84f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private static final int unspecifiedCertIndex = 0; 85f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 86f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff /* Phase2 methods supported by PEAP are limited */ 87f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private final ArrayAdapter<String> PHASE2_PEAP_ADAPTER; 88f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff /* Full list of phase2 methods */ 89f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private final ArrayAdapter<String> PHASE2_FULL_ADAPTER; 90de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff 91f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private Spinner mSecuritySpinner; 92f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private Spinner mEapMethodSpinner; 93f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private Spinner mEapCaCertSpinner; 94f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private Spinner mPhase2Spinner; 95f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Associated with mPhase2Spinner, one of PHASE2_FULL_ADAPTER or PHASE2_PEAP_ADAPTER 96f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private ArrayAdapter<String> mPhase2Adapter; 97f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private Spinner mEapUserCertSpinner; 98f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private TextView mEapIdentityView; 99f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private TextView mEapAnonymousView; 100f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 101e82a459392db4dee491bcef8a15ccd5cbd067f1bIrfan Sheriff /* This value comes from "wifi_ip_settings" resource array */ 102c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff private static final int DHCP = 0; 103e82a459392db4dee491bcef8a15ccd5cbd067f1bIrfan Sheriff private static final int STATIC_IP = 1; 104b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff 105c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff /* These values come from "wifi_proxy_settings" resource array */ 106c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff public static final int PROXY_NONE = 0; 107c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff public static final int PROXY_STATIC = 1; 108c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 109f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff /* These values come from "wifi_eap_method" resource array */ 110ba7ee527d8683f718efbc85558310b8ba269809bPartha N public static final int WIFI_EAP_METHOD_PEAP = 0; 111ba7ee527d8683f718efbc85558310b8ba269809bPartha N public static final int WIFI_EAP_METHOD_TLS = 1; 112ba7ee527d8683f718efbc85558310b8ba269809bPartha N public static final int WIFI_EAP_METHOD_TTLS = 2; 113ba7ee527d8683f718efbc85558310b8ba269809bPartha N public static final int WIFI_EAP_METHOD_PWD = 3; 114ba7ee527d8683f718efbc85558310b8ba269809bPartha N 115f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff /* These values come from "wifi_peap_phase2_entries" resource array */ 116f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff public static final int WIFI_PEAP_PHASE2_NONE = 0; 117f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff public static final int WIFI_PEAP_PHASE2_MSCHAPV2 = 1; 118f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff public static final int WIFI_PEAP_PHASE2_GTC = 2; 119f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 12034ce343004ae925b653664f445eea627355e33abIrfan Sheriff private static final String TAG = "WifiConfigController"; 12134ce343004ae925b653664f445eea627355e33abIrfan Sheriff 122f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private Spinner mIpSettingsSpinner; 123f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private TextView mIpAddressView; 124f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private TextView mGatewayView; 12534ce343004ae925b653664f445eea627355e33abIrfan Sheriff private TextView mNetworkPrefixLengthView; 126f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private TextView mDns1View; 127f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private TextView mDns2View; 128d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 129c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff private Spinner mProxySettingsSpinner; 130c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff private TextView mProxyHostView; 131c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff private TextView mProxyPortView; 132c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff private TextView mProxyExclusionListView; 133c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 134c7787a78f74a41820cfc31ff5fd51ee8d8c6df17Irfan Sheriff private IpAssignment mIpAssignment = IpAssignment.UNASSIGNED; 135c7787a78f74a41820cfc31ff5fd51ee8d8c6df17Irfan Sheriff private ProxySettings mProxySettings = ProxySettings.UNASSIGNED; 136cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff private LinkProperties mLinkProperties = new LinkProperties(); 137cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff 138dadf1e53cb99691689028667aab473ea4ccf67faDaisuke Miyakawa // True when this instance is used in SetupWizard XL context. 139dadf1e53cb99691689028667aab473ea4ccf67faDaisuke Miyakawa private final boolean mInXlSetupWizard; 140dadf1e53cb99691689028667aab473ea4ccf67faDaisuke Miyakawa 141d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff private final Handler mTextViewChangedHandler; 142d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff 14358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa public WifiConfigController( 14458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa WifiConfigUiBase parent, View view, AccessPoint accessPoint, boolean edit) { 145d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi = parent; 146dadf1e53cb99691689028667aab473ea4ccf67faDaisuke Miyakawa mInXlSetupWizard = (parent instanceof WifiConfigUiForSetupWizardXL); 147d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 148d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mView = view; 149d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mAccessPoint = accessPoint; 150f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mAccessPointSecurity = (accessPoint == null) ? AccessPoint.SECURITY_NONE : 151f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff accessPoint.security; 152d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mEdit = edit; 153d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 154d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mTextViewChangedHandler = new Handler(); 155d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa final Context context = mConfigUi.getContext(); 156d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa final Resources resources = context.getResources(); 157d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 158f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff PHASE2_PEAP_ADAPTER = new ArrayAdapter<String>( 159f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff context, android.R.layout.simple_spinner_item, 160f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff context.getResources().getStringArray(R.array.wifi_peap_phase2_entries)); 161f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff PHASE2_PEAP_ADAPTER.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 162f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 163f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff PHASE2_FULL_ADAPTER = new ArrayAdapter<String>( 164f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff context, android.R.layout.simple_spinner_item, 165f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff context.getResources().getStringArray(R.array.wifi_phase2_entries)); 166f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff PHASE2_FULL_ADAPTER.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 167f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 168de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff unspecifiedCert = context.getString(R.string.wifi_unspecified); 169d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mIpSettingsSpinner = (Spinner) mView.findViewById(R.id.ip_settings); 170d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mIpSettingsSpinner.setOnItemSelectedListener(this); 171d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mProxySettingsSpinner = (Spinner) mView.findViewById(R.id.proxy_settings); 172d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mProxySettingsSpinner.setOnItemSelectedListener(this); 173d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff 17458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa if (mAccessPoint == null) { // new network 175d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi.setTitle(R.string.wifi_add_network); 176d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa 177f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mSsidView = (TextView) mView.findViewById(R.id.ssid); 178f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mSsidView.addTextChangedListener(this); 179f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mSecuritySpinner = ((Spinner) mView.findViewById(R.id.security)); 180f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mSecuritySpinner.setOnItemSelectedListener(this); 18135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (mInXlSetupWizard) { 182d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa mView.findViewById(R.id.type_ssid).setVisibility(View.VISIBLE); 183d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa mView.findViewById(R.id.type_security).setVisibility(View.VISIBLE); 1847893447987debb6bde72f4efb6b07f6e0d5b4f6fDaisuke Miyakawa // We want custom layout. The content must be same as the other cases. 1858b2bf2e53814a20f09f658554cde61657df8ac99Isaac Levy 1868b2bf2e53814a20f09f658554cde61657df8ac99Isaac Levy ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, 1878b2bf2e53814a20f09f658554cde61657df8ac99Isaac Levy R.layout.wifi_setup_custom_list_item_1, android.R.id.text1, 1888b2bf2e53814a20f09f658554cde61657df8ac99Isaac Levy context.getResources().getStringArray(R.array.wifi_security_no_eap)); 1898b2bf2e53814a20f09f658554cde61657df8ac99Isaac Levy mSecuritySpinner.setAdapter(adapter); 190d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa } else { 191d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa mView.findViewById(R.id.type).setVisibility(View.VISIBLE); 1927893447987debb6bde72f4efb6b07f6e0d5b4f6fDaisuke Miyakawa } 193d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff 194d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff showIpConfigFields(); 195d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff showProxyFields(); 196d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mView.findViewById(R.id.wifi_advanced_toggle).setVisibility(View.VISIBLE); 197d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mView.findViewById(R.id.wifi_advanced_togglebox).setOnClickListener(this); 198d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff 199d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi.setSubmitButton(context.getString(R.string.wifi_save)); 200d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } else { 201d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi.setTitle(mAccessPoint.ssid); 202c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 203d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa ViewGroup group = (ViewGroup) mView.findViewById(R.id.info); 204d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 205d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa DetailedState state = mAccessPoint.getState(); 206d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (state != null) { 207d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa addRow(group, R.string.wifi_status, Summary.get(mConfigUi.getContext(), state)); 208d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 209d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 210d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa int level = mAccessPoint.getLevel(); 211d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (level != -1) { 212d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa String[] signal = resources.getStringArray(R.array.wifi_signal); 213d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa addRow(group, R.string.wifi_signal, signal[level]); 214d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 215d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 216d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa WifiInfo info = mAccessPoint.getInfo(); 2177c210ba5c18c2720023dd8fc4215cde95a6fe71cIrfan Sheriff if (info != null && info.getLinkSpeed() != -1) { 218d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa addRow(group, R.string.wifi_speed, info.getLinkSpeed() + WifiInfo.LINK_SPEED_UNITS); 219d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 220d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 221d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy addRow(group, R.string.wifi_security, mAccessPoint.getSecurityString(false)); 222d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy 223d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy boolean showAdvancedFields = false; 224c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (mAccessPoint.networkId != INVALID_NETWORK_ID) { 225c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff WifiConfiguration config = mAccessPoint.getConfig(); 226c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (config.ipAssignment == IpAssignment.STATIC) { 227c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mIpSettingsSpinner.setSelection(STATIC_IP); 228d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy showAdvancedFields = true; 229c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } else { 230c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mIpSettingsSpinner.setSelection(DHCP); 231c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 232317e0aa530760ee323c7a98321d9b34a2ffa1d41Irfan Sheriff //Display IP addresses 233317e0aa530760ee323c7a98321d9b34a2ffa1d41Irfan Sheriff for(InetAddress a : config.linkProperties.getAddresses()) { 234317e0aa530760ee323c7a98321d9b34a2ffa1d41Irfan Sheriff addRow(group, R.string.wifi_ip_address, a.getHostAddress()); 235317e0aa530760ee323c7a98321d9b34a2ffa1d41Irfan Sheriff } 236317e0aa530760ee323c7a98321d9b34a2ffa1d41Irfan Sheriff 237c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 238c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (config.proxySettings == ProxySettings.STATIC) { 239c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mProxySettingsSpinner.setSelection(PROXY_STATIC); 240d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy showAdvancedFields = true; 241c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } else { 242c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mProxySettingsSpinner.setSelection(PROXY_NONE); 243c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 244c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 245c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 246b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff if (mAccessPoint.networkId == INVALID_NETWORK_ID || mEdit) { 247d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa showSecurityFields(); 248f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff showIpConfigFields(); 249c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff showProxyFields(); 250d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy mView.findViewById(R.id.wifi_advanced_toggle).setVisibility(View.VISIBLE); 251d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy mView.findViewById(R.id.wifi_advanced_togglebox).setOnClickListener(this); 252d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy if (showAdvancedFields) { 253d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy ((CheckBox) mView.findViewById(R.id.wifi_advanced_togglebox)).setChecked(true); 254d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy mView.findViewById(R.id.wifi_advanced_fields).setVisibility(View.VISIBLE); 255d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy } 256d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 257d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 258d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (mEdit) { 259d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi.setSubmitButton(context.getString(R.string.wifi_save)); 260d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } else { 261d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (state == null && level != -1) { 262d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi.setSubmitButton(context.getString(R.string.wifi_connect)); 263f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } else { 264b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff mView.findViewById(R.id.ip_fields).setVisibility(View.GONE); 265d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 266b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff if (mAccessPoint.networkId != INVALID_NETWORK_ID) { 267d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi.setForgetButton(context.getString(R.string.wifi_forget)); 268d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 269d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 270d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 271d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 272f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 273d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi.setCancelButton(context.getString(R.string.wifi_cancel)); 274d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (mConfigUi.getSubmitButton() != null) { 275d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa enableSubmitIfAppropriate(); 276d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 277d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 278d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 279d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private void addRow(ViewGroup group, int name, String value) { 280d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa View row = mConfigUi.getLayoutInflater().inflate(R.layout.wifi_dialog_row, group, false); 281d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa ((TextView) row.findViewById(R.id.name)).setText(name); 282d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa ((TextView) row.findViewById(R.id.value)).setText(value); 283d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa group.addView(row); 284d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 285d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 2865640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff /* show submit button if password, ip and proxy settings are valid */ 2870c0bd827a104ee3a5891b8c5f1dae6db422e09e9Irfan Sheriff void enableSubmitIfAppropriate() { 2885640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff Button submit = mConfigUi.getSubmitButton(); 2895640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff if (submit == null) return; 2905640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff 29181da4884778ad3ce69e14ade0f3c214db773e49bIrfan Sheriff boolean enabled = false; 29221e644a9a817ec8daf4c118a9890057a30e041daIrfan Sheriff boolean passwordInvalid = false; 29321e644a9a817ec8daf4c118a9890057a30e041daIrfan Sheriff 294d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff if (mPasswordView != null && 295d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff ((mAccessPointSecurity == AccessPoint.SECURITY_WEP && mPasswordView.length() == 0) || 296d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff (mAccessPointSecurity == AccessPoint.SECURITY_PSK && mPasswordView.length() < 8))) { 29721e644a9a817ec8daf4c118a9890057a30e041daIrfan Sheriff passwordInvalid = true; 29821e644a9a817ec8daf4c118a9890057a30e041daIrfan Sheriff } 29921e644a9a817ec8daf4c118a9890057a30e041daIrfan Sheriff 300f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff if ((mSsidView != null && mSsidView.length() == 0) || 301b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff ((mAccessPoint == null || mAccessPoint.networkId == INVALID_NETWORK_ID) && 30221e644a9a817ec8daf4c118a9890057a30e041daIrfan Sheriff passwordInvalid)) { 3035640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff enabled = false; 3045640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff } else { 305990c3ad530aa919256a0b341dbe763503b41ff2bIrfan Sheriff if (ipAndProxyFieldsAreValid()) { 306990c3ad530aa919256a0b341dbe763503b41ff2bIrfan Sheriff enabled = true; 307990c3ad530aa919256a0b341dbe763503b41ff2bIrfan Sheriff } else { 308990c3ad530aa919256a0b341dbe763503b41ff2bIrfan Sheriff enabled = false; 309990c3ad530aa919256a0b341dbe763503b41ff2bIrfan Sheriff } 310d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 3115640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff submit.setEnabled(enabled); 312d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 313d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 314d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa /* package */ WifiConfiguration getConfig() { 315b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID && !mEdit) { 316d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa return null; 317d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 318d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 319d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa WifiConfiguration config = new WifiConfiguration(); 320d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 321d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (mAccessPoint == null) { 322d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.SSID = AccessPoint.convertToQuotedString( 323f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mSsidView.getText().toString()); 324d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa // If the user adds a network manually, assume that it is hidden. 325d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.hiddenSSID = true; 326b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff } else if (mAccessPoint.networkId == INVALID_NETWORK_ID) { 327d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.SSID = AccessPoint.convertToQuotedString( 328d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mAccessPoint.ssid); 329d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } else { 330d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.networkId = mAccessPoint.networkId; 331d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 332d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 333f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff switch (mAccessPointSecurity) { 334d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa case AccessPoint.SECURITY_NONE: 335d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.allowedKeyManagement.set(KeyMgmt.NONE); 336f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff break; 337d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 338d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa case AccessPoint.SECURITY_WEP: 339d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.allowedKeyManagement.set(KeyMgmt.NONE); 340d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN); 341d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED); 342d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (mPasswordView.length() != 0) { 343d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa int length = mPasswordView.length(); 344d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa String password = mPasswordView.getText().toString(); 345d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa // WEP-40, WEP-104, and 256-bit WEP (WEP-232?) 346d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if ((length == 10 || length == 26 || length == 58) && 347d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa password.matches("[0-9A-Fa-f]*")) { 348d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.wepKeys[0] = password; 349d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } else { 350d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.wepKeys[0] = '"' + password + '"'; 351d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 352d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 353f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff break; 354d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 355d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa case AccessPoint.SECURITY_PSK: 356d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.allowedKeyManagement.set(KeyMgmt.WPA_PSK); 357d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (mPasswordView.length() != 0) { 358d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa String password = mPasswordView.getText().toString(); 359d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (password.matches("[0-9A-Fa-f]{64}")) { 360d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.preSharedKey = password; 361d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } else { 362d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.preSharedKey = '"' + password + '"'; 363d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 364d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 365f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff break; 366d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 367d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa case AccessPoint.SECURITY_EAP: 368d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.allowedKeyManagement.set(KeyMgmt.WPA_EAP); 369d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.allowedKeyManagement.set(KeyMgmt.IEEE8021X); 370f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig = new WifiEnterpriseConfig(); 371f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff int eapMethod = mEapMethodSpinner.getSelectedItemPosition(); 372f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff int phase2Method = mPhase2Spinner.getSelectedItemPosition(); 373f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig.setEapMethod(eapMethod); 374f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff switch (eapMethod) { 375f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case Eap.PEAP: 376f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // PEAP supports limited phase2 values 377f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Map the index from the PHASE2_PEAP_ADAPTER to the one used 378f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // by the API which has the full list of PEAP methods. 379f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff switch(phase2Method) { 380f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case WIFI_PEAP_PHASE2_NONE: 381f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig.setPhase2Method(Phase2.NONE); 382f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 383f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case WIFI_PEAP_PHASE2_MSCHAPV2: 384f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig.setPhase2Method(Phase2.MSCHAPV2); 385f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 386f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case WIFI_PEAP_PHASE2_GTC: 387f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig.setPhase2Method(Phase2.GTC); 388f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 389f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff default: 390f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff Log.e(TAG, "Unknown phase2 method" + phase2Method); 391f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 392f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 393f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 394f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff default: 395f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // The default index from PHASE2_FULL_ADAPTER maps to the API 396f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig.setPhase2Method(phase2Method); 397f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 398f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 399de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff String caCert = (String) mEapCaCertSpinner.getSelectedItem(); 400de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff if (caCert.equals(unspecifiedCert)) caCert = ""; 401c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff config.enterpriseConfig.setCaCertificateAlias(caCert); 402de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff String clientCert = (String) mEapUserCertSpinner.getSelectedItem(); 403de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff if (clientCert.equals(unspecifiedCert)) clientCert = ""; 404c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff config.enterpriseConfig.setClientCertificateAlias(clientCert); 405de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff config.enterpriseConfig.setIdentity(mEapIdentityView.getText().toString()); 406de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff config.enterpriseConfig.setAnonymousIdentity( 407f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mEapAnonymousView.getText().toString()); 408f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 409f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff if (mPasswordView.isShown()) { 410f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // For security reasons, a previous password is not displayed to user. 411f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Update only if it has been changed. 412f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff if (mPasswordView.length() > 0) { 413f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig.setPassword(mPasswordView.getText().toString()); 414f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 415f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } else { 416f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // clear password 417f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig.setPassword(mPasswordView.getText().toString()); 418f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 419f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 420f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff default: 421f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff return null; 422f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 423f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 424cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff config.proxySettings = mProxySettings; 425cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff config.ipAssignment = mIpAssignment; 426cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff config.linkProperties = new LinkProperties(mLinkProperties); 427cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff 428cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff return config; 429cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff } 430cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff 4315640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff private boolean ipAndProxyFieldsAreValid() { 432cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff mLinkProperties.clear(); 433cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff mIpAssignment = (mIpSettingsSpinner != null && 434c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mIpSettingsSpinner.getSelectedItemPosition() == STATIC_IP) ? 435f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff IpAssignment.STATIC : IpAssignment.DHCP; 436f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 437cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff if (mIpAssignment == IpAssignment.STATIC) { 438cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff int result = validateIpConfigFields(mLinkProperties); 439cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff if (result != 0) { 4405640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff return false; 441c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 442c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 443c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 444cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff mProxySettings = (mProxySettingsSpinner != null && 445c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mProxySettingsSpinner.getSelectedItemPosition() == PROXY_STATIC) ? 446c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff ProxySettings.STATIC : ProxySettings.NONE; 447c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 448d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff if (mProxySettings == ProxySettings.STATIC && mProxyHostView != null) { 449c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff String host = mProxyHostView.getText().toString(); 45052322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt String portStr = mProxyPortView.getText().toString(); 451c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff String exclusionList = mProxyExclusionListView.getText().toString(); 45252322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt int port = 0; 45352322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt int result = 0; 45452322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt try { 45552322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt port = Integer.parseInt(portStr); 45652322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt result = ProxySelector.validate(host, portStr, exclusionList); 45752322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt } catch (NumberFormatException e) { 45852322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt result = R.string.proxy_error_invalid_port; 45952322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt } 460c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (result == 0) { 46152322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt ProxyProperties proxyProperties= new ProxyProperties(host, port, exclusionList); 462cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff mLinkProperties.setHttpProxy(proxyProperties); 463c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } else { 4645640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff return false; 465f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 466d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 4675640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff return true; 468d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 469d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 47034ce343004ae925b653664f445eea627355e33abIrfan Sheriff private int validateIpConfigFields(LinkProperties linkProperties) { 471d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff if (mIpAddressView == null) return 0; 472d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff 473c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt String ipAddr = mIpAddressView.getText().toString(); 474db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff if (TextUtils.isEmpty(ipAddr)) return R.string.wifi_ip_settings_invalid_ip_address; 475db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff 476c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt InetAddress inetAddr = null; 47734ce343004ae925b653664f445eea627355e33abIrfan Sheriff try { 478c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt inetAddr = NetworkUtils.numericToInetAddress(ipAddr); 479c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt } catch (IllegalArgumentException e) { 480c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt return R.string.wifi_ip_settings_invalid_ip_address; 481c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt } 48234ce343004ae925b653664f445eea627355e33abIrfan Sheriff 483c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt int networkPrefixLength = -1; 484c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt try { 485c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt networkPrefixLength = Integer.parseInt(mNetworkPrefixLengthView.getText().toString()); 486d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff if (networkPrefixLength < 0 || networkPrefixLength > 32) { 487d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff return R.string.wifi_ip_settings_invalid_network_prefix_length; 488d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } 489d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff linkProperties.addLinkAddress(new LinkAddress(inetAddr, networkPrefixLength)); 490e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } catch (NumberFormatException e) { 491db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff // Set the hint as default after user types in ip address 492db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff mNetworkPrefixLengthView.setText(mConfigUi.getContext().getString( 493db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff R.string.wifi_network_prefix_length_hint)); 494e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } 49534ce343004ae925b653664f445eea627355e33abIrfan Sheriff 496c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt String gateway = mGatewayView.getText().toString(); 497db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff if (TextUtils.isEmpty(gateway)) { 498db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff try { 499db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff //Extract a default gateway from IP address 500db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff InetAddress netPart = NetworkUtils.getNetworkPart(inetAddr, networkPrefixLength); 501db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff byte[] addr = netPart.getAddress(); 502db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff addr[addr.length-1] = 1; 503db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff mGatewayView.setText(InetAddress.getByAddress(addr).getHostAddress()); 504db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff } catch (RuntimeException ee) { 505db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff } catch (java.net.UnknownHostException u) { 506db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff } 507d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } else { 508d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff InetAddress gatewayAddr = null; 509d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff try { 510d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff gatewayAddr = NetworkUtils.numericToInetAddress(gateway); 511d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } catch (IllegalArgumentException e) { 512d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff return R.string.wifi_ip_settings_invalid_gateway; 513d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } 514d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff linkProperties.addRoute(new RouteInfo(gatewayAddr)); 515db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff } 516db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff 517c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt String dns = mDns1View.getText().toString(); 518d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff InetAddress dnsAddr = null; 519d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff 520db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff if (TextUtils.isEmpty(dns)) { 521db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff //If everything else is valid, provide hint as a default option 522db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff mDns1View.setText(mConfigUi.getContext().getString(R.string.wifi_dns1_hint)); 523d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } else { 524d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff try { 525d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff dnsAddr = NetworkUtils.numericToInetAddress(dns); 526d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } catch (IllegalArgumentException e) { 527d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff return R.string.wifi_ip_settings_invalid_dns; 528d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } 529d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff linkProperties.addDns(dnsAddr); 530db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff } 531d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff 532c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt if (mDns2View.length() > 0) { 533c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt dns = mDns2View.getText().toString(); 534caf8cf5cf5e464b9b26ab15e2f502b04eeac9b9bRobert Greenwalt try { 535c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt dnsAddr = NetworkUtils.numericToInetAddress(dns); 536c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt } catch (IllegalArgumentException e) { 53734ce343004ae925b653664f445eea627355e33abIrfan Sheriff return R.string.wifi_ip_settings_invalid_dns; 53834ce343004ae925b653664f445eea627355e33abIrfan Sheriff } 539c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt linkProperties.addDns(dnsAddr); 54034ce343004ae925b653664f445eea627355e33abIrfan Sheriff } 54134ce343004ae925b653664f445eea627355e33abIrfan Sheriff return 0; 54234ce343004ae925b653664f445eea627355e33abIrfan Sheriff } 54334ce343004ae925b653664f445eea627355e33abIrfan Sheriff 544d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private void showSecurityFields() { 54535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (mInXlSetupWizard) { 54635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // Note: XL SetupWizard won't hide "EAP" settings here. 54735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (!((WifiSettingsForSetupWizardXL)mConfigUi.getContext()).initSecurityFields(mView, 54835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mAccessPointSecurity)) { 54935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa return; 55035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 55135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 552f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff if (mAccessPointSecurity == AccessPoint.SECURITY_NONE) { 553b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff mView.findViewById(R.id.security_fields).setVisibility(View.GONE); 554d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa return; 555d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 556b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff mView.findViewById(R.id.security_fields).setVisibility(View.VISIBLE); 557d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 558d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (mPasswordView == null) { 559d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mPasswordView = (TextView) mView.findViewById(R.id.password); 560d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mPasswordView.addTextChangedListener(this); 561265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani mShowPassword = (CheckBox) mView.findViewById(R.id.show_password); 562265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani mShowPassword.setOnClickListener(this); 563265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani mShowPassword.setOnCheckedChangeListener(new OnCheckedChangeListener() { 564265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 565265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani updatePasswordVisibility(isChecked); 566265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani } 567265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani }); 568b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { 569d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mPasswordView.setHint(R.string.wifi_unchanged); 570d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 571d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 572d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 573f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff if (mAccessPointSecurity != AccessPoint.SECURITY_EAP) { 574d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mView.findViewById(R.id.eap).setVisibility(View.GONE); 575d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa return; 576d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 577d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mView.findViewById(R.id.eap).setVisibility(View.VISIBLE); 5783c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwalt 579f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff if (mEapMethodSpinner == null) { 580f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mEapMethodSpinner = (Spinner) mView.findViewById(R.id.method); 581ba7ee527d8683f718efbc85558310b8ba269809bPartha N mEapMethodSpinner.setOnItemSelectedListener(this); 582f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2); 583f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mEapCaCertSpinner = (Spinner) mView.findViewById(R.id.ca_cert); 584f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mEapUserCertSpinner = (Spinner) mView.findViewById(R.id.user_cert); 585f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mEapIdentityView = (TextView) mView.findViewById(R.id.identity); 586f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mEapAnonymousView = (TextView) mView.findViewById(R.id.anonymous); 587d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 588f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff loadCertificates(mEapCaCertSpinner, Credentials.CA_CERTIFICATE); 589f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff loadCertificates(mEapUserCertSpinner, Credentials.USER_PRIVATE_KEY); 590d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 591f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Modifying an existing network 592b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { 593c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff WifiEnterpriseConfig enterpriseConfig = mAccessPoint.getConfig().enterpriseConfig; 594c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff int eapMethod = enterpriseConfig.getEapMethod(); 595c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff int phase2Method = enterpriseConfig.getPhase2Method(); 596f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mEapMethodSpinner.setSelection(eapMethod); 597f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff showEapFieldsByMethod(eapMethod); 598f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff switch (eapMethod) { 599f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case Eap.PEAP: 600f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff switch (phase2Method) { 601f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case Phase2.NONE: 602f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_NONE); 603f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 604f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case Phase2.MSCHAPV2: 605f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_MSCHAPV2); 606f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 607f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case Phase2.GTC: 608f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_GTC); 609f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 610f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff default: 611f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff Log.e(TAG, "Invalid phase 2 method " + phase2Method); 612f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 613f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 614f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 615f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff default: 616f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Spinner.setSelection(phase2Method); 617f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 618f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 619c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff setSelection(mEapCaCertSpinner, enterpriseConfig.getCaCertificateAlias()); 620c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff setSelection(mEapUserCertSpinner, enterpriseConfig.getClientCertificateAlias()); 621c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff mEapIdentityView.setText(enterpriseConfig.getIdentity()); 622c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff mEapAnonymousView.setText(enterpriseConfig.getAnonymousIdentity()); 623d181bb62bc26c797209e0f355e655ba2559285e1Irfan Sheriff } else { 624d181bb62bc26c797209e0f355e655ba2559285e1Irfan Sheriff // Choose a default for a new network and show only appropriate 625d181bb62bc26c797209e0f355e655ba2559285e1Irfan Sheriff // fields 626d181bb62bc26c797209e0f355e655ba2559285e1Irfan Sheriff mEapMethodSpinner.setSelection(Eap.PEAP); 627d181bb62bc26c797209e0f355e655ba2559285e1Irfan Sheriff showEapFieldsByMethod(Eap.PEAP); 628d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 629f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } else { 630f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition()); 631d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 632f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 633ba7ee527d8683f718efbc85558310b8ba269809bPartha N 634f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff /** 635f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * EAP-PWD valid fields include 636f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * identity 637f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * password 638f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * EAP-PEAP valid fields include 639f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * phase2: MSCHAPV2, GTC 640f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * ca_cert 641f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * identity 642f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * anonymous_identity 643f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * password 644f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * EAP-TLS valid fields include 645f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * user_cert 646f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * ca_cert 647f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * identity 648f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * EAP-TTLS valid fields include 649f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * phase2: PAP, MSCHAP, MSCHAPV2, GTC 650f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * ca_cert 651f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * identity 652f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * anonymous_identity 653f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * password 654f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff */ 655f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private void showEapFieldsByMethod(int eapMethod) { 656f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Common defaults 657ba7ee527d8683f718efbc85558310b8ba269809bPartha N mView.findViewById(R.id.l_method).setVisibility(View.VISIBLE); 658ba7ee527d8683f718efbc85558310b8ba269809bPartha N mView.findViewById(R.id.l_identity).setVisibility(View.VISIBLE); 659ba7ee527d8683f718efbc85558310b8ba269809bPartha N 660f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Defaults for most of the EAP methods and over-riden by 661f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // by certain EAP methods 662f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_ca_cert).setVisibility(View.VISIBLE); 663f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.password_layout).setVisibility(View.VISIBLE); 664f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.show_password_layout).setVisibility(View.VISIBLE); 665f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 666f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff Context context = mConfigUi.getContext(); 667f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff switch (eapMethod) { 668f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case WIFI_EAP_METHOD_PWD: 669f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setPhase2Invisible(); 670f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setCaCertInvisible(); 671f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setAnonymousIdentInvisible(); 672f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setUserCertInvisible(); 673f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 674f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case WIFI_EAP_METHOD_TLS: 675f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_user_cert).setVisibility(View.VISIBLE); 676f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setPhase2Invisible(); 677f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setAnonymousIdentInvisible(); 678f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setPasswordInvisible(); 679f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 680f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case WIFI_EAP_METHOD_PEAP: 681f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Reset adapter if needed 682f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff if (mPhase2Adapter != PHASE2_PEAP_ADAPTER) { 683f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Adapter = PHASE2_PEAP_ADAPTER; 684f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Spinner.setAdapter(mPhase2Adapter); 685f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 686f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_phase2).setVisibility(View.VISIBLE); 687f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE); 688f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setUserCertInvisible(); 689f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 690f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case WIFI_EAP_METHOD_TTLS: 691f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Reset adapter if needed 692f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff if (mPhase2Adapter != PHASE2_FULL_ADAPTER) { 693f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Adapter = PHASE2_FULL_ADAPTER; 694f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Spinner.setAdapter(mPhase2Adapter); 695f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 696f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_phase2).setVisibility(View.VISIBLE); 697f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE); 698f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setUserCertInvisible(); 699f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 700ba7ee527d8683f718efbc85558310b8ba269809bPartha N } 701d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 702b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff 703f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private void setPhase2Invisible() { 704f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_phase2).setVisibility(View.GONE); 705f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Spinner.setSelection(Phase2.NONE); 706f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 707f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 708f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private void setCaCertInvisible() { 709f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_ca_cert).setVisibility(View.GONE); 710f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mEapCaCertSpinner.setSelection(unspecifiedCertIndex); 711f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 712f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 713f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private void setUserCertInvisible() { 714f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_user_cert).setVisibility(View.GONE); 715f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mEapUserCertSpinner.setSelection(unspecifiedCertIndex); 716f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 717f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 718f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private void setAnonymousIdentInvisible() { 719f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_anonymous).setVisibility(View.GONE); 720f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mEapAnonymousView.setText(""); 721f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 722f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 723f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private void setPasswordInvisible() { 724f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPasswordView.setText(""); 725f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.password_layout).setVisibility(View.GONE); 726f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.show_password_layout).setVisibility(View.GONE); 727f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 728f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 729f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private void showIpConfigFields() { 730f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff WifiConfiguration config = null; 731f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 732b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff mView.findViewById(R.id.ip_fields).setVisibility(View.VISIBLE); 733f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 734b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { 735f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff config = mAccessPoint.getConfig(); 736f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 737f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 738e82a459392db4dee491bcef8a15ccd5cbd067f1bIrfan Sheriff if (mIpSettingsSpinner.getSelectedItemPosition() == STATIC_IP) { 739f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mView.findViewById(R.id.staticip).setVisibility(View.VISIBLE); 740f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff if (mIpAddressView == null) { 741f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mIpAddressView = (TextView) mView.findViewById(R.id.ipaddress); 7425640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mIpAddressView.addTextChangedListener(this); 743f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mGatewayView = (TextView) mView.findViewById(R.id.gateway); 7445640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mGatewayView.addTextChangedListener(this); 74534ce343004ae925b653664f445eea627355e33abIrfan Sheriff mNetworkPrefixLengthView = (TextView) mView.findViewById( 74634ce343004ae925b653664f445eea627355e33abIrfan Sheriff R.id.network_prefix_length); 7475640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mNetworkPrefixLengthView.addTextChangedListener(this); 748f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mDns1View = (TextView) mView.findViewById(R.id.dns1); 7495640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mDns1View.addTextChangedListener(this); 750f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mDns2View = (TextView) mView.findViewById(R.id.dns2); 7515640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mDns2View.addTextChangedListener(this); 752f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 753f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff if (config != null) { 75434ce343004ae925b653664f445eea627355e33abIrfan Sheriff LinkProperties linkProperties = config.linkProperties; 75534ce343004ae925b653664f445eea627355e33abIrfan Sheriff Iterator<LinkAddress> iterator = linkProperties.getLinkAddresses().iterator(); 75634ce343004ae925b653664f445eea627355e33abIrfan Sheriff if (iterator.hasNext()) { 75734ce343004ae925b653664f445eea627355e33abIrfan Sheriff LinkAddress linkAddress = iterator.next(); 75834ce343004ae925b653664f445eea627355e33abIrfan Sheriff mIpAddressView.setText(linkAddress.getAddress().getHostAddress()); 75934ce343004ae925b653664f445eea627355e33abIrfan Sheriff mNetworkPrefixLengthView.setText(Integer.toString(linkAddress 76034ce343004ae925b653664f445eea627355e33abIrfan Sheriff .getNetworkPrefixLength())); 76134ce343004ae925b653664f445eea627355e33abIrfan Sheriff } 762caf8cf5cf5e464b9b26ab15e2f502b04eeac9b9bRobert Greenwalt 7633c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwalt for (RouteInfo route : linkProperties.getRoutes()) { 7643c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwalt if (route.isDefaultRoute()) { 7653c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwalt mGatewayView.setText(route.getGateway().getHostAddress()); 7663c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwalt break; 7673c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwalt } 76834ce343004ae925b653664f445eea627355e33abIrfan Sheriff } 7693c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwalt 77034ce343004ae925b653664f445eea627355e33abIrfan Sheriff Iterator<InetAddress> dnsIterator = linkProperties.getDnses().iterator(); 77134ce343004ae925b653664f445eea627355e33abIrfan Sheriff if (dnsIterator.hasNext()) { 77234ce343004ae925b653664f445eea627355e33abIrfan Sheriff mDns1View.setText(dnsIterator.next().getHostAddress()); 77334ce343004ae925b653664f445eea627355e33abIrfan Sheriff } 77434ce343004ae925b653664f445eea627355e33abIrfan Sheriff if (dnsIterator.hasNext()) { 77534ce343004ae925b653664f445eea627355e33abIrfan Sheriff mDns2View.setText(dnsIterator.next().getHostAddress()); 776f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 777f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 778f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } else { 779f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mView.findViewById(R.id.staticip).setVisibility(View.GONE); 780f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 781f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 782f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 783c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff private void showProxyFields() { 784c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff WifiConfiguration config = null; 785c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 786c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mView.findViewById(R.id.proxy_settings_fields).setVisibility(View.VISIBLE); 787c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 788c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { 789c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff config = mAccessPoint.getConfig(); 790c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 791c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 792c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (mProxySettingsSpinner.getSelectedItemPosition() == PROXY_STATIC) { 793d9c7dcf0e4abf3cf82fe506747816e9f0a6408a6Irfan Sheriff mView.findViewById(R.id.proxy_warning_limited_support).setVisibility(View.VISIBLE); 794c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mView.findViewById(R.id.proxy_fields).setVisibility(View.VISIBLE); 795c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (mProxyHostView == null) { 796c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mProxyHostView = (TextView) mView.findViewById(R.id.proxy_hostname); 7975640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mProxyHostView.addTextChangedListener(this); 798c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mProxyPortView = (TextView) mView.findViewById(R.id.proxy_port); 7995640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mProxyPortView.addTextChangedListener(this); 800c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mProxyExclusionListView = (TextView) mView.findViewById(R.id.proxy_exclusionlist); 8015640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mProxyExclusionListView.addTextChangedListener(this); 802c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 803c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (config != null) { 80434ce343004ae925b653664f445eea627355e33abIrfan Sheriff ProxyProperties proxyProperties = config.linkProperties.getHttpProxy(); 805c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (proxyProperties != null) { 80652322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt mProxyHostView.setText(proxyProperties.getHost()); 80752322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt mProxyPortView.setText(Integer.toString(proxyProperties.getPort())); 80852322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt mProxyExclusionListView.setText(proxyProperties.getExclusionList()); 809c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 810c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 811c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } else { 812d9c7dcf0e4abf3cf82fe506747816e9f0a6408a6Irfan Sheriff mView.findViewById(R.id.proxy_warning_limited_support).setVisibility(View.GONE); 813c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mView.findViewById(R.id.proxy_fields).setVisibility(View.GONE); 814c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 815c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 816c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 817c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 818f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 819d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private void loadCertificates(Spinner spinner, String prefix) { 820d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa final Context context = mConfigUi.getContext(); 821d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 822d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa String[] certs = KeyStore.getInstance().saw(prefix); 823d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (certs == null || certs.length == 0) { 824de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff certs = new String[] {unspecifiedCert}; 825d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } else { 826d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa final String[] array = new String[certs.length + 1]; 827de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff array[0] = unspecifiedCert; 828d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa System.arraycopy(certs, 0, array, 1, certs.length); 829d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa certs = array; 830d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 831d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 832d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa final ArrayAdapter<String> adapter = new ArrayAdapter<String>( 833d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa context, android.R.layout.simple_spinner_item, certs); 834d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 835d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa spinner.setAdapter(adapter); 836d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 837d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 838d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private void setSelection(Spinner spinner, String value) { 839d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (value != null) { 840e78c1879058571c00879f0d3e756951302adf513Gilles Debunne @SuppressWarnings("unchecked") 841d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa ArrayAdapter<String> adapter = (ArrayAdapter<String>) spinner.getAdapter(); 842d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa for (int i = adapter.getCount() - 1; i >= 0; --i) { 843d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (value.equals(adapter.getItem(i))) { 844d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa spinner.setSelection(i); 845d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa break; 846d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 847d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 848d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 849d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 850d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 85158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa public boolean isEdit() { 85258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa return mEdit; 85358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 85458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 855d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 856d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void afterTextChanged(Editable s) { 857d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mTextViewChangedHandler.post(new Runnable() { 858d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff public void run() { 859d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff enableSubmitIfAppropriate(); 860d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } 861d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff }); 862d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 863d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 864d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 865d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void beforeTextChanged(CharSequence s, int start, int count, int after) { 866e78c1879058571c00879f0d3e756951302adf513Gilles Debunne // work done in afterTextChanged 867d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 868d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 869d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 870d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void onTextChanged(CharSequence s, int start, int before, int count) { 871e78c1879058571c00879f0d3e756951302adf513Gilles Debunne // work done in afterTextChanged 872d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 873d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 874d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 875d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void onClick(View view) { 876d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy if (view.getId() == R.id.show_password) { 877265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani updatePasswordVisibility(((CheckBox) view).isChecked()); 878d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy } else if (view.getId() == R.id.wifi_advanced_togglebox) { 879d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy if (((CheckBox) view).isChecked()) { 880d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy mView.findViewById(R.id.wifi_advanced_fields).setVisibility(View.VISIBLE); 881d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy } else { 882d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy mView.findViewById(R.id.wifi_advanced_fields).setVisibility(View.GONE); 883d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy } 884d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy } 885d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 886d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 887d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 888d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 8899b7edb16d1309dae9b71770d4f44275646b144e4Irfan Sheriff if (parent == mSecuritySpinner) { 890f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mAccessPointSecurity = position; 891f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff showSecurityFields(); 892ba7ee527d8683f718efbc85558310b8ba269809bPartha N } else if (parent == mEapMethodSpinner) { 893ba7ee527d8683f718efbc85558310b8ba269809bPartha N showSecurityFields(); 894c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } else if (parent == mProxySettingsSpinner) { 895c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff showProxyFields(); 896f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } else { 897f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff showIpConfigFields(); 898f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 89921e644a9a817ec8daf4c118a9890057a30e041daIrfan Sheriff enableSubmitIfAppropriate(); 900d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 901d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 902d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 903d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void onNothingSelected(AdapterView<?> parent) { 904e78c1879058571c00879f0d3e756951302adf513Gilles Debunne // 905d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 906265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani 907265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani /** 908265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani * Make the characters of the password visible if show_password is checked. 909265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani */ 910265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani private void updatePasswordVisibility(boolean checked) { 911265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani int pos = mPasswordView.getSelectionEnd(); 912265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani mPasswordView.setInputType( 913265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani InputType.TYPE_CLASS_TEXT | (checked ? 914265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD : 915265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani InputType.TYPE_TEXT_VARIATION_PASSWORD)); 916265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani if (pos >= 0) { 917265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani ((EditText)mPasswordView).setSelection(pos); 918265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani } 919265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani } 920e82a459392db4dee491bcef8a15ccd5cbd067f1bIrfan Sheriff} 921