10879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga/* 20879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Copyright (C) 2012 The Android Open Source Project 30879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 40879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Licensed under the Apache License, Version 2.0 (the "License"); 50879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * you may not use this file except in compliance with the License. 60879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * You may obtain a copy of the License at 70879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 80879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * http://www.apache.org/licenses/LICENSE-2.0 90879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 100879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Unless required by applicable law or agreed to in writing, software 110879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * distributed under the License is distributed on an "AS IS" BASIS, 120879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * See the License for the specific language governing permissions and 140879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * limitations under the License. 150879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 160879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenagapackage android.net.wifi.p2p; 170879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 180879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenagaimport java.util.Collection; 19d8544a51482c86b12da3ac82ea77b83045f689b7Jeff Brownimport java.util.Map; 200879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 210879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenagaimport android.os.Parcel; 220879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenagaimport android.os.Parcelable; 230879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenagaimport android.util.LruCache; 240879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 250879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 260879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga/** 270879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * A class representing a Wi-Fi P2p group list 280879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 290879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * {@see WifiP2pManager} 300879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @hide 310879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 320879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenagapublic class WifiP2pGroupList implements Parcelable { 330879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 340879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga private static final int CREDENTIAL_MAX_NUM = 32; 350879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 36d8544a51482c86b12da3ac82ea77b83045f689b7Jeff Brown private final LruCache<Integer, WifiP2pGroup> mGroups; 37d8544a51482c86b12da3ac82ea77b83045f689b7Jeff Brown private final GroupDeleteListener mListener; 38d8544a51482c86b12da3ac82ea77b83045f689b7Jeff Brown 390879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga private boolean isClearCalled = false; 400879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 410879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public interface GroupDeleteListener { 420879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public void onDeleteGroup(int netId); 430879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 440879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 45ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde /** @hide */ 46ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde public WifiP2pGroupList() { 47d8544a51482c86b12da3ac82ea77b83045f689b7Jeff Brown this(null, null); 480879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 490879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 50ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde /** @hide */ 51ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde public WifiP2pGroupList(WifiP2pGroupList source, GroupDeleteListener listener) { 520879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mListener = listener; 530879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mGroups = new LruCache<Integer, WifiP2pGroup>(CREDENTIAL_MAX_NUM) { 540879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga @Override 550879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga protected void entryRemoved(boolean evicted, Integer netId, 560879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga WifiP2pGroup oldValue, WifiP2pGroup newValue) { 570879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (mListener != null && !isClearCalled) { 580879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mListener.onDeleteGroup(oldValue.getNetworkId()); 590879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 600879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 610879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga }; 62d8544a51482c86b12da3ac82ea77b83045f689b7Jeff Brown 63d8544a51482c86b12da3ac82ea77b83045f689b7Jeff Brown if (source != null) { 64d8544a51482c86b12da3ac82ea77b83045f689b7Jeff Brown for (Map.Entry<Integer, WifiP2pGroup> item : source.mGroups.snapshot().entrySet()) { 65d8544a51482c86b12da3ac82ea77b83045f689b7Jeff Brown mGroups.put(item.getKey(), item.getValue()); 66d8544a51482c86b12da3ac82ea77b83045f689b7Jeff Brown } 67d8544a51482c86b12da3ac82ea77b83045f689b7Jeff Brown } 680879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 690879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 700879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 710879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Return the list of p2p group. 720879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 730879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @return the list of p2p group. 740879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 750879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public Collection<WifiP2pGroup> getGroupList() { 760879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return mGroups.snapshot().values(); 770879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 780879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 790879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 800879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Add the specified group to this group list. 810879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 820879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param group 83ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde * @hide 840879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 85ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde public void add(WifiP2pGroup group) { 860879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mGroups.put(group.getNetworkId(), group); 870879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 880879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 890879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 900879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Remove the group with the specified network id from this group list. 910879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 920879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param netId 93ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde * @hide 940879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 95ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde public void remove(int netId) { 960879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mGroups.remove(netId); 970879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 980879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 990879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 1000879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Remove the group with the specified device address from this group list. 1010879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 1020879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param deviceAddress 1030879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 1040879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga void remove(String deviceAddress) { 1050879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga remove(getNetworkId(deviceAddress)); 1060879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1070879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1080879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 1090879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Clear the group. 110ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde * @hide 1110879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 112ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde public boolean clear() { 1130879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (mGroups.size() == 0) return false; 1140879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga isClearCalled = true; 1150879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mGroups.evictAll(); 1160879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga isClearCalled = false; 1170879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return true; 1180879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1190879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1200879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 1210879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Return the network id of the group owner profile with the specified p2p device 1220879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * address. 1230879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * If more than one persistent group of the same address is present in the list, 1240879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * return the first one. 1250879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 1260879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param deviceAddress p2p device address. 1270879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @return the network id. if not found, return -1. 128ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde * @hide 1290879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 130ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde public int getNetworkId(String deviceAddress) { 1310879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (deviceAddress == null) return -1; 1320879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1330879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga final Collection<WifiP2pGroup> groups = mGroups.snapshot().values(); 1340879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga for (WifiP2pGroup grp: groups) { 1350879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (deviceAddress.equalsIgnoreCase(grp.getOwner().deviceAddress)) { 1360879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga // update cache ordered. 1370879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mGroups.get(grp.getNetworkId()); 1380879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return grp.getNetworkId(); 1390879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1400879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1410879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return -1; 1420879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1430879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1440879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 1450879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Return the network id of the group with the specified p2p device address 1460879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * and the ssid. 1470879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 1480879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param deviceAddress p2p device address. 1490879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param ssid ssid. 1500879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @return the network id. if not found, return -1. 151ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde * @hide 1520879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 153ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde public int getNetworkId(String deviceAddress, String ssid) { 1540879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (deviceAddress == null || ssid == null) { 1550879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return -1; 1560879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1570879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1580879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga final Collection<WifiP2pGroup> groups = mGroups.snapshot().values(); 1590879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga for (WifiP2pGroup grp: groups) { 1600879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (deviceAddress.equalsIgnoreCase(grp.getOwner().deviceAddress) && 1610879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga ssid.equals(grp.getNetworkName())) { 1620879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga // update cache ordered. 1630879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mGroups.get(grp.getNetworkId()); 1640879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return grp.getNetworkId(); 1650879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1660879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1670879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1680879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return -1; 1690879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1700879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1710879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 1720879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Return the group owner address of the group with the specified network id 1730879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 1740879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param netId network id. 1750879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @return the address. if not found, return null. 176ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde * @hide 1770879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 178ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde public String getOwnerAddr(int netId) { 1790879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga WifiP2pGroup grp = mGroups.get(netId); 1800879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (grp != null) { 1810879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return grp.getOwner().deviceAddress; 1820879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1830879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return null; 1840879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1850879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1860879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 1870879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Return true if this group list contains the specified network id. 1880879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * This function does NOT update LRU information. 1890879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * It means the internal queue is NOT reordered. 1900879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 1910879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param netId network id. 1920879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @return true if the specified network id is present in this group list. 193ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde * @hide 1940879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 195ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde public boolean contains(int netId) { 1960879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga final Collection<WifiP2pGroup> groups = mGroups.snapshot().values(); 1970879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga for (WifiP2pGroup grp: groups) { 1980879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (netId == grp.getNetworkId()) { 1990879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return true; 2000879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2010879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2020879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return false; 2030879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2040879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 2050879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public String toString() { 2060879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga StringBuffer sbuf = new StringBuffer(); 2070879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 2080879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga final Collection<WifiP2pGroup> groups = mGroups.snapshot().values(); 2090879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga for (WifiP2pGroup grp: groups) { 2100879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga sbuf.append(grp).append("\n"); 2110879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2120879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return sbuf.toString(); 2130879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2140879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 2150879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** Implement the Parcelable interface */ 2160879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public int describeContents() { 2170879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return 0; 2180879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2190879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 2200879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** Implement the Parcelable interface */ 2210879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public void writeToParcel(Parcel dest, int flags) { 2220879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga final Collection<WifiP2pGroup> groups = mGroups.snapshot().values(); 2230879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga dest.writeInt(groups.size()); 2240879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga for(WifiP2pGroup group : groups) { 2250879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga dest.writeParcelable(group, flags); 2260879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2270879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2280879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 2290879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** Implement the Parcelable interface */ 2300879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public static final Creator<WifiP2pGroupList> CREATOR = 2310879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga new Creator<WifiP2pGroupList>() { 2320879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public WifiP2pGroupList createFromParcel(Parcel in) { 2330879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga WifiP2pGroupList grpList = new WifiP2pGroupList(); 2340879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 2350879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga int deviceCount = in.readInt(); 2360879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga for (int i = 0; i < deviceCount; i++) { 2370879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga grpList.add((WifiP2pGroup)in.readParcelable(null)); 2380879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2390879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return grpList; 2400879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2410879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 2420879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public WifiP2pGroupList[] newArray(int size) { 2430879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return new WifiP2pGroupList[size]; 2440879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2450879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga }; 2460879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga} 247