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; 53ba32c249addded770c288771748aa25d554352a0Robert Greenwaltimport android.widget.CompoundButton.OnCheckedChangeListener; 54bd3d66cac5f2f2135c6d0fcd86cb7912cf936403Irfan Sheriffimport android.widget.EditText; 55d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.Spinner; 56d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.TextView; 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, 693f9e2aec2e53fb025f0bd6160c7e403f9f8e22e3Chen Hong AdapterView.OnItemSelectedListener, OnCheckedChangeListener { 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; 81d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 82de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff private String unspecifiedCert = "unspecified"; 83f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private static final int unspecifiedCertIndex = 0; 84f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 85f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff /* Phase2 methods supported by PEAP are limited */ 86f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private final ArrayAdapter<String> PHASE2_PEAP_ADAPTER; 87f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff /* Full list of phase2 methods */ 88f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private final ArrayAdapter<String> PHASE2_FULL_ADAPTER; 89de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff 90f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private Spinner mSecuritySpinner; 91f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private Spinner mEapMethodSpinner; 92f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private Spinner mEapCaCertSpinner; 93f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private Spinner mPhase2Spinner; 94f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Associated with mPhase2Spinner, one of PHASE2_FULL_ADAPTER or PHASE2_PEAP_ADAPTER 95f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private ArrayAdapter<String> mPhase2Adapter; 96f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private Spinner mEapUserCertSpinner; 97f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private TextView mEapIdentityView; 98f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private TextView mEapAnonymousView; 99f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 100e82a459392db4dee491bcef8a15ccd5cbd067f1bIrfan Sheriff /* This value comes from "wifi_ip_settings" resource array */ 101c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff private static final int DHCP = 0; 102e82a459392db4dee491bcef8a15ccd5cbd067f1bIrfan Sheriff private static final int STATIC_IP = 1; 103b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff 104c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff /* These values come from "wifi_proxy_settings" resource array */ 105c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff public static final int PROXY_NONE = 0; 106c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff public static final int PROXY_STATIC = 1; 107c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 108f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff /* These values come from "wifi_eap_method" resource array */ 109ba7ee527d8683f718efbc85558310b8ba269809bPartha N public static final int WIFI_EAP_METHOD_PEAP = 0; 110ba7ee527d8683f718efbc85558310b8ba269809bPartha N public static final int WIFI_EAP_METHOD_TLS = 1; 111ba7ee527d8683f718efbc85558310b8ba269809bPartha N public static final int WIFI_EAP_METHOD_TTLS = 2; 112ba7ee527d8683f718efbc85558310b8ba269809bPartha N public static final int WIFI_EAP_METHOD_PWD = 3; 113ba7ee527d8683f718efbc85558310b8ba269809bPartha N 114f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff /* These values come from "wifi_peap_phase2_entries" resource array */ 115f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff public static final int WIFI_PEAP_PHASE2_NONE = 0; 116f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff public static final int WIFI_PEAP_PHASE2_MSCHAPV2 = 1; 117f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff public static final int WIFI_PEAP_PHASE2_GTC = 2; 118f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 11934ce343004ae925b653664f445eea627355e33abIrfan Sheriff private static final String TAG = "WifiConfigController"; 12034ce343004ae925b653664f445eea627355e33abIrfan Sheriff 121f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private Spinner mIpSettingsSpinner; 122f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private TextView mIpAddressView; 123f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private TextView mGatewayView; 12434ce343004ae925b653664f445eea627355e33abIrfan Sheriff private TextView mNetworkPrefixLengthView; 125f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private TextView mDns1View; 126f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private TextView mDns2View; 127d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 128c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff private Spinner mProxySettingsSpinner; 129c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff private TextView mProxyHostView; 130c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff private TextView mProxyPortView; 131c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff private TextView mProxyExclusionListView; 132c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 133c7787a78f74a41820cfc31ff5fd51ee8d8c6df17Irfan Sheriff private IpAssignment mIpAssignment = IpAssignment.UNASSIGNED; 134c7787a78f74a41820cfc31ff5fd51ee8d8c6df17Irfan Sheriff private ProxySettings mProxySettings = ProxySettings.UNASSIGNED; 135cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff private LinkProperties mLinkProperties = new LinkProperties(); 136cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff 137dadf1e53cb99691689028667aab473ea4ccf67faDaisuke Miyakawa // True when this instance is used in SetupWizard XL context. 138dadf1e53cb99691689028667aab473ea4ccf67faDaisuke Miyakawa private final boolean mInXlSetupWizard; 139dadf1e53cb99691689028667aab473ea4ccf67faDaisuke Miyakawa 140d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff private final Handler mTextViewChangedHandler; 141d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff 14258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa public WifiConfigController( 14358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa WifiConfigUiBase parent, View view, AccessPoint accessPoint, boolean edit) { 144d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi = parent; 145dadf1e53cb99691689028667aab473ea4ccf67faDaisuke Miyakawa mInXlSetupWizard = (parent instanceof WifiConfigUiForSetupWizardXL); 146d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 147d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mView = view; 148d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mAccessPoint = accessPoint; 149f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mAccessPointSecurity = (accessPoint == null) ? AccessPoint.SECURITY_NONE : 150f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff accessPoint.security; 151d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mEdit = edit; 152d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 153d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mTextViewChangedHandler = new Handler(); 154d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa final Context context = mConfigUi.getContext(); 155d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa final Resources resources = context.getResources(); 156d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 157f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff PHASE2_PEAP_ADAPTER = new ArrayAdapter<String>( 158f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff context, android.R.layout.simple_spinner_item, 159f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff context.getResources().getStringArray(R.array.wifi_peap_phase2_entries)); 160f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff PHASE2_PEAP_ADAPTER.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 161f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 162f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff PHASE2_FULL_ADAPTER = new ArrayAdapter<String>( 163f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff context, android.R.layout.simple_spinner_item, 164f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff context.getResources().getStringArray(R.array.wifi_phase2_entries)); 165f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff PHASE2_FULL_ADAPTER.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 166f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 167de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff unspecifiedCert = context.getString(R.string.wifi_unspecified); 168d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mIpSettingsSpinner = (Spinner) mView.findViewById(R.id.ip_settings); 169d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mIpSettingsSpinner.setOnItemSelectedListener(this); 170d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mProxySettingsSpinner = (Spinner) mView.findViewById(R.id.proxy_settings); 171d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mProxySettingsSpinner.setOnItemSelectedListener(this); 172d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff 17358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa if (mAccessPoint == null) { // new network 174d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi.setTitle(R.string.wifi_add_network); 175d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa 176f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mSsidView = (TextView) mView.findViewById(R.id.ssid); 177f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mSsidView.addTextChangedListener(this); 178f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mSecuritySpinner = ((Spinner) mView.findViewById(R.id.security)); 179f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mSecuritySpinner.setOnItemSelectedListener(this); 18035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (mInXlSetupWizard) { 181d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa mView.findViewById(R.id.type_ssid).setVisibility(View.VISIBLE); 182d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa mView.findViewById(R.id.type_security).setVisibility(View.VISIBLE); 1837893447987debb6bde72f4efb6b07f6e0d5b4f6fDaisuke Miyakawa // We want custom layout. The content must be same as the other cases. 1848b2bf2e53814a20f09f658554cde61657df8ac99Isaac Levy 1858b2bf2e53814a20f09f658554cde61657df8ac99Isaac Levy ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, 1868b2bf2e53814a20f09f658554cde61657df8ac99Isaac Levy R.layout.wifi_setup_custom_list_item_1, android.R.id.text1, 1878b2bf2e53814a20f09f658554cde61657df8ac99Isaac Levy context.getResources().getStringArray(R.array.wifi_security_no_eap)); 1888b2bf2e53814a20f09f658554cde61657df8ac99Isaac Levy mSecuritySpinner.setAdapter(adapter); 189d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa } else { 190d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa mView.findViewById(R.id.type).setVisibility(View.VISIBLE); 1917893447987debb6bde72f4efb6b07f6e0d5b4f6fDaisuke Miyakawa } 192d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff 193d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff showIpConfigFields(); 194d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff showProxyFields(); 195d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mView.findViewById(R.id.wifi_advanced_toggle).setVisibility(View.VISIBLE); 1963f9e2aec2e53fb025f0bd6160c7e403f9f8e22e3Chen Hong ((CheckBox)mView.findViewById(R.id.wifi_advanced_togglebox)) 1973f9e2aec2e53fb025f0bd6160c7e403f9f8e22e3Chen Hong .setOnCheckedChangeListener(this); 1983f9e2aec2e53fb025f0bd6160c7e403f9f8e22e3Chen Hong 199d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff 200d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi.setSubmitButton(context.getString(R.string.wifi_save)); 201d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } else { 202d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi.setTitle(mAccessPoint.ssid); 203c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 204d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa ViewGroup group = (ViewGroup) mView.findViewById(R.id.info); 205d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 206d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa DetailedState state = mAccessPoint.getState(); 207d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (state != null) { 208d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa addRow(group, R.string.wifi_status, Summary.get(mConfigUi.getContext(), state)); 209d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 210d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 211d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa int level = mAccessPoint.getLevel(); 212d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (level != -1) { 213d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa String[] signal = resources.getStringArray(R.array.wifi_signal); 214d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa addRow(group, R.string.wifi_signal, signal[level]); 215d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 216d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 217d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa WifiInfo info = mAccessPoint.getInfo(); 2187c210ba5c18c2720023dd8fc4215cde95a6fe71cIrfan Sheriff if (info != null && info.getLinkSpeed() != -1) { 219d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa addRow(group, R.string.wifi_speed, info.getLinkSpeed() + WifiInfo.LINK_SPEED_UNITS); 220d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 221d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 222d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy addRow(group, R.string.wifi_security, mAccessPoint.getSecurityString(false)); 223d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy 224d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy boolean showAdvancedFields = false; 225c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (mAccessPoint.networkId != INVALID_NETWORK_ID) { 226c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff WifiConfiguration config = mAccessPoint.getConfig(); 227c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (config.ipAssignment == IpAssignment.STATIC) { 228c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mIpSettingsSpinner.setSelection(STATIC_IP); 229d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy showAdvancedFields = true; 230c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } else { 231c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mIpSettingsSpinner.setSelection(DHCP); 232c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 233317e0aa530760ee323c7a98321d9b34a2ffa1d41Irfan Sheriff //Display IP addresses 234317e0aa530760ee323c7a98321d9b34a2ffa1d41Irfan Sheriff for(InetAddress a : config.linkProperties.getAddresses()) { 235317e0aa530760ee323c7a98321d9b34a2ffa1d41Irfan Sheriff addRow(group, R.string.wifi_ip_address, a.getHostAddress()); 236317e0aa530760ee323c7a98321d9b34a2ffa1d41Irfan Sheriff } 237317e0aa530760ee323c7a98321d9b34a2ffa1d41Irfan Sheriff 238c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 239c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (config.proxySettings == ProxySettings.STATIC) { 240c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mProxySettingsSpinner.setSelection(PROXY_STATIC); 241d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy showAdvancedFields = true; 242070f3560d5d5154e058fa83cd4d433b632304080Jason Monk } else if (config.proxySettings == ProxySettings.PAC) { 243070f3560d5d5154e058fa83cd4d433b632304080Jason Monk mProxySettingsSpinner.setVisibility(View.GONE); 244070f3560d5d5154e058fa83cd4d433b632304080Jason Monk TextView textView = (TextView)mView.findViewById(R.id.proxy_pac_info); 245070f3560d5d5154e058fa83cd4d433b632304080Jason Monk textView.setVisibility(View.VISIBLE); 246070f3560d5d5154e058fa83cd4d433b632304080Jason Monk textView.setText(context.getString(R.string.proxy_url) + 247070f3560d5d5154e058fa83cd4d433b632304080Jason Monk config.linkProperties.getHttpProxy().getPacFileUrl()); 248070f3560d5d5154e058fa83cd4d433b632304080Jason Monk showAdvancedFields = true; 249c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } else { 250c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mProxySettingsSpinner.setSelection(PROXY_NONE); 251c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 252c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 253c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 254b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff if (mAccessPoint.networkId == INVALID_NETWORK_ID || mEdit) { 255d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa showSecurityFields(); 256f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff showIpConfigFields(); 257c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff showProxyFields(); 258d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy mView.findViewById(R.id.wifi_advanced_toggle).setVisibility(View.VISIBLE); 2593f9e2aec2e53fb025f0bd6160c7e403f9f8e22e3Chen Hong ((CheckBox)mView.findViewById(R.id.wifi_advanced_togglebox)) 2603f9e2aec2e53fb025f0bd6160c7e403f9f8e22e3Chen Hong .setOnCheckedChangeListener(this); 261d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy if (showAdvancedFields) { 2623f9e2aec2e53fb025f0bd6160c7e403f9f8e22e3Chen Hong ((CheckBox)mView.findViewById(R.id.wifi_advanced_togglebox)).setChecked(true); 263d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy mView.findViewById(R.id.wifi_advanced_fields).setVisibility(View.VISIBLE); 264d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy } 265d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 266d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 267d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (mEdit) { 268d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi.setSubmitButton(context.getString(R.string.wifi_save)); 269d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } else { 270d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (state == null && level != -1) { 271d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi.setSubmitButton(context.getString(R.string.wifi_connect)); 272f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } else { 273b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff mView.findViewById(R.id.ip_fields).setVisibility(View.GONE); 274d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 275b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff if (mAccessPoint.networkId != INVALID_NETWORK_ID) { 276d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi.setForgetButton(context.getString(R.string.wifi_forget)); 277d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 278d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 279d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 280d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 281f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 282d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mConfigUi.setCancelButton(context.getString(R.string.wifi_cancel)); 283d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (mConfigUi.getSubmitButton() != null) { 284d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa enableSubmitIfAppropriate(); 285d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 286d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 287d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 288d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private void addRow(ViewGroup group, int name, String value) { 289d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa View row = mConfigUi.getLayoutInflater().inflate(R.layout.wifi_dialog_row, group, false); 290d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa ((TextView) row.findViewById(R.id.name)).setText(name); 291d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa ((TextView) row.findViewById(R.id.value)).setText(value); 292d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa group.addView(row); 293d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 294d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 2955640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff /* show submit button if password, ip and proxy settings are valid */ 2960c0bd827a104ee3a5891b8c5f1dae6db422e09e9Irfan Sheriff void enableSubmitIfAppropriate() { 2975640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff Button submit = mConfigUi.getSubmitButton(); 2985640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff if (submit == null) return; 2995640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff 30081da4884778ad3ce69e14ade0f3c214db773e49bIrfan Sheriff boolean enabled = false; 30121e644a9a817ec8daf4c118a9890057a30e041daIrfan Sheriff boolean passwordInvalid = false; 30221e644a9a817ec8daf4c118a9890057a30e041daIrfan Sheriff 303d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff if (mPasswordView != null && 304d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff ((mAccessPointSecurity == AccessPoint.SECURITY_WEP && mPasswordView.length() == 0) || 305d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff (mAccessPointSecurity == AccessPoint.SECURITY_PSK && mPasswordView.length() < 8))) { 30621e644a9a817ec8daf4c118a9890057a30e041daIrfan Sheriff passwordInvalid = true; 30721e644a9a817ec8daf4c118a9890057a30e041daIrfan Sheriff } 30821e644a9a817ec8daf4c118a9890057a30e041daIrfan Sheriff 309f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff if ((mSsidView != null && mSsidView.length() == 0) || 310b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff ((mAccessPoint == null || mAccessPoint.networkId == INVALID_NETWORK_ID) && 31121e644a9a817ec8daf4c118a9890057a30e041daIrfan Sheriff passwordInvalid)) { 3125640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff enabled = false; 3135640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff } else { 314990c3ad530aa919256a0b341dbe763503b41ff2bIrfan Sheriff if (ipAndProxyFieldsAreValid()) { 315990c3ad530aa919256a0b341dbe763503b41ff2bIrfan Sheriff enabled = true; 316990c3ad530aa919256a0b341dbe763503b41ff2bIrfan Sheriff } else { 317990c3ad530aa919256a0b341dbe763503b41ff2bIrfan Sheriff enabled = false; 318990c3ad530aa919256a0b341dbe763503b41ff2bIrfan Sheriff } 319d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 3205640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff submit.setEnabled(enabled); 321d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 322d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 323d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa /* package */ WifiConfiguration getConfig() { 324b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID && !mEdit) { 325d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa return null; 326d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 327d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 328d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa WifiConfiguration config = new WifiConfiguration(); 329d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 330d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (mAccessPoint == null) { 331d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.SSID = AccessPoint.convertToQuotedString( 332f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mSsidView.getText().toString()); 333d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa // If the user adds a network manually, assume that it is hidden. 334d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.hiddenSSID = true; 335b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff } else if (mAccessPoint.networkId == INVALID_NETWORK_ID) { 336d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.SSID = AccessPoint.convertToQuotedString( 337d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mAccessPoint.ssid); 338d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } else { 339d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.networkId = mAccessPoint.networkId; 340d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 341d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 342f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff switch (mAccessPointSecurity) { 343d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa case AccessPoint.SECURITY_NONE: 344d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.allowedKeyManagement.set(KeyMgmt.NONE); 345f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff break; 346d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 347d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa case AccessPoint.SECURITY_WEP: 348d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.allowedKeyManagement.set(KeyMgmt.NONE); 349d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN); 350d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED); 351d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (mPasswordView.length() != 0) { 352d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa int length = mPasswordView.length(); 353d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa String password = mPasswordView.getText().toString(); 354d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa // WEP-40, WEP-104, and 256-bit WEP (WEP-232?) 355d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if ((length == 10 || length == 26 || length == 58) && 356d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa password.matches("[0-9A-Fa-f]*")) { 357d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.wepKeys[0] = password; 358d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } else { 359d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.wepKeys[0] = '"' + password + '"'; 360d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 361d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 362f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff break; 363d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 364d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa case AccessPoint.SECURITY_PSK: 365d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.allowedKeyManagement.set(KeyMgmt.WPA_PSK); 366d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (mPasswordView.length() != 0) { 367d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa String password = mPasswordView.getText().toString(); 368d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (password.matches("[0-9A-Fa-f]{64}")) { 369d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.preSharedKey = password; 370d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } else { 371d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.preSharedKey = '"' + password + '"'; 372d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 373d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 374f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff break; 375d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 376d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa case AccessPoint.SECURITY_EAP: 377d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.allowedKeyManagement.set(KeyMgmt.WPA_EAP); 378d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa config.allowedKeyManagement.set(KeyMgmt.IEEE8021X); 379f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig = new WifiEnterpriseConfig(); 380f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff int eapMethod = mEapMethodSpinner.getSelectedItemPosition(); 381f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff int phase2Method = mPhase2Spinner.getSelectedItemPosition(); 382f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig.setEapMethod(eapMethod); 383f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff switch (eapMethod) { 384f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case Eap.PEAP: 385f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // PEAP supports limited phase2 values 386f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Map the index from the PHASE2_PEAP_ADAPTER to the one used 387f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // by the API which has the full list of PEAP methods. 388f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff switch(phase2Method) { 389f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case WIFI_PEAP_PHASE2_NONE: 390f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig.setPhase2Method(Phase2.NONE); 391f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 392f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case WIFI_PEAP_PHASE2_MSCHAPV2: 393f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig.setPhase2Method(Phase2.MSCHAPV2); 394f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 395f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case WIFI_PEAP_PHASE2_GTC: 396f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig.setPhase2Method(Phase2.GTC); 397f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 398f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff default: 399f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff Log.e(TAG, "Unknown phase2 method" + phase2Method); 400f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 401f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 402f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 403f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff default: 404f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // The default index from PHASE2_FULL_ADAPTER maps to the API 405f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig.setPhase2Method(phase2Method); 406f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 407f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 408de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff String caCert = (String) mEapCaCertSpinner.getSelectedItem(); 409de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff if (caCert.equals(unspecifiedCert)) caCert = ""; 410c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff config.enterpriseConfig.setCaCertificateAlias(caCert); 411de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff String clientCert = (String) mEapUserCertSpinner.getSelectedItem(); 412de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff if (clientCert.equals(unspecifiedCert)) clientCert = ""; 413c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff config.enterpriseConfig.setClientCertificateAlias(clientCert); 414de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff config.enterpriseConfig.setIdentity(mEapIdentityView.getText().toString()); 415de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff config.enterpriseConfig.setAnonymousIdentity( 416f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mEapAnonymousView.getText().toString()); 417f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 418f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff if (mPasswordView.isShown()) { 419f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // For security reasons, a previous password is not displayed to user. 420f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Update only if it has been changed. 421f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff if (mPasswordView.length() > 0) { 422f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig.setPassword(mPasswordView.getText().toString()); 423f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 424f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } else { 425f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // clear password 426f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff config.enterpriseConfig.setPassword(mPasswordView.getText().toString()); 427f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 428f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 429f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff default: 430f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff return null; 431f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 432f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 433cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff config.proxySettings = mProxySettings; 434cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff config.ipAssignment = mIpAssignment; 435cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff config.linkProperties = new LinkProperties(mLinkProperties); 436cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff 437cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff return config; 438cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff } 439cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff 4405640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff private boolean ipAndProxyFieldsAreValid() { 441cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff mLinkProperties.clear(); 442cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff mIpAssignment = (mIpSettingsSpinner != null && 443c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mIpSettingsSpinner.getSelectedItemPosition() == STATIC_IP) ? 444f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff IpAssignment.STATIC : IpAssignment.DHCP; 445f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 446cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff if (mIpAssignment == IpAssignment.STATIC) { 447cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff int result = validateIpConfigFields(mLinkProperties); 448cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff if (result != 0) { 4495640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff return false; 450c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 451c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 452c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 453cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff mProxySettings = (mProxySettingsSpinner != null && 454c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mProxySettingsSpinner.getSelectedItemPosition() == PROXY_STATIC) ? 455c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff ProxySettings.STATIC : ProxySettings.NONE; 456c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 457d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff if (mProxySettings == ProxySettings.STATIC && mProxyHostView != null) { 458c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff String host = mProxyHostView.getText().toString(); 45952322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt String portStr = mProxyPortView.getText().toString(); 460c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff String exclusionList = mProxyExclusionListView.getText().toString(); 46152322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt int port = 0; 46252322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt int result = 0; 46352322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt try { 46452322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt port = Integer.parseInt(portStr); 46552322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt result = ProxySelector.validate(host, portStr, exclusionList); 46652322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt } catch (NumberFormatException e) { 46752322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt result = R.string.proxy_error_invalid_port; 46852322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt } 469c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (result == 0) { 47052322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt ProxyProperties proxyProperties= new ProxyProperties(host, port, exclusionList); 471cdbc80afb2dd191e1e2938a9939a1e11b5fd17ffIrfan Sheriff mLinkProperties.setHttpProxy(proxyProperties); 472c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } else { 4735640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff return false; 474f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 475d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 4765640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff return true; 477d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 478d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 47934ce343004ae925b653664f445eea627355e33abIrfan Sheriff private int validateIpConfigFields(LinkProperties linkProperties) { 480d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff if (mIpAddressView == null) return 0; 481d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff 482c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt String ipAddr = mIpAddressView.getText().toString(); 483db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff if (TextUtils.isEmpty(ipAddr)) return R.string.wifi_ip_settings_invalid_ip_address; 484db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff 485c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt InetAddress inetAddr = null; 48634ce343004ae925b653664f445eea627355e33abIrfan Sheriff try { 487c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt inetAddr = NetworkUtils.numericToInetAddress(ipAddr); 488c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt } catch (IllegalArgumentException e) { 489c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt return R.string.wifi_ip_settings_invalid_ip_address; 490c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt } 49134ce343004ae925b653664f445eea627355e33abIrfan Sheriff 492c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt int networkPrefixLength = -1; 493c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt try { 494c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt networkPrefixLength = Integer.parseInt(mNetworkPrefixLengthView.getText().toString()); 495d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff if (networkPrefixLength < 0 || networkPrefixLength > 32) { 496d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff return R.string.wifi_ip_settings_invalid_network_prefix_length; 497d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } 498d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff linkProperties.addLinkAddress(new LinkAddress(inetAddr, networkPrefixLength)); 499e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } catch (NumberFormatException e) { 500db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff // Set the hint as default after user types in ip address 501db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff mNetworkPrefixLengthView.setText(mConfigUi.getContext().getString( 502db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff R.string.wifi_network_prefix_length_hint)); 503e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } 50434ce343004ae925b653664f445eea627355e33abIrfan Sheriff 505c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt String gateway = mGatewayView.getText().toString(); 506db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff if (TextUtils.isEmpty(gateway)) { 507db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff try { 508db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff //Extract a default gateway from IP address 509db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff InetAddress netPart = NetworkUtils.getNetworkPart(inetAddr, networkPrefixLength); 510db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff byte[] addr = netPart.getAddress(); 511db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff addr[addr.length-1] = 1; 512db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff mGatewayView.setText(InetAddress.getByAddress(addr).getHostAddress()); 513db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff } catch (RuntimeException ee) { 514db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff } catch (java.net.UnknownHostException u) { 515db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff } 516d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } else { 517d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff InetAddress gatewayAddr = null; 518d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff try { 519d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff gatewayAddr = NetworkUtils.numericToInetAddress(gateway); 520d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } catch (IllegalArgumentException e) { 521d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff return R.string.wifi_ip_settings_invalid_gateway; 522d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } 523d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff linkProperties.addRoute(new RouteInfo(gatewayAddr)); 524db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff } 525db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff 526c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt String dns = mDns1View.getText().toString(); 527d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff InetAddress dnsAddr = null; 528d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff 529db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff if (TextUtils.isEmpty(dns)) { 530db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff //If everything else is valid, provide hint as a default option 531db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff mDns1View.setText(mConfigUi.getContext().getString(R.string.wifi_dns1_hint)); 532d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } else { 533d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff try { 534d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff dnsAddr = NetworkUtils.numericToInetAddress(dns); 535d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } catch (IllegalArgumentException e) { 536d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff return R.string.wifi_ip_settings_invalid_dns; 537d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } 538d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff linkProperties.addDns(dnsAddr); 539db529dd66bab1bea4bfe87a59f5774fd479e48c4Irfan Sheriff } 540d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff 541c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt if (mDns2View.length() > 0) { 542c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt dns = mDns2View.getText().toString(); 543caf8cf5cf5e464b9b26ab15e2f502b04eeac9b9bRobert Greenwalt try { 544c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt dnsAddr = NetworkUtils.numericToInetAddress(dns); 545c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt } catch (IllegalArgumentException e) { 54634ce343004ae925b653664f445eea627355e33abIrfan Sheriff return R.string.wifi_ip_settings_invalid_dns; 54734ce343004ae925b653664f445eea627355e33abIrfan Sheriff } 548c9bc99b24629476e9e2c8a53dc9716f0fbb831d7Robert Greenwalt linkProperties.addDns(dnsAddr); 54934ce343004ae925b653664f445eea627355e33abIrfan Sheriff } 55034ce343004ae925b653664f445eea627355e33abIrfan Sheriff return 0; 55134ce343004ae925b653664f445eea627355e33abIrfan Sheriff } 55234ce343004ae925b653664f445eea627355e33abIrfan Sheriff 553d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private void showSecurityFields() { 55435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (mInXlSetupWizard) { 55535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // Note: XL SetupWizard won't hide "EAP" settings here. 55635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (!((WifiSettingsForSetupWizardXL)mConfigUi.getContext()).initSecurityFields(mView, 55735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mAccessPointSecurity)) { 55835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa return; 55935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 56035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 561f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff if (mAccessPointSecurity == AccessPoint.SECURITY_NONE) { 562b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff mView.findViewById(R.id.security_fields).setVisibility(View.GONE); 563d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa return; 564d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 565b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff mView.findViewById(R.id.security_fields).setVisibility(View.VISIBLE); 566d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 567d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (mPasswordView == null) { 568d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mPasswordView = (TextView) mView.findViewById(R.id.password); 569d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mPasswordView.addTextChangedListener(this); 5703f9e2aec2e53fb025f0bd6160c7e403f9f8e22e3Chen Hong ((CheckBox) mView.findViewById(R.id.show_password)) 5713f9e2aec2e53fb025f0bd6160c7e403f9f8e22e3Chen Hong .setOnCheckedChangeListener(this); 572d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 573b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { 574d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mPasswordView.setHint(R.string.wifi_unchanged); 575d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 576d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 577d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 578f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff if (mAccessPointSecurity != AccessPoint.SECURITY_EAP) { 579d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mView.findViewById(R.id.eap).setVisibility(View.GONE); 580d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa return; 581d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 582d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mView.findViewById(R.id.eap).setVisibility(View.VISIBLE); 5833c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwalt 584f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff if (mEapMethodSpinner == null) { 585f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mEapMethodSpinner = (Spinner) mView.findViewById(R.id.method); 586ba7ee527d8683f718efbc85558310b8ba269809bPartha N mEapMethodSpinner.setOnItemSelectedListener(this); 587f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2); 588f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mEapCaCertSpinner = (Spinner) mView.findViewById(R.id.ca_cert); 589f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mEapUserCertSpinner = (Spinner) mView.findViewById(R.id.user_cert); 590f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mEapIdentityView = (TextView) mView.findViewById(R.id.identity); 591f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mEapAnonymousView = (TextView) mView.findViewById(R.id.anonymous); 592d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 593f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff loadCertificates(mEapCaCertSpinner, Credentials.CA_CERTIFICATE); 594f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff loadCertificates(mEapUserCertSpinner, Credentials.USER_PRIVATE_KEY); 595d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 596f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Modifying an existing network 597b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { 598c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff WifiEnterpriseConfig enterpriseConfig = mAccessPoint.getConfig().enterpriseConfig; 599c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff int eapMethod = enterpriseConfig.getEapMethod(); 600c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff int phase2Method = enterpriseConfig.getPhase2Method(); 601f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mEapMethodSpinner.setSelection(eapMethod); 602f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff showEapFieldsByMethod(eapMethod); 603f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff switch (eapMethod) { 604f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case Eap.PEAP: 605f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff switch (phase2Method) { 606f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case Phase2.NONE: 607f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_NONE); 608f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 609f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case Phase2.MSCHAPV2: 610f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_MSCHAPV2); 611f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 612f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case Phase2.GTC: 613f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_GTC); 614f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 615f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff default: 616f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff Log.e(TAG, "Invalid phase 2 method " + phase2Method); 617f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 618f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 619f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 620f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff default: 621f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Spinner.setSelection(phase2Method); 622f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 623f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 624c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff setSelection(mEapCaCertSpinner, enterpriseConfig.getCaCertificateAlias()); 625c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff setSelection(mEapUserCertSpinner, enterpriseConfig.getClientCertificateAlias()); 626c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff mEapIdentityView.setText(enterpriseConfig.getIdentity()); 627c577427b55fe58dd9b51beeca8eb92b536380584Irfan Sheriff mEapAnonymousView.setText(enterpriseConfig.getAnonymousIdentity()); 628d181bb62bc26c797209e0f355e655ba2559285e1Irfan Sheriff } else { 629d181bb62bc26c797209e0f355e655ba2559285e1Irfan Sheriff // Choose a default for a new network and show only appropriate 630d181bb62bc26c797209e0f355e655ba2559285e1Irfan Sheriff // fields 631d181bb62bc26c797209e0f355e655ba2559285e1Irfan Sheriff mEapMethodSpinner.setSelection(Eap.PEAP); 632d181bb62bc26c797209e0f355e655ba2559285e1Irfan Sheriff showEapFieldsByMethod(Eap.PEAP); 633d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 634f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } else { 635f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition()); 636d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 637f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 638ba7ee527d8683f718efbc85558310b8ba269809bPartha N 639f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff /** 640f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * EAP-PWD valid fields include 641f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * identity 642f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * password 643f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * EAP-PEAP valid fields include 644f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * phase2: MSCHAPV2, GTC 645f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * ca_cert 646f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * identity 647f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * anonymous_identity 648f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * password 649f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * EAP-TLS valid fields include 650f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * user_cert 651f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * ca_cert 652f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * identity 653f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * EAP-TTLS valid fields include 654f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * phase2: PAP, MSCHAP, MSCHAPV2, GTC 655f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * ca_cert 656f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * identity 657f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * anonymous_identity 658f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff * password 659f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff */ 660f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private void showEapFieldsByMethod(int eapMethod) { 661f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Common defaults 662ba7ee527d8683f718efbc85558310b8ba269809bPartha N mView.findViewById(R.id.l_method).setVisibility(View.VISIBLE); 663ba7ee527d8683f718efbc85558310b8ba269809bPartha N mView.findViewById(R.id.l_identity).setVisibility(View.VISIBLE); 664ba7ee527d8683f718efbc85558310b8ba269809bPartha N 665f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Defaults for most of the EAP methods and over-riden by 666f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // by certain EAP methods 667f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_ca_cert).setVisibility(View.VISIBLE); 668f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.password_layout).setVisibility(View.VISIBLE); 669f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.show_password_layout).setVisibility(View.VISIBLE); 670f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 671f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff Context context = mConfigUi.getContext(); 672f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff switch (eapMethod) { 673f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case WIFI_EAP_METHOD_PWD: 674f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setPhase2Invisible(); 675f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setCaCertInvisible(); 676f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setAnonymousIdentInvisible(); 677f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setUserCertInvisible(); 678f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 679f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case WIFI_EAP_METHOD_TLS: 680f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_user_cert).setVisibility(View.VISIBLE); 681f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setPhase2Invisible(); 682f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setAnonymousIdentInvisible(); 683f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setPasswordInvisible(); 684f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 685f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case WIFI_EAP_METHOD_PEAP: 686f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Reset adapter if needed 687f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff if (mPhase2Adapter != PHASE2_PEAP_ADAPTER) { 688f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Adapter = PHASE2_PEAP_ADAPTER; 689f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Spinner.setAdapter(mPhase2Adapter); 690f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 691f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_phase2).setVisibility(View.VISIBLE); 692f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE); 693f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setUserCertInvisible(); 694f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 695f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff case WIFI_EAP_METHOD_TTLS: 696f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff // Reset adapter if needed 697f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff if (mPhase2Adapter != PHASE2_FULL_ADAPTER) { 698f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Adapter = PHASE2_FULL_ADAPTER; 699f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Spinner.setAdapter(mPhase2Adapter); 700f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 701f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_phase2).setVisibility(View.VISIBLE); 702f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE); 703f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff setUserCertInvisible(); 704f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff break; 705ba7ee527d8683f718efbc85558310b8ba269809bPartha N } 706d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 707b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff 708f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private void setPhase2Invisible() { 709f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_phase2).setVisibility(View.GONE); 710f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPhase2Spinner.setSelection(Phase2.NONE); 711f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 712f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 713f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private void setCaCertInvisible() { 714f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_ca_cert).setVisibility(View.GONE); 715f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mEapCaCertSpinner.setSelection(unspecifiedCertIndex); 716f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 717f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 718f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private void setUserCertInvisible() { 719f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_user_cert).setVisibility(View.GONE); 720f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mEapUserCertSpinner.setSelection(unspecifiedCertIndex); 721f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 722f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 723f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private void setAnonymousIdentInvisible() { 724f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.l_anonymous).setVisibility(View.GONE); 725f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mEapAnonymousView.setText(""); 726f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 727f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 728f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff private void setPasswordInvisible() { 729f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mPasswordView.setText(""); 730f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.password_layout).setVisibility(View.GONE); 731f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff mView.findViewById(R.id.show_password_layout).setVisibility(View.GONE); 732f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff } 733f2e086be7f8c4d72c9637b5199448c898a5ad9cfIrfan Sheriff 734f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff private void showIpConfigFields() { 735f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff WifiConfiguration config = null; 736f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 737b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff mView.findViewById(R.id.ip_fields).setVisibility(View.VISIBLE); 738f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 739b3024fa6a0359f18b93fd8aaf197fce59f806edeIrfan Sheriff if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { 740f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff config = mAccessPoint.getConfig(); 741f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 742f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 743e82a459392db4dee491bcef8a15ccd5cbd067f1bIrfan Sheriff if (mIpSettingsSpinner.getSelectedItemPosition() == STATIC_IP) { 744f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mView.findViewById(R.id.staticip).setVisibility(View.VISIBLE); 745f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff if (mIpAddressView == null) { 746f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mIpAddressView = (TextView) mView.findViewById(R.id.ipaddress); 7475640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mIpAddressView.addTextChangedListener(this); 748f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mGatewayView = (TextView) mView.findViewById(R.id.gateway); 7495640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mGatewayView.addTextChangedListener(this); 75034ce343004ae925b653664f445eea627355e33abIrfan Sheriff mNetworkPrefixLengthView = (TextView) mView.findViewById( 75134ce343004ae925b653664f445eea627355e33abIrfan Sheriff R.id.network_prefix_length); 7525640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mNetworkPrefixLengthView.addTextChangedListener(this); 753f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mDns1View = (TextView) mView.findViewById(R.id.dns1); 7545640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mDns1View.addTextChangedListener(this); 755f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mDns2View = (TextView) mView.findViewById(R.id.dns2); 7565640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mDns2View.addTextChangedListener(this); 757f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 758f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff if (config != null) { 75934ce343004ae925b653664f445eea627355e33abIrfan Sheriff LinkProperties linkProperties = config.linkProperties; 76034ce343004ae925b653664f445eea627355e33abIrfan Sheriff Iterator<LinkAddress> iterator = linkProperties.getLinkAddresses().iterator(); 76134ce343004ae925b653664f445eea627355e33abIrfan Sheriff if (iterator.hasNext()) { 76234ce343004ae925b653664f445eea627355e33abIrfan Sheriff LinkAddress linkAddress = iterator.next(); 76334ce343004ae925b653664f445eea627355e33abIrfan Sheriff mIpAddressView.setText(linkAddress.getAddress().getHostAddress()); 76434ce343004ae925b653664f445eea627355e33abIrfan Sheriff mNetworkPrefixLengthView.setText(Integer.toString(linkAddress 76534ce343004ae925b653664f445eea627355e33abIrfan Sheriff .getNetworkPrefixLength())); 76634ce343004ae925b653664f445eea627355e33abIrfan Sheriff } 767caf8cf5cf5e464b9b26ab15e2f502b04eeac9b9bRobert Greenwalt 7683c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwalt for (RouteInfo route : linkProperties.getRoutes()) { 7693c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwalt if (route.isDefaultRoute()) { 7703c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwalt mGatewayView.setText(route.getGateway().getHostAddress()); 7713c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwalt break; 7723c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwalt } 77334ce343004ae925b653664f445eea627355e33abIrfan Sheriff } 7743c3490c819a1a6ce72468c1d867429ac0f86def8Robert Greenwalt 77534ce343004ae925b653664f445eea627355e33abIrfan Sheriff Iterator<InetAddress> dnsIterator = linkProperties.getDnses().iterator(); 77634ce343004ae925b653664f445eea627355e33abIrfan Sheriff if (dnsIterator.hasNext()) { 77734ce343004ae925b653664f445eea627355e33abIrfan Sheriff mDns1View.setText(dnsIterator.next().getHostAddress()); 77834ce343004ae925b653664f445eea627355e33abIrfan Sheriff } 77934ce343004ae925b653664f445eea627355e33abIrfan Sheriff if (dnsIterator.hasNext()) { 78034ce343004ae925b653664f445eea627355e33abIrfan Sheriff mDns2View.setText(dnsIterator.next().getHostAddress()); 781f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 782f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 783f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } else { 784f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mView.findViewById(R.id.staticip).setVisibility(View.GONE); 785f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 786f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 787f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 788c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff private void showProxyFields() { 789c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff WifiConfiguration config = null; 790c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 791c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mView.findViewById(R.id.proxy_settings_fields).setVisibility(View.VISIBLE); 792c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 793c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { 794c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff config = mAccessPoint.getConfig(); 795c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 796c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 797c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (mProxySettingsSpinner.getSelectedItemPosition() == PROXY_STATIC) { 798d9c7dcf0e4abf3cf82fe506747816e9f0a6408a6Irfan Sheriff mView.findViewById(R.id.proxy_warning_limited_support).setVisibility(View.VISIBLE); 799c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mView.findViewById(R.id.proxy_fields).setVisibility(View.VISIBLE); 800c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (mProxyHostView == null) { 801c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mProxyHostView = (TextView) mView.findViewById(R.id.proxy_hostname); 8025640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mProxyHostView.addTextChangedListener(this); 803c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mProxyPortView = (TextView) mView.findViewById(R.id.proxy_port); 8045640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mProxyPortView.addTextChangedListener(this); 805c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mProxyExclusionListView = (TextView) mView.findViewById(R.id.proxy_exclusionlist); 8065640ccff74e90669cea7b82d1f9db2653f070ebeIrfan Sheriff mProxyExclusionListView.addTextChangedListener(this); 807c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 808c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (config != null) { 80934ce343004ae925b653664f445eea627355e33abIrfan Sheriff ProxyProperties proxyProperties = config.linkProperties.getHttpProxy(); 810c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff if (proxyProperties != null) { 81152322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt mProxyHostView.setText(proxyProperties.getHost()); 81252322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt mProxyPortView.setText(Integer.toString(proxyProperties.getPort())); 81352322a9173fc167d3011017b396d1c7419fc280bRobert Greenwalt mProxyExclusionListView.setText(proxyProperties.getExclusionList()); 814c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 815c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 816c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } else { 817d9c7dcf0e4abf3cf82fe506747816e9f0a6408a6Irfan Sheriff mView.findViewById(R.id.proxy_warning_limited_support).setVisibility(View.GONE); 818c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff mView.findViewById(R.id.proxy_fields).setVisibility(View.GONE); 819c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 820c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } 821c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 822c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff 823f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff 824d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private void loadCertificates(Spinner spinner, String prefix) { 825d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa final Context context = mConfigUi.getContext(); 826d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 8270f41b49d1f33e86ec4e7004f009c074b68a90be6Irfan Sheriff String[] certs = KeyStore.getInstance().saw(prefix, android.os.Process.WIFI_UID); 828d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (certs == null || certs.length == 0) { 829de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff certs = new String[] {unspecifiedCert}; 830d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } else { 831d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa final String[] array = new String[certs.length + 1]; 832de11bcec8de61d96d72f41d53599ec65c6d258c2Irfan Sheriff array[0] = unspecifiedCert; 833d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa System.arraycopy(certs, 0, array, 1, certs.length); 834d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa certs = array; 835d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 836d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 837d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa final ArrayAdapter<String> adapter = new ArrayAdapter<String>( 838d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa context, android.R.layout.simple_spinner_item, certs); 839d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 840d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa spinner.setAdapter(adapter); 841d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 842d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 843d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private void setSelection(Spinner spinner, String value) { 844d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (value != null) { 845e78c1879058571c00879f0d3e756951302adf513Gilles Debunne @SuppressWarnings("unchecked") 846d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa ArrayAdapter<String> adapter = (ArrayAdapter<String>) spinner.getAdapter(); 847d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa for (int i = adapter.getCount() - 1; i >= 0; --i) { 848d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa if (value.equals(adapter.getItem(i))) { 849d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa spinner.setSelection(i); 850d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa break; 851d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 852d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 853d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 854d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 855d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 85658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa public boolean isEdit() { 85758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa return mEdit; 85858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 85958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 860d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 861d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void afterTextChanged(Editable s) { 862d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff mTextViewChangedHandler.post(new Runnable() { 863d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff public void run() { 864d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff enableSubmitIfAppropriate(); 865d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff } 866d61f7cd3aaf33277f6ac9982159539ff1a87cab9Irfan Sheriff }); 867d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 868d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 869d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 870d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void beforeTextChanged(CharSequence s, int start, int count, int after) { 871e78c1879058571c00879f0d3e756951302adf513Gilles Debunne // work done in afterTextChanged 872d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 873d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 874d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 875d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void onTextChanged(CharSequence s, int start, int before, int count) { 876e78c1879058571c00879f0d3e756951302adf513Gilles Debunne // work done in afterTextChanged 877d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 878d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 879d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 8803f9e2aec2e53fb025f0bd6160c7e403f9f8e22e3Chen Hong public void onCheckedChanged(CompoundButton view, boolean isChecked) { 881d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy if (view.getId() == R.id.show_password) { 882bd3d66cac5f2f2135c6d0fcd86cb7912cf936403Irfan Sheriff int pos = mPasswordView.getSelectionEnd(); 883d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy mPasswordView.setInputType( 8843f9e2aec2e53fb025f0bd6160c7e403f9f8e22e3Chen Hong InputType.TYPE_CLASS_TEXT | (isChecked ? 885d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD : 886d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy InputType.TYPE_TEXT_VARIATION_PASSWORD)); 88715a279231fa938ae3f93fc932b8341aa80df70e0Irfan Sheriff if (pos >= 0) { 88815a279231fa938ae3f93fc932b8341aa80df70e0Irfan Sheriff ((EditText)mPasswordView).setSelection(pos); 88915a279231fa938ae3f93fc932b8341aa80df70e0Irfan Sheriff } 890d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy } else if (view.getId() == R.id.wifi_advanced_togglebox) { 8913f9e2aec2e53fb025f0bd6160c7e403f9f8e22e3Chen Hong if (isChecked) { 892d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy mView.findViewById(R.id.wifi_advanced_fields).setVisibility(View.VISIBLE); 893d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy } else { 894d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy mView.findViewById(R.id.wifi_advanced_fields).setVisibility(View.GONE); 895d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy } 896d621e0930032e06de37fe3b76c6c373a2d64547aIsaac Levy } 897d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 898d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 899d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 900d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 9019b7edb16d1309dae9b71770d4f44275646b144e4Irfan Sheriff if (parent == mSecuritySpinner) { 902f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff mAccessPointSecurity = position; 903f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff showSecurityFields(); 904ba7ee527d8683f718efbc85558310b8ba269809bPartha N } else if (parent == mEapMethodSpinner) { 905ba7ee527d8683f718efbc85558310b8ba269809bPartha N showSecurityFields(); 906c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff } else if (parent == mProxySettingsSpinner) { 907c5361927f42572c8e10867ec6f8ffaa2cacff733Irfan Sheriff showProxyFields(); 908f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } else { 909f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff showIpConfigFields(); 910f027ce5e0223799f98f6d297b40ab57c8a7a8b5cIrfan Sheriff } 91121e644a9a817ec8daf4c118a9890057a30e041daIrfan Sheriff enableSubmitIfAppropriate(); 912d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 913d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 914d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 915d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void onNothingSelected(AdapterView<?> parent) { 916e78c1879058571c00879f0d3e756951302adf513Gilles Debunne // 917d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 918265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani 919265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani /** 920265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani * Make the characters of the password visible if show_password is checked. 921265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani */ 922265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani private void updatePasswordVisibility(boolean checked) { 923265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani int pos = mPasswordView.getSelectionEnd(); 924265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani mPasswordView.setInputType( 925265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani InputType.TYPE_CLASS_TEXT | (checked ? 926265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD : 927265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani InputType.TYPE_TEXT_VARIATION_PASSWORD)); 928265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani if (pos >= 0) { 929265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani ((EditText)mPasswordView).setSelection(pos); 930265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani } 931265dfd22e3681edfff14f068c1a113a28b4cd45cAmith Yamasani } 932e82a459392db4dee491bcef8a15ccd5cbd067f1bIrfan Sheriff} 933