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