From f3a0201202bb97a62067e9473e0a09afa2efe1ff Mon Sep 17 00:00:00 2001 From: Irfan Sheriff Date: Fri, 11 Jan 2013 14:12:54 -0800 Subject: [PATCH 1/4] Update enterprise API usage Also, remove the unnecessary keystore lock/unlock checks since these are now controlled at lockscreen Change-Id: If65c4029d4cf2b8377fbc3512c9f691572125995 --- .../settings/wifi/WifiConfigController.java | 87 +++++-------------- .../android/settings/wifi/WifiSettings.java | 26 +----- 2 files changed, 25 insertions(+), 88 deletions(-) diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java index 2598a0e2538..bf5f6423d89 100644 --- a/src/com/android/settings/wifi/WifiConfigController.java +++ b/src/com/android/settings/wifi/WifiConfigController.java @@ -63,10 +63,6 @@ import java.util.Iterator; */ public class WifiConfigController implements TextWatcher, View.OnClickListener, AdapterView.OnItemSelectedListener { - private static final String KEYSTORE_SPACE = WifiConfiguration.KEYSTORE_URI; - - private static final String PHASE2_PREFIX = "auth="; - private final WifiConfigUiBase mConfigUi; private final View mView; private final AccessPoint mAccessPoint; @@ -79,6 +75,8 @@ public class WifiConfigController implements TextWatcher, private int mAccessPointSecurity; private TextView mPasswordView; + private String unspecifiedCert = "unspecified"; + private Spinner mSecuritySpinner; private Spinner mEapMethodSpinner; private Spinner mEapCaCertSpinner; @@ -124,22 +122,6 @@ public class WifiConfigController implements TextWatcher, private final Handler mTextViewChangedHandler; - static boolean requireKeyStore(WifiConfiguration config) { - if (config == null) { - return false; - } - if (!TextUtils.isEmpty(config.key_id.value())) { - return true; - } - String values[] = { config.ca_cert.value(), config.client_cert.value() }; - for (String value : values) { - if (value != null && value.startsWith(KEYSTORE_SPACE)) { - return true; - } - } - return false; - } - public WifiConfigController( WifiConfigUiBase parent, View view, AccessPoint accessPoint, boolean edit) { mConfigUi = parent; @@ -155,6 +137,7 @@ public class WifiConfigController implements TextWatcher, final Context context = mConfigUi.getContext(); final Resources resources = context.getResources(); + unspecifiedCert = context.getString(R.string.wifi_unspecified); mIpSettingsSpinner = (Spinner) mView.findViewById(R.id.ip_settings); mIpSettingsSpinner.setOnItemSelectedListener(this); mProxySettingsSpinner = (Spinner) mView.findViewById(R.id.proxy_settings); @@ -356,29 +339,18 @@ public class WifiConfigController implements TextWatcher, case AccessPoint.SECURITY_EAP: config.allowedKeyManagement.set(KeyMgmt.WPA_EAP); config.allowedKeyManagement.set(KeyMgmt.IEEE8021X); - config.eap.setValue((String) mEapMethodSpinner.getSelectedItem()); - - config.phase2.setValue((mPhase2Spinner.getSelectedItemPosition() == 0) ? "" : - PHASE2_PREFIX + mPhase2Spinner.getSelectedItem()); - config.ca_cert.setValue((mEapCaCertSpinner.getSelectedItemPosition() == 0) ? "" : - KEYSTORE_SPACE + Credentials.CA_CERTIFICATE + - (String) mEapCaCertSpinner.getSelectedItem()); - config.client_cert.setValue((mEapUserCertSpinner.getSelectedItemPosition() == 0) ? - "" : KEYSTORE_SPACE + Credentials.USER_CERTIFICATE + - (String) mEapUserCertSpinner.getSelectedItem()); - final boolean isEmptyKeyId = (mEapUserCertSpinner.getSelectedItemPosition() == 0); - config.key_id.setValue(isEmptyKeyId ? "" : Credentials.USER_PRIVATE_KEY + - (String) mEapUserCertSpinner.getSelectedItem()); - config.engine.setValue(isEmptyKeyId ? WifiConfiguration.ENGINE_DISABLE : - WifiConfiguration.ENGINE_ENABLE); - config.engine_id.setValue(isEmptyKeyId ? "" : WifiConfiguration.KEYSTORE_ENGINE_ID); - config.identity.setValue((mEapIdentityView.length() == 0) ? "" : - mEapIdentityView.getText().toString()); - config.anonymous_identity.setValue((mEapAnonymousView.length() == 0) ? "" : + config.enterpriseConfig.setEapMethod(mEapMethodSpinner.getSelectedItemPosition()); + config.enterpriseConfig.setPhase2Method(mPhase2Spinner.getSelectedItemPosition()); + String caCert = (String) mEapCaCertSpinner.getSelectedItem(); + if (caCert.equals(unspecifiedCert)) caCert = ""; + String clientCert = (String) mEapUserCertSpinner.getSelectedItem(); + if (clientCert.equals(unspecifiedCert)) clientCert = ""; + config.enterpriseConfig.setCaCertificate(caCert); + config.enterpriseConfig.setClientCertificate(clientCert); + config.enterpriseConfig.setIdentity(mEapIdentityView.getText().toString()); + config.enterpriseConfig.setAnonymousIdentity( mEapAnonymousView.getText().toString()); - if (mPasswordView.length() != 0) { - config.password.setValue(mPasswordView.getText().toString()); - } + config.enterpriseConfig.setPassword(mPasswordView.getText().toString()); break; default: @@ -549,21 +521,13 @@ public class WifiConfigController implements TextWatcher, if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { WifiConfiguration config = mAccessPoint.getConfig(); - setSelection(mEapMethodSpinner, config.eap.value()); + mEapMethodSpinner.setSelection(config.enterpriseConfig.getEapMethod()); + mPhase2Spinner.setSelection(config.enterpriseConfig.getPhase2Method()); - final String phase2Method = config.phase2.value(); - if (phase2Method != null && phase2Method.startsWith(PHASE2_PREFIX)) { - setSelection(mPhase2Spinner, phase2Method.substring(PHASE2_PREFIX.length())); - } else { - setSelection(mPhase2Spinner, phase2Method); - } - - setCertificate(mEapCaCertSpinner, KEYSTORE_SPACE + Credentials.CA_CERTIFICATE, - config.ca_cert.value()); - setCertificate(mEapUserCertSpinner, Credentials.USER_PRIVATE_KEY, - config.key_id.value()); - mEapIdentityView.setText(config.identity.value()); - mEapAnonymousView.setText(config.anonymous_identity.value()); + setSelection(mEapCaCertSpinner, config.enterpriseConfig.getCaCertificate()); + setSelection(mEapUserCertSpinner, config.enterpriseConfig.getClientCertificate()); + mEapIdentityView.setText(config.enterpriseConfig.getIdentity()); + mEapAnonymousView.setText(config.enterpriseConfig.getAnonymousIdentity()); } } @@ -675,14 +639,13 @@ public class WifiConfigController implements TextWatcher, private void loadCertificates(Spinner spinner, String prefix) { final Context context = mConfigUi.getContext(); - final String unspecified = context.getString(R.string.wifi_unspecified); String[] certs = KeyStore.getInstance().saw(prefix); if (certs == null || certs.length == 0) { - certs = new String[] {unspecified}; + certs = new String[] {unspecifiedCert}; } else { final String[] array = new String[certs.length + 1]; - array[0] = unspecified; + array[0] = unspecifiedCert; System.arraycopy(certs, 0, array, 1, certs.length); certs = array; } @@ -693,12 +656,6 @@ public class WifiConfigController implements TextWatcher, spinner.setAdapter(adapter); } - private void setCertificate(Spinner spinner, String prefix, String cert) { - if (cert != null && cert.startsWith(prefix)) { - setSelection(spinner, cert.substring(prefix.length())); - } - } - private void setSelection(Spinner spinner, String value) { if (value != null) { @SuppressWarnings("unchecked") diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index e6079309c63..274d49ee07f 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -46,7 +46,6 @@ import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.security.Credentials; -import android.security.KeyStore; import android.telephony.TelephonyManager; import android.util.AttributeSet; import android.util.Log; @@ -135,8 +134,6 @@ public class WifiSettings extends SettingsPreferenceFragment private AtomicBoolean mConnected = new AtomicBoolean(false); - private int mKeyStoreNetworkId = INVALID_NETWORK_ID; - private WifiDialog mDialog; private TextView mEmptyView; @@ -412,11 +409,6 @@ public class WifiSettings extends SettingsPreferenceFragment } getActivity().registerReceiver(mReceiver, mFilter); - if (mKeyStoreNetworkId != INVALID_NETWORK_ID && KeyStore.getInstance().isUnlocked()) { - mWifiManager.connect(mKeyStoreNetworkId, mConnectListener); - } - mKeyStoreNetworkId = INVALID_NETWORK_ID; - updateAccessPoints(); } @@ -559,10 +551,8 @@ public class WifiSettings extends SettingsPreferenceFragment switch (item.getItemId()) { case MENU_ID_CONNECT: { if (mSelectedAccessPoint.networkId != INVALID_NETWORK_ID) { - if (!requireKeyStore(mSelectedAccessPoint.getConfig())) { - mWifiManager.connect(mSelectedAccessPoint.networkId, - mConnectListener); - } + mWifiManager.connect(mSelectedAccessPoint.networkId, + mConnectListener); } else if (mSelectedAccessPoint.security == AccessPoint.SECURITY_NONE) { /** Bypass dialog for unsecured networks */ mSelectedAccessPoint.generateOpenNetworkConfig(); @@ -699,15 +689,6 @@ public class WifiSettings extends SettingsPreferenceFragment && telephonyManager.getSimState() != TelephonyManager.SIM_STATE_UNKNOWN; } - private boolean requireKeyStore(WifiConfiguration config) { - if (WifiConfigController.requireKeyStore(config) && !KeyStore.getInstance().isUnlocked()) { - mKeyStoreNetworkId = config.networkId; - Credentials.getInstance().unlock(getActivity()); - return true; - } - return false; - } - /** * Shows the latest access points available with supplimental information like * the strength of network and the security for it. @@ -974,7 +955,6 @@ public class WifiSettings extends SettingsPreferenceFragment if (config == null) { if (mSelectedAccessPoint != null - && !requireKeyStore(mSelectedAccessPoint.getConfig()) && mSelectedAccessPoint.networkId != INVALID_NETWORK_ID) { mWifiManager.connect(mSelectedAccessPoint.networkId, mConnectListener); @@ -984,7 +964,7 @@ public class WifiSettings extends SettingsPreferenceFragment mWifiManager.save(config, mSaveListener); } } else { - if (configController.isEdit() || requireKeyStore(config)) { + if (configController.isEdit()) { mWifiManager.save(config, mSaveListener); } else { mWifiManager.connect(config, mConnectListener); From ce689126213671874349c55a4b47392503013372 Mon Sep 17 00:00:00 2001 From: Irfan Sheriff Date: Thu, 17 Jan 2013 09:47:45 -0800 Subject: [PATCH 2/4] Allow only valid EAP configs We allow configuring all possible EAP fields today even though some of the configs make no sense and will not result in a successful connection. Allow only support configs for various EAP methods Change-Id: I2e3e8d4d6203acb2eac8cd645df39e1a9ca579ab --- res/layout/wifi_dialog.xml | 4 +- res/values/arrays.xml | 9 +- .../settings/wifi/WifiConfigController.java | 208 ++++++++++++++++-- 3 files changed, 197 insertions(+), 24 deletions(-) diff --git a/res/layout/wifi_dialog.xml b/res/layout/wifi_dialog.xml index ff003c4fc18..4824be621d0 100644 --- a/res/layout/wifi_dialog.xml +++ b/res/layout/wifi_dialog.xml @@ -142,7 +142,7 @@ - - PWD - + + + None + MSCHAPV2 + GTC + + + None PAP diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java index bf5f6423d89..373763d8de9 100644 --- a/src/com/android/settings/wifi/WifiConfigController.java +++ b/src/com/android/settings/wifi/WifiConfigController.java @@ -31,7 +31,9 @@ import android.net.wifi.WifiConfiguration.AuthAlgorithm; import android.net.wifi.WifiConfiguration.IpAssignment; import android.net.wifi.WifiConfiguration.KeyMgmt; import android.net.wifi.WifiConfiguration.ProxySettings; -import android.net.wifi.WifiConfiguration.Status; +import android.net.wifi.WifiEnterpriseConfig; +import android.net.wifi.WifiEnterpriseConfig.Eap; +import android.net.wifi.WifiEnterpriseConfig.Phase2; import android.net.wifi.WifiInfo; import android.os.Handler; import android.security.Credentials; @@ -76,11 +78,19 @@ public class WifiConfigController implements TextWatcher, private TextView mPasswordView; private String unspecifiedCert = "unspecified"; + private static final int unspecifiedCertIndex = 0; + + /* Phase2 methods supported by PEAP are limited */ + private final ArrayAdapter PHASE2_PEAP_ADAPTER; + /* Full list of phase2 methods */ + private final ArrayAdapter PHASE2_FULL_ADAPTER; private Spinner mSecuritySpinner; private Spinner mEapMethodSpinner; private Spinner mEapCaCertSpinner; private Spinner mPhase2Spinner; + // Associated with mPhase2Spinner, one of PHASE2_FULL_ADAPTER or PHASE2_PEAP_ADAPTER + private ArrayAdapter mPhase2Adapter; private Spinner mEapUserCertSpinner; private TextView mEapIdentityView; private TextView mEapAnonymousView; @@ -93,12 +103,17 @@ public class WifiConfigController implements TextWatcher, public static final int PROXY_NONE = 0; public static final int PROXY_STATIC = 1; - /* These values from from "wifi_eap_method" resource array */ + /* These values come from "wifi_eap_method" resource array */ public static final int WIFI_EAP_METHOD_PEAP = 0; public static final int WIFI_EAP_METHOD_TLS = 1; public static final int WIFI_EAP_METHOD_TTLS = 2; public static final int WIFI_EAP_METHOD_PWD = 3; + /* These values come from "wifi_peap_phase2_entries" resource array */ + public static final int WIFI_PEAP_PHASE2_NONE = 0; + public static final int WIFI_PEAP_PHASE2_MSCHAPV2 = 1; + public static final int WIFI_PEAP_PHASE2_GTC = 2; + private static final String TAG = "WifiConfigController"; private Spinner mIpSettingsSpinner; @@ -137,6 +152,16 @@ public class WifiConfigController implements TextWatcher, final Context context = mConfigUi.getContext(); final Resources resources = context.getResources(); + PHASE2_PEAP_ADAPTER = new ArrayAdapter( + context, android.R.layout.simple_spinner_item, + context.getResources().getStringArray(R.array.wifi_peap_phase2_entries)); + PHASE2_PEAP_ADAPTER.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + PHASE2_FULL_ADAPTER = new ArrayAdapter( + context, android.R.layout.simple_spinner_item, + context.getResources().getStringArray(R.array.wifi_phase2_entries)); + PHASE2_FULL_ADAPTER.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + unspecifiedCert = context.getString(R.string.wifi_unspecified); mIpSettingsSpinner = (Spinner) mView.findViewById(R.id.ip_settings); mIpSettingsSpinner.setOnItemSelectedListener(this); @@ -339,22 +364,58 @@ public class WifiConfigController implements TextWatcher, case AccessPoint.SECURITY_EAP: config.allowedKeyManagement.set(KeyMgmt.WPA_EAP); config.allowedKeyManagement.set(KeyMgmt.IEEE8021X); - config.enterpriseConfig.setEapMethod(mEapMethodSpinner.getSelectedItemPosition()); - config.enterpriseConfig.setPhase2Method(mPhase2Spinner.getSelectedItemPosition()); + config.enterpriseConfig = new WifiEnterpriseConfig(); + int eapMethod = mEapMethodSpinner.getSelectedItemPosition(); + int phase2Method = mPhase2Spinner.getSelectedItemPosition(); + config.enterpriseConfig.setEapMethod(eapMethod); + switch (eapMethod) { + case Eap.PEAP: + // PEAP supports limited phase2 values + // Map the index from the PHASE2_PEAP_ADAPTER to the one used + // by the API which has the full list of PEAP methods. + switch(phase2Method) { + case WIFI_PEAP_PHASE2_NONE: + config.enterpriseConfig.setPhase2Method(Phase2.NONE); + break; + case WIFI_PEAP_PHASE2_MSCHAPV2: + config.enterpriseConfig.setPhase2Method(Phase2.MSCHAPV2); + break; + case WIFI_PEAP_PHASE2_GTC: + config.enterpriseConfig.setPhase2Method(Phase2.GTC); + break; + default: + Log.e(TAG, "Unknown phase2 method" + phase2Method); + break; + } + break; + default: + // The default index from PHASE2_FULL_ADAPTER maps to the API + config.enterpriseConfig.setPhase2Method(phase2Method); + break; + } String caCert = (String) mEapCaCertSpinner.getSelectedItem(); if (caCert.equals(unspecifiedCert)) caCert = ""; + config.enterpriseConfig.setCaCertificate(caCert); String clientCert = (String) mEapUserCertSpinner.getSelectedItem(); if (clientCert.equals(unspecifiedCert)) clientCert = ""; - config.enterpriseConfig.setCaCertificate(caCert); config.enterpriseConfig.setClientCertificate(clientCert); config.enterpriseConfig.setIdentity(mEapIdentityView.getText().toString()); config.enterpriseConfig.setAnonymousIdentity( mEapAnonymousView.getText().toString()); - config.enterpriseConfig.setPassword(mPasswordView.getText().toString()); - break; + if (mPasswordView.isShown()) { + // For security reasons, a previous password is not displayed to user. + // Update only if it has been changed. + if (mPasswordView.length() > 0) { + config.enterpriseConfig.setPassword(mPasswordView.getText().toString()); + } + } else { + // clear password + config.enterpriseConfig.setPassword(mPasswordView.getText().toString()); + } + break; default: - return null; + return null; } config.proxySettings = mProxySettings; @@ -519,34 +580,139 @@ public class WifiConfigController implements TextWatcher, loadCertificates(mEapCaCertSpinner, Credentials.CA_CERTIFICATE); loadCertificates(mEapUserCertSpinner, Credentials.USER_PRIVATE_KEY); + // Modifying an existing network if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { WifiConfiguration config = mAccessPoint.getConfig(); - mEapMethodSpinner.setSelection(config.enterpriseConfig.getEapMethod()); - mPhase2Spinner.setSelection(config.enterpriseConfig.getPhase2Method()); - + int eapMethod = config.enterpriseConfig.getEapMethod(); + int phase2Method = config.enterpriseConfig.getPhase2Method(); + mEapMethodSpinner.setSelection(eapMethod); + showEapFieldsByMethod(eapMethod); + switch (eapMethod) { + case Eap.PEAP: + switch (phase2Method) { + case Phase2.NONE: + mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_NONE); + break; + case Phase2.MSCHAPV2: + mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_MSCHAPV2); + break; + case Phase2.GTC: + mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_GTC); + break; + default: + Log.e(TAG, "Invalid phase 2 method " + phase2Method); + break; + } + break; + default: + mPhase2Spinner.setSelection(phase2Method); + break; + } setSelection(mEapCaCertSpinner, config.enterpriseConfig.getCaCertificate()); setSelection(mEapUserCertSpinner, config.enterpriseConfig.getClientCertificate()); mEapIdentityView.setText(config.enterpriseConfig.getIdentity()); mEapAnonymousView.setText(config.enterpriseConfig.getAnonymousIdentity()); } + } else { + showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition()); } + } + /** + * EAP-PWD valid fields include + * identity + * password + * EAP-PEAP valid fields include + * phase2: MSCHAPV2, GTC + * ca_cert + * identity + * anonymous_identity + * password + * EAP-TLS valid fields include + * user_cert + * ca_cert + * identity + * EAP-TTLS valid fields include + * phase2: PAP, MSCHAP, MSCHAPV2, GTC + * ca_cert + * identity + * anonymous_identity + * password + */ + private void showEapFieldsByMethod(int eapMethod) { + // Common defaults mView.findViewById(R.id.l_method).setVisibility(View.VISIBLE); mView.findViewById(R.id.l_identity).setVisibility(View.VISIBLE); - if (mEapMethodSpinner.getSelectedItemPosition() == WIFI_EAP_METHOD_PWD){ - mView.findViewById(R.id.l_phase2).setVisibility(View.GONE); - mView.findViewById(R.id.l_ca_cert).setVisibility(View.GONE); - mView.findViewById(R.id.l_user_cert).setVisibility(View.GONE); - mView.findViewById(R.id.l_anonymous).setVisibility(View.GONE); - } else { - mView.findViewById(R.id.l_phase2).setVisibility(View.VISIBLE); - mView.findViewById(R.id.l_ca_cert).setVisibility(View.VISIBLE); - mView.findViewById(R.id.l_user_cert).setVisibility(View.VISIBLE); - mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE); + // Defaults for most of the EAP methods and over-riden by + // by certain EAP methods + mView.findViewById(R.id.l_ca_cert).setVisibility(View.VISIBLE); + mView.findViewById(R.id.password_layout).setVisibility(View.VISIBLE); + mView.findViewById(R.id.show_password_layout).setVisibility(View.VISIBLE); + + Context context = mConfigUi.getContext(); + switch (eapMethod) { + case WIFI_EAP_METHOD_PWD: + setPhase2Invisible(); + setCaCertInvisible(); + setAnonymousIdentInvisible(); + setUserCertInvisible(); + break; + case WIFI_EAP_METHOD_TLS: + mView.findViewById(R.id.l_user_cert).setVisibility(View.VISIBLE); + setPhase2Invisible(); + setAnonymousIdentInvisible(); + setPasswordInvisible(); + break; + case WIFI_EAP_METHOD_PEAP: + // Reset adapter if needed + if (mPhase2Adapter != PHASE2_PEAP_ADAPTER) { + mPhase2Adapter = PHASE2_PEAP_ADAPTER; + mPhase2Spinner.setAdapter(mPhase2Adapter); + } + mView.findViewById(R.id.l_phase2).setVisibility(View.VISIBLE); + mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE); + setUserCertInvisible(); + break; + case WIFI_EAP_METHOD_TTLS: + // Reset adapter if needed + if (mPhase2Adapter != PHASE2_FULL_ADAPTER) { + mPhase2Adapter = PHASE2_FULL_ADAPTER; + mPhase2Spinner.setAdapter(mPhase2Adapter); + } + mView.findViewById(R.id.l_phase2).setVisibility(View.VISIBLE); + mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE); + setUserCertInvisible(); + break; } } + private void setPhase2Invisible() { + mView.findViewById(R.id.l_phase2).setVisibility(View.GONE); + mPhase2Spinner.setSelection(Phase2.NONE); + } + + private void setCaCertInvisible() { + mView.findViewById(R.id.l_ca_cert).setVisibility(View.GONE); + mEapCaCertSpinner.setSelection(unspecifiedCertIndex); + } + + private void setUserCertInvisible() { + mView.findViewById(R.id.l_user_cert).setVisibility(View.GONE); + mEapUserCertSpinner.setSelection(unspecifiedCertIndex); + } + + private void setAnonymousIdentInvisible() { + mView.findViewById(R.id.l_anonymous).setVisibility(View.GONE); + mEapAnonymousView.setText(""); + } + + private void setPasswordInvisible() { + mPasswordView.setText(""); + mView.findViewById(R.id.password_layout).setVisibility(View.GONE); + mView.findViewById(R.id.show_password_layout).setVisibility(View.GONE); + } + private void showIpConfigFields() { WifiConfiguration config = null; From 0e221880881cd154a1e57d83065f6c2d917f348a Mon Sep 17 00:00:00 2001 From: Irfan Sheriff Date: Wed, 6 Feb 2013 10:51:13 -0800 Subject: [PATCH 3/4] Fix EAP field display for a new network We now hide certain EAP fields based on the type chosen. For a new network, we should set a default and handle this the same way Change-Id: I9c8605694ba51bc588a49f711dcf31517ea3f6e4 --- src/com/android/settings/wifi/WifiConfigController.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java index 373763d8de9..c412b37b586 100644 --- a/src/com/android/settings/wifi/WifiConfigController.java +++ b/src/com/android/settings/wifi/WifiConfigController.java @@ -612,6 +612,11 @@ public class WifiConfigController implements TextWatcher, setSelection(mEapUserCertSpinner, config.enterpriseConfig.getClientCertificate()); mEapIdentityView.setText(config.enterpriseConfig.getIdentity()); mEapAnonymousView.setText(config.enterpriseConfig.getAnonymousIdentity()); + } else { + // Choose a default for a new network and show only appropriate + // fields + mEapMethodSpinner.setSelection(Eap.PEAP); + showEapFieldsByMethod(Eap.PEAP); } } else { showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition()); From a51d1fb34581cf341b82d2b6d25533d182d4f084 Mon Sep 17 00:00:00 2001 From: Irfan Sheriff Date: Mon, 11 Feb 2013 15:55:31 -0800 Subject: [PATCH 4/4] Use updated enterprise API Change-Id: If41fad5fae5864555bb1de3fc99130682b1cdff1 --- .../settings/wifi/WifiConfigController.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java index c412b37b586..60ab1ca3a28 100644 --- a/src/com/android/settings/wifi/WifiConfigController.java +++ b/src/com/android/settings/wifi/WifiConfigController.java @@ -395,10 +395,10 @@ public class WifiConfigController implements TextWatcher, } String caCert = (String) mEapCaCertSpinner.getSelectedItem(); if (caCert.equals(unspecifiedCert)) caCert = ""; - config.enterpriseConfig.setCaCertificate(caCert); + config.enterpriseConfig.setCaCertificateAlias(caCert); String clientCert = (String) mEapUserCertSpinner.getSelectedItem(); if (clientCert.equals(unspecifiedCert)) clientCert = ""; - config.enterpriseConfig.setClientCertificate(clientCert); + config.enterpriseConfig.setClientCertificateAlias(clientCert); config.enterpriseConfig.setIdentity(mEapIdentityView.getText().toString()); config.enterpriseConfig.setAnonymousIdentity( mEapAnonymousView.getText().toString()); @@ -582,9 +582,9 @@ public class WifiConfigController implements TextWatcher, // Modifying an existing network if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { - WifiConfiguration config = mAccessPoint.getConfig(); - int eapMethod = config.enterpriseConfig.getEapMethod(); - int phase2Method = config.enterpriseConfig.getPhase2Method(); + WifiEnterpriseConfig enterpriseConfig = mAccessPoint.getConfig().enterpriseConfig; + int eapMethod = enterpriseConfig.getEapMethod(); + int phase2Method = enterpriseConfig.getPhase2Method(); mEapMethodSpinner.setSelection(eapMethod); showEapFieldsByMethod(eapMethod); switch (eapMethod) { @@ -608,10 +608,10 @@ public class WifiConfigController implements TextWatcher, mPhase2Spinner.setSelection(phase2Method); break; } - setSelection(mEapCaCertSpinner, config.enterpriseConfig.getCaCertificate()); - setSelection(mEapUserCertSpinner, config.enterpriseConfig.getClientCertificate()); - mEapIdentityView.setText(config.enterpriseConfig.getIdentity()); - mEapAnonymousView.setText(config.enterpriseConfig.getAnonymousIdentity()); + setSelection(mEapCaCertSpinner, enterpriseConfig.getCaCertificateAlias()); + setSelection(mEapUserCertSpinner, enterpriseConfig.getClientCertificateAlias()); + mEapIdentityView.setText(enterpriseConfig.getIdentity()); + mEapAnonymousView.setText(enterpriseConfig.getAnonymousIdentity()); } else { // Choose a default for a new network and show only appropriate // fields