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.annotation.SdkConstant;
2055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.annotation.SdkConstant.SdkConstantType;
2155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.content.Context;
22aea743aaa43a833fd8ff3dc56205197583152d5frepo syncimport android.net.ConnectivityManager;
23aea743aaa43a833fd8ff3dc56205197583152d5frepo syncimport android.net.IConnectivityManager;
248bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriffimport android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo;
258bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriffimport android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceResponse;
2621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport android.net.wifi.p2p.nsd.WifiP2pServiceInfo;
2721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport android.net.wifi.p2p.nsd.WifiP2pServiceRequest;
2821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport android.net.wifi.p2p.nsd.WifiP2pServiceResponse;
2921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport android.net.wifi.p2p.nsd.WifiP2pUpnpServiceInfo;
3021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport android.net.wifi.p2p.nsd.WifiP2pUpnpServiceResponse;
3155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.Binder;
32bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenagaimport android.os.Bundle;
3355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.IBinder;
3455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.Handler;
35651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriffimport android.os.Looper;
3655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.Message;
370879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenagaimport android.os.Messenger;
3855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.RemoteException;
39aea743aaa43a833fd8ff3dc56205197583152d5frepo syncimport android.os.ServiceManager;
4055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.WorkSource;
41aea743aaa43a833fd8ff3dc56205197583152d5frepo syncimport android.util.Log;
4255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
4355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport com.android.internal.util.AsyncChannel;
4455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport com.android.internal.util.Protocol;
4555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
46651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriffimport java.util.HashMap;
4721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport java.util.List;
48527ba07b637cedf206fec0d3b0cf92141700a23cIrfan Sheriffimport java.util.Map;
49651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
5055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync/**
519cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * This class provides the API for managing Wi-Fi peer-to-peer connectivity. This lets an
529cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * application discover available peers, setup connection to peers and query for the list of peers.
539cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * When a p2p connection is formed over wifi, the device continues to maintain the uplink
549cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * connection over mobile or any other available network for internet connectivity on the device.
559cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff *
56651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * <p> The API is asynchronous and responses to requests from an application are on listener
57651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * callbacks provided by the application. The application needs to do an initialization with
58651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * {@link #initialize} before doing any p2p operation.
59651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff *
608bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * <p> Most application calls need a {@link ActionListener} instance for receiving callbacks
618bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * {@link ActionListener#onSuccess} or {@link ActionListener#onFailure}. Action callbacks
628bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * indicate whether the initiation of the action was a success or a failure.
63651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * Upon failure, the reason of failure can be one of {@link #ERROR}, {@link #P2P_UNSUPPORTED}
64651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * or {@link #BUSY}.
659cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff *
66651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * <p> An application can initiate discovery of peers with {@link #discoverPeers}. An initiated
67651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * discovery request from an application stays active until the device starts connecting to a peer
688bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * ,forms a p2p group or there is an explicit {@link #stopPeerDiscovery}.
698bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * Applications can listen to {@link #WIFI_P2P_DISCOVERY_CHANGED_ACTION} to know if a peer-to-peer
708bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * discovery is running or stopped. Additionally, {@link #WIFI_P2P_PEERS_CHANGED_ACTION} indicates
718bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * if the peer list has changed.
729cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff *
738bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * <p> When an application needs to fetch the current list of peers, it can request the list
74651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * of peers with {@link #requestPeers}. When the peer list is available
75651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * {@link PeerListListener#onPeersAvailable} is called with the device list.
769cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff *
779cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * <p> An application can initiate a connection request to a peer through {@link #connect}. See
789cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@link WifiP2pConfig} for details on setting up the configuration. For communication with legacy
799cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * Wi-Fi devices that do not support p2p, an app can create a group using {@link #createGroup}
809cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * which creates an access point whose details can be fetched with {@link #requestGroupInfo}.
818bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff *
829cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * <p> After a successful group formation through {@link #createGroup} or through {@link #connect},
83651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * use {@link #requestConnectionInfo} to fetch the connection details. The connection info
84651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * {@link WifiP2pInfo} contains the address of the group owner
856f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff * {@link WifiP2pInfo#groupOwnerAddress} and a flag {@link WifiP2pInfo#isGroupOwner} to indicate
869cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * if the current device is a p2p group owner. A p2p client can thus communicate with
879cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * the p2p group owner through a socket connection.
889cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff *
898bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * <p> With peer discovery using {@link  #discoverPeers}, an application discovers the neighboring
908bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * peers, but has no good way to figure out which peer to establish a connection with. For example,
918bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * if a game application is interested in finding all the neighboring peers that are also running
928bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * the same game, it has no way to find out until after the connection is setup. Pre-association
938bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * service discovery is meant to address this issue of filtering the peers based on the running
948bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * services.
958bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff *
968bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * <p>With pre-association service discovery, an application can advertise a service for a
978bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * application on a peer device prior to a connection setup between the devices.
988bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * Currently, DNS based service discovery (Bonjour) and Upnp are the higher layer protocols
998bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * supported. Get Bonjour resources at dns-sd.org and Upnp resources at upnp.org
1008bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * As an example, a video application can discover a Upnp capable media renderer
1018bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * prior to setting up a Wi-fi p2p connection with the device.
1028bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff *
1038bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * <p> An application can advertise a Upnp or a Bonjour service with a call to
1048bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * {@link #addLocalService}. After a local service is added,
1058bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * the framework automatically responds to a peer application discovering the service prior
1068bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * to establishing a p2p connection. A call to {@link #removeLocalService} removes a local
1078bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * service and {@link #clearLocalServices} can be used to clear all local services.
1088bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff *
1098bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * <p> An application that is looking for peer devices that support certain services
1108bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * can do so with a call to  {@link #discoverServices}. Prior to initiating the discovery,
1118bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * application can add service discovery request with a call to {@link #addServiceRequest},
1128bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * remove a service discovery request with a call to {@link #removeServiceRequest} or clear
1138bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * all requests with a call to {@link #clearServiceRequests}. When no service requests remain,
1148bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * a previously running service discovery will stop.
1158bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff *
1168bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * The application is notified of a result of service discovery request through listener callbacks
1178bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * set through {@link #setDnsSdResponseListeners} for Bonjour or
1188bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * {@link #setUpnpServiceResponseListener} for Upnp.
1199cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff *
1209cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * <p class="note"><strong>Note:</strong>
1219cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * Registering an application handler with {@link #initialize} requires the permissions
1229cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@link android.Manifest.permission#ACCESS_WIFI_STATE} and
1239cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@link android.Manifest.permission#CHANGE_WIFI_STATE} to perform any further peer-to-peer
1249cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * operations.
1259cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff *
1269cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * Get an instance of this class by calling {@link android.content.Context#getSystemService(String)
12755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * Context.getSystemService(Context.WIFI_P2P_SERVICE)}.
12855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync *
1299cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@see WifiP2pConfig}
1309cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@see WifiP2pInfo}
1319cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@see WifiP2pGroup}
1329cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@see WifiP2pDevice}
1339cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@see WifiP2pDeviceList}
134651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * {@see android.net.wifi.WpsInfo}
13555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync */
13655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncpublic class WifiP2pManager {
137651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    private static final String TAG = "WifiP2pManager";
13855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
1399cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * Broadcast intent action to indicate whether Wi-Fi p2p is enabled or disabled. An
1409cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * extra {@link #EXTRA_WIFI_STATE} provides the state information as int.
1419cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
1429cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * @see #EXTRA_WIFI_STATE
14355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
14455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
14555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final String WIFI_P2P_STATE_CHANGED_ACTION =
146651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        "android.net.wifi.p2p.STATE_CHANGED";
14755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
14855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
14955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * The lookup key for an int that indicates whether Wi-Fi p2p is enabled or disabled.
15055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * Retrieve it with {@link android.content.Intent#getIntExtra(String,int)}.
15155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
15255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see #WIFI_P2P_STATE_DISABLED
15355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see #WIFI_P2P_STATE_ENABLED
15455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
15555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final String EXTRA_WIFI_STATE = "wifi_p2p_state";
15655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
15755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
15855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * Wi-Fi p2p is disabled.
15955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
16055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see #WIFI_P2P_STATE_CHANGED_ACTION
16155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
16255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final int WIFI_P2P_STATE_DISABLED = 1;
16355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
16455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
16555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * Wi-Fi p2p is enabled.
16655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
16755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see #WIFI_P2P_STATE_CHANGED_ACTION
16855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
16955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final int WIFI_P2P_STATE_ENABLED = 2;
17055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
17155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
17255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * Broadcast intent action indicating that the state of Wi-Fi p2p connectivity
1739cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * has changed. One extra {@link #EXTRA_WIFI_P2P_INFO} provides the p2p connection info in
1749cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * the form of a {@link WifiP2pInfo} object. Another extra {@link #EXTRA_NETWORK_INFO} provides
1759cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * the network info in the form of a {@link android.net.NetworkInfo}.
1769cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
1779cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * @see #EXTRA_WIFI_P2P_INFO
17855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see #EXTRA_NETWORK_INFO
17955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
18055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
18155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final String WIFI_P2P_CONNECTION_CHANGED_ACTION =
182651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        "android.net.wifi.p2p.CONNECTION_STATE_CHANGE";
18355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
18455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
185ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff     * The lookup key for a {@link android.net.wifi.p2p.WifiP2pInfo} object
186ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff     * Retrieve with {@link android.content.Intent#getParcelableExtra(String)}.
187ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff     */
188ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff    public static final String EXTRA_WIFI_P2P_INFO = "wifiP2pInfo";
189ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff
190ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff    /**
19155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * The lookup key for a {@link android.net.NetworkInfo} object associated with the
19255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * Wi-Fi network. Retrieve with
19355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * {@link android.content.Intent#getParcelableExtra(String)}.
19455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
19555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final String EXTRA_NETWORK_INFO = "networkInfo";
19655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
19755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
198aea743aaa43a833fd8ff3dc56205197583152d5frepo sync     * The lookup key for a {@link android.net.LinkProperties} object associated with the
199aea743aaa43a833fd8ff3dc56205197583152d5frepo sync     * network. Retrieve with
200aea743aaa43a833fd8ff3dc56205197583152d5frepo sync     * {@link android.content.Intent#getParcelableExtra(String)}.
201aea743aaa43a833fd8ff3dc56205197583152d5frepo sync     * @hide
202aea743aaa43a833fd8ff3dc56205197583152d5frepo sync     */
203aea743aaa43a833fd8ff3dc56205197583152d5frepo sync    public static final String EXTRA_LINK_PROPERTIES = "linkProperties";
204aea743aaa43a833fd8ff3dc56205197583152d5frepo sync
205aea743aaa43a833fd8ff3dc56205197583152d5frepo sync    /**
206aea743aaa43a833fd8ff3dc56205197583152d5frepo sync     * The lookup key for a {@link android.net.LinkCapabilities} object associated with the
207aea743aaa43a833fd8ff3dc56205197583152d5frepo sync     * network. Retrieve with
208aea743aaa43a833fd8ff3dc56205197583152d5frepo sync     * {@link android.content.Intent#getParcelableExtra(String)}.
209aea743aaa43a833fd8ff3dc56205197583152d5frepo sync     * @hide
210aea743aaa43a833fd8ff3dc56205197583152d5frepo sync     */
211aea743aaa43a833fd8ff3dc56205197583152d5frepo sync    public static final String EXTRA_LINK_CAPABILITIES = "linkCapabilities";
212aea743aaa43a833fd8ff3dc56205197583152d5frepo sync
213aea743aaa43a833fd8ff3dc56205197583152d5frepo sync    /**
2149cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * Broadcast intent action indicating that the available peer list has changed. Fetch
2159cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * the changed list of peers with {@link #requestPeers}
21655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
21755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
21855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final String WIFI_P2P_PEERS_CHANGED_ACTION =
219651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        "android.net.wifi.p2p.PEERS_CHANGED";
22055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
22155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
222c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * Broadcast intent action indicating that peer discovery has either started or stopped.
223c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * One extra {@link #EXTRA_DISCOVERY_STATE} indicates whether discovery has started
224c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * or stopped.
225c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     *
226c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * Note that discovery will be stopped during a connection setup. If the application tries
227c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * to re-initiate discovery during this time, it can fail.
228c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     */
229c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
230c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    public static final String WIFI_P2P_DISCOVERY_CHANGED_ACTION =
231c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff        "android.net.wifi.p2p.DISCOVERY_STATE_CHANGE";
232c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff
233c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    /**
234c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * The lookup key for an int that indicates whether p2p discovery has started or stopped.
235c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * Retrieve it with {@link android.content.Intent#getIntExtra(String,int)}.
236c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     *
237c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * @see #WIFI_P2P_DISCOVERY_STARTED
238c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * @see #WIFI_P2P_DISCOVERY_STOPPED
239c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     */
240c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    public static final String EXTRA_DISCOVERY_STATE = "discoveryState";
241c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff
242c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    /**
243c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * p2p discovery has stopped
244c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     *
245c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * @see #WIFI_P2P_DISCOVERY_CHANGED_ACTION
246c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     */
247c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    public static final int WIFI_P2P_DISCOVERY_STOPPED = 1;
248c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff
249c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    /**
250c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * p2p discovery has started
251c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     *
252c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * @see #WIFI_P2P_DISCOVERY_CHANGED_ACTION
253c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     */
254c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    public static final int WIFI_P2P_DISCOVERY_STARTED = 2;
255c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff
256c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    /**
257651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Broadcast intent action indicating that this device details have changed.
25855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
259651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
260651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public static final String WIFI_P2P_THIS_DEVICE_CHANGED_ACTION =
261651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        "android.net.wifi.p2p.THIS_DEVICE_CHANGED";
26255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
2639cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /**
264651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * The lookup key for a {@link android.net.wifi.p2p.WifiP2pDevice} object
265651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Retrieve with {@link android.content.Intent#getParcelableExtra(String)}.
2669cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     */
267651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public static final String EXTRA_WIFI_P2P_DEVICE = "wifiP2pDevice";
268651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
269bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /**
2700879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * Broadcast intent action indicating that remembered persistent groups have changed.
2710879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @hide
2720879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     */
2730879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    public static final String WIFI_P2P_PERSISTENT_GROUPS_CHANGED_ACTION =
2740879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        "android.net.wifi.p2p.PERSISTENT_GROUPS_CHANGED";
2750879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga
2760879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /**
277bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * The lookup key for a {@link #String} object.
278bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * Retrieve with {@link android.os.Bundle#getString(String)}.
279bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * @hide
280bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     */
281bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    public static final String APP_PKG_BUNDLE_KEY = "appPkgName";
282bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
283bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /**
284bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * The lookup key for a {@link #Boolean} object.
285bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * Retrieve with {@link android.os.Bundle#getBoolean(String)}.
286bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * @hide
287bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     */
288bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    public static final String RESET_DIALOG_LISTENER_BUNDLE_KEY = "dialogResetFlag";
289bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
290bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /**
291bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * The lookup key for a {@link #String} object.
292bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * Retrieve with {@link android.os.Bundle#getString(String)}.
293bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * @hide
294bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     */
295bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    public static final String WPS_PIN_BUNDLE_KEY = "wpsPin";
296bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
297bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /**
298bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * The lookup key for a {@link android.net.wifi.p2p.WifiP2pDevice} object
299bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * Retrieve with {@link android.os.Bundle#getParcelable(String)}.
300bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * @hide
301bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     */
302bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    public static final String P2P_DEV_BUNDLE_KEY = "wifiP2pDevice";
303bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
304bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /**
305bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * The lookup key for a {@link android.net.wifi.p2p.WifiP2pConfig} object
306bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * Retrieve with {@link android.os.Bundle#getParcelable(String)}.
307bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * @hide
308bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     */
309bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    public static final String P2P_CONFIG_BUNDLE_KEY = "wifiP2pConfig";
310bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
311651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    IWifiP2pManager mService;
31255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
31355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    private static final int BASE = Protocol.BASE_WIFI_P2P_MANAGER;
31455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3159cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3167d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int DISCOVER_PEERS                          = BASE + 1;
3179cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3187d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int DISCOVER_PEERS_FAILED                   = BASE + 2;
3199cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3207d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int DISCOVER_PEERS_SUCCEEDED                = BASE + 3;
32155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3229cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3237d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int STOP_DISCOVERY                          = BASE + 4;
3249cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3257d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int STOP_DISCOVERY_FAILED                   = BASE + 5;
3269cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3277d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int STOP_DISCOVERY_SUCCEEDED                = BASE + 6;
32855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3299cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3307d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CONNECT                                 = BASE + 7;
331651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3327d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CONNECT_FAILED                          = BASE + 8;
333651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3347d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CONNECT_SUCCEEDED                       = BASE + 9;
33555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3369cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3377d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CANCEL_CONNECT                          = BASE + 10;
338651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3397d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CANCEL_CONNECT_FAILED                   = BASE + 11;
340651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3417d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CANCEL_CONNECT_SUCCEEDED                = BASE + 12;
34255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3439cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3447d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CREATE_GROUP                            = BASE + 13;
345651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3467d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CREATE_GROUP_FAILED                     = BASE + 14;
347651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3487d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CREATE_GROUP_SUCCEEDED                  = BASE + 15;
3499cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff
350651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3517d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int REMOVE_GROUP                            = BASE + 16;
352651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3537d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int REMOVE_GROUP_FAILED                     = BASE + 17;
354651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3557d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int REMOVE_GROUP_SUCCEEDED                  = BASE + 18;
35655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3579cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3587d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int REQUEST_PEERS                           = BASE + 19;
359651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3607d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int RESPONSE_PEERS                          = BASE + 20;
361651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
362651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3637d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int REQUEST_CONNECTION_INFO                 = BASE + 21;
364651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3657d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int RESPONSE_CONNECTION_INFO                = BASE + 22;
366651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
367651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3687d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int REQUEST_GROUP_INFO                      = BASE + 23;
369651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3707d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int RESPONSE_GROUP_INFO                     = BASE + 24;
371651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
37221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
37321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int ADD_LOCAL_SERVICE                       = BASE + 28;
37421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
37521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int ADD_LOCAL_SERVICE_FAILED                = BASE + 29;
37621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
37721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int ADD_LOCAL_SERVICE_SUCCEEDED             = BASE + 30;
37821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
37921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
38021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int REMOVE_LOCAL_SERVICE                    = BASE + 31;
38121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
38221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int REMOVE_LOCAL_SERVICE_FAILED             = BASE + 32;
38321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
38421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int REMOVE_LOCAL_SERVICE_SUCCEEDED          = BASE + 33;
38521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
38621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
38721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int CLEAR_LOCAL_SERVICES                    = BASE + 34;
38821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
38921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int CLEAR_LOCAL_SERVICES_FAILED             = BASE + 35;
39021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
39121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int CLEAR_LOCAL_SERVICES_SUCCEEDED          = BASE + 36;
39221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
39321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
39421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int ADD_SERVICE_REQUEST                     = BASE + 37;
39521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
39621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int ADD_SERVICE_REQUEST_FAILED              = BASE + 38;
39721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
39821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int ADD_SERVICE_REQUEST_SUCCEEDED           = BASE + 39;
39921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
40021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
40121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int REMOVE_SERVICE_REQUEST                  = BASE + 40;
40221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
40321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int REMOVE_SERVICE_REQUEST_FAILED           = BASE + 41;
40421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
40521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int REMOVE_SERVICE_REQUEST_SUCCEEDED        = BASE + 42;
40621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
40721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
40821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int CLEAR_SERVICE_REQUESTS                  = BASE + 43;
40921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
41021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int CLEAR_SERVICE_REQUESTS_FAILED           = BASE + 44;
41121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
41221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int CLEAR_SERVICE_REQUESTS_SUCCEEDED        = BASE + 45;
41321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
41421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
41521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int DISCOVER_SERVICES                       = BASE + 46;
41621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
41721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int DISCOVER_SERVICES_FAILED                = BASE + 47;
41821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
41921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int DISCOVER_SERVICES_SUCCEEDED             = BASE + 48;
42021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
42121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
42221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int PING                                    = BASE + 49;
42321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
42421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
42521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int RESPONSE_SERVICE                        = BASE + 50;
42621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
4272bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    /** @hide */
4282bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    public static final int SET_DEVICE_NAME                         = BASE + 51;
4292bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    /** @hide */
4302bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    public static final int SET_DEVICE_NAME_FAILED                  = BASE + 52;
4312bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    /** @hide */
4322bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    public static final int SET_DEVICE_NAME_SUCCEEDED               = BASE + 53;
4332bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff
434bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /** @hide */
435bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    public static final int SET_DIALOG_LISTENER                     = BASE + 54;
436bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /** @hide */
437bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    public static final int DIALOG_LISTENER_DETACHED                = BASE + 55;
438bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /** @hide */
439bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    public static final int DIALOG_LISTENER_ATTACHED                = BASE + 56;
440bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
441bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /** @hide */
442bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    public static final int CONNECTION_REQUESTED                    = BASE + 57;
443bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /** @hide */
444bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    public static final int SHOW_PIN_REQUESTED                      = BASE + 58;
445bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
4460879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /** @hide */
4470879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    public static final int DELETE_PERSISTENT_GROUP                 = BASE + 59;
4480879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /** @hide */
4490879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    public static final int DELETE_PERSISTENT_GROUP_FAILED          = BASE + 60;
4500879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /** @hide */
4510879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    public static final int DELETE_PERSISTENT_GROUP_SUCCEEDED       = BASE + 61;
4520879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga
4530879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /** @hide */
4540879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    public static final int REQUEST_PERSISTENT_GROUP_INFO           = BASE + 62;
4550879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /** @hide */
4560879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    public static final int RESPONSE_PERSISTENT_GROUP_INFO          = BASE + 63;
4570879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga
458ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    /** @hide */
459ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    public static final int SET_WFD_INFO                            = BASE + 64;
460ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    /** @hide */
461ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    public static final int SET_WFD_INFO_FAILED                     = BASE + 65;
462ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    /** @hide */
463ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    public static final int SET_WFD_INFO_SUCCEEDED                  = BASE + 66;
464ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber
4659cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /**
466651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Create a new WifiP2pManager instance. Applications use
467651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * {@link android.content.Context#getSystemService Context.getSystemService()} to retrieve
468651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * the standard {@link android.content.Context#WIFI_P2P_SERVICE Context.WIFI_P2P_SERVICE}.
469651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param service the Binder interface
470651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @hide - hide this because it takes in a parameter of type IWifiP2pManager, which
471651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * is a system private class.
4729cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     */
473651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public WifiP2pManager(IWifiP2pManager service) {
474651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        mService = service;
475651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    }
47655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
4779cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /**
478651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Passed with {@link ActionListener#onFailure}.
479651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Indicates that the operation failed due to an internal error.
4809cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     */
4814be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    public static final int ERROR               = 0;
4829cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff
4839cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /**
484651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Passed with {@link ActionListener#onFailure}.
485651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Indicates that the operation failed because p2p is unsupported on the device.
4869cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     */
4874be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    public static final int P2P_UNSUPPORTED     = 1;
4889cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff
4899cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /**
490651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Passed with {@link ActionListener#onFailure}.
491651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Indicates that the operation failed because the framework is busy and
4924be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff     * unable to service the request
4939cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     */
4944be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    public static final int BUSY                = 2;
4959cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff
49621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
49721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Passed with {@link ActionListener#onFailure}.
49821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Indicates that the {@link #discoverServices} failed because no service
499232ebad9ed1d81d5eab12e0b41cbe522e9a3c320Irfan Sheriff     * requests are added. Use {@link #addServiceRequest} to add a service
500232ebad9ed1d81d5eab12e0b41cbe522e9a3c320Irfan Sheriff     * request.
50121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
50221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int NO_SERVICE_REQUESTS = 3;
50321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
504bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /**
505bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * Passed with {@link DialogListener#onDetached}.
506bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * Indicates that the registered listener was detached from the system because
507bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * the application went into background.
508bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * @hide
509bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     */
510bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    public static final int NOT_IN_FOREGROUND   = 4;
511bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
512651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Interface for callback invocation when framework channel is lost */
513651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public interface ChannelListener {
514651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        /**
515651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * The channel to the framework has been disconnected.
516651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * Application could try re-initializing using {@link #initialize}
517651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         */
518651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        public void onChannelDisconnected();
519651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    }
5209cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff
521651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Interface for callback invocation on an application action */
522651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public interface ActionListener {
523651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        /** The operation succeeded */
524651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        public void onSuccess();
525651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        /**
526651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * The operation failed
527651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * @param reason The reason for failure could be one of {@link #P2P_UNSUPPORTED},
528651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * {@link #ERROR} or {@link #BUSY}
529651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         */
530651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        public void onFailure(int reason);
531651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    }
5329cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff
533651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Interface for callback invocation when peer list is available */
534651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public interface PeerListListener {
535651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        /**
536651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * The requested peer list is available
537651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * @param peers List of available peers
538651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         */
539651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        public void onPeersAvailable(WifiP2pDeviceList peers);
540651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    }
54155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
542651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Interface for callback invocation when connection info is available */
543651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public interface ConnectionInfoListener {
544651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        /**
545651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * The requested connection info is available
546651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * @param info Wi-Fi p2p connection info
547651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         */
548651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        public void onConnectionInfoAvailable(WifiP2pInfo info);
549651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    }
55055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
551651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Interface for callback invocation when group info is available */
552651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public interface GroupInfoListener {
553651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        /**
554651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * The requested p2p group info is available
555651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * @param group Wi-Fi p2p group info
556651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         */
557651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        public void onGroupInfoAvailable(WifiP2pGroup group);
55855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
55955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
560bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga   /**
56121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    * Interface for callback invocation when service discovery response other than
5628bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff    * Upnp or Bonjour is received
56321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    */
56421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public interface ServiceResponseListener {
56521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
56621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        /**
56721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * The requested service response is available.
56821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *
5698bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff         * @param protocolType protocol type. currently only
5708bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff         * {@link WifiP2pServiceInfo#SERVICE_TYPE_VENDOR_SPECIFIC}.
57121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param responseData service discovery response data based on the requested
57221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *  service protocol type. The format depends on the service type.
57321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param srcDevice source device.
57421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         */
5758bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        public void onServiceAvailable(int protocolType,
57621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                byte[] responseData, WifiP2pDevice srcDevice);
57721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
57821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
57921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
58021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Interface for callback invocation when Bonjour service discovery response
58121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * is received
58221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
5838bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff    public interface DnsSdServiceResponseListener {
58421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
58521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        /**
58621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * The requested Bonjour service response is available.
58721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *
58821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * <p>This function is invoked when the device with the specified Bonjour
58921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * registration type returned the instance name.
59021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param instanceName instance name.<br>
59121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *  e.g) "MyPrinter".
59221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param registrationType <br>
59321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * e.g) "_ipp._tcp.local."
59421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param srcDevice source device.
59521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         */
5968bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        public void onDnsSdServiceAvailable(String instanceName,
59721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                String registrationType, WifiP2pDevice srcDevice);
59821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
59921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff   }
60021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
60121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
60221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Interface for callback invocation when Bonjour TXT record is available
60321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * for a service
60421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
6058bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff   public interface DnsSdTxtRecordListener {
60621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        /**
60721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * The requested Bonjour service response is available.
60821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *
60921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * <p>This function is invoked when the device with the specified full
61021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * service domain service returned TXT record.
61121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *
61221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param fullDomainName full domain name. <br>
61321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * e.g) "MyPrinter._ipp._tcp.local.".
614527ba07b637cedf206fec0d3b0cf92141700a23cIrfan Sheriff         * @param txtRecordMap TXT record data as a map of key/value pairs
61521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param srcDevice source device.
61621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         */
6178bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        public void onDnsSdTxtRecordAvailable(String fullDomainName,
618527ba07b637cedf206fec0d3b0cf92141700a23cIrfan Sheriff                Map<String, String> txtRecordMap,
61921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                WifiP2pDevice srcDevice);
62021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff   }
62121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
62221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
62321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Interface for callback invocation when upnp service discovery response
62421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * is received
62521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * */
62621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public interface UpnpServiceResponseListener {
62721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
62821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        /**
62921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * The requested upnp service response is available.
63021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *
63121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * <p>This function is invoked when the specified device or service is found.
63221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *
63321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param uniqueServiceNames The list of unique service names.<br>
63421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * e.g) uuid:6859dede-8574-59ab-9332-123456789012::urn:schemas-upnp-org:device:
63521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * MediaServer:1
63621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param srcDevice source device.
63721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         */
63821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        public void onUpnpServiceAvailable(List<String> uniqueServiceNames,
63921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                WifiP2pDevice srcDevice);
64021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
64121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
64221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
64321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
644bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * Interface for callback invocation when dialog events are received.
645bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * see {@link #setDialogListener}.
646bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * @hide
647bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     */
648bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    public interface DialogListener {
649bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
650bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        /**
651bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * Called by the system when a request to show WPS pin is received.
652bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         *
653bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * @param pin WPS pin.
654bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         */
655bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        public void onShowPinRequested(String pin);
656bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
657bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        /**
658bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * Called by the system when a request to establish the connection is received.
659bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         *
660bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * Application can then call {@link #connect} with the given config if the request
661bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * is acceptable.
662bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         *
663bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * @param device the source device.
664bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * @param config p2p configuration.
665bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         */
666bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        public void onConnectionRequested(WifiP2pDevice device, WifiP2pConfig config);
667bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
668bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        /**
669bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * Called by the system when this listener was attached to the system.
670bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         */
671bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        public void onAttached();
672bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
673bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        /**
674bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * Called by the system when this listener was detached from the system or
675bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * failed to attach.
676bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         *
677bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * Application can request again using {@link #setDialogListener} when it is
678bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * in the foreground.
679bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         *
680bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * @param reason The reason for failure could be one of {@link #ERROR},
681bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * {@link #BUSY}, {@link #P2P_UNSUPPORTED} or {@link #NOT_IN_FOREGROUND}
682bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         */
683bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        public void onDetached(int reason);
684bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    }
685bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
6860879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /** Interface for callback invocation when stored group info list is available {@hide}*/
6870879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    public interface PersistentGroupInfoListener {
6880879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        /**
6890879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga         * The requested stored p2p group info list is available
6900879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga         * @param groups Wi-Fi p2p group info list
6910879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga         */
6920879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        public void onPersistentGroupInfoAvailable(WifiP2pGroupList groups);
6930879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    }
6940879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga
695bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /**
696651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * A channel that connects the application to the Wifi p2p framework.
6979cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * Most p2p operations require a Channel as an argument. An instance of Channel is obtained
6989cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * by doing a call on {@link #initialize}
699aea743aaa43a833fd8ff3dc56205197583152d5frepo sync     */
700651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public static class Channel {
701bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        Channel(Context context, Looper looper, ChannelListener l) {
702651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            mAsyncChannel = new AsyncChannel();
703651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            mHandler = new P2pHandler(looper);
704651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            mChannelListener = l;
705bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga            mContext = context;
706aea743aaa43a833fd8ff3dc56205197583152d5frepo sync        }
707b5e00bda40398b8738192abfe9b745464a54865aYoshihiko Ikenaga        private final static int INVALID_LISTENER_KEY = 0;
708651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        private ChannelListener mChannelListener;
70921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        private ServiceResponseListener mServRspListener;
7108bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        private DnsSdServiceResponseListener mDnsSdServRspListener;
7118bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        private DnsSdTxtRecordListener mDnsSdTxtListener;
71221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        private UpnpServiceResponseListener mUpnpServRspListener;
713651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        private HashMap<Integer, Object> mListenerMap = new HashMap<Integer, Object>();
714651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        private Object mListenerMapLock = new Object();
715651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        private int mListenerKey = 0;
716bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        private DialogListener mDialogListener;
717651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
718bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        private AsyncChannel mAsyncChannel;
719bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        private P2pHandler mHandler;
720bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        Context mContext;
721651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        class P2pHandler extends Handler {
722651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            P2pHandler(Looper looper) {
723651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                super(looper);
724651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            }
725651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
726651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            @Override
727651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            public void handleMessage(Message message) {
728651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                Object listener = getListener(message.arg2);
729651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                switch (message.what) {
730651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case AsyncChannel.CMD_CHANNEL_DISCONNECTED:
731651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        if (mChannelListener != null) {
732651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                            mChannelListener.onChannelDisconnected();
733651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                            mChannelListener = null;
734651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        }
735651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        break;
736651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    /* ActionListeners grouped together */
737651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case WifiP2pManager.DISCOVER_PEERS_FAILED:
7387d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff                    case WifiP2pManager.STOP_DISCOVERY_FAILED:
73921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.DISCOVER_SERVICES_FAILED:
740651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case WifiP2pManager.CONNECT_FAILED:
741651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case WifiP2pManager.CANCEL_CONNECT_FAILED:
742651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case WifiP2pManager.CREATE_GROUP_FAILED:
743651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case WifiP2pManager.REMOVE_GROUP_FAILED:
74421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.ADD_LOCAL_SERVICE_FAILED:
74521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.REMOVE_LOCAL_SERVICE_FAILED:
74621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.CLEAR_LOCAL_SERVICES_FAILED:
74721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.ADD_SERVICE_REQUEST_FAILED:
74821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.REMOVE_SERVICE_REQUEST_FAILED:
74921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.CLEAR_SERVICE_REQUESTS_FAILED:
7502bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff                    case WifiP2pManager.SET_DEVICE_NAME_FAILED:
7510879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                    case WifiP2pManager.DELETE_PERSISTENT_GROUP_FAILED:
752ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber                    case WifiP2pManager.SET_WFD_INFO_FAILED:
753651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        if (listener != null) {
754651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                            ((ActionListener) listener).onFailure(message.arg1);
755651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        }
756651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        break;
757651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    /* ActionListeners grouped together */
758651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case WifiP2pManager.DISCOVER_PEERS_SUCCEEDED:
7597d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff                    case WifiP2pManager.STOP_DISCOVERY_SUCCEEDED:
76021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.DISCOVER_SERVICES_SUCCEEDED:
761651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case WifiP2pManager.CONNECT_SUCCEEDED:
762651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case WifiP2pManager.CANCEL_CONNECT_SUCCEEDED:
763651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case WifiP2pManager.CREATE_GROUP_SUCCEEDED:
764651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case WifiP2pManager.REMOVE_GROUP_SUCCEEDED:
76521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.ADD_LOCAL_SERVICE_SUCCEEDED:
76621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.REMOVE_LOCAL_SERVICE_SUCCEEDED:
76721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.CLEAR_LOCAL_SERVICES_SUCCEEDED:
76821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.ADD_SERVICE_REQUEST_SUCCEEDED:
76921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.REMOVE_SERVICE_REQUEST_SUCCEEDED:
77021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.CLEAR_SERVICE_REQUESTS_SUCCEEDED:
7712bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff                    case WifiP2pManager.SET_DEVICE_NAME_SUCCEEDED:
7720879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                    case WifiP2pManager.DELETE_PERSISTENT_GROUP_SUCCEEDED:
773ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber                    case WifiP2pManager.SET_WFD_INFO_SUCCEEDED:
774651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        if (listener != null) {
775651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                            ((ActionListener) listener).onSuccess();
776651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        }
777651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        break;
778651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case WifiP2pManager.RESPONSE_PEERS:
779651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        WifiP2pDeviceList peers = (WifiP2pDeviceList) message.obj;
780651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        if (listener != null) {
781651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                            ((PeerListListener) listener).onPeersAvailable(peers);
782651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        }
783651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        break;
784651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case WifiP2pManager.RESPONSE_CONNECTION_INFO:
785651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        WifiP2pInfo wifiP2pInfo = (WifiP2pInfo) message.obj;
786651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        if (listener != null) {
787651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                            ((ConnectionInfoListener) listener).onConnectionInfoAvailable(wifiP2pInfo);
788651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        }
789651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        break;
790651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case WifiP2pManager.RESPONSE_GROUP_INFO:
791651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        WifiP2pGroup group = (WifiP2pGroup) message.obj;
792651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        if (listener != null) {
793651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                            ((GroupInfoListener) listener).onGroupInfoAvailable(group);
794651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        }
795651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        break;
79621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    case WifiP2pManager.RESPONSE_SERVICE:
79721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                        WifiP2pServiceResponse resp = (WifiP2pServiceResponse) message.obj;
79821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                        handleServiceResponse(resp);
79921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                        break;
800bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                    case WifiP2pManager.CONNECTION_REQUESTED:
801bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                        if (mDialogListener != null) {
802bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                            Bundle bundle = message.getData();
803bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                            mDialogListener.onConnectionRequested(
804bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                                    (WifiP2pDevice)bundle.getParcelable(
805bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                                            P2P_DEV_BUNDLE_KEY),
806bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                                    (WifiP2pConfig)bundle.getParcelable(
807bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                                            P2P_CONFIG_BUNDLE_KEY));
808bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                        }
809bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                        break;
810bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                    case WifiP2pManager.SHOW_PIN_REQUESTED:
811bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                        if (mDialogListener != null) {
812bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                            Bundle bundle = message.getData();
813bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                            mDialogListener.onShowPinRequested(
814bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                                    bundle.getString(WPS_PIN_BUNDLE_KEY));
815bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                        }
816bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                        break;
817bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                    case WifiP2pManager.DIALOG_LISTENER_ATTACHED:
818bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                        if (mDialogListener != null) {
819bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                            mDialogListener.onAttached();
820bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                        }
821bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                        break;
822bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                    case WifiP2pManager.DIALOG_LISTENER_DETACHED:
823bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                        if (mDialogListener != null) {
824bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                            mDialogListener.onDetached(message.arg1);
825bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                            mDialogListener = null;
826bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                        }
827bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga                        break;
8280879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                    case WifiP2pManager.RESPONSE_PERSISTENT_GROUP_INFO:
8290879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                        WifiP2pGroupList groups = (WifiP2pGroupList) message.obj;
8300879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                        if (listener != null) {
8310879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                            ((PersistentGroupInfoListener) listener).
8320879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                                onPersistentGroupInfoAvailable(groups);
8330879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                        }
8340879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                        break;
835651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                   default:
836651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        Log.d(TAG, "Ignored " + message);
837651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        break;
838651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                }
839651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            }
840651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        }
841651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
84221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        private void handleServiceResponse(WifiP2pServiceResponse resp) {
8438bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff            if (resp instanceof WifiP2pDnsSdServiceResponse) {
8448bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff                handleDnsSdServiceResponse((WifiP2pDnsSdServiceResponse)resp);
84521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            } else if (resp instanceof WifiP2pUpnpServiceResponse) {
84621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                if (mUpnpServRspListener != null) {
84721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    handleUpnpServiceResponse((WifiP2pUpnpServiceResponse)resp);
84821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                }
84921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            } else {
85021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                if (mServRspListener != null) {
85121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    mServRspListener.onServiceAvailable(resp.getServiceType(),
85221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                            resp.getRawData(), resp.getSrcDevice());
85321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                }
85421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            }
85521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        }
85621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
85721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        private void handleUpnpServiceResponse(WifiP2pUpnpServiceResponse resp) {
85821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            mUpnpServRspListener.onUpnpServiceAvailable(resp.getUniqueServiceNames(),
85921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    resp.getSrcDevice());
86021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        }
86121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
8628bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        private void handleDnsSdServiceResponse(WifiP2pDnsSdServiceResponse resp) {
8638bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff            if (resp.getDnsType() == WifiP2pDnsSdServiceInfo.DNS_TYPE_PTR) {
8648bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff                if (mDnsSdServRspListener != null) {
8658bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff                    mDnsSdServRspListener.onDnsSdServiceAvailable(
86621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                            resp.getInstanceName(),
86721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                            resp.getDnsQueryName(),
86821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                            resp.getSrcDevice());
86921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                }
8708bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff            } else if (resp.getDnsType() == WifiP2pDnsSdServiceInfo.DNS_TYPE_TXT) {
8718bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff                if (mDnsSdTxtListener != null) {
8728bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff                    mDnsSdTxtListener.onDnsSdTxtRecordAvailable(
87321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                            resp.getDnsQueryName(),
87421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                            resp.getTxtRecord(),
87521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                            resp.getSrcDevice());
87621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                }
87721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            } else {
87821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                Log.e(TAG, "Unhandled resp " + resp);
87921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            }
88021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        }
88121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
88221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        private int putListener(Object listener) {
883b5e00bda40398b8738192abfe9b745464a54865aYoshihiko Ikenaga            if (listener == null) return INVALID_LISTENER_KEY;
884651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            int key;
885651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            synchronized (mListenerMapLock) {
886b5e00bda40398b8738192abfe9b745464a54865aYoshihiko Ikenaga                do {
887b5e00bda40398b8738192abfe9b745464a54865aYoshihiko Ikenaga                    key = mListenerKey++;
888b5e00bda40398b8738192abfe9b745464a54865aYoshihiko Ikenaga                } while (key == INVALID_LISTENER_KEY);
889651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                mListenerMap.put(key, listener);
890651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            }
891651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            return key;
892651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        }
893651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
89421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        private Object getListener(int key) {
895b5e00bda40398b8738192abfe9b745464a54865aYoshihiko Ikenaga            if (key == INVALID_LISTENER_KEY) return null;
896651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            synchronized (mListenerMapLock) {
897651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                return mListenerMap.remove(key);
898651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            }
899651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        }
900bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
901bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        private void setDialogListener(DialogListener listener) {
902bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga            mDialogListener = listener;
903bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        }
904aea743aaa43a833fd8ff3dc56205197583152d5frepo sync    }
905aea743aaa43a833fd8ff3dc56205197583152d5frepo sync
90621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    private static void checkChannel(Channel c) {
90721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        if (c == null) throw new IllegalArgumentException("Channel needs to be initialized");
90821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
90921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
91021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    private static void checkServiceInfo(WifiP2pServiceInfo info) {
91121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        if (info == null) throw new IllegalArgumentException("service info is null");
91221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
91321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
91421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    private static void checkServiceRequest(WifiP2pServiceRequest req) {
91521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        if (req == null) throw new IllegalArgumentException("service request is null");
91621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
91721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
918aea743aaa43a833fd8ff3dc56205197583152d5frepo sync    /**
919651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Registers the application with the Wi-Fi framework. This function
9209cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * must be the first to be called before any p2p operations are performed.
9219cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
92255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @param srcContext is the context of the source
923651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param srcLooper is the Looper on which the callbacks are receivied
924651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callback at loss of framework communication. Can be null.
9259cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * @return Channel instance that is necessary for performing any further p2p operations
92655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
927651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public Channel initialize(Context srcContext, Looper srcLooper, ChannelListener listener) {
92855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        Messenger messenger = getMessenger();
929aea743aaa43a833fd8ff3dc56205197583152d5frepo sync        if (messenger == null) return null;
930aea743aaa43a833fd8ff3dc56205197583152d5frepo sync
931bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        Channel c = new Channel(srcContext, srcLooper, listener);
932651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        if (c.mAsyncChannel.connectSync(srcContext, c.mHandler, messenger)
933aea743aaa43a833fd8ff3dc56205197583152d5frepo sync                == AsyncChannel.STATUS_SUCCESSFUL) {
934aea743aaa43a833fd8ff3dc56205197583152d5frepo sync            return c;
935aea743aaa43a833fd8ff3dc56205197583152d5frepo sync        } else {
936aea743aaa43a833fd8ff3dc56205197583152d5frepo sync            return null;
937aea743aaa43a833fd8ff3dc56205197583152d5frepo sync        }
93855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
93955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
94055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
9419cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * Initiate peer discovery. A discovery process involves scanning for available Wi-Fi peers
9429cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * for the purpose of establishing a connection.
9439cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
9449cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> The function call immediately returns after sending a discovery request
945651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * to the framework. The application is notified of a success or failure to initiate
946651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * discovery through listener callbacks {@link ActionListener#onSuccess} or
947651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * {@link ActionListener#onFailure}.
9489cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
9499cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> The discovery remains active until a connection is initiated or
9509cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * a p2p group is formed. Register for {@link #WIFI_P2P_PEERS_CHANGED_ACTION} intent to
9519cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * determine when the framework notifies of a change as peers are discovered.
9529cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
9539cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> Upon receiving a {@link #WIFI_P2P_PEERS_CHANGED_ACTION} intent, an application
954651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * can request for the list of peers using {@link #requestPeers}.
955651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
956651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
957651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
95855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
959651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void discoverPeers(Channel c, ActionListener listener) {
96021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
961651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        c.mAsyncChannel.sendMessage(DISCOVER_PEERS, 0, c.putListener(listener));
96255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
96355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
9648bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff   /**
9658bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * Stop an ongoing peer discovery
9668bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     *
9678bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * <p> The function call immediately returns after sending a stop request
9688bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * to the framework. The application is notified of a success or failure to initiate
9698bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * stop through listener callbacks {@link ActionListener#onSuccess} or
9708bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * {@link ActionListener#onFailure}.
9718bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     *
9728bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * @param c is the channel created at {@link #initialize}
9738bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
9747d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff     */
9757d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public void stopPeerDiscovery(Channel c, ActionListener listener) {
97621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
9777d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff        c.mAsyncChannel.sendMessage(STOP_DISCOVERY, 0, c.putListener(listener));
9787d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    }
9797d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff
9807d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    /**
9819cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * Start a p2p connection to a device with the specified configuration.
9829cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
9839cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> The function call immediately returns after sending a connection request
984651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * to the framework. The application is notified of a success or failure to initiate
985651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * connect through listener callbacks {@link ActionListener#onSuccess} or
986651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * {@link ActionListener#onFailure}.
98755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
9889cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> Register for {@link #WIFI_P2P_CONNECTION_CHANGED_ACTION} intent to
9899cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * determine when the framework notifies of a change in connectivity.
9909cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
9919cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> If the current device is not part of a p2p group, a connect request initiates
9929cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * a group negotiation with the peer.
9939cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
9949cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> If the current device is part of an existing p2p group or has created
9959cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * a p2p group with {@link #createGroup}, an invitation to join the group is sent to
9969cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * the peer device.
9979cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
998651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
999651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param config options as described in {@link WifiP2pConfig} class
1000651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
100155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
1002651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void connect(Channel c, WifiP2pConfig config, ActionListener listener) {
100321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
1004651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        c.mAsyncChannel.sendMessage(CONNECT, 0, c.putListener(listener), config);
1005651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    }
1006651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
1007651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /**
1008651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Cancel any ongoing p2p group negotiation
1009651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
1010651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * <p> The function call immediately returns after sending a connection cancellation request
1011651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * to the framework. The application is notified of a success or failure to initiate
1012651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * cancellation through listener callbacks {@link ActionListener#onSuccess} or
1013651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * {@link ActionListener#onFailure}.
1014651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
1015651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
1016651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
1017651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     */
1018651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void cancelConnect(Channel c, ActionListener listener) {
101921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
1020651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        c.mAsyncChannel.sendMessage(CANCEL_CONNECT, 0, c.putListener(listener));
102155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
102255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
102355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
10249cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * Create a p2p group with the current device as the group owner. This essentially creates
10259cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * an access point that can accept connections from legacy clients as well as other p2p
10269cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * devices.
1027651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
1028651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * <p class="note"><strong>Note:</strong>
1029651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * This function would normally not be used unless the current device needs
10309cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * to form a p2p connection with a legacy client
10319cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
10329cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> The function call immediately returns after sending a group creation request
1033651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * to the framework. The application is notified of a success or failure to initiate
1034651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * group creation through listener callbacks {@link ActionListener#onSuccess} or
1035651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * {@link ActionListener#onFailure}.
1036651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
1037651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * <p> Application can request for the group details with {@link #requestGroupInfo}.
10389cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
1039651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
1040651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
104155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
1042651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void createGroup(Channel c, ActionListener listener) {
104321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
10440879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        c.mAsyncChannel.sendMessage(CREATE_GROUP, WifiP2pGroup.PERSISTENT_NET_ID,
10450879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                c.putListener(listener));
104655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
104755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
104855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
10499cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * Remove the current p2p group.
10509cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
10519cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> The function call immediately returns after sending a group removal request
1052651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * to the framework. The application is notified of a success or failure to initiate
1053651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * group removal through listener callbacks {@link ActionListener#onSuccess} or
1054651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * {@link ActionListener#onFailure}.
1055651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
1056651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
1057651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
105855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
1059651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void removeGroup(Channel c, ActionListener listener) {
106021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
1061651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        c.mAsyncChannel.sendMessage(REMOVE_GROUP, 0, c.putListener(listener));
106255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
106355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
106455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
10658bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * Register a local service for service discovery. If a local service is registered,
10668bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * the framework automatically responds to a service discovery request from a peer.
106721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
106821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The function call immediately returns after sending a request to add a local
106921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * service to the framework. The application is notified of a success or failure to
107021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * add service through listener callbacks {@link ActionListener#onSuccess} or
107121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link ActionListener#onFailure}.
107221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
10738bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * <p>The service information is set through {@link WifiP2pServiceInfo}.<br>
10748bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * or its subclass calls  {@link WifiP2pUpnpServiceInfo#newInstance} or
10758bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     *  {@link WifiP2pDnsSdServiceInfo#newInstance} for a Upnp or Bonjour service
10768bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * respectively
107721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
10788bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * <p>The service information can be cleared with calls to
107921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *  {@link #removeLocalService} or {@link #clearLocalServices}.
108021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
108121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
108221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param servInfo is a local service information.
108321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
108421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
108521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void addLocalService(Channel c, WifiP2pServiceInfo servInfo, ActionListener listener) {
108621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
108721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkServiceInfo(servInfo);
108821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mAsyncChannel.sendMessage(ADD_LOCAL_SERVICE, 0, c.putListener(listener), servInfo);
108921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
109021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
109121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
10928bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * Remove a registered local service added with {@link #addLocalService}
109321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
109421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The function call immediately returns after sending a request to remove a
109521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * local service to the framework. The application is notified of a success or failure to
109621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * add service through listener callbacks {@link ActionListener#onSuccess} or
109721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link ActionListener#onFailure}.
109821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
109921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
110021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param servInfo is the local service information.
110121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
110221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
110321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void removeLocalService(Channel c, WifiP2pServiceInfo servInfo,
110421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            ActionListener listener) {
110521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
110621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkServiceInfo(servInfo);
110721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mAsyncChannel.sendMessage(REMOVE_LOCAL_SERVICE, 0, c.putListener(listener), servInfo);
110821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
110921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
111021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
111121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Clear all registered local services of service discovery.
111221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
111321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The function call immediately returns after sending a request to clear all
111421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * local services to the framework. The application is notified of a success or failure to
111521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * add service through listener callbacks {@link ActionListener#onSuccess} or
111621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link ActionListener#onFailure}.
111721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
111821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
111921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
112021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
112121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void clearLocalServices(Channel c, ActionListener listener) {
112221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
112321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mAsyncChannel.sendMessage(CLEAR_LOCAL_SERVICES, 0, c.putListener(listener));
112421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
112521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
112621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
112721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Register a callback to be invoked on receiving service discovery response.
11288bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * Used only for vendor specific protocol right now. For Bonjour or Upnp, use
11298bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * {@link #setDnsSdResponseListeners} or {@link #setUpnpServiceResponseListener}
11308bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * respectively.
113121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
113221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> see {@link #discoverServices} for the detail.
113321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
113421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
113521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on receiving service discovery response.
113621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
113721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void setServiceResponseListener(Channel c,
113821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            ServiceResponseListener listener) {
113921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
114021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mServRspListener = listener;
114121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
114221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
114321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
114421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Register a callback to be invoked on receiving Bonjour service discovery
114521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * response.
114621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
114721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> see {@link #discoverServices} for the detail.
114821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
114921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c
11508bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * @param servListener is for listening to a Bonjour service response
11518bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * @param txtListener is for listening to a Bonjour TXT record response
115221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
11538bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff    public void setDnsSdResponseListeners(Channel c,
11548bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff            DnsSdServiceResponseListener servListener, DnsSdTxtRecordListener txtListener) {
115521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
11568bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        c.mDnsSdServRspListener = servListener;
11578bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        c.mDnsSdTxtListener = txtListener;
115821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
115921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
116021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
116121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Register a callback to be invoked on receiving upnp service discovery
116221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * response.
116321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
116421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> see {@link #discoverServices} for the detail.
116521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
116621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
116721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on receiving service discovery response.
116821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
116921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void setUpnpServiceResponseListener(Channel c,
117021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            UpnpServiceResponseListener listener) {
117121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
117221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mUpnpServRspListener = listener;
117321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
117421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
117521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
117621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Initiate service discovery. A discovery process involves scanning for
117721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * requested services for the purpose of establishing a connection to a peer
117821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * that supports an available service.
117921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
118021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The function call immediately returns after sending a request to start service
118121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * discovery to the framework. The application is notified of a success or failure to initiate
118221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * discovery through listener callbacks {@link ActionListener#onSuccess} or
118321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link ActionListener#onFailure}.
118421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
118521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The services to be discovered are specified with calls to {@link #addServiceRequest}.
118621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
118721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p>The application is notified of the response against the service discovery request
118821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * through listener callbacks registered by {@link #setServiceResponseListener} or
11898bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * {@link #setDnsSdResponseListeners}, or {@link #setUpnpServiceResponseListener}.
119021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
119121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
119221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
119321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
119421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void discoverServices(Channel c, ActionListener listener) {
119521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
119621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mAsyncChannel.sendMessage(DISCOVER_SERVICES, 0, c.putListener(listener));
119721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
119821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
119921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
120021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Add a service discovery request.
120121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
120221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The function call immediately returns after sending a request to add service
120321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * discovery request to the framework. The application is notified of a success or failure to
120421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * add service through listener callbacks {@link ActionListener#onSuccess} or
120521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link ActionListener#onFailure}.
120621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
120721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p>After service discovery request is added, you can initiate service discovery by
120821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link #discoverServices}.
120921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
12108bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * <p>The added service requests can be cleared with calls to
121121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link #removeServiceRequest(Channel, WifiP2pServiceRequest, ActionListener)} or
12128bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * {@link #clearServiceRequests(Channel, ActionListener)}.
121321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
121421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
121521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param req is the service discovery request.
121621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
121721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
121821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void addServiceRequest(Channel c,
121921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            WifiP2pServiceRequest req, ActionListener listener) {
122021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
122121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkServiceRequest(req);
122221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mAsyncChannel.sendMessage(ADD_SERVICE_REQUEST, 0,
122321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                c.putListener(listener), req);
122421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
122521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
122621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
12278bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * Remove a specified service discovery request added with {@link #addServiceRequest}
122821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
122921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The function call immediately returns after sending a request to remove service
123021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * discovery request to the framework. The application is notified of a success or failure to
123121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * add service through listener callbacks {@link ActionListener#onSuccess} or
123221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link ActionListener#onFailure}.
123321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
123421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
123521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param req is the service discovery request.
123621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
123721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
123821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void removeServiceRequest(Channel c, WifiP2pServiceRequest req,
123921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            ActionListener listener) {
124021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
124121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkServiceRequest(req);
124221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mAsyncChannel.sendMessage(REMOVE_SERVICE_REQUEST, 0,
124321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                c.putListener(listener), req);
124421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
124521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
124621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
124721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Clear all registered service discovery requests.
124821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
124921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The function call immediately returns after sending a request to clear all
125021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * service discovery requests to the framework. The application is notified of a success
125121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * or failure to add service through listener callbacks {@link ActionListener#onSuccess} or
125221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link ActionListener#onFailure}.
125321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
125421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
125521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
125621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
125721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void clearServiceRequests(Channel c, ActionListener listener) {
125821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
125921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mAsyncChannel.sendMessage(CLEAR_SERVICE_REQUESTS,
126021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                0, c.putListener(listener));
126121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
126221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
126321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
1264651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Request the current list of peers.
1265651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
1266651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
1267651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callback when peer list is available. Can be null.
126855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
1269651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void requestPeers(Channel c, PeerListListener listener) {
127021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
1271651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        c.mAsyncChannel.sendMessage(REQUEST_PEERS, 0, c.putListener(listener));
127255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
127355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
127455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
1275651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Request device connection info.
1276651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
1277651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
1278651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callback when connection info is available. Can be null.
127955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
1280651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void requestConnectionInfo(Channel c, ConnectionInfoListener listener) {
128121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
1282651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        c.mAsyncChannel.sendMessage(REQUEST_CONNECTION_INFO, 0, c.putListener(listener));
1283ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff    }
1284ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff
1285ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff    /**
1286651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Request p2p group info.
1287651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
1288651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
1289651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callback when group info is available. Can be null.
12909cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     */
1291651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void requestGroupInfo(Channel c, GroupInfoListener listener) {
129221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
1293651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        c.mAsyncChannel.sendMessage(REQUEST_GROUP_INFO, 0, c.putListener(listener));
12949cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    }
129555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
129655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
12972bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff     * Set p2p device name.
12982bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff     * @hide
12992bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff     * @param c is the channel created at {@link #initialize}
13002bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff     * @param listener for callback when group info is available. Can be null.
13012bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff     */
13022bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    public void setDeviceName(Channel c, String devName, ActionListener listener) {
13032bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff        checkChannel(c);
13042bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff        WifiP2pDevice d = new WifiP2pDevice();
13052bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff        d.deviceName = devName;
13062bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff        c.mAsyncChannel.sendMessage(SET_DEVICE_NAME, 0, c.putListener(listener), d);
13072bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    }
13082bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff
1309ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    /** @hide */
1310ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    public void setWFDInfo(
1311ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber            Channel c, WifiP2pWfdInfo wfdInfo,
1312ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber            ActionListener listener) {
1313ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber        checkChannel(c);
1314ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber        c.mAsyncChannel.sendMessage(SET_WFD_INFO, 0, c.putListener(listener), wfdInfo);
1315ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    }
13162bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff
1317bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /**
1318bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * Set dialog listener to over-ride system dialogs on p2p events. This function
1319bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * allows an application to receive notifications on connection requests from
1320bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * peers so that it can customize the user experience for connection with
1321bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * peers.
1322bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     *
1323bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * <p> The function call immediately returns after sending a request
1324bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * to the framework. The application is notified of a success or failure to attach
1325bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * to the system through listener callbacks {@link DialogListener#onAttached} or
1326bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * {@link DialogListener#onDetached}.
1327bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     *
1328bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * <p> Note that only foreground application will be successful in overriding the
1329bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * system dialogs.
1330bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * @hide
1331bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     *
1332bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * @param c is the channel created at {@link #initialize}
1333bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     * @param listener for callback on a dialog event.
1334bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga     */
1335bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    public void setDialogListener(Channel c, DialogListener listener) {
1336bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        checkChannel(c);
1337bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        c.setDialogListener(listener);
1338bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga
1339bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        /**
1340bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * mAsyncChannel should always stay private and inaccessible from the app
1341bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * to prevent an app from sending a message with a fake app name to gain
1342bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         * control over the dialogs
1343bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga         */
1344bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        Message msg = Message.obtain();
1345bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        Bundle bundle = new Bundle();
1346bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        bundle.putString(APP_PKG_BUNDLE_KEY, c.mContext.getPackageName());
1347bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        bundle.putBoolean(RESET_DIALOG_LISTENER_BUNDLE_KEY, listener == null);
1348bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        msg.what = SET_DIALOG_LISTENER;
1349bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        msg.setData(bundle);
1350bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        c.mAsyncChannel.sendMessage(msg);
1351bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    }
13522bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff
13532bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    /**
13540879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * Delete a stored persistent group from the system settings.
13550879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     *
13560879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * <p> The function call immediately returns after sending a persistent group removal request
13570879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * to the framework. The application is notified of a success or failure to initiate
13580879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * group removal through listener callbacks {@link ActionListener#onSuccess} or
13590879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * {@link ActionListener#onFailure}.
13600879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     *
13610879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * <p>The persistent p2p group list stored in the system can be obtained by
13620879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * {@link #requestPersistentGroupInfo(Channel, PersistentGroupInfoListener)} and
13630879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     *  a network id can be obtained by {@link WifiP2pGroup#getNetworkId()}.
13640879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     *
13650879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @param c is the channel created at {@link #initialize}
13660879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @param netId he network id of the p2p group.
13670879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @param listener for callbacks on success or failure. Can be null.
13680879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @hide
13690879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     */
13700879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    public void deletePersistentGroup(Channel c, int netId, ActionListener listener) {
13710879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        checkChannel(c);
13720879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        c.mAsyncChannel.sendMessage(DELETE_PERSISTENT_GROUP, netId, c.putListener(listener));
13730879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    }
13740879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga
13750879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /**
13760879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * Request a list of all the persistent p2p groups stored in system.
13770879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     *
13780879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @param c is the channel created at {@link #initialize}
13790879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @param listener for callback when persistent group info list is available. Can be null.
13800879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @hide
13810879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     */
13820879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    public void requestPersistentGroupInfo(Channel c, PersistentGroupInfoListener listener) {
13830879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        checkChannel(c);
13840879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        c.mAsyncChannel.sendMessage(REQUEST_PERSISTENT_GROUP_INFO, 0, c.putListener(listener));
13850879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    }
13860879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga
13870879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /**
138855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * Get a reference to WifiP2pService handler. This is used to establish
138955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * an AsyncChannel communication with WifiService
139055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
139155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @return Messenger pointing to the WifiP2pService handler
139255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @hide
139355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
139455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public Messenger getMessenger() {
139555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        try {
139655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            return mService.getMessenger();
139755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        } catch (RemoteException e) {
139855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            return null;
139955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        }
140055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
1401aea743aaa43a833fd8ff3dc56205197583152d5frepo sync
140255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync}
1403