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