WifiP2pDeviceList.java revision 21ba8153325e010224c6bc75a0acdc98b6ca82e8
1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 2011 The Android Open Source Project
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Licensed under the Apache License, Version 2.0 (the "License");
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * you may not use this file except in compliance with the License.
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * You may obtain a copy of the License at
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *      http://www.apache.org/licenses/LICENSE-2.0
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Unless required by applicable law or agreed to in writing, software
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distributed under the License is distributed on an "AS IS" BASIS,
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * See the License for the specific language governing permissions and
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * limitations under the License.
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpackage android.net.wifi.p2p;
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport android.os.Parcelable;
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport android.os.Parcel;
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport android.net.wifi.p2p.WifiP2pDevice;
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport android.util.Log;
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport java.util.ArrayList;
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport java.util.Collection;
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport java.util.Collections;
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport java.util.HashMap;
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A class representing a Wi-Fi P2p device list
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * {@see WifiP2pManager}
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpublic class WifiP2pDeviceList implements Parcelable {
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    private HashMap<String, WifiP2pDevice> mDevices;
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public WifiP2pDeviceList() {
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        mDevices = new HashMap<String, WifiP2pDevice>();
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /** copy constructor */
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public WifiP2pDeviceList(WifiP2pDeviceList source) {
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        if (source != null) {
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            for (WifiP2pDevice d : source.getDeviceList()) {
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                mDevices.put(d.deviceAddress, d);
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            }
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        }
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /** @hide */
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public WifiP2pDeviceList(ArrayList<WifiP2pDevice> devices) {
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        mDevices = new HashMap<String, WifiP2pDevice>();
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        for (WifiP2pDevice device : devices) {
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            if (device.deviceAddress != null) {
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                mDevices.put(device.deviceAddress, device);
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            }
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        }
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /** @hide */
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public boolean clear() {
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        if (mDevices.isEmpty()) return false;
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        mDevices.clear();
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return true;
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /** @hide */
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public void update(WifiP2pDevice device) {
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        if (device == null || device.deviceAddress == null) return;
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        WifiP2pDevice d = mDevices.get(device.deviceAddress);
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        if (d != null) {
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            d.deviceName = device.deviceName;
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            d.primaryDeviceType = device.primaryDeviceType;
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            d.secondaryDeviceType = device.secondaryDeviceType;
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            d.wpsConfigMethodsSupported = device.wpsConfigMethodsSupported;
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            d.deviceCapability = device.deviceCapability;
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            d.groupCapability = device.groupCapability;
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return;
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        }
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        //Not found, add a new one
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        mDevices.put(device.deviceAddress, device);
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /** @hide */
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public WifiP2pDevice get(String deviceAddress) {
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        if (deviceAddress == null) return null;
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return mDevices.get(deviceAddress);
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /** @hide */
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public boolean remove(WifiP2pDevice device) {
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        if (device == null || device.deviceAddress == null) return false;
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return mDevices.remove(device.deviceAddress) != null;
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /** Get the list of devices */
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public Collection<WifiP2pDevice> getDeviceList() {
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return Collections.unmodifiableCollection(mDevices.values());
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public String toString() {
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        StringBuffer sbuf = new StringBuffer();
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        for (WifiP2pDevice device : mDevices.values()) {
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            sbuf.append("\n").append(device);
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        }
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return sbuf.toString();
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /** Implement the Parcelable interface */
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public int describeContents() {
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return 0;
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /** Implement the Parcelable interface */
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public void writeToParcel(Parcel dest, int flags) {
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        dest.writeInt(mDevices.size());
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        for(WifiP2pDevice device : mDevices.values()) {
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            dest.writeParcelable(device, flags);
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        }
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /** Implement the Parcelable interface */
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public static final Creator<WifiP2pDeviceList> CREATOR =
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        new Creator<WifiP2pDeviceList>() {
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            public WifiP2pDeviceList createFromParcel(Parcel in) {
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                WifiP2pDeviceList deviceList = new WifiP2pDeviceList();
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                int deviceCount = in.readInt();
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                for (int i = 0; i < deviceCount; i++) {
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    deviceList.update((WifiP2pDevice)in.readParcelable(null));
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                }
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                return deviceList;
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            }
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            public WifiP2pDeviceList[] newArray(int size) {
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                return new WifiP2pDeviceList[size];
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            }
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        };
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org