/* show submit button if password, ip and proxy settings are valid */ private void enableSubmitIfAppropriate() { Button submit = mConfigUi.getSubmitButton(); if (submit == null) return; boolean enabled = false; boolean passwordInvalid = false; /* Check password invalidity for manual network set up alone */ if (chosenNetworkSetupMethod() == MANUAL && ((mAccessPointSecurity == AccessPoint.SECURITY_WEP && mPasswordView.length() == 0) || (mAccessPointSecurity == AccessPoint.SECURITY_PSK && mPasswordView.length() < 8))) { passwordInvalid = true; } if ((mSsidView != null && mSsidView.length() == 0) || ((mAccessPoint == null || mAccessPoint.networkId == INVALID_NETWORK_ID) && passwordInvalid)) { enabled = false; } else { if (ipAndProxyFieldsAreValid()) { enabled = true; } else { enabled = false; } } submit.setEnabled(enabled); }
private void showSecurityFields() { if (mInXlSetupWizard) { // Note: XL SetupWizard won't hide "EAP" settings here. if (!((WifiSettingsForSetupWizardXL) mConfigUi.getContext()) .initSecurityFields(mView, mAccessPointSecurity)) { return; } } if (mAccessPointSecurity == AccessPoint.SECURITY_NONE) { mView.findViewById(R.id.security_fields).setVisibility(View.GONE); return; } mView.findViewById(R.id.security_fields).setVisibility(View.VISIBLE); if (mPasswordView == null) { mPasswordView = (TextView) mView.findViewById(R.id.password); mPasswordView.addTextChangedListener(this); ((CheckBox) mView.findViewById(R.id.show_password)).setOnClickListener(this); if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { mPasswordView.setHint(R.string.wifi_unchanged); } } if (mAccessPointSecurity != AccessPoint.SECURITY_EAP) { mView.findViewById(R.id.eap).setVisibility(View.GONE); return; } mView.findViewById(R.id.eap).setVisibility(View.VISIBLE); if (mEapMethodSpinner == null) { mEapMethodSpinner = (Spinner) mView.findViewById(R.id.method); mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2); mEapCaCertSpinner = (Spinner) mView.findViewById(R.id.ca_cert); mEapUserCertSpinner = (Spinner) mView.findViewById(R.id.user_cert); mEapIdentityView = (TextView) mView.findViewById(R.id.identity); mEapAnonymousView = (TextView) mView.findViewById(R.id.anonymous); loadCertificates(mEapCaCertSpinner, Credentials.CA_CERTIFICATE); loadCertificates(mEapUserCertSpinner, Credentials.USER_PRIVATE_KEY); if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { WifiConfiguration config = mAccessPoint.getConfig(); setSelection(mEapMethodSpinner, config.eap.value()); setSelection(mPhase2Spinner, config.phase2.value()); setCertificate(mEapCaCertSpinner, Credentials.CA_CERTIFICATE, config.ca_cert.value()); setCertificate( mEapUserCertSpinner, Credentials.USER_PRIVATE_KEY, config.private_key.value()); mEapIdentityView.setText(config.identity.value()); mEapAnonymousView.setText(config.anonymous_identity.value()); } } }
/** * 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); // 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 loadCertificates(Spinner spinner, String prefix) { final Context context = mConfigUi.getContext(); String[] certs = KeyStore.getInstance().saw(prefix, android.os.Process.WIFI_UID); if (certs == null || certs.length == 0) { certs = new String[] {unspecifiedCert}; } else { final String[] array = new String[certs.length + 1]; array[0] = unspecifiedCert; System.arraycopy(certs, 0, array, 1, certs.length); certs = array; } final ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, certs); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); }
private void addRow(ViewGroup group, int name, String value) { View row = mConfigUi.getLayoutInflater().inflate(R.layout.wifi_dialog_row, group, false); ((TextView) row.findViewById(R.id.name)).setText(name); ((TextView) row.findViewById(R.id.value)).setText(value); group.addView(row); }
public WifiConfigController( WifiConfigUiBase parent, View view, AccessPoint accessPoint, boolean edit) { mConfigUi = parent; mInXlSetupWizard = (parent instanceof WifiConfigUiForSetupWizardXL); mView = view; mAccessPoint = accessPoint; mAccessPointSecurity = (accessPoint == null) ? AccessPoint.SECURITY_NONE : accessPoint.security; mEdit = edit; final Context context = mConfigUi.getContext(); final Resources resources = context.getResources(); if (mAccessPoint == null) { // new network mConfigUi.setTitle(R.string.wifi_add_network); mSsidView = (TextView) mView.findViewById(R.id.ssid); mSsidView.addTextChangedListener(this); mSecuritySpinner = ((Spinner) mView.findViewById(R.id.security)); mSecuritySpinner.setOnItemSelectedListener(this); if (mInXlSetupWizard) { mView.findViewById(R.id.type_ssid).setVisibility(View.VISIBLE); mView.findViewById(R.id.type_security).setVisibility(View.VISIBLE); // We want custom layout. The content must be same as the other cases. ArrayAdapter<String> adapter = new ArrayAdapter<String>( context, R.layout.wifi_setup_custom_list_item_1, android.R.id.text1, context.getResources().getStringArray(R.array.wifi_security_no_eap)); mSecuritySpinner.setAdapter(adapter); } else { mView.findViewById(R.id.type).setVisibility(View.VISIBLE); } mConfigUi.setSubmitButton(context.getString(R.string.wifi_save)); } else { mConfigUi.setTitle(mAccessPoint.ssid); mIpSettingsSpinner = (Spinner) mView.findViewById(R.id.ip_settings); mIpSettingsSpinner.setOnItemSelectedListener(this); mProxySettingsSpinner = (Spinner) mView.findViewById(R.id.proxy_settings); mProxySettingsSpinner.setOnItemSelectedListener(this); ViewGroup group = (ViewGroup) mView.findViewById(R.id.info); DetailedState state = mAccessPoint.getState(); if (state != null) { addRow(group, R.string.wifi_status, Summary.get(mConfigUi.getContext(), state)); } int level = mAccessPoint.getLevel(); if (level != -1) { String[] signal = resources.getStringArray(R.array.wifi_signal); addRow(group, R.string.wifi_signal, signal[level]); } WifiInfo info = mAccessPoint.getInfo(); if (info != null && info.getLinkSpeed() != -1) { addRow(group, R.string.wifi_speed, info.getLinkSpeed() + WifiInfo.LINK_SPEED_UNITS); } addRow(group, R.string.wifi_security, mAccessPoint.getSecurityString(false)); boolean showAdvancedFields = false; if (mAccessPoint.networkId != INVALID_NETWORK_ID) { WifiConfiguration config = mAccessPoint.getConfig(); if (config.ipAssignment == IpAssignment.STATIC) { mIpSettingsSpinner.setSelection(STATIC_IP); showAdvancedFields = true; } else { mIpSettingsSpinner.setSelection(DHCP); } // Display IP addresses for (InetAddress a : config.linkProperties.getAddresses()) { addRow(group, R.string.wifi_ip_address, a.getHostAddress()); } if (config.proxySettings == ProxySettings.STATIC) { mProxySettingsSpinner.setSelection(PROXY_STATIC); showAdvancedFields = true; } else { mProxySettingsSpinner.setSelection(PROXY_NONE); } if (config.status == Status.DISABLED && config.disableReason == WifiConfiguration.DISABLED_DNS_FAILURE) { addRow( group, R.string.wifi_disabled_heading, context.getString(R.string.wifi_disabled_help)); } } /* Show network setup options only for a new network */ if (mAccessPoint.networkId == INVALID_NETWORK_ID && mAccessPoint.wpsAvailable) { showNetworkSetupFields(); } if (mAccessPoint.networkId == INVALID_NETWORK_ID || mEdit) { showSecurityFields(); showIpConfigFields(); showProxyFields(); mView.findViewById(R.id.wifi_advanced_toggle).setVisibility(View.VISIBLE); mView.findViewById(R.id.wifi_advanced_togglebox).setOnClickListener(this); if (showAdvancedFields) { ((CheckBox) mView.findViewById(R.id.wifi_advanced_togglebox)).setChecked(true); mView.findViewById(R.id.wifi_advanced_fields).setVisibility(View.VISIBLE); } } if (mEdit) { mConfigUi.setSubmitButton(context.getString(R.string.wifi_save)); } else { if (state == null && level != -1) { mConfigUi.setSubmitButton(context.getString(R.string.wifi_connect)); } else { mView.findViewById(R.id.ip_fields).setVisibility(View.GONE); } if (mAccessPoint.networkId != INVALID_NETWORK_ID) { mConfigUi.setForgetButton(context.getString(R.string.wifi_forget)); } } } mConfigUi.setCancelButton(context.getString(R.string.wifi_cancel)); if (mConfigUi.getSubmitButton() != null) { enableSubmitIfAppropriate(); } }
private void showSecurityFields() { if (mInXlSetupWizard) { // Note: XL SetupWizard won't hide "EAP" settings here. if (!((WifiSettingsForSetupWizardXL) mConfigUi.getContext()) .initSecurityFields(mView, mAccessPointSecurity)) { return; } } if (mAccessPointSecurity == AccessPoint.SECURITY_NONE) { mView.findViewById(R.id.security_fields).setVisibility(View.GONE); return; } mView.findViewById(R.id.security_fields).setVisibility(View.VISIBLE); if (mPasswordView == null) { mPasswordView = (TextView) mView.findViewById(R.id.password); mPasswordView.addTextChangedListener(this); ((CheckBox) mView.findViewById(R.id.show_password)).setOnCheckedChangeListener(this); if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { mPasswordView.setHint(R.string.wifi_unchanged); } } if (mAccessPointSecurity != AccessPoint.SECURITY_EAP) { mView.findViewById(R.id.eap).setVisibility(View.GONE); return; } mView.findViewById(R.id.eap).setVisibility(View.VISIBLE); if (mEapMethodSpinner == null) { mEapMethodSpinner = (Spinner) mView.findViewById(R.id.method); mEapMethodSpinner.setOnItemSelectedListener(this); mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2); mEapCaCertSpinner = (Spinner) mView.findViewById(R.id.ca_cert); mEapUserCertSpinner = (Spinner) mView.findViewById(R.id.user_cert); mEapIdentityView = (TextView) mView.findViewById(R.id.identity); mEapAnonymousView = (TextView) mView.findViewById(R.id.anonymous); loadCertificates(mEapCaCertSpinner, Credentials.CA_CERTIFICATE); loadCertificates(mEapUserCertSpinner, Credentials.USER_PRIVATE_KEY); // Modifying an existing network if (mAccessPoint != null && mAccessPoint.networkId != INVALID_NETWORK_ID) { WifiEnterpriseConfig enterpriseConfig = mAccessPoint.getConfig().enterpriseConfig; int eapMethod = enterpriseConfig.getEapMethod(); int phase2Method = 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, 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 mEapMethodSpinner.setSelection(Eap.PEAP); showEapFieldsByMethod(Eap.PEAP); } } else { showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition()); } }
private int validateIpConfigFields(LinkProperties linkProperties) { if (mIpAddressView == null) return 0; String ipAddr = mIpAddressView.getText().toString(); if (TextUtils.isEmpty(ipAddr)) return R.string.wifi_ip_settings_invalid_ip_address; InetAddress inetAddr = null; try { inetAddr = NetworkUtils.numericToInetAddress(ipAddr); } catch (IllegalArgumentException e) { return R.string.wifi_ip_settings_invalid_ip_address; } int networkPrefixLength = -1; try { networkPrefixLength = Integer.parseInt(mNetworkPrefixLengthView.getText().toString()); if (networkPrefixLength < 0 || networkPrefixLength > 32) { return R.string.wifi_ip_settings_invalid_network_prefix_length; } linkProperties.addLinkAddress(new LinkAddress(inetAddr, networkPrefixLength)); } catch (NumberFormatException e) { // Set the hint as default after user types in ip address mNetworkPrefixLengthView.setText( mConfigUi.getContext().getString(R.string.wifi_network_prefix_length_hint)); } String gateway = mGatewayView.getText().toString(); if (TextUtils.isEmpty(gateway)) { try { // Extract a default gateway from IP address InetAddress netPart = NetworkUtils.getNetworkPart(inetAddr, networkPrefixLength); byte[] addr = netPart.getAddress(); addr[addr.length - 1] = 1; mGatewayView.setText(InetAddress.getByAddress(addr).getHostAddress()); } catch (RuntimeException ee) { } catch (java.net.UnknownHostException u) { } } else { InetAddress gatewayAddr = null; try { gatewayAddr = NetworkUtils.numericToInetAddress(gateway); } catch (IllegalArgumentException e) { return R.string.wifi_ip_settings_invalid_gateway; } linkProperties.addRoute(new RouteInfo(gatewayAddr)); } String dns = mDns1View.getText().toString(); InetAddress dnsAddr = null; if (TextUtils.isEmpty(dns)) { // If everything else is valid, provide hint as a default option mDns1View.setText(mConfigUi.getContext().getString(R.string.wifi_dns1_hint)); } else { try { dnsAddr = NetworkUtils.numericToInetAddress(dns); } catch (IllegalArgumentException e) { return R.string.wifi_ip_settings_invalid_dns; } linkProperties.addDns(dnsAddr); } if (mDns2View.length() > 0) { dns = mDns2View.getText().toString(); try { dnsAddr = NetworkUtils.numericToInetAddress(dns); } catch (IllegalArgumentException e) { return R.string.wifi_ip_settings_invalid_dns; } linkProperties.addDns(dnsAddr); } return 0; }