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;
22f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriffimport android.net.wifi.WpsInfo;
238bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriffimport android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo;
248bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriffimport android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceResponse;
2521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport android.net.wifi.p2p.nsd.WifiP2pServiceInfo;
2621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport android.net.wifi.p2p.nsd.WifiP2pServiceRequest;
2721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport android.net.wifi.p2p.nsd.WifiP2pServiceResponse;
2821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport android.net.wifi.p2p.nsd.WifiP2pUpnpServiceInfo;
2921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport android.net.wifi.p2p.nsd.WifiP2pUpnpServiceResponse;
301f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhangimport android.os.Bundle;
3155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.Handler;
32651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriffimport android.os.Looper;
3355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.Message;
340879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenagaimport android.os.Messenger;
3555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.RemoteException;
36f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriffimport android.text.TextUtils;
37aea743aaa43a833fd8ff3dc56205197583152d5frepo syncimport android.util.Log;
3855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport com.android.internal.util.AsyncChannel;
4055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport com.android.internal.util.Protocol;
4155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
42651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriffimport java.util.HashMap;
4321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport java.util.List;
44527ba07b637cedf206fec0d3b0cf92141700a23cIrfan Sheriffimport java.util.Map;
45651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
4655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync/**
479cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * This class provides the API for managing Wi-Fi peer-to-peer connectivity. This lets an
489cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * application discover available peers, setup connection to peers and query for the list of peers.
499cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * When a p2p connection is formed over wifi, the device continues to maintain the uplink
509cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * connection over mobile or any other available network for internet connectivity on the device.
519cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff *
52651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * <p> The API is asynchronous and responses to requests from an application are on listener
53651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * callbacks provided by the application. The application needs to do an initialization with
54651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * {@link #initialize} before doing any p2p operation.
55651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff *
568bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * <p> Most application calls need a {@link ActionListener} instance for receiving callbacks
578bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * {@link ActionListener#onSuccess} or {@link ActionListener#onFailure}. Action callbacks
588bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * indicate whether the initiation of the action was a success or a failure.
59651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * Upon failure, the reason of failure can be one of {@link #ERROR}, {@link #P2P_UNSUPPORTED}
60651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * or {@link #BUSY}.
619cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff *
62651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * <p> An application can initiate discovery of peers with {@link #discoverPeers}. An initiated
63651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * discovery request from an application stays active until the device starts connecting to a peer
648bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * ,forms a p2p group or there is an explicit {@link #stopPeerDiscovery}.
658bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * Applications can listen to {@link #WIFI_P2P_DISCOVERY_CHANGED_ACTION} to know if a peer-to-peer
668bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * discovery is running or stopped. Additionally, {@link #WIFI_P2P_PEERS_CHANGED_ACTION} indicates
678bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * if the peer list has changed.
689cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff *
698bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * <p> When an application needs to fetch the current list of peers, it can request the list
70651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * of peers with {@link #requestPeers}. When the peer list is available
71651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * {@link PeerListListener#onPeersAvailable} is called with the device list.
729cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff *
739cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * <p> An application can initiate a connection request to a peer through {@link #connect}. See
749cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@link WifiP2pConfig} for details on setting up the configuration. For communication with legacy
759cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * Wi-Fi devices that do not support p2p, an app can create a group using {@link #createGroup}
769cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * which creates an access point whose details can be fetched with {@link #requestGroupInfo}.
778bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff *
789cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * <p> After a successful group formation through {@link #createGroup} or through {@link #connect},
79651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * use {@link #requestConnectionInfo} to fetch the connection details. The connection info
80651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * {@link WifiP2pInfo} contains the address of the group owner
816f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff * {@link WifiP2pInfo#groupOwnerAddress} and a flag {@link WifiP2pInfo#isGroupOwner} to indicate
829cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * if the current device is a p2p group owner. A p2p client can thus communicate with
839cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * the p2p group owner through a socket connection.
849cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff *
858bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * <p> With peer discovery using {@link  #discoverPeers}, an application discovers the neighboring
868bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * peers, but has no good way to figure out which peer to establish a connection with. For example,
878bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * if a game application is interested in finding all the neighboring peers that are also running
888bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * the same game, it has no way to find out until after the connection is setup. Pre-association
898bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * service discovery is meant to address this issue of filtering the peers based on the running
908bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * services.
918bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff *
928bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * <p>With pre-association service discovery, an application can advertise a service for a
938bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * application on a peer device prior to a connection setup between the devices.
948bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * Currently, DNS based service discovery (Bonjour) and Upnp are the higher layer protocols
958bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * supported. Get Bonjour resources at dns-sd.org and Upnp resources at upnp.org
968bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * As an example, a video application can discover a Upnp capable media renderer
978bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * prior to setting up a Wi-fi p2p connection with the device.
988bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff *
998bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * <p> An application can advertise a Upnp or a Bonjour service with a call to
1008bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * {@link #addLocalService}. After a local service is added,
1018bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * the framework automatically responds to a peer application discovering the service prior
1028bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * to establishing a p2p connection. A call to {@link #removeLocalService} removes a local
1038bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * service and {@link #clearLocalServices} can be used to clear all local services.
1048bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff *
1058bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * <p> An application that is looking for peer devices that support certain services
1068bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * can do so with a call to  {@link #discoverServices}. Prior to initiating the discovery,
1078bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * application can add service discovery request with a call to {@link #addServiceRequest},
1088bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * remove a service discovery request with a call to {@link #removeServiceRequest} or clear
1098bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * all requests with a call to {@link #clearServiceRequests}. When no service requests remain,
1108bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * a previously running service discovery will stop.
1118bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff *
1128bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * The application is notified of a result of service discovery request through listener callbacks
1138bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * set through {@link #setDnsSdResponseListeners} for Bonjour or
1148bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * {@link #setUpnpServiceResponseListener} for Upnp.
1159cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff *
1169cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * <p class="note"><strong>Note:</strong>
1179cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * Registering an application handler with {@link #initialize} requires the permissions
1189cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@link android.Manifest.permission#ACCESS_WIFI_STATE} and
1199cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@link android.Manifest.permission#CHANGE_WIFI_STATE} to perform any further peer-to-peer
1209cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * operations.
1219cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff *
1229cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * Get an instance of this class by calling {@link android.content.Context#getSystemService(String)
12355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * Context.getSystemService(Context.WIFI_P2P_SERVICE)}.
12455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync *
1259cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@see WifiP2pConfig}
1269cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@see WifiP2pInfo}
1279cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@see WifiP2pGroup}
1289cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@see WifiP2pDevice}
1299cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * {@see WifiP2pDeviceList}
130651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff * {@see android.net.wifi.WpsInfo}
13155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync */
13255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncpublic class WifiP2pManager {
133651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    private static final String TAG = "WifiP2pManager";
13455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
1359cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * Broadcast intent action to indicate whether Wi-Fi p2p is enabled or disabled. An
1369cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * extra {@link #EXTRA_WIFI_STATE} provides the state information as int.
1379cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
1389cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * @see #EXTRA_WIFI_STATE
13955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
14055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
14155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final String WIFI_P2P_STATE_CHANGED_ACTION =
142651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        "android.net.wifi.p2p.STATE_CHANGED";
14355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
14455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
14555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * The lookup key for an int that indicates whether Wi-Fi p2p is enabled or disabled.
14655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * Retrieve it with {@link android.content.Intent#getIntExtra(String,int)}.
14755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
14855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see #WIFI_P2P_STATE_DISABLED
14955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see #WIFI_P2P_STATE_ENABLED
15055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
15155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final String EXTRA_WIFI_STATE = "wifi_p2p_state";
15255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
15355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
15455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * Wi-Fi p2p is disabled.
15555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
15655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see #WIFI_P2P_STATE_CHANGED_ACTION
15755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
15855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final int WIFI_P2P_STATE_DISABLED = 1;
15955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
16055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
16155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * Wi-Fi p2p is enabled.
16255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
16355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see #WIFI_P2P_STATE_CHANGED_ACTION
16455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
16555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final int WIFI_P2P_STATE_ENABLED = 2;
16655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
16755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
16855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * Broadcast intent action indicating that the state of Wi-Fi p2p connectivity
1699cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * has changed. One extra {@link #EXTRA_WIFI_P2P_INFO} provides the p2p connection info in
1709cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * the form of a {@link WifiP2pInfo} object. Another extra {@link #EXTRA_NETWORK_INFO} provides
1713a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     * the network info in the form of a {@link android.net.NetworkInfo}. A third extra provides
1723a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     * the details of the group.
1739cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
1749cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * @see #EXTRA_WIFI_P2P_INFO
17555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see #EXTRA_NETWORK_INFO
1763a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     * @see #EXTRA_WIFI_P2P_GROUP
17755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
17855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
17955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final String WIFI_P2P_CONNECTION_CHANGED_ACTION =
180651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        "android.net.wifi.p2p.CONNECTION_STATE_CHANGE";
18155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
18255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
183ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff     * The lookup key for a {@link android.net.wifi.p2p.WifiP2pInfo} object
184ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff     * Retrieve with {@link android.content.Intent#getParcelableExtra(String)}.
185ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff     */
186ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff    public static final String EXTRA_WIFI_P2P_INFO = "wifiP2pInfo";
187ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff
188ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff    /**
18955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * The lookup key for a {@link android.net.NetworkInfo} object associated with the
1903a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     * p2p network. Retrieve with
19155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * {@link android.content.Intent#getParcelableExtra(String)}.
19255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
19355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final String EXTRA_NETWORK_INFO = "networkInfo";
19455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
19555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
1963a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     * The lookup key for a {@link android.net.wifi.p2p.WifiP2pGroup} object
1973a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     * associated with the p2p network. Retrieve with
198aea743aaa43a833fd8ff3dc56205197583152d5frepo sync     * {@link android.content.Intent#getParcelableExtra(String)}.
199aea743aaa43a833fd8ff3dc56205197583152d5frepo sync     */
2003a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff    public static final String EXTRA_WIFI_P2P_GROUP = "p2pGroupInfo";
201aea743aaa43a833fd8ff3dc56205197583152d5frepo sync
202aea743aaa43a833fd8ff3dc56205197583152d5frepo sync    /**
2033a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     * Broadcast intent action indicating that the available peer list has changed. This
2043a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     * can be sent as a result of peers being found, lost or updated.
2053a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     *
2063a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     * <p> An extra {@link #EXTRA_P2P_DEVICE_LIST} provides the full list of
2073a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     * current peers. The full list of peers can also be obtained any time with
2083a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     * {@link #requestPeers}.
2093a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     *
2103a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     * @see #EXTRA_P2P_DEVICE_LIST
21155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
21255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
21355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final String WIFI_P2P_PEERS_CHANGED_ACTION =
214651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        "android.net.wifi.p2p.PEERS_CHANGED";
21555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
2163a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     /**
2173a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff      * The lookup key for a {@link android.net.wifi.p2p.WifiP2pDeviceList} object representing
2183a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff      * the new peer list when {@link #WIFI_P2P_PEERS_CHANGED_ACTION} broadcast is sent.
2193a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff      *
2203a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff      * <p>Retrieve with {@link android.content.Intent#getParcelableExtra(String)}.
2213a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff      */
2223a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     public static final String EXTRA_P2P_DEVICE_LIST = "wifiP2pDeviceList";
2233a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff
22455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
225c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * Broadcast intent action indicating that peer discovery has either started or stopped.
226c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * One extra {@link #EXTRA_DISCOVERY_STATE} indicates whether discovery has started
227c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * or stopped.
228c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     *
2293a67e2515bff73fab57621b1f9966662e83b7881Irfan Sheriff     * <p>Note that discovery will be stopped during a connection setup. If the application tries
230c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * to re-initiate discovery during this time, it can fail.
231c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     */
232c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
233c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    public static final String WIFI_P2P_DISCOVERY_CHANGED_ACTION =
234c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff        "android.net.wifi.p2p.DISCOVERY_STATE_CHANGE";
235c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff
236c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    /**
237c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * The lookup key for an int that indicates whether p2p discovery has started or stopped.
238c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * Retrieve it with {@link android.content.Intent#getIntExtra(String,int)}.
239c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     *
240c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * @see #WIFI_P2P_DISCOVERY_STARTED
241c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * @see #WIFI_P2P_DISCOVERY_STOPPED
242c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     */
243c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    public static final String EXTRA_DISCOVERY_STATE = "discoveryState";
244c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff
245c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    /**
246c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * p2p discovery has stopped
247c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     *
248c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * @see #WIFI_P2P_DISCOVERY_CHANGED_ACTION
249c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     */
250c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    public static final int WIFI_P2P_DISCOVERY_STOPPED = 1;
251c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff
252c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    /**
253c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * p2p discovery has started
254c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     *
255c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     * @see #WIFI_P2P_DISCOVERY_CHANGED_ACTION
256c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff     */
257c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    public static final int WIFI_P2P_DISCOVERY_STARTED = 2;
258c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff
259c111d1caa8d4cc5d2139b5abd4d2db1f78560effIrfan Sheriff    /**
260651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Broadcast intent action indicating that this device details have changed.
26155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
262651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
263651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public static final String WIFI_P2P_THIS_DEVICE_CHANGED_ACTION =
264651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        "android.net.wifi.p2p.THIS_DEVICE_CHANGED";
26555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
2669cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /**
267651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * The lookup key for a {@link android.net.wifi.p2p.WifiP2pDevice} object
268651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Retrieve with {@link android.content.Intent#getParcelableExtra(String)}.
2699cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     */
270651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public static final String EXTRA_WIFI_P2P_DEVICE = "wifiP2pDevice";
271651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
272bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /**
2730879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * Broadcast intent action indicating that remembered persistent groups have changed.
2740879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @hide
2750879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     */
2760879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    public static final String WIFI_P2P_PERSISTENT_GROUPS_CHANGED_ACTION =
2770879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        "android.net.wifi.p2p.PERSISTENT_GROUPS_CHANGED";
2780879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga
2799740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /**
2809740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * The lookup key for a handover message returned by the WifiP2pService.
2819740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * @hide
2829740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     */
2839740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public static final String EXTRA_HANDOVER_MESSAGE =
2849740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales            "android.net.wifi.p2p.EXTRA_HANDOVER_MESSAGE";
2859740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales
286651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    IWifiP2pManager mService;
28755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
28855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    private static final int BASE = Protocol.BASE_WIFI_P2P_MANAGER;
28955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
2909cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
2917d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int DISCOVER_PEERS                          = BASE + 1;
2929cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
2937d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int DISCOVER_PEERS_FAILED                   = BASE + 2;
2949cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
2957d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int DISCOVER_PEERS_SUCCEEDED                = BASE + 3;
29655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
2979cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
2987d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int STOP_DISCOVERY                          = BASE + 4;
2999cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3007d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int STOP_DISCOVERY_FAILED                   = BASE + 5;
3019cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3027d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int STOP_DISCOVERY_SUCCEEDED                = BASE + 6;
30355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3049cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3057d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CONNECT                                 = BASE + 7;
306651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3077d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CONNECT_FAILED                          = BASE + 8;
308651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3097d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CONNECT_SUCCEEDED                       = BASE + 9;
31055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3119cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3127d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CANCEL_CONNECT                          = BASE + 10;
313651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3147d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CANCEL_CONNECT_FAILED                   = BASE + 11;
315651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3167d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CANCEL_CONNECT_SUCCEEDED                = BASE + 12;
31755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3189cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3197d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CREATE_GROUP                            = BASE + 13;
320651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3217d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CREATE_GROUP_FAILED                     = BASE + 14;
322651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3237d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int CREATE_GROUP_SUCCEEDED                  = BASE + 15;
3249cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff
325651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3267d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int REMOVE_GROUP                            = BASE + 16;
327651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3287d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int REMOVE_GROUP_FAILED                     = BASE + 17;
329651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3307d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int REMOVE_GROUP_SUCCEEDED                  = BASE + 18;
33155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
3329cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /** @hide */
3337d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int REQUEST_PEERS                           = BASE + 19;
334651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3357d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int RESPONSE_PEERS                          = BASE + 20;
336651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
337651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3387d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int REQUEST_CONNECTION_INFO                 = BASE + 21;
339651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3407d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int RESPONSE_CONNECTION_INFO                = BASE + 22;
341651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
342651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3437d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int REQUEST_GROUP_INFO                      = BASE + 23;
344651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** @hide */
3457d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public static final int RESPONSE_GROUP_INFO                     = BASE + 24;
346651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
34721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
34821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int ADD_LOCAL_SERVICE                       = BASE + 28;
34921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
35021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int ADD_LOCAL_SERVICE_FAILED                = BASE + 29;
35121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
35221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int ADD_LOCAL_SERVICE_SUCCEEDED             = BASE + 30;
35321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
35421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
35521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int REMOVE_LOCAL_SERVICE                    = BASE + 31;
35621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
35721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int REMOVE_LOCAL_SERVICE_FAILED             = BASE + 32;
35821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
35921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int REMOVE_LOCAL_SERVICE_SUCCEEDED          = BASE + 33;
36021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
36121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
36221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int CLEAR_LOCAL_SERVICES                    = BASE + 34;
36321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
36421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int CLEAR_LOCAL_SERVICES_FAILED             = BASE + 35;
36521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
36621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int CLEAR_LOCAL_SERVICES_SUCCEEDED          = BASE + 36;
36721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
36821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
36921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int ADD_SERVICE_REQUEST                     = BASE + 37;
37021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
37121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int ADD_SERVICE_REQUEST_FAILED              = BASE + 38;
37221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
37321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int ADD_SERVICE_REQUEST_SUCCEEDED           = BASE + 39;
37421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
37521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
37621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int REMOVE_SERVICE_REQUEST                  = BASE + 40;
37721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
37821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int REMOVE_SERVICE_REQUEST_FAILED           = BASE + 41;
37921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
38021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int REMOVE_SERVICE_REQUEST_SUCCEEDED        = BASE + 42;
38121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
38221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
38321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int CLEAR_SERVICE_REQUESTS                  = BASE + 43;
38421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
38521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int CLEAR_SERVICE_REQUESTS_FAILED           = BASE + 44;
38621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
38721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int CLEAR_SERVICE_REQUESTS_SUCCEEDED        = BASE + 45;
38821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
38921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
39021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int DISCOVER_SERVICES                       = BASE + 46;
39121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
39221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int DISCOVER_SERVICES_FAILED                = BASE + 47;
39321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
39421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int DISCOVER_SERVICES_SUCCEEDED             = BASE + 48;
39521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
39621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
39721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int PING                                    = BASE + 49;
39821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
39921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /** @hide */
40021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int RESPONSE_SERVICE                        = BASE + 50;
40121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
4022bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    /** @hide */
4032bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    public static final int SET_DEVICE_NAME                         = BASE + 51;
4042bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    /** @hide */
4052bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    public static final int SET_DEVICE_NAME_FAILED                  = BASE + 52;
4062bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    /** @hide */
4072bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    public static final int SET_DEVICE_NAME_SUCCEEDED               = BASE + 53;
4082bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff
409bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /** @hide */
410ef96a43a3c9277a2b63cce5ead0618281ac263b1Irfan Sheriff    public static final int DELETE_PERSISTENT_GROUP                 = BASE + 54;
4110879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /** @hide */
412ef96a43a3c9277a2b63cce5ead0618281ac263b1Irfan Sheriff    public static final int DELETE_PERSISTENT_GROUP_FAILED          = BASE + 55;
4130879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /** @hide */
414ef96a43a3c9277a2b63cce5ead0618281ac263b1Irfan Sheriff    public static final int DELETE_PERSISTENT_GROUP_SUCCEEDED       = BASE + 56;
4150879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga
4160879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /** @hide */
417ef96a43a3c9277a2b63cce5ead0618281ac263b1Irfan Sheriff    public static final int REQUEST_PERSISTENT_GROUP_INFO           = BASE + 57;
4180879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /** @hide */
419ef96a43a3c9277a2b63cce5ead0618281ac263b1Irfan Sheriff    public static final int RESPONSE_PERSISTENT_GROUP_INFO          = BASE + 58;
4200879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga
421ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    /** @hide */
422ef96a43a3c9277a2b63cce5ead0618281ac263b1Irfan Sheriff    public static final int SET_WFD_INFO                            = BASE + 59;
423ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    /** @hide */
424ef96a43a3c9277a2b63cce5ead0618281ac263b1Irfan Sheriff    public static final int SET_WFD_INFO_FAILED                     = BASE + 60;
425ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    /** @hide */
426ef96a43a3c9277a2b63cce5ead0618281ac263b1Irfan Sheriff    public static final int SET_WFD_INFO_SUCCEEDED                  = BASE + 61;
427ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber
428f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    /** @hide */
429f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    public static final int START_WPS                               = BASE + 62;
430f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    /** @hide */
431f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    public static final int START_WPS_FAILED                        = BASE + 63;
432f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    /** @hide */
433f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    public static final int START_WPS_SUCCEEDED                     = BASE + 64;
434f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff
4351f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    /** @hide */
4361f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    public static final int START_LISTEN                            = BASE + 65;
4371f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    /** @hide */
4381f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    public static final int START_LISTEN_FAILED                     = BASE + 66;
4391f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    /** @hide */
4401f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    public static final int START_LISTEN_SUCCEEDED                  = BASE + 67;
4411f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang
4421f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    /** @hide */
4431f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    public static final int STOP_LISTEN                             = BASE + 68;
4441f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    /** @hide */
4451f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    public static final int STOP_LISTEN_FAILED                      = BASE + 69;
4461f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    /** @hide */
4471f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    public static final int STOP_LISTEN_SUCCEEDED                   = BASE + 70;
4481f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang
4491f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    /** @hide */
4501f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    public static final int SET_CHANNEL                             = BASE + 71;
4511f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    /** @hide */
4521f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    public static final int SET_CHANNEL_FAILED                      = BASE + 72;
4531f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    /** @hide */
4541f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    public static final int SET_CHANNEL_SUCCEEDED                   = BASE + 73;
4551f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang
4569740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /** @hide */
4579740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public static final int GET_HANDOVER_REQUEST                    = BASE + 75;
4589740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /** @hide */
4599740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public static final int GET_HANDOVER_SELECT                     = BASE + 76;
4609740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /** @hide */
4619740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public static final int RESPONSE_GET_HANDOVER_MESSAGE           = BASE + 77;
4629740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /** @hide */
4639740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public static final int INITIATOR_REPORT_NFC_HANDOVER           = BASE + 78;
4649740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /** @hide */
4659740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public static final int RESPONDER_REPORT_NFC_HANDOVER           = BASE + 79;
4669740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /** @hide */
4679740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public static final int REPORT_NFC_HANDOVER_SUCCEEDED           = BASE + 80;
4689740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /** @hide */
4699740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public static final int REPORT_NFC_HANDOVER_FAILED              = BASE + 81;
4709740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales
4711f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang
4729cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /**
473651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Create a new WifiP2pManager instance. Applications use
474651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * {@link android.content.Context#getSystemService Context.getSystemService()} to retrieve
475651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * the standard {@link android.content.Context#WIFI_P2P_SERVICE Context.WIFI_P2P_SERVICE}.
476651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param service the Binder interface
477651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @hide - hide this because it takes in a parameter of type IWifiP2pManager, which
478651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * is a system private class.
4799cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     */
480651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public WifiP2pManager(IWifiP2pManager service) {
481651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        mService = service;
482651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    }
48355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
4849cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /**
485651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Passed with {@link ActionListener#onFailure}.
486651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Indicates that the operation failed due to an internal error.
4879cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     */
4884be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    public static final int ERROR               = 0;
4899cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff
4909cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /**
491651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Passed with {@link ActionListener#onFailure}.
492651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Indicates that the operation failed because p2p is unsupported on the device.
4939cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     */
4944be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    public static final int P2P_UNSUPPORTED     = 1;
4959cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff
4969cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    /**
497651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Passed with {@link ActionListener#onFailure}.
498651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Indicates that the operation failed because the framework is busy and
4994be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff     * unable to service the request
5009cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     */
5014be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff    public static final int BUSY                = 2;
5029cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff
50321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
50421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Passed with {@link ActionListener#onFailure}.
50521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Indicates that the {@link #discoverServices} failed because no service
506232ebad9ed1d81d5eab12e0b41cbe522e9a3c320Irfan Sheriff     * requests are added. Use {@link #addServiceRequest} to add a service
507232ebad9ed1d81d5eab12e0b41cbe522e9a3c320Irfan Sheriff     * request.
50821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
50921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public static final int NO_SERVICE_REQUESTS = 3;
51021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
511651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Interface for callback invocation when framework channel is lost */
512651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public interface ChannelListener {
513651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        /**
514651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * The channel to the framework has been disconnected.
515651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * Application could try re-initializing using {@link #initialize}
516651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         */
517651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        public void onChannelDisconnected();
518651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    }
5199cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff
520651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Interface for callback invocation on an application action */
521651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public interface ActionListener {
522651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        /** The operation succeeded */
523651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        public void onSuccess();
524651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        /**
525651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * The operation failed
526651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * @param reason The reason for failure could be one of {@link #P2P_UNSUPPORTED},
527651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * {@link #ERROR} or {@link #BUSY}
528651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         */
529651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        public void onFailure(int reason);
530651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    }
5319cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff
532651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Interface for callback invocation when peer list is available */
533651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public interface PeerListListener {
534651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        /**
535651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * The requested peer list is available
536651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * @param peers List of available peers
537651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         */
538651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        public void onPeersAvailable(WifiP2pDeviceList peers);
539651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    }
54055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
541651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Interface for callback invocation when connection info is available */
542651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public interface ConnectionInfoListener {
543651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        /**
544651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * The requested connection info is available
545651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * @param info Wi-Fi p2p connection info
546651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         */
547651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        public void onConnectionInfoAvailable(WifiP2pInfo info);
548651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    }
54955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
550651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Interface for callback invocation when group info is available */
551651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public interface GroupInfoListener {
552651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        /**
553651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * The requested p2p group info is available
554651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         * @param group Wi-Fi p2p group info
555651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff         */
556651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        public void onGroupInfoAvailable(WifiP2pGroup group);
55755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
55855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
559bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga   /**
56021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    * Interface for callback invocation when service discovery response other than
5618bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff    * Upnp or Bonjour is received
56221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    */
56321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public interface ServiceResponseListener {
56421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
56521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        /**
56621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * The requested service response is available.
56721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *
5688bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff         * @param protocolType protocol type. currently only
5698bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff         * {@link WifiP2pServiceInfo#SERVICE_TYPE_VENDOR_SPECIFIC}.
57021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param responseData service discovery response data based on the requested
57121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *  service protocol type. The format depends on the service type.
57221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param srcDevice source device.
57321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         */
5748bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        public void onServiceAvailable(int protocolType,
57521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                byte[] responseData, WifiP2pDevice srcDevice);
57621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
57721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
57821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
57921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Interface for callback invocation when Bonjour service discovery response
58021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * is received
58121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
5828bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff    public interface DnsSdServiceResponseListener {
58321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
58421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        /**
58521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * The requested Bonjour service response is available.
58621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *
58721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * <p>This function is invoked when the device with the specified Bonjour
58821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * registration type returned the instance name.
58921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param instanceName instance name.<br>
59021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *  e.g) "MyPrinter".
59121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param registrationType <br>
59221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * e.g) "_ipp._tcp.local."
59321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param srcDevice source device.
59421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         */
5958bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        public void onDnsSdServiceAvailable(String instanceName,
59621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                String registrationType, WifiP2pDevice srcDevice);
59721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
59821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff   }
59921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
60021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
60121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Interface for callback invocation when Bonjour TXT record is available
60221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * for a service
60321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
6048bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff   public interface DnsSdTxtRecordListener {
60521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        /**
60621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * The requested Bonjour service response is available.
60721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *
60821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * <p>This function is invoked when the device with the specified full
60921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * service domain service returned TXT record.
61021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *
61121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param fullDomainName full domain name. <br>
61221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * e.g) "MyPrinter._ipp._tcp.local.".
613527ba07b637cedf206fec0d3b0cf92141700a23cIrfan Sheriff         * @param txtRecordMap TXT record data as a map of key/value pairs
61421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param srcDevice source device.
61521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         */
6168bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        public void onDnsSdTxtRecordAvailable(String fullDomainName,
617527ba07b637cedf206fec0d3b0cf92141700a23cIrfan Sheriff                Map<String, String> txtRecordMap,
61821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                WifiP2pDevice srcDevice);
61921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff   }
62021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
62121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
62221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Interface for callback invocation when upnp service discovery response
62321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * is received
62421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * */
62521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public interface UpnpServiceResponseListener {
62621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
62721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        /**
62821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * The requested upnp service response is available.
62921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *
63021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * <p>This function is invoked when the specified device or service is found.
63121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         *
63221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param uniqueServiceNames The list of unique service names.<br>
63321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * e.g) uuid:6859dede-8574-59ab-9332-123456789012::urn:schemas-upnp-org:device:
63421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * MediaServer:1
63521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         * @param srcDevice source device.
63621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff         */
63721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        public void onUpnpServiceAvailable(List<String> uniqueServiceNames,
63821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                WifiP2pDevice srcDevice);
63921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
64021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
64121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
6420879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /** Interface for callback invocation when stored group info list is available {@hide}*/
6430879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    public interface PersistentGroupInfoListener {
6440879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        /**
6450879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga         * The requested stored p2p group info list is available
6460879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga         * @param groups Wi-Fi p2p group info list
6470879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga         */
6480879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        public void onPersistentGroupInfoAvailable(WifiP2pGroupList groups);
6490879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    }
6500879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga
651bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga    /**
6529740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * Interface for callback invocation when Handover Request or Select Message is available
6539740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * @hide
6549740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     */
6559740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public interface HandoverMessageListener {
6569740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        public void onHandoverMessageAvailable(String handoverMessage);
6579740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    }
6589740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales
6599740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /**
660651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * A channel that connects the application to the Wifi p2p framework.
6619cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * Most p2p operations require a Channel as an argument. An instance of Channel is obtained
6629cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * by doing a call on {@link #initialize}
663aea743aaa43a833fd8ff3dc56205197583152d5frepo sync     */
664651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public static class Channel {
665bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        Channel(Context context, Looper looper, ChannelListener l) {
666651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            mAsyncChannel = new AsyncChannel();
667651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            mHandler = new P2pHandler(looper);
668651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            mChannelListener = l;
669bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga            mContext = context;
670aea743aaa43a833fd8ff3dc56205197583152d5frepo sync        }
671b5e00bda40398b8738192abfe9b745464a54865aYoshihiko Ikenaga        private final static int INVALID_LISTENER_KEY = 0;
672651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        private ChannelListener mChannelListener;
67321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        private ServiceResponseListener mServRspListener;
6748bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        private DnsSdServiceResponseListener mDnsSdServRspListener;
6758bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        private DnsSdTxtRecordListener mDnsSdTxtListener;
67621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        private UpnpServiceResponseListener mUpnpServRspListener;
677651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        private HashMap<Integer, Object> mListenerMap = new HashMap<Integer, Object>();
678651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        private Object mListenerMapLock = new Object();
679651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        private int mListenerKey = 0;
680651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
681bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        private AsyncChannel mAsyncChannel;
682bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        private P2pHandler mHandler;
683bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        Context mContext;
684651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        class P2pHandler extends Handler {
685651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            P2pHandler(Looper looper) {
686651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                super(looper);
687651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            }
688651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
689651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            @Override
690651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            public void handleMessage(Message message) {
691651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                Object listener = getListener(message.arg2);
692651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                switch (message.what) {
693651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    case AsyncChannel.CMD_CHANNEL_DISCONNECTED:
694651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        if (mChannelListener != null) {
695651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                            mChannelListener.onChannelDisconnected();
696651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                            mChannelListener = null;
697651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        }
698651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        break;
699651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    /* ActionListeners grouped together */
700f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case DISCOVER_PEERS_FAILED:
701f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case STOP_DISCOVERY_FAILED:
702f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case DISCOVER_SERVICES_FAILED:
703f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case CONNECT_FAILED:
704f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case CANCEL_CONNECT_FAILED:
705f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case CREATE_GROUP_FAILED:
706f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case REMOVE_GROUP_FAILED:
707f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case ADD_LOCAL_SERVICE_FAILED:
708f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case REMOVE_LOCAL_SERVICE_FAILED:
709f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case CLEAR_LOCAL_SERVICES_FAILED:
710f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case ADD_SERVICE_REQUEST_FAILED:
711f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case REMOVE_SERVICE_REQUEST_FAILED:
712f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case CLEAR_SERVICE_REQUESTS_FAILED:
713f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case SET_DEVICE_NAME_FAILED:
714f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case DELETE_PERSISTENT_GROUP_FAILED:
715f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case SET_WFD_INFO_FAILED:
716f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case START_WPS_FAILED:
7171f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang                    case START_LISTEN_FAILED:
7181f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang                    case STOP_LISTEN_FAILED:
7191f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang                    case SET_CHANNEL_FAILED:
7209740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                    case REPORT_NFC_HANDOVER_FAILED:
721651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        if (listener != null) {
722651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                            ((ActionListener) listener).onFailure(message.arg1);
723651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        }
724651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        break;
725651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    /* ActionListeners grouped together */
726f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case DISCOVER_PEERS_SUCCEEDED:
727f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case STOP_DISCOVERY_SUCCEEDED:
728f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case DISCOVER_SERVICES_SUCCEEDED:
729f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case CONNECT_SUCCEEDED:
730f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case CANCEL_CONNECT_SUCCEEDED:
731f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case CREATE_GROUP_SUCCEEDED:
732f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case REMOVE_GROUP_SUCCEEDED:
733f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case ADD_LOCAL_SERVICE_SUCCEEDED:
734f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case REMOVE_LOCAL_SERVICE_SUCCEEDED:
735f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case CLEAR_LOCAL_SERVICES_SUCCEEDED:
736f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case ADD_SERVICE_REQUEST_SUCCEEDED:
737f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case REMOVE_SERVICE_REQUEST_SUCCEEDED:
738f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case CLEAR_SERVICE_REQUESTS_SUCCEEDED:
739f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case SET_DEVICE_NAME_SUCCEEDED:
740f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case DELETE_PERSISTENT_GROUP_SUCCEEDED:
741f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case SET_WFD_INFO_SUCCEEDED:
742f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case START_WPS_SUCCEEDED:
7431f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang                    case START_LISTEN_SUCCEEDED:
7441f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang                    case STOP_LISTEN_SUCCEEDED:
7451f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang                    case SET_CHANNEL_SUCCEEDED:
7469740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                    case REPORT_NFC_HANDOVER_SUCCEEDED:
747651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        if (listener != null) {
748651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                            ((ActionListener) listener).onSuccess();
749651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        }
750651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        break;
751f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case RESPONSE_PEERS:
752651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        WifiP2pDeviceList peers = (WifiP2pDeviceList) message.obj;
753651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        if (listener != null) {
754651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                            ((PeerListListener) listener).onPeersAvailable(peers);
755651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        }
756651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        break;
757f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case RESPONSE_CONNECTION_INFO:
758651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        WifiP2pInfo wifiP2pInfo = (WifiP2pInfo) message.obj;
759651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        if (listener != null) {
760651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                            ((ConnectionInfoListener) listener).onConnectionInfoAvailable(wifiP2pInfo);
761651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        }
762651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        break;
763f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case RESPONSE_GROUP_INFO:
764651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        WifiP2pGroup group = (WifiP2pGroup) message.obj;
765651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        if (listener != null) {
766651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                            ((GroupInfoListener) listener).onGroupInfoAvailable(group);
767651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        }
768651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        break;
769f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case RESPONSE_SERVICE:
77021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                        WifiP2pServiceResponse resp = (WifiP2pServiceResponse) message.obj;
77121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                        handleServiceResponse(resp);
77221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                        break;
773f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff                    case RESPONSE_PERSISTENT_GROUP_INFO:
7740879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                        WifiP2pGroupList groups = (WifiP2pGroupList) message.obj;
7750879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                        if (listener != null) {
7760879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                            ((PersistentGroupInfoListener) listener).
7770879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                                onPersistentGroupInfoAvailable(groups);
7780879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                        }
7790879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                        break;
7809740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                    case RESPONSE_GET_HANDOVER_MESSAGE:
7819740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                        Bundle handoverBundle = (Bundle) message.obj;
7829740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                        if (listener != null) {
7839740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                            String handoverMessage = handoverBundle != null
7849740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                                    ? handoverBundle.getString(EXTRA_HANDOVER_MESSAGE)
7859740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                                    : null;
7869740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                            ((HandoverMessageListener) listener)
7879740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                                    .onHandoverMessageAvailable(handoverMessage);
7889740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                        }
7899740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                        break;
7909740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                    default:
791651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        Log.d(TAG, "Ignored " + message);
792651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                        break;
793651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                }
794651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            }
795651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        }
796651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
79721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        private void handleServiceResponse(WifiP2pServiceResponse resp) {
7988bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff            if (resp instanceof WifiP2pDnsSdServiceResponse) {
7998bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff                handleDnsSdServiceResponse((WifiP2pDnsSdServiceResponse)resp);
80021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            } else if (resp instanceof WifiP2pUpnpServiceResponse) {
80121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                if (mUpnpServRspListener != null) {
80221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    handleUpnpServiceResponse((WifiP2pUpnpServiceResponse)resp);
80321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                }
80421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            } else {
80521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                if (mServRspListener != null) {
80621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    mServRspListener.onServiceAvailable(resp.getServiceType(),
80721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                            resp.getRawData(), resp.getSrcDevice());
80821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                }
80921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            }
81021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        }
81121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
81221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        private void handleUpnpServiceResponse(WifiP2pUpnpServiceResponse resp) {
81321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            mUpnpServRspListener.onUpnpServiceAvailable(resp.getUniqueServiceNames(),
81421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                    resp.getSrcDevice());
81521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        }
81621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
8178bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        private void handleDnsSdServiceResponse(WifiP2pDnsSdServiceResponse resp) {
8188bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff            if (resp.getDnsType() == WifiP2pDnsSdServiceInfo.DNS_TYPE_PTR) {
8198bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff                if (mDnsSdServRspListener != null) {
8208bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff                    mDnsSdServRspListener.onDnsSdServiceAvailable(
82121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                            resp.getInstanceName(),
82221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                            resp.getDnsQueryName(),
82321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                            resp.getSrcDevice());
82421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                }
8258bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff            } else if (resp.getDnsType() == WifiP2pDnsSdServiceInfo.DNS_TYPE_TXT) {
8268bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff                if (mDnsSdTxtListener != null) {
8278bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff                    mDnsSdTxtListener.onDnsSdTxtRecordAvailable(
82821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                            resp.getDnsQueryName(),
82921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                            resp.getTxtRecord(),
83021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                            resp.getSrcDevice());
83121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                }
83221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            } else {
83321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                Log.e(TAG, "Unhandled resp " + resp);
83421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            }
83521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        }
83621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
83721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        private int putListener(Object listener) {
838b5e00bda40398b8738192abfe9b745464a54865aYoshihiko Ikenaga            if (listener == null) return INVALID_LISTENER_KEY;
839651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            int key;
840651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            synchronized (mListenerMapLock) {
841b5e00bda40398b8738192abfe9b745464a54865aYoshihiko Ikenaga                do {
842b5e00bda40398b8738192abfe9b745464a54865aYoshihiko Ikenaga                    key = mListenerKey++;
843b5e00bda40398b8738192abfe9b745464a54865aYoshihiko Ikenaga                } while (key == INVALID_LISTENER_KEY);
844651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                mListenerMap.put(key, listener);
845651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            }
846651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            return key;
847651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        }
848651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
84921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        private Object getListener(int key) {
850b5e00bda40398b8738192abfe9b745464a54865aYoshihiko Ikenaga            if (key == INVALID_LISTENER_KEY) return null;
851651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            synchronized (mListenerMapLock) {
852651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                return mListenerMap.remove(key);
853651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            }
854651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        }
855aea743aaa43a833fd8ff3dc56205197583152d5frepo sync    }
856aea743aaa43a833fd8ff3dc56205197583152d5frepo sync
85721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    private static void checkChannel(Channel c) {
85821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        if (c == null) throw new IllegalArgumentException("Channel needs to be initialized");
85921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
86021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
86121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    private static void checkServiceInfo(WifiP2pServiceInfo info) {
86221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        if (info == null) throw new IllegalArgumentException("service info is null");
86321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
86421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
86521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    private static void checkServiceRequest(WifiP2pServiceRequest req) {
86621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        if (req == null) throw new IllegalArgumentException("service request is null");
86721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
86821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
869f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    private static void checkP2pConfig(WifiP2pConfig c) {
870f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff        if (c == null) throw new IllegalArgumentException("config cannot be null");
871f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff        if (TextUtils.isEmpty(c.deviceAddress)) {
872f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff            throw new IllegalArgumentException("deviceAddress cannot be empty");
873f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff        }
874f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    }
875f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff
876aea743aaa43a833fd8ff3dc56205197583152d5frepo sync    /**
877651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Registers the application with the Wi-Fi framework. This function
8789cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * must be the first to be called before any p2p operations are performed.
8799cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
88055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @param srcContext is the context of the source
881651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param srcLooper is the Looper on which the callbacks are receivied
882651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callback at loss of framework communication. Can be null.
8839cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * @return Channel instance that is necessary for performing any further p2p operations
88455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
885651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public Channel initialize(Context srcContext, Looper srcLooper, ChannelListener listener) {
8869740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        return initalizeChannel(srcContext, srcLooper, listener, getMessenger());
8879740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    }
8889740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales
8899740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /**
8909740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * Registers the application with the Wi-Fi framework. Enables system-only functionality.
8919740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * @hide
8929740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     */
8939740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public Channel initializeInternal(Context srcContext, Looper srcLooper,
8949740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                                      ChannelListener listener) {
8959740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        return initalizeChannel(srcContext, srcLooper, listener, getP2pStateMachineMessenger());
8969740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    }
8979740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales
8989740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    private Channel initalizeChannel(Context srcContext, Looper srcLooper, ChannelListener listener,
8999740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                                     Messenger messenger) {
900aea743aaa43a833fd8ff3dc56205197583152d5frepo sync        if (messenger == null) return null;
901aea743aaa43a833fd8ff3dc56205197583152d5frepo sync
902bfb27bbefb013220af699881d486cc04be5ec1f5Yoshihiko Ikenaga        Channel c = new Channel(srcContext, srcLooper, listener);
903651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        if (c.mAsyncChannel.connectSync(srcContext, c.mHandler, messenger)
904aea743aaa43a833fd8ff3dc56205197583152d5frepo sync                == AsyncChannel.STATUS_SUCCESSFUL) {
905aea743aaa43a833fd8ff3dc56205197583152d5frepo sync            return c;
906aea743aaa43a833fd8ff3dc56205197583152d5frepo sync        } else {
907aea743aaa43a833fd8ff3dc56205197583152d5frepo sync            return null;
908aea743aaa43a833fd8ff3dc56205197583152d5frepo sync        }
90955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
91055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
91155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
9129cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * Initiate peer discovery. A discovery process involves scanning for available Wi-Fi peers
9139cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * for the purpose of establishing a connection.
9149cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
9159cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> The function call immediately returns after sending a discovery request
916651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * to the framework. The application is notified of a success or failure to initiate
917651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * discovery through listener callbacks {@link ActionListener#onSuccess} or
918651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * {@link ActionListener#onFailure}.
9199cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
9209cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> The discovery remains active until a connection is initiated or
9219cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * a p2p group is formed. Register for {@link #WIFI_P2P_PEERS_CHANGED_ACTION} intent to
9229cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * determine when the framework notifies of a change as peers are discovered.
9239cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
9249cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> Upon receiving a {@link #WIFI_P2P_PEERS_CHANGED_ACTION} intent, an application
925651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * can request for the list of peers using {@link #requestPeers}.
926651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
927651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
928651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
92955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
930651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void discoverPeers(Channel c, ActionListener listener) {
93121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
932651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        c.mAsyncChannel.sendMessage(DISCOVER_PEERS, 0, c.putListener(listener));
93355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
93455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
9358bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff   /**
9368bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * Stop an ongoing peer discovery
9378bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     *
9388bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * <p> The function call immediately returns after sending a stop request
9398bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * to the framework. The application is notified of a success or failure to initiate
9408bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * stop through listener callbacks {@link ActionListener#onSuccess} or
9418bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * {@link ActionListener#onFailure}.
9428bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     *
9438bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * @param c is the channel created at {@link #initialize}
9448bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
9457d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff     */
9467d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    public void stopPeerDiscovery(Channel c, ActionListener listener) {
94721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
9487d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff        c.mAsyncChannel.sendMessage(STOP_DISCOVERY, 0, c.putListener(listener));
9497d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    }
9507d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff
9517d6d9c005e5cfad787bb62b7fee6be2d75b13ca3Irfan Sheriff    /**
9529cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * Start a p2p connection to a device with the specified configuration.
9539cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
9549cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> The function call immediately returns after sending a connection request
955651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * to the framework. The application is notified of a success or failure to initiate
956651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * connect through listener callbacks {@link ActionListener#onSuccess} or
957651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * {@link ActionListener#onFailure}.
95855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
9599cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> Register for {@link #WIFI_P2P_CONNECTION_CHANGED_ACTION} intent to
9609cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * determine when the framework notifies of a change in connectivity.
9619cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
9629cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> If the current device is not part of a p2p group, a connect request initiates
9639cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * a group negotiation with the peer.
9649cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
9659cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> If the current device is part of an existing p2p group or has created
9669cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * a p2p group with {@link #createGroup}, an invitation to join the group is sent to
9679cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * the peer device.
9689cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
969651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
970651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param config options as described in {@link WifiP2pConfig} class
971651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
97255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
973651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void connect(Channel c, WifiP2pConfig config, ActionListener listener) {
97421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
975f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff        checkP2pConfig(config);
976651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        c.mAsyncChannel.sendMessage(CONNECT, 0, c.putListener(listener), config);
977651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    }
978651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff
979651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /**
980651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Cancel any ongoing p2p group negotiation
981651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
982651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * <p> The function call immediately returns after sending a connection cancellation request
983651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * to the framework. The application is notified of a success or failure to initiate
984651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * cancellation through listener callbacks {@link ActionListener#onSuccess} or
985651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * {@link ActionListener#onFailure}.
986651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
987651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
988651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
989651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     */
990651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void cancelConnect(Channel c, ActionListener listener) {
99121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
992651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        c.mAsyncChannel.sendMessage(CANCEL_CONNECT, 0, c.putListener(listener));
99355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
99455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
99555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
9969cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * Create a p2p group with the current device as the group owner. This essentially creates
9979cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * an access point that can accept connections from legacy clients as well as other p2p
9989cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * devices.
999651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
1000651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * <p class="note"><strong>Note:</strong>
1001651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * This function would normally not be used unless the current device needs
10029cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * to form a p2p connection with a legacy client
10039cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
10049cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> The function call immediately returns after sending a group creation request
1005651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * to the framework. The application is notified of a success or failure to initiate
1006651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * group creation through listener callbacks {@link ActionListener#onSuccess} or
1007651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * {@link ActionListener#onFailure}.
1008651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
1009651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * <p> Application can request for the group details with {@link #requestGroupInfo}.
10109cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
1011651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
1012651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
101355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
1014651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void createGroup(Channel c, ActionListener listener) {
101521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
10160879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        c.mAsyncChannel.sendMessage(CREATE_GROUP, WifiP2pGroup.PERSISTENT_NET_ID,
10170879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                c.putListener(listener));
101855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
101955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
102055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
10219cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * Remove the current p2p group.
10229cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     *
10239cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     * <p> The function call immediately returns after sending a group removal request
1024651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * to the framework. The application is notified of a success or failure to initiate
1025651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * group removal through listener callbacks {@link ActionListener#onSuccess} or
1026651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * {@link ActionListener#onFailure}.
1027651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
1028651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
1029651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
103055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
1031651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void removeGroup(Channel c, ActionListener listener) {
103221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
1033651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        c.mAsyncChannel.sendMessage(REMOVE_GROUP, 0, c.putListener(listener));
103455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
103555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
10361f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    /** @hide */
10371f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    public void listen(Channel c, boolean enable, ActionListener listener) {
10381f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang        checkChannel(c);
10391f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang        c.mAsyncChannel.sendMessage(enable ? START_LISTEN : STOP_LISTEN,
10401f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang                0, c.putListener(listener));
10411f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    }
10421f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang
10431f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    /** @hide */
10441f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    public void setWifiP2pChannels(Channel c, int lc, int oc, ActionListener listener) {
10451f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang        checkChannel(c);
10461f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang        Bundle p2pChannels = new Bundle();
10471f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang        p2pChannels.putInt("lc", lc);
10481f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang        p2pChannels.putInt("oc", oc);
10491f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang        c.mAsyncChannel.sendMessage(SET_CHANNEL, 0, c.putListener(listener), p2pChannels);
10501f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang    }
10511f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang
105255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
1053f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff     * Start a Wi-Fi Protected Setup (WPS) session.
1054f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff     *
1055f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff     * <p> The function call immediately returns after sending a request to start a
1056f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff     * WPS session. Currently, this is only valid if the current device is running
1057f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff     * as a group owner to allow any new clients to join the group. The application
1058f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff     * is notified of a success or failure to initiate WPS through listener callbacks
1059f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff     * {@link ActionListener#onSuccess} or {@link ActionListener#onFailure}.
1060f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff     * @hide
1061f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff     */
1062f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    public void startWps(Channel c, WpsInfo wps, ActionListener listener) {
1063f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff        checkChannel(c);
1064f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff        c.mAsyncChannel.sendMessage(START_WPS, 0, c.putListener(listener), wps);
1065f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    }
1066f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff
1067f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    /**
10688bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * Register a local service for service discovery. If a local service is registered,
10698bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * the framework automatically responds to a service discovery request from a peer.
107021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
107121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The function call immediately returns after sending a request to add a local
107221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * service to the framework. The application is notified of a success or failure to
107321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * add service through listener callbacks {@link ActionListener#onSuccess} or
107421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link ActionListener#onFailure}.
107521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
10768bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * <p>The service information is set through {@link WifiP2pServiceInfo}.<br>
10778bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * or its subclass calls  {@link WifiP2pUpnpServiceInfo#newInstance} or
10788bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     *  {@link WifiP2pDnsSdServiceInfo#newInstance} for a Upnp or Bonjour service
10798bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * respectively
108021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
10818bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * <p>The service information can be cleared with calls to
108221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *  {@link #removeLocalService} or {@link #clearLocalServices}.
108321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
108421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
108521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param servInfo is a local service information.
108621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
108721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
108821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void addLocalService(Channel c, WifiP2pServiceInfo servInfo, ActionListener listener) {
108921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
109021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkServiceInfo(servInfo);
109121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mAsyncChannel.sendMessage(ADD_LOCAL_SERVICE, 0, c.putListener(listener), servInfo);
109221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
109321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
109421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
10958bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * Remove a registered local service added with {@link #addLocalService}
109621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
109721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The function call immediately returns after sending a request to remove a
109821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * local service to the framework. The application is notified of a success or failure to
109921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * add service through listener callbacks {@link ActionListener#onSuccess} or
110021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link ActionListener#onFailure}.
110121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
110221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
110321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param servInfo is the local service information.
110421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
110521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
110621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void removeLocalService(Channel c, WifiP2pServiceInfo servInfo,
110721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            ActionListener listener) {
110821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
110921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkServiceInfo(servInfo);
111021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mAsyncChannel.sendMessage(REMOVE_LOCAL_SERVICE, 0, c.putListener(listener), servInfo);
111121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
111221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
111321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
111421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Clear all registered local services of service discovery.
111521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
111621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The function call immediately returns after sending a request to clear all
111721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * local services to the framework. The application is notified of a success or failure to
111821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * add service through listener callbacks {@link ActionListener#onSuccess} or
111921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link ActionListener#onFailure}.
112021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
112121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
112221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
112321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
112421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void clearLocalServices(Channel c, ActionListener listener) {
112521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
112621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mAsyncChannel.sendMessage(CLEAR_LOCAL_SERVICES, 0, c.putListener(listener));
112721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
112821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
112921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
113021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Register a callback to be invoked on receiving service discovery response.
11318bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * Used only for vendor specific protocol right now. For Bonjour or Upnp, use
11328bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * {@link #setDnsSdResponseListeners} or {@link #setUpnpServiceResponseListener}
11338bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * respectively.
113421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
113521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> see {@link #discoverServices} for the detail.
113621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
113721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
113821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on receiving service discovery response.
113921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
114021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void setServiceResponseListener(Channel c,
114121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            ServiceResponseListener listener) {
114221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
114321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mServRspListener = listener;
114421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
114521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
114621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
114721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Register a callback to be invoked on receiving Bonjour service discovery
114821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * response.
114921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
115021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> see {@link #discoverServices} for the detail.
115121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
115221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c
11538bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * @param servListener is for listening to a Bonjour service response
11548bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * @param txtListener is for listening to a Bonjour TXT record response
115521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
11568bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff    public void setDnsSdResponseListeners(Channel c,
11578bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff            DnsSdServiceResponseListener servListener, DnsSdTxtRecordListener txtListener) {
115821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
11598bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        c.mDnsSdServRspListener = servListener;
11608bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff        c.mDnsSdTxtListener = txtListener;
116121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
116221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
116321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
116421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Register a callback to be invoked on receiving upnp service discovery
116521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * response.
116621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
116721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> see {@link #discoverServices} for the detail.
116821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
116921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
117021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on receiving service discovery response.
117121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
117221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void setUpnpServiceResponseListener(Channel c,
117321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            UpnpServiceResponseListener listener) {
117421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
117521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mUpnpServRspListener = listener;
117621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
117721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
117821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
117921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Initiate service discovery. A discovery process involves scanning for
118021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * requested services for the purpose of establishing a connection to a peer
118121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * that supports an available service.
118221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
118321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The function call immediately returns after sending a request to start service
118421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * discovery to the framework. The application is notified of a success or failure to initiate
118521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * discovery through listener callbacks {@link ActionListener#onSuccess} or
118621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link ActionListener#onFailure}.
118721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
118821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The services to be discovered are specified with calls to {@link #addServiceRequest}.
118921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
119021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p>The application is notified of the response against the service discovery request
119121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * through listener callbacks registered by {@link #setServiceResponseListener} or
11928bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * {@link #setDnsSdResponseListeners}, or {@link #setUpnpServiceResponseListener}.
119321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
119421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
119521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
119621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
119721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void discoverServices(Channel c, ActionListener listener) {
119821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
119921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mAsyncChannel.sendMessage(DISCOVER_SERVICES, 0, c.putListener(listener));
120021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
120121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
120221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
120321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Add a service discovery request.
120421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
120521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The function call immediately returns after sending a request to add service
120621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * discovery request to the framework. The application is notified of a success or failure to
120721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * add service through listener callbacks {@link ActionListener#onSuccess} or
120821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link ActionListener#onFailure}.
120921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
121021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p>After service discovery request is added, you can initiate service discovery by
121121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link #discoverServices}.
121221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
12138bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * <p>The added service requests can be cleared with calls to
121421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link #removeServiceRequest(Channel, WifiP2pServiceRequest, ActionListener)} or
12158bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * {@link #clearServiceRequests(Channel, ActionListener)}.
121621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
121721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
121821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param req is the service discovery request.
121921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
122021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
122121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void addServiceRequest(Channel c,
122221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            WifiP2pServiceRequest req, ActionListener listener) {
122321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
122421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkServiceRequest(req);
122521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mAsyncChannel.sendMessage(ADD_SERVICE_REQUEST, 0,
122621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                c.putListener(listener), req);
122721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
122821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
122921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
12308bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff     * Remove a specified service discovery request added with {@link #addServiceRequest}
123121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
123221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The function call immediately returns after sending a request to remove service
123321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * discovery request to the framework. The application is notified of a success or failure to
123421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * add service through listener callbacks {@link ActionListener#onSuccess} or
123521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link ActionListener#onFailure}.
123621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
123721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
123821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param req is the service discovery request.
123921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
124021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
124121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void removeServiceRequest(Channel c, WifiP2pServiceRequest req,
124221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff            ActionListener listener) {
124321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
124421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkServiceRequest(req);
124521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mAsyncChannel.sendMessage(REMOVE_SERVICE_REQUEST, 0,
124621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                c.putListener(listener), req);
124721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
124821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
124921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
125021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * Clear all registered service discovery requests.
125121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
125221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * <p> The function call immediately returns after sending a request to clear all
125321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * service discovery requests to the framework. The application is notified of a success
125421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * or failure to add service through listener callbacks {@link ActionListener#onSuccess} or
125521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * {@link ActionListener#onFailure}.
125621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     *
125721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param c is the channel created at {@link #initialize}
125821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     * @param listener for callbacks on success or failure. Can be null.
125921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff     */
126021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    public void clearServiceRequests(Channel c, ActionListener listener) {
126121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
126221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        c.mAsyncChannel.sendMessage(CLEAR_SERVICE_REQUESTS,
126321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff                0, c.putListener(listener));
126421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    }
126521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff
126621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff    /**
1267651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Request the current list of peers.
1268651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
1269651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
1270651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callback when peer list is available. Can be null.
127155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
1272651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void requestPeers(Channel c, PeerListListener listener) {
127321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
1274651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        c.mAsyncChannel.sendMessage(REQUEST_PEERS, 0, c.putListener(listener));
127555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
127655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
127755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
1278651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Request device connection info.
1279651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
1280651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
1281651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callback when connection info is available. Can be null.
128255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
1283651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void requestConnectionInfo(Channel c, ConnectionInfoListener listener) {
128421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
1285651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        c.mAsyncChannel.sendMessage(REQUEST_CONNECTION_INFO, 0, c.putListener(listener));
1286ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff    }
1287ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff
1288ea5b16ac5751022de73e8f1225407eb01e7f1824Irfan Sheriff    /**
1289651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Request p2p group info.
1290651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     *
1291651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param c is the channel created at {@link #initialize}
1292651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * @param listener for callback when group info is available. Can be null.
12939cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff     */
1294651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    public void requestGroupInfo(Channel c, GroupInfoListener listener) {
129521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff        checkChannel(c);
1296651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        c.mAsyncChannel.sendMessage(REQUEST_GROUP_INFO, 0, c.putListener(listener));
12979cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff    }
129855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
129955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
13002bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff     * Set p2p device name.
13012bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff     * @hide
13022bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff     * @param c is the channel created at {@link #initialize}
13032bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff     * @param listener for callback when group info is available. Can be null.
13042bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff     */
13052bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    public void setDeviceName(Channel c, String devName, ActionListener listener) {
13062bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff        checkChannel(c);
13072bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff        WifiP2pDevice d = new WifiP2pDevice();
13082bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff        d.deviceName = devName;
13092bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff        c.mAsyncChannel.sendMessage(SET_DEVICE_NAME, 0, c.putListener(listener), d);
13102bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    }
13112bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff
1312ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    /** @hide */
1313ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    public void setWFDInfo(
1314ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber            Channel c, WifiP2pWfdInfo wfdInfo,
1315ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber            ActionListener listener) {
1316ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber        checkChannel(c);
1317ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber        c.mAsyncChannel.sendMessage(SET_WFD_INFO, 0, c.putListener(listener), wfdInfo);
1318ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber    }
13192bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff
13202bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff
13212bdefcab74d4ee21ad4bc1e90b30aeb7eac589e0Irfan Sheriff    /**
13220879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * Delete a stored persistent group from the system settings.
13230879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     *
13240879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * <p> The function call immediately returns after sending a persistent group removal request
13250879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * to the framework. The application is notified of a success or failure to initiate
13260879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * group removal through listener callbacks {@link ActionListener#onSuccess} or
13270879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * {@link ActionListener#onFailure}.
13280879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     *
13290879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * <p>The persistent p2p group list stored in the system can be obtained by
13300879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * {@link #requestPersistentGroupInfo(Channel, PersistentGroupInfoListener)} and
13310879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     *  a network id can be obtained by {@link WifiP2pGroup#getNetworkId()}.
13320879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     *
13330879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @param c is the channel created at {@link #initialize}
13340879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @param netId he network id of the p2p group.
13350879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @param listener for callbacks on success or failure. Can be null.
13360879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @hide
13370879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     */
13380879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    public void deletePersistentGroup(Channel c, int netId, ActionListener listener) {
13390879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        checkChannel(c);
13400879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        c.mAsyncChannel.sendMessage(DELETE_PERSISTENT_GROUP, netId, c.putListener(listener));
13410879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    }
13420879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga
13430879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /**
13440879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * Request a list of all the persistent p2p groups stored in system.
13450879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     *
13460879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @param c is the channel created at {@link #initialize}
13470879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @param listener for callback when persistent group info list is available. Can be null.
13480879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     * @hide
13490879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga     */
13500879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    public void requestPersistentGroupInfo(Channel c, PersistentGroupInfoListener listener) {
13510879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        checkChannel(c);
13520879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        c.mAsyncChannel.sendMessage(REQUEST_PERSISTENT_GROUP_INFO, 0, c.putListener(listener));
13530879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    }
13540879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga
13558b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff    /** @hide */
13568b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff    public static final int MIRACAST_DISABLED = 0;
13578b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff    /** @hide */
13588b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff    public static final int MIRACAST_SOURCE   = 1;
13598b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff    /** @hide */
13608b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff    public static final int MIRACAST_SINK     = 2;
13618b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff    /** Internal use only @hide */
13628b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff    public void setMiracastMode(int mode) {
13638b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff        try {
13648b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff            mService.setMiracastMode(mode);
13658b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff        } catch(RemoteException e) {
13668b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff           // ignore
13678b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff        }
13688b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff    }
13698b485adffd7eaa7b7cab4c444b3d65097ef40a14Irfan Sheriff
13700879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga    /**
137155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * Get a reference to WifiP2pService handler. This is used to establish
137255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * an AsyncChannel communication with WifiService
137355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
137455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @return Messenger pointing to the WifiP2pService handler
137555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @hide
137655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
137755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public Messenger getMessenger() {
137855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        try {
137955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            return mService.getMessenger();
138055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        } catch (RemoteException e) {
138155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            return null;
138255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        }
138355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
1384aea743aaa43a833fd8ff3dc56205197583152d5frepo sync
13859740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /**
13869740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * Get a reference to P2pStateMachine handler. This is used to establish
13879740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * a priveleged AsyncChannel communication with WifiP2pService.
13889740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     *
13899740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * @return Messenger pointing to the WifiP2pService handler
13909740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * @hide
13919740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     */
13929740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public Messenger getP2pStateMachineMessenger() {
13939740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        try {
13949740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales            return mService.getP2pStateMachineMessenger();
13959740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        } catch (RemoteException e) {
13969740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales            return null;
13979740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        }
13989740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    }
13999740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales
14009740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /**
14019740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * Get a handover request message for use in WFA NFC Handover transfer.
14029740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * @hide
14039740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     */
14049740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public void getNfcHandoverRequest(Channel c, HandoverMessageListener listener) {
14059740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        checkChannel(c);
14069740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        c.mAsyncChannel.sendMessage(GET_HANDOVER_REQUEST, 0, c.putListener(listener));
14079740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    }
14089740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales
14099740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales
14109740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /**
14119740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * Get a handover select message for use in WFA NFC Handover transfer.
14129740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * @hide
14139740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     */
14149740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public void getNfcHandoverSelect(Channel c, HandoverMessageListener listener) {
14159740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        checkChannel(c);
14169740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        c.mAsyncChannel.sendMessage(GET_HANDOVER_SELECT, 0, c.putListener(listener));
14179740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    }
14189740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales
14199740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /**
14209740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * @hide
14219740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     */
14229740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public void initiatorReportNfcHandover(Channel c, String handoverSelect,
14239740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                                              ActionListener listener) {
14249740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        checkChannel(c);
14259740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        Bundle bundle = new Bundle();
14269740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        bundle.putString(EXTRA_HANDOVER_MESSAGE, handoverSelect);
14279740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        c.mAsyncChannel.sendMessage(INITIATOR_REPORT_NFC_HANDOVER, 0,
14289740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                c.putListener(listener), bundle);
14299740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    }
14309740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales
14319740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales
14329740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    /**
14339740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     * @hide
14349740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales     */
14359740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    public void responderReportNfcHandover(Channel c, String handoverRequest,
14369740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                                              ActionListener listener) {
14379740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        checkChannel(c);
14389740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        Bundle bundle = new Bundle();
14399740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        bundle.putString(EXTRA_HANDOVER_MESSAGE, handoverRequest);
14409740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales        c.mAsyncChannel.sendMessage(RESPONDER_REPORT_NFC_HANDOVER, 0,
14419740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales                c.putListener(listener), bundle);
14429740e468bc895cbc08c71aecc35fc56c3faafa06Andres Morales    }
144355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync}
1444