WifiP2pManager.java revision c53962d4ede82a03b62f0c8bb86bd0da090a15eb
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); 1365c53962d4ede82a03b62f0c8bb86bd0da090a15ebJeff Sharkey } catch (RemoteException e) { 1366c53962d4ede82a03b62f0c8bb86bd0da090a15ebJeff Sharkey throw e.rethrowFromSystemServer(); 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) { 1381c53962d4ede82a03b62f0c8bb86bd0da090a15ebJeff Sharkey throw e.rethrowFromSystemServer(); 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) { 1396c53962d4ede82a03b62f0c8bb86bd0da090a15ebJeff Sharkey throw e.rethrowFromSystemServer(); 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