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