コード例 #1
0
  /* 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);
  }
コード例 #2
0
  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);
  }
コード例 #5
0
 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);
 }
コード例 #6
0
  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;
  }