Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8182fd42 authored by Bruno Randolf's avatar Bruno Randolf Committed by Gerrit Code Review
Browse files

Wifi: Add frequency selection for new IBSS

Allow users to select a frequency for newly created Ad-Hoc (IBSS) networks, and
show the frequency for existing IBSS.

Change-Id: Icaa09c9386967fdf0a88865ff2e64cc9b219da1f
parent 2a205750
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -191,6 +191,19 @@
                        android:text="@string/wifi_mode_ibss" />
            </LinearLayout>

            <LinearLayout android:id="@+id/wifi_ibss_freq_fields"
                    style="@style/wifi_item"
                    android:visibility="gone">

                <TextView android:id="@+id/wifi_ibss_freq_title"
                        style="@style/wifi_item_label"
                        android:text="@string/wifi_ibss_freq_title" />

                <Spinner android:id="@+id/wifi_ibss_freq"
                        style="@style/wifi_item_content"
                        android:prompt="@string/wifi_ibss_freq_title" />
            </LinearLayout>

            <LinearLayout android:id="@+id/proxy_settings_fields"
                    style="@style/wifi_item"
                    android:visibility="gone">
+4 −0
Original line number Diff line number Diff line
@@ -1451,6 +1451,10 @@
    <string name="wifi_mode_ibss">Ad-Hoc (IBSS) Network</string>
    <string name="wifi_mode_ibss_short">Ad-Hoc</string>

    <string name="wifi_ibss_freq_title">Channel / Frequency</string>
    <string name="wifi_channel">Channel</string>
    <string name="wifi_mhz">MHz</string>

    <!-- Button label to connect to a Wi-Fi network -->
    <string name="wifi_connect">Connect</string>
    <!-- Failured notification for connect -->
+42 −3
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.net.wifi.WifiConfiguration.KeyMgmt;
import android.net.wifi.WifiConfiguration.ProxySettings;
import android.net.wifi.WifiConfiguration.Status;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiChannel;
import android.os.Handler;
import android.security.Credentials;
import android.security.KeyStore;
@@ -55,7 +56,9 @@ import com.android.settings.ProxySelector;
import com.android.settings.R;

import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * The class for allowing UIs like {@link WifiDialog} and {@link WifiConfigUiBase} to
@@ -73,9 +76,12 @@ public class WifiConfigController implements TextWatcher,

    private boolean mEdit;
    private boolean mIbssSupported;
    private List<WifiChannel> mSupportedIbssChannels;
    private int mSelectedIbssChannelPos;

    private TextView mSsidView;
    private CheckBox mIbssView;
    private Spinner mIbssFreqSpinner;

    // e.g. AccessPoint.SECURITY_NONE
    private int mAccessPointSecurity;
@@ -144,7 +150,7 @@ public class WifiConfigController implements TextWatcher,

    public WifiConfigController(
            WifiConfigUiBase parent, View view, AccessPoint accessPoint, boolean edit,
            boolean ibssSupported) {
            boolean ibssSupported, List<WifiChannel> chans) {
        mConfigUi = parent;
        mInXlSetupWizard = (parent instanceof WifiConfigUiForSetupWizardXL);

@@ -164,6 +170,8 @@ public class WifiConfigController implements TextWatcher,
        mProxySettingsSpinner = (Spinner) mView.findViewById(R.id.proxy_settings);
        mProxySettingsSpinner.setOnItemSelectedListener(this);
        mIbssView = (CheckBox) mView.findViewById(R.id.wifi_ibss_checkbox);
        mIbssView.setOnClickListener(this);
        mIbssFreqSpinner = (Spinner) mView.findViewById(R.id.wifi_ibss_freq);

        if (mAccessPoint == null) { // new network
            mConfigUi.setTitle(R.string.wifi_add_network);
@@ -190,9 +198,29 @@ public class WifiConfigController implements TextWatcher,
            mView.findViewById(R.id.wifi_advanced_toggle).setVisibility(View.VISIBLE);
            mView.findViewById(R.id.wifi_advanced_togglebox).setOnClickListener(this);

            if (mIbssSupported)
            if (mIbssSupported) {
                mView.findViewById(R.id.wifi_ibss_toggle).setVisibility(View.VISIBLE);

                mSupportedIbssChannels = new ArrayList<WifiChannel>();
                List<String> freqSpinnerList = new ArrayList<String>();

                for (WifiChannel c : chans) {
                    if (c.ibssAllowed) {
                        mSupportedIbssChannels.add(c);
                        freqSpinnerList.add(context.getString(R.string.wifi_channel) + " " +
                                            Integer.toString(c.channel) + " (" +
                                            Integer.toString(c.frequency) + " " +
                                            context.getString(R.string.wifi_mhz) + ")");
                    }
                }

                ArrayAdapter<String> freqAdapter = new ArrayAdapter<String>(context,
                        android.R.layout.simple_spinner_item, freqSpinnerList);
                freqAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                mIbssFreqSpinner.setAdapter(freqAdapter);
                mIbssFreqSpinner.setOnItemSelectedListener(this);
            }

            mConfigUi.setSubmitButton(context.getString(R.string.wifi_save));
        } else {
            mConfigUi.setTitle(mAccessPoint.ssid);
@@ -201,6 +229,9 @@ public class WifiConfigController implements TextWatcher,

            if (mAccessPoint.isIBSS) {
                addRow(group, R.string.wifi_mode, context.getString(R.string.wifi_mode_ibss));
                addRow(group, R.string.wifi_ibss_freq_title,
                       Integer.toString(mAccessPoint.frequency) + " " +
                       context.getString(R.string.wifi_mhz));
            }

            DetailedState state = mAccessPoint.getState();
@@ -326,7 +357,7 @@ public class WifiConfigController implements TextWatcher,

            if (mIbssView.isChecked()) {
                config.isIBSS = true;
                config.frequency = 2412; //TODO: select from UI
                config.frequency = mSupportedIbssChannels.get(mSelectedIbssChannelPos).frequency;
            } else {
                // If the user adds a network manually, assume that it is hidden.
                config.hiddenSSID = true;
@@ -775,6 +806,12 @@ public class WifiConfigController implements TextWatcher,
            } else {
                mView.findViewById(R.id.wifi_advanced_fields).setVisibility(View.GONE);
            }
        } else if (view.getId() == R.id.wifi_ibss_checkbox) {
            if (((CheckBox) view).isChecked()) {
                mView.findViewById(R.id.wifi_ibss_freq_fields).setVisibility(View.VISIBLE);
            } else {
                mView.findViewById(R.id.wifi_ibss_freq_fields).setVisibility(View.GONE);
            }
        }
    }

@@ -787,6 +824,8 @@ public class WifiConfigController implements TextWatcher,
            showSecurityFields();
        } else if (parent == mProxySettingsSpinner) {
            showProxyFields();
        } else if (parent == mIbssFreqSpinner) {
            mSelectedIbssChannelPos = position;
        } else {
            showIpConfigFields();
        }
+1 −1
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ public class WifiConfigUiForSetupWizardXL implements WifiConfigUiBase, OnFocusCh
        mInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        mView = mInflater.inflate(R.layout.wifi_config_ui_for_setup_wizard, parent, true);
        mController = new WifiConfigController(this, mView, mAccessPoint, edit, false);
        mController = new WifiConfigController(this, mView, mAccessPoint, edit, false, null);

        mInputMethodManager = (InputMethodManager)
                activity.getSystemService(Context.INPUT_METHOD_SERVICE);
+7 −2
Original line number Diff line number Diff line
@@ -18,12 +18,15 @@ package com.android.settings.wifi;

import com.android.settings.R;

import java.util.List;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.net.wifi.WifiChannel;

class WifiDialog extends AlertDialog implements WifiConfigUiBase {
    static final int BUTTON_SUBMIT = DialogInterface.BUTTON_POSITIVE;
@@ -31,6 +34,7 @@ class WifiDialog extends AlertDialog implements WifiConfigUiBase {

    private final boolean mEdit;
    private final boolean mIbssSupported;
    private List<WifiChannel> mSupportedChannels;
    private final DialogInterface.OnClickListener mListener;
    private final AccessPoint mAccessPoint;

@@ -38,10 +42,11 @@ class WifiDialog extends AlertDialog implements WifiConfigUiBase {
    private WifiConfigController mController;

    public WifiDialog(Context context, DialogInterface.OnClickListener listener,
            AccessPoint accessPoint, boolean edit, boolean ibssSupported) {
            AccessPoint accessPoint, boolean edit, boolean ibssSupported, List<WifiChannel> chan) {
        super(context, R.style.Theme_WifiDialog);
        mEdit = edit;
        mIbssSupported = ibssSupported;
        mSupportedChannels = chan;
        mListener = listener;
        mAccessPoint = accessPoint;
    }
@@ -56,7 +61,7 @@ class WifiDialog extends AlertDialog implements WifiConfigUiBase {
        mView = getLayoutInflater().inflate(R.layout.wifi_dialog, null);
        setView(mView);
        setInverseBackgroundForced(true);
        mController = new WifiConfigController(this, mView, mAccessPoint, mEdit, mIbssSupported);
        mController = new WifiConfigController(this, mView, mAccessPoint, mEdit, mIbssSupported, mSupportedChannels);
        super.onCreate(savedInstanceState);
        /* During creation, the submit button can be unavailable to determine
         * visibility. Right after creation, update button visibility */
Loading