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