WifiP2pGroupList.java revision 0879d03f0a5caa108a0a7320442d57629f9ced81
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; 190879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 200879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenagaimport android.os.Parcel; 210879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenagaimport android.os.Parcelable; 220879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenagaimport android.util.LruCache; 230879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 240879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 250879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga/** 260879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * A class representing a Wi-Fi P2p group list 270879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 280879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * {@see WifiP2pManager} 290879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @hide 300879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 310879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenagapublic class WifiP2pGroupList implements Parcelable { 320879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 330879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga private static final int CREDENTIAL_MAX_NUM = 32; 340879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 350879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga private LruCache<Integer, WifiP2pGroup> mGroups; 360879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga private GroupDeleteListener mListener; 370879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga private boolean isClearCalled = false; 380879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 390879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public interface GroupDeleteListener { 400879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public void onDeleteGroup(int netId); 410879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 420879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 430879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga WifiP2pGroupList() { 440879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga this(null); 450879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 460879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 470879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga WifiP2pGroupList(GroupDeleteListener listener) { 480879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mListener = listener; 490879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mGroups = new LruCache<Integer, WifiP2pGroup>(CREDENTIAL_MAX_NUM) { 500879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga @Override 510879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga protected void entryRemoved(boolean evicted, Integer netId, 520879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga WifiP2pGroup oldValue, WifiP2pGroup newValue) { 530879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (mListener != null && !isClearCalled) { 540879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mListener.onDeleteGroup(oldValue.getNetworkId()); 550879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 560879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 570879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga }; 580879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 590879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 600879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 610879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Return the list of p2p group. 620879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 630879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @return the list of p2p group. 640879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 650879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public Collection<WifiP2pGroup> getGroupList() { 660879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return mGroups.snapshot().values(); 670879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 680879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 690879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 700879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Add the specified group to this group list. 710879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 720879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param group 730879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 740879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga void add(WifiP2pGroup group) { 750879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mGroups.put(group.getNetworkId(), group); 760879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 770879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 780879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 790879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Remove the group with the specified network id from this group list. 800879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 810879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param netId 820879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 830879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga void remove(int netId) { 840879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mGroups.remove(netId); 850879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 860879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 870879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 880879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Remove the group with the specified device address from this group list. 890879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 900879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param deviceAddress 910879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 920879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga void remove(String deviceAddress) { 930879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga remove(getNetworkId(deviceAddress)); 940879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 950879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 960879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 970879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Clear the group. 980879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 990879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga boolean clear() { 1000879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (mGroups.size() == 0) return false; 1010879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga isClearCalled = true; 1020879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mGroups.evictAll(); 1030879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga isClearCalled = false; 1040879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return true; 1050879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1060879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1070879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 1080879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Return the network id of the group owner profile with the specified p2p device 1090879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * address. 1100879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * If more than one persistent group of the same address is present in the list, 1110879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * return the first one. 1120879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 1130879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param deviceAddress p2p device address. 1140879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @return the network id. if not found, return -1. 1150879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 1160879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga int getNetworkId(String deviceAddress) { 1170879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (deviceAddress == null) return -1; 1180879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1190879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga final Collection<WifiP2pGroup> groups = mGroups.snapshot().values(); 1200879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga for (WifiP2pGroup grp: groups) { 1210879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (deviceAddress.equalsIgnoreCase(grp.getOwner().deviceAddress)) { 1220879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga // update cache ordered. 1230879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mGroups.get(grp.getNetworkId()); 1240879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return grp.getNetworkId(); 1250879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1260879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1270879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return -1; 1280879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1290879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1300879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 1310879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Return the network id of the group with the specified p2p device address 1320879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * and the ssid. 1330879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 1340879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param deviceAddress p2p device address. 1350879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param ssid ssid. 1360879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @return the network id. if not found, return -1. 1370879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 1380879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga int getNetworkId(String deviceAddress, String ssid) { 1390879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (deviceAddress == null || ssid == null) { 1400879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return -1; 1410879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1420879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1430879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga final Collection<WifiP2pGroup> groups = mGroups.snapshot().values(); 1440879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga for (WifiP2pGroup grp: groups) { 1450879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (deviceAddress.equalsIgnoreCase(grp.getOwner().deviceAddress) && 1460879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga ssid.equals(grp.getNetworkName())) { 1470879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga // update cache ordered. 1480879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga mGroups.get(grp.getNetworkId()); 1490879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return grp.getNetworkId(); 1500879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1510879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1520879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1530879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return -1; 1540879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1550879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1560879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 1570879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Return the group owner address of the group with the specified network id 1580879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 1590879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param netId network id. 1600879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @return the address. if not found, return null. 1610879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 1620879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga String getOwnerAddr(int netId) { 1630879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga WifiP2pGroup grp = mGroups.get(netId); 1640879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (grp != null) { 1650879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return grp.getOwner().deviceAddress; 1660879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1670879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return null; 1680879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1690879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1700879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** 1710879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * Return true if this group list contains the specified network id. 1720879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * This function does NOT update LRU information. 1730879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * It means the internal queue is NOT reordered. 1740879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * 1750879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @param netId network id. 1760879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga * @return true if the specified network id is present in this group list. 1770879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga */ 1780879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga boolean contains(int netId) { 1790879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga final Collection<WifiP2pGroup> groups = mGroups.snapshot().values(); 1800879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga for (WifiP2pGroup grp: groups) { 1810879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga if (netId == grp.getNetworkId()) { 1820879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return true; 1830879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1840879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1850879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return false; 1860879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1870879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1880879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public String toString() { 1890879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga StringBuffer sbuf = new StringBuffer(); 1900879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1910879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga final Collection<WifiP2pGroup> groups = mGroups.snapshot().values(); 1920879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga for (WifiP2pGroup grp: groups) { 1930879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga sbuf.append(grp).append("\n"); 1940879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1950879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return sbuf.toString(); 1960879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 1970879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 1980879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** Implement the Parcelable interface */ 1990879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public int describeContents() { 2000879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return 0; 2010879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2020879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 2030879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** Implement the Parcelable interface */ 2040879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public void writeToParcel(Parcel dest, int flags) { 2050879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga final Collection<WifiP2pGroup> groups = mGroups.snapshot().values(); 2060879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga dest.writeInt(groups.size()); 2070879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga for(WifiP2pGroup group : groups) { 2080879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga dest.writeParcelable(group, flags); 2090879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2100879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2110879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 2120879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga /** Implement the Parcelable interface */ 2130879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public static final Creator<WifiP2pGroupList> CREATOR = 2140879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga new Creator<WifiP2pGroupList>() { 2150879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public WifiP2pGroupList createFromParcel(Parcel in) { 2160879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga WifiP2pGroupList grpList = new WifiP2pGroupList(); 2170879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 2180879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga int deviceCount = in.readInt(); 2190879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga for (int i = 0; i < deviceCount; i++) { 2200879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga grpList.add((WifiP2pGroup)in.readParcelable(null)); 2210879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2220879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return grpList; 2230879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2240879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga 2250879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public WifiP2pGroupList[] newArray(int size) { 2260879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga return new WifiP2pGroupList[size]; 2270879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga } 2280879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga }; 2290879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga} 230