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