WifiP2pDeviceList.java revision 57e42f4117e92c03d39f1e1e572f53ef5bb821b8
155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync/*
255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * Copyright (C) 2011 The Android Open Source Project
355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync *
455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * Licensed under the Apache License, Version 2.0 (the "License");
555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * you may not use this file except in compliance with the License.
655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * You may obtain a copy of the License at
755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync *
855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync *      http://www.apache.org/licenses/LICENSE-2.0
955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync *
1055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * Unless required by applicable law or agreed to in writing, software
1155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * distributed under the License is distributed on an "AS IS" BASIS,
1255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * See the License for the specific language governing permissions and
1455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * limitations under the License.
1555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync */
1655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
1755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncpackage android.net.wifi.p2p;
1855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
1955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.Parcelable;
2055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.Parcel;
2155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.net.wifi.p2p.WifiP2pDevice;
2257e42f4117e92c03d39f1e1e572f53ef5bb821b8Irfan Sheriffimport android.text.TextUtils;
2355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.util.Log;
2455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
2555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport java.util.ArrayList;
2655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport java.util.Collection;
2755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport java.util.Collections;
2821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport java.util.HashMap;
2955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync/**
31bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga * A class representing a Wi-Fi P2p device list.
326f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff *
33bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga * Note that the operations are not thread safe.
346f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff * {@see WifiP2pManager}
3555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync */
3655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncpublic class WifiP2pDeviceList implements Parcelable {
3755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    private HashMap<String, WifiP2pDevice> mDevices;
3955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
40651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public WifiP2pDeviceList() {
4121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        mDevices = new HashMap<String, WifiP2pDevice>();
4255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
4355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
44651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** copy constructor */
4555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public WifiP2pDeviceList(WifiP2pDeviceList source) {
4655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        if (source != null) {
4721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            for (WifiP2pDevice d : source.getDeviceList()) {
4821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                mDevices.put(d.deviceAddress, d);
4921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            }
5055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        }
5155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
5255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
536f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff    /** @hide */
5455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public WifiP2pDeviceList(ArrayList<WifiP2pDevice> devices) {
5521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        mDevices = new HashMap<String, WifiP2pDevice>();
5655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        for (WifiP2pDevice device : devices) {
5721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            if (device.deviceAddress != null) {
5821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                mDevices.put(device.deviceAddress, device);
5921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            }
6055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        }
6155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
6255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
636f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff    /** @hide */
64ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff    public boolean clear() {
65ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff        if (mDevices.isEmpty()) return false;
6655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        mDevices.clear();
67ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff        return true;
6855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
6955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
706f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff    /** @hide */
714be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    public void update(WifiP2pDevice device) {
7221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        if (device == null || device.deviceAddress == null) return;
7321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        WifiP2pDevice d = mDevices.get(device.deviceAddress);
7421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        if (d != null) {
7521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            d.deviceName = device.deviceName;
7621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            d.primaryDeviceType = device.primaryDeviceType;
7721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            d.secondaryDeviceType = device.secondaryDeviceType;
7821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            d.wpsConfigMethodsSupported = device.wpsConfigMethodsSupported;
7921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            d.deviceCapability = device.deviceCapability;
8021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            d.groupCapability = device.groupCapability;
8121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            return;
824be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        }
834be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        //Not found, add a new one
8421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        mDevices.put(device.deviceAddress, device);
8521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
8621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
8721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
8857e42f4117e92c03d39f1e1e572f53ef5bb821b8Irfan Sheriff    public void updateGroupCapability(String deviceAddress, int groupCapab) {
8957e42f4117e92c03d39f1e1e572f53ef5bb821b8Irfan Sheriff        if (TextUtils.isEmpty(deviceAddress)) return;
9057e42f4117e92c03d39f1e1e572f53ef5bb821b8Irfan Sheriff        WifiP2pDevice d = mDevices.get(deviceAddress);
9157e42f4117e92c03d39f1e1e572f53ef5bb821b8Irfan Sheriff        if (d != null) {
9257e42f4117e92c03d39f1e1e572f53ef5bb821b8Irfan Sheriff            d.groupCapability = groupCapab;
9357e42f4117e92c03d39f1e1e572f53ef5bb821b8Irfan Sheriff        }
9457e42f4117e92c03d39f1e1e572f53ef5bb821b8Irfan Sheriff    }
9557e42f4117e92c03d39f1e1e572f53ef5bb821b8Irfan Sheriff
9657e42f4117e92c03d39f1e1e572f53ef5bb821b8Irfan Sheriff    /** @hide */
97bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    public void updateStatus(String deviceAddress, int status) {
9857e42f4117e92c03d39f1e1e572f53ef5bb821b8Irfan Sheriff        if (TextUtils.isEmpty(deviceAddress)) return;
99bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        WifiP2pDevice d = mDevices.get(deviceAddress);
10057e42f4117e92c03d39f1e1e572f53ef5bb821b8Irfan Sheriff        if (d != null) {
10157e42f4117e92c03d39f1e1e572f53ef5bb821b8Irfan Sheriff            d.status = status;
10257e42f4117e92c03d39f1e1e572f53ef5bb821b8Irfan Sheriff        }
103bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    }
104bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
105bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /** @hide */
10621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public WifiP2pDevice get(String deviceAddress) {
10721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        if (deviceAddress == null) return null;
10821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
10921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        return mDevices.get(deviceAddress);
11055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
11155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
1126f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff    /** @hide */
11355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public boolean remove(WifiP2pDevice device) {
11421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        if (device == null || device.deviceAddress == null) return false;
11521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        return mDevices.remove(device.deviceAddress) != null;
11655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
11755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
1186f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff    /** Get the list of devices */
11955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public Collection<WifiP2pDevice> getDeviceList() {
12021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        return Collections.unmodifiableCollection(mDevices.values());
12155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
12255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
12310ca870d3b58ec6fd62b85466ec1211fca77d33eIrfan Sheriff    /** @hide */
12410ca870d3b58ec6fd62b85466ec1211fca77d33eIrfan Sheriff    public boolean isGroupOwner(String deviceAddress) {
12510ca870d3b58ec6fd62b85466ec1211fca77d33eIrfan Sheriff        if (deviceAddress != null) {
12610ca870d3b58ec6fd62b85466ec1211fca77d33eIrfan Sheriff            WifiP2pDevice device = mDevices.get(deviceAddress);
12710ca870d3b58ec6fd62b85466ec1211fca77d33eIrfan Sheriff            if (device != null) return device.isGroupOwner();
12810ca870d3b58ec6fd62b85466ec1211fca77d33eIrfan Sheriff        }
12910ca870d3b58ec6fd62b85466ec1211fca77d33eIrfan Sheriff        return false;
13010ca870d3b58ec6fd62b85466ec1211fca77d33eIrfan Sheriff    }
13110ca870d3b58ec6fd62b85466ec1211fca77d33eIrfan Sheriff
13255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public String toString() {
13355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        StringBuffer sbuf = new StringBuffer();
13421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        for (WifiP2pDevice device : mDevices.values()) {
13555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            sbuf.append("\n").append(device);
13655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        }
13755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return sbuf.toString();
13855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
13955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
140651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Implement the Parcelable interface */
14155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public int describeContents() {
14255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return 0;
14355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
14455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
145651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Implement the Parcelable interface */
14655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public void writeToParcel(Parcel dest, int flags) {
14755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        dest.writeInt(mDevices.size());
14821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        for(WifiP2pDevice device : mDevices.values()) {
14955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            dest.writeParcelable(device, flags);
15055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        }
15155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
15255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
153651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Implement the Parcelable interface */
15455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final Creator<WifiP2pDeviceList> CREATOR =
15555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        new Creator<WifiP2pDeviceList>() {
15655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            public WifiP2pDeviceList createFromParcel(Parcel in) {
15755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                WifiP2pDeviceList deviceList = new WifiP2pDeviceList();
15855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
15955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                int deviceCount = in.readInt();
16055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                for (int i = 0; i < deviceCount; i++) {
1614be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff                    deviceList.update((WifiP2pDevice)in.readParcelable(null));
16255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                }
16355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                return deviceList;
16455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            }
16555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
16655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            public WifiP2pDeviceList[] newArray(int size) {
16755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                return new WifiP2pDeviceList[size];
16855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            }
16955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        };
17055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync}
171