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