package Ġcom . sh ers oft . android _ ip . util Ċ Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . net . wifi . W ps Info Ċ import Ġandroid . net . wifi . p 2 p . Wifi P 2 p Config Ċ import Ġandroid . net . wifi . p 2 p . Wifi P 2 p Device Ċ import Ġandroid . net . wifi . p 2 p . Wifi P 2 p Group Ċ import Ġandroid . net . wifi . p 2 p . Wifi P 2 p Manager Ċ import Ġandroid . os . Looper Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġcom . sh ers oft . android _ ip . Pi geon ĊĊ Ċ class ĠW 2 peer ( contexts : ĠContext ) Ġ: ĠConnected Device ( contexts ) Ġ{ ĊĠĠĠ Ġinterface ĠI hot spot Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Enable Hot spot ( ho spot : ĠPi geon . Hot spot ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġintent Filter Ġ= ĠIntent Filter () ĊĠĠĠ Ġopen Ġlateinit Ġvar Ġm Manager : ĠW ifi P 2 p Manager ĊĠĠĠ Ġlateinit Ġvar Ġchannel : ĠW ifi P 2 p Manager . Channel ĊĊĠĠĠ Ġinit Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġ// ĠIndicates Ġa Ġchange Ġin Ġthe ĠWi - Fi ĠP 2 P Ġstatus . ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( Wifi P 2 p Manager . WIFI _ P 2 P _ STATE _ CHANGED _ ACTION ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIndicates Ġa Ġchange Ġin Ġthe Ġlist Ġof Ġavailable Ġpeers . ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( Wifi P 2 p Manager . WIFI _ P 2 P _ PE ERS _ CHANGED _ ACTION ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIndicates Ġthe Ġstate Ġof ĠWi - Fi ĠP 2 P Ġconnectivity Ġhas Ġchanged . ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( Wifi P 2 p Manager . WIFI _ P 2 P _ CONNECTION _ CHANGED _ ACTION ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIndicates Ġthis Ġdevice 's Ġdetails Ġhave Ġchanged . ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( Wifi P 2 p Manager . WIFI _ P 2 P _ THIS _ DEVICE _ CHANGED _ ACTION ) ĊĊĠĠĠĠĠĠĠ Ġm Manager Ġ= Ġcontexts . getSystem Service ( Context . WIFI _ P 2 P _ SERVICE ) Ġas ĠW ifi P 2 p Manager ĊĠĠĠĠĠĠĠ Ġchannel Ġ= Ġm Manager . initialize ( contexts , ĠL ooper . get Main Looper (), Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġw 2 p Broad Cast Ġ= ĠW 2 p Broad Cast () ĊĠĠĠĠĠĠĠ Ġcontexts . register Receiver ( w 2 p Broad Cast , Ġintent Filter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġpeers Ġ= Ġmutable ListOf < Wifi P 2 p Device >() ĊĠĠĠ Ġlateinit Ġvar Ġdevice : ĠW ifi P 2 p Device ĊĠĠĠ Ġval Ġconfig Ġ= ĠW ifi P 2 p Config () ĊĠĠĠ Ġval Ġpeer List Listener Ġ= ĠW ifi P 2 p Manager . Peer List Listener Ġ{ Ġpeer List Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġref reshed Peers Ġ= Ġpeer List . device List ĊĠĠĠĠĠĠĠ Ġprint ( peer List ) ĊĠĠĠĠĠĠĠ Ġif Ġ( ref reshed Peers Ġ!= Ġpeers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ref reshed Peers . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Ġ= Ġpeer List . device List . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . device Address Ġ= Ġdevice . device Address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel ?. also Ġ{ Ġchannel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Manager ?. connect ( channel , Ġconfig , Ġobject Ġ: ĠW ifi P 2 p Manager . ActionListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// success Ġlogic ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" connected ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( reason : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" fail " Ġ+ reason ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpeers . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpeers . addAll ( ref reshed Peers ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġan ĠAdapter View Ġis Ġbacked Ġby Ġthis Ġdata , Ġnotify Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġof Ġthe Ġchange . ĠFor Ġinstance , Ġif Ġyou Ġhave Ġa ĠListView Ġof ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġavailable Ġpeers , Ġtrigger Ġan Ġupdate . ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPerform Ġany Ġother Ġupdates Ġneeded Ġbased Ġon Ġthe Ġnew Ġlist Ġof ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpeers Ġconnected Ġto Ġthe ĠWi - Fi ĠP 2 P Ġnetwork . ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( peers . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" TAG ", Ġ" No Ġdevices Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Peer List Listener ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdiscover Peers () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Manager . discover Peers ( channel , Ġobject Ġ: ĠW ifi P 2 p Manager . ActionListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" ============ p 2 p > success ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCode Ġfor Ġwhen Ġthe Ġdiscovery Ġinit iation Ġis Ġsuccessful Ġgoes Ġhere . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġservices Ġhave Ġactually Ġbeen Ġdiscovered Ġyet , Ġso Ġthis Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcan Ġoften Ġbe Ġleft Ġblank . ĠCode Ġfor Ġpeer Ġdiscovery Ġgoes Ġin Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġon Receive Ġmethod , Ġdetailed Ġbelow . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( reason Code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCode Ġfor Ġwhen Ġthe Ġdiscovery Ġinit iation Ġfails Ġgoes Ġhere . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAlert Ġthe Ġuser Ġthat Ġsomething Ġwent Ġwrong . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠPick ing Ġthe Ġfirst Ġdevice Ġfound Ġon Ġthe Ġnetwork . ĊĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= Ġpeers [ 0 ] ĊĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠW ifi P 2 p Config (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Address Ġ= Ġdevice . device Address ĊĠĠĠĠĠĠĠĠĠĠĠ Ġw ps . setup Ġ= ĠW ps Info . P BC ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Manager . connect ( channel , Ġconfig , Ġobject Ġ: ĠW ifi P 2 p Manager . ActionListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWiFi Direct Broadcast Receiver Ġnot ifies Ġus . ĠIgnore Ġfor Ġnow . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( reason : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontexts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Connect Ġfailed . ĠRetry .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠW 2 p Broad Cast Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( intent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW ifi P 2 p Manager . WIFI _ P 2 P _ STATE _ CHANGED _ ACTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDetermine Ġif ĠW ifi ĠP 2 P Ġmode Ġis Ġenabled Ġor Ġnot , Ġalert ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe ĠActivity . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġintent . getInt Extra ( Wifi P 2 p Manager . EXTRA _ WIFI _ STATE , Ġ- 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW ifi P 2 p Manager . WIFI _ P 2 P _ STATE _ ENABLED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠW ifi ĠP 2 P Ġis Ġenabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( state Ġ== ĠW ifi P 2 p Manager . WIFI _ P 2 P _ STATE _ ENABLED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW ifi P 2 p Manager . WIFI _ P 2 P _ PE ERS _ CHANGED _ ACTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Manager ?. request Peers ( channel , Ġpeer List Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Manager . request Group Info ( channel , ĠDevice List Listener ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" TAG ", Ġ" P 2 P Ġpeers Ġchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġpeer Ġlist Ġhas Ġchanged ! ĠWe Ġshould Ġprobably Ġdo Ġsomething Ġabout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthat . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( Wifi P 2 p Manager . WIFI _ P 2 P _ PE ERS _ CHANGED _ ACTION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW ifi P 2 p Manager . WIFI _ P 2 P _ CONNECTION _ CHANGED _ ACTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( Wifi P 2 p Manager . WIFI _ P 2 P _ CONNECTION _ CHANGED _ ACTION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConnection Ġstate Ġchanged ! ĠWe Ġshould Ġprobably Ġdo Ġsomething Ġabout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthat . ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW ifi P 2 p Manager . WIFI _ P 2 P _ THIS _ DEVICE _ CHANGED _ ACTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( Wifi P 2 p Manager . WIFI _ P 2 P _ THIS _ DEVICE _ CHANGED _ ACTION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . get Parcelable Extra < Wifi P 2 p Device >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW ifi P 2 p Manager . EXTRA _ WIFI _ P 2 P _ DEVICE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠDevice List Listener Ġ: ĊĠĠĠĠĠĠĠ ĠW ifi P 2 p Manager . Group Info Listener Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Group Info Available ( group : ĠW ifi P 2 p Group ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( group ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ