WifiP2pGroup.java revision 6f7d385d964949e507dcc9c88012372f48d0bce7
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 sync
2255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport java.util.ArrayList;
2355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport java.util.List;
2455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport java.util.Collection;
2555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport java.util.Collections;
2655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
2755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync/**
2855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * A class representing a Wi-Fi P2p group
2955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * @hide
306f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff *
316f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff * {@see WifiP2pManager}
3255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync */
3355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncpublic class WifiP2pGroup implements Parcelable {
3455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /** The network name */
3655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    private String mNetworkName;
3755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /** Group owner */
3955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    private WifiP2pDevice mOwner;
4055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
4155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /** Device is group owner */
4255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    private boolean mIsGroupOwner;
4355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
4455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /** Group clients */
4555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    private List<WifiP2pDevice> mClients = new ArrayList<WifiP2pDevice>();
4655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
474be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** The passphrase used for WPA2-PSK */
4855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    private String mPassphrase;
4955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
5055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    private String mInterface;
5155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
524be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    WifiP2pGroup() {
5355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
5455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
5555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
569cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * @param supplicantEvent formats supported include
5755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
5855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *  P2P-GROUP-STARTED p2p-wlan0-0 [client|GO] ssid="DIRECT-W8" freq=2437
5955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *  [psk=2182b2e50e53f260d04f3c7b25ef33c965a3291b9b36b455a82d77fd82ca15bc|
6055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *  passphrase="fKG4jMe3"] go_dev_addr=fa:7b:7a:42:02:13
6155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
6255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *  P2P-GROUP-REMOVED p2p-wlan0-0 [client|GO] reason=REQUESTED
6355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
6455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *  P2P-INVITATION-RECEIVED sa=fa:7b:7a:42:02:13 go_dev_addr=f8:7b:7a:42:02:13
6555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *  bssid=fa:7b:7a:42:82:13 unknown-network
6655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
6755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *  Note: The events formats can be looked up in the wpa_supplicant code
684be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff     *  @hide
6955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
7055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public WifiP2pGroup(String supplicantEvent) throws IllegalArgumentException {
7155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
7255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        String[] tokens = supplicantEvent.split(" ");
7355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
7455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        if (tokens.length < 3) {
7555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            throw new IllegalArgumentException("Malformed supplicant event");
7655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        }
7755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
7855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        if (tokens[0].startsWith("P2P-GROUP")) {
7955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            mInterface = tokens[1];
8055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            mIsGroupOwner = tokens[2].equals("GO");
8155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
8255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            for (String token : tokens) {
8355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                String[] nameValue = token.split("=");
8455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                if (nameValue.length != 2) continue;
8555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
8655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                if (nameValue[0].equals("ssid")) {
8755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    mNetworkName = nameValue[1];
8855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    continue;
8955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                }
9055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
9155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                if (nameValue[0].equals("passphrase")) {
9255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    mPassphrase = nameValue[1];
9355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    continue;
9455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                }
9555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
9655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                if (nameValue[0].equals("go_dev_addr")) {
9755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    mOwner = new WifiP2pDevice(nameValue[1]);
9855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                }
9955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            }
10055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        } else if (tokens[0].equals("P2P-INVITATION-RECEIVED")) {
10155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            for (String token : tokens) {
10255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                String[] nameValue = token.split("=");
10355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                if (nameValue.length != 2) continue;
10455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
10555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                if (nameValue[0].equals("go_dev_addr")) {
10655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    mOwner = new WifiP2pDevice(nameValue[1]);
10755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    continue;
10855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                }
10955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            }
11055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        } else {
11155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            throw new IllegalArgumentException("Malformed supplicant event");
11255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        }
11355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
11455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
1154be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** @hide */
1164be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    public void setNetworkName(String networkName) {
1174be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        mNetworkName = networkName;
1184be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    }
1194be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff
1204be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /**
1214be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff     * Get the network name (SSID) of the group. Legacy Wi-Fi clients will discover
1224be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff     * the p2p group using the network name.
1234be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff     */
1244be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    public String getNetworkName() {
1254be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        return mNetworkName;
1264be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    }
1274be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff
1284be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** @hide */
1294be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    public void setIsGroupOwner(boolean isGo) {
1304be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        mIsGroupOwner = isGo;
1314be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    }
1324be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff
1334be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** Check whether this device is the group owner of the created p2p group */
13455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public boolean isGroupOwner() {
13555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return mIsGroupOwner;
13655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
13755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
1384be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** @hide */
1394be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    public void setOwner(WifiP2pDevice device) {
1404be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        mOwner = device;
1414be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    }
1424be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff
1434be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** Get the details of the group owner as a {@link WifiP2pDevice} object */
14455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public WifiP2pDevice getOwner() {
14555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return mOwner;
14655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
14755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
1484be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** @hide */
14955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public void addClient(String address) {
15055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        addClient(new WifiP2pDevice(address));
15155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
15255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
1534be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** @hide */
15455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public void addClient(WifiP2pDevice device) {
15555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        for (WifiP2pDevice client : mClients) {
15655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            if (client.equals(device)) return;
15755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        }
15855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        mClients.add(device);
15955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
16055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
1614be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** @hide */
16255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public boolean removeClient(String address) {
16355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return mClients.remove(new WifiP2pDevice(address));
16455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
16555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
1664be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** @hide */
16755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public boolean removeClient(WifiP2pDevice device) {
16855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return mClients.remove(device);
16955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
17055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
1714be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** @hide */
17255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public boolean isClientListEmpty() {
17355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return mClients.size() == 0;
17455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
17555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
1764be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** Get the list of clients currently part of the p2p group */
17755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public Collection<WifiP2pDevice> getClientList() {
17855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return Collections.unmodifiableCollection(mClients);
17955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
18055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
1814be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** @hide */
1824be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    public void setPassphrase(String passphrase) {
1834be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        mPassphrase = passphrase;
1844be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    }
1854be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff
1864be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /**
1874be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff     * Get the passphrase of the group. This function will return a valid passphrase only
1884be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff     * at the group owner. Legacy Wi-Fi clients will need this passphrase alongside
1894be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff     * network name obtained from {@link #getNetworkName()} to join the group
1904be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff     */
1914be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    public String getPassphrase() {
1924be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        return mPassphrase;
1934be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    }
1944be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff
1954be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** @hide */
1964be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    public void setInterface(String intf) {
1974be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        mInterface = intf;
1984be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    }
1994be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff
2004be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** Get the interface name on which the group is created */
20155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public String getInterface() {
20255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return mInterface;
20355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
20455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
2054be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    /** @hide */
20655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public String toString() {
20755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        StringBuffer sbuf = new StringBuffer();
2084be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        sbuf.append("network: ").append(mNetworkName);
2094be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        sbuf.append("\n isGO: ").append(mIsGroupOwner);
2104be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        sbuf.append("\n GO: ").append(mOwner);
2114be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        for (WifiP2pDevice client : mClients) {
2124be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff            sbuf.append("\n Client: ").append(client);
2134be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        }
2144be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        sbuf.append("\n interface: ").append(mInterface);
21555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return sbuf.toString();
21655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
21755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
21855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /** Implement the Parcelable interface {@hide} */
21955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public int describeContents() {
22055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return 0;
22155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
22255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
22355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /** copy constructor {@hide} */
22455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    // TODO: implement
22555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public WifiP2pGroup(WifiP2pGroup source) {
22655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        if (source != null) {
22755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync       }
22855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
22955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
23055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /** Implement the Parcelable interface {@hide} */
23155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public void writeToParcel(Parcel dest, int flags) {
2324be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        dest.writeString(mNetworkName);
2334be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        dest.writeParcelable(mOwner, flags);
2344be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        dest.writeByte(mIsGroupOwner ? (byte) 1: (byte) 0);
2354be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        dest.writeInt(mClients.size());
2364be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        for (WifiP2pDevice client : mClients) {
2374be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff            dest.writeParcelable(client, flags);
2384be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        }
2394be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        dest.writeString(mPassphrase);
2404be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff        dest.writeString(mInterface);
24155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
24255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
24355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /** Implement the Parcelable interface {@hide} */
24455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final Creator<WifiP2pGroup> CREATOR =
24555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        new Creator<WifiP2pGroup>() {
24655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            public WifiP2pGroup createFromParcel(Parcel in) {
24755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                WifiP2pGroup group = new WifiP2pGroup();
2484be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff                group.setNetworkName(in.readString());
2494be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff                group.setOwner((WifiP2pDevice)in.readParcelable(null));
2504be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff                group.setIsGroupOwner(in.readByte() == (byte)1);
2514be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff                int clientCount = in.readInt();
2524be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff                for (int i=0; i<clientCount; i++) {
2534be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff                    group.addClient((WifiP2pDevice) in.readParcelable(null));
2544be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff                }
2554be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff                group.setPassphrase(in.readString());
2564be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff                group.setInterface(in.readString());
25755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                return group;
25855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            }
25955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
26055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            public WifiP2pGroup[] newArray(int size) {
26155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                return new WifiP2pGroup[size];
26255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            }
26355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        };
26455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync}
265