package Ġcom . sch lo esser . shared . w if id irect Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ 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 Manager Ċ import Ġandroid . net . wifi . p 2 p . ns d . Wifi P 2 p Dns Sd Service Info Ċ import Ġandroid . net . wifi . p 2 p . ns d . Wifi P 2 p Dns Sd Service Request Ċ import Ġandroid . util . Log Ċ Ċ class ĠConnection Handler Ġprivate Ġconstructor ( private Ġval Ġcontext : ĠContext ) Ġ: ĠBroadcast Receiver () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Connection Handler " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSERVICE _ NAME Ġ= Ġ" emotion detection " ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Static Field Leak ") ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠConnection Handler ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ@ Synchron ized ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( context : ĠContext ): ĠConnection Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instance Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= ĠConnection Handler ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġclient Callback : ĠClient Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġintent Filter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Filter Ġ= ĠIntent Filter () ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( Wifi P 2 p Manager . WIFI _ P 2 P _ STATE _ CHANGED _ ACTION ) ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( Wifi P 2 p Manager . WIFI _ P 2 P _ PE ERS _ CHANGED _ ACTION ) ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( Wifi P 2 p Manager . WIFI _ P 2 P _ CONNECTION _ CHANGED _ ACTION ) ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( Wifi P 2 p Manager . WIFI _ P 2 P _ THIS _ DEVICE _ CHANGED _ ACTION ) ĊĠĠĠĠĠĠĠ Ġintent Filter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmanager : ĠW ifi P 2 p Manager Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . getSystem Service ( Context . WIFI _ P 2 P _ SERVICE ) Ġas ĠW ifi P 2 p Manager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġchannel : ĠW ifi P 2 p Manager . Channel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġmanager . initialize ( context , Ġcontext . main Looper , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconnect To Peer ( address : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠW ifi P 2 p Config (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Address Ġ= Ġaddress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġw ps . setup Ġ= ĠW ps Info . P BC ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" manager . connect () ") ĊĠĠĠĠĠĠĠ Ġmanager . connect ( channel , Ġconfig , Ġaction Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Service () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrecord : ĠMap < String , ĠString > Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" listen port " Ġto Ġ" 4 0 0 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" servic ename " Ġto ĠSERVICE _ NAME ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġservice Info Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠW ifi P 2 p Dns Sd Service Info . newInstance ("_ $ SERVICE _ NAME ", Ġ"_ http ._ tcp ", Ġrecord ) ĊĊĠĠĠĠĠĠĠ Ġmanager . clear Local Services ( channel , Ġobject Ġ: ĠW ifi P 2 p Manager . ActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . add Local Service ( channel , Ġservice Info , Ġaction Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . discover Peers ( channel , Ġaction Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( reason : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Error : Ġ$ reason ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġservices Ġ= Ġmutable Map Of < String , ĠString >() ĊĠĠĠ Ġprivate Ġval Ġdevices Ġ= Ġmutable ListOf < Wifi P 2 p Device >() ĊĊĠĠĠ Ġfun Ġdiscover Services () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtxt Listener Ġ= ĠW ifi P 2 p Manager . Dns Sd Txt Record Listener Ġ{ Ġ_, Ġrecord , Ġdevice Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Dns Sd Txt Record Ġavailable Ġ- $ record ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Device Ġavailable Ġ- $ device ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord [" servic ename "] ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservices [ device . device Address ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġservice Listener Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠW ifi P 2 p Manager . Dns Sd Service Response Listener Ġ{ Ġinstance Name , Ġ_, Ġdevice Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Dns Sd Service Available Ġ$ instance Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Dns Sd Service Available Ġ$ device ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġdevice Ġname Ġwith Ġthe Ġhuman - friendly Ġversion Ġfrom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe ĠD ns Txt Record , Ġassuming Ġone Ġar rived . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . device Name Ġ= Ġservices [ device . device Address ] Ġ?: Ġdevice . device Name ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevices . add ( device ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Callback ?. on Available Services Changed ( devices ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmanager . set Dns Sd Response Listeners ( channel , Ġservice Listener , Ġtxt Listener ) ĊĊĠĠĠĠĠĠĠ Ġmanager . clear Service Requests ( channel , Ġobject Ġ: ĠW ifi P 2 p Manager . ActionListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . add Service Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW ifi P 2 p Dns Sd Service Request . newInstance (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . discover Services ( channel , Ġaction Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . discover Peers ( channel , Ġaction Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( reason : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Error : Ġ$ reason ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . register Receiver ( this , Ġintent Filter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . unregister Receiver ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( intent . action ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠW ifi P 2 p Manager . WIFI _ P 2 P _ STATE _ CHANGED _ ACTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Wifi P 2 p Manager . WIFI _ P 2 P _ STATE _ CHANGED _ ACTION ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠW ifi P 2 p Manager . WIFI _ P 2 P _ PE ERS _ CHANGED _ ACTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" 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 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Wifi P 2 p Manager . WIFI _ P 2 P _ CONNECTION _ CHANGED _ ACTION ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠW ifi P 2 p Manager . WIFI _ P 2 P _ THIS _ DEVICE _ CHANGED _ ACTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Wifi P 2 p Manager . WIFI _ P 2 P _ THIS _ DEVICE _ CHANGED _ ACTION ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġaction Listener Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠW ifi P 2 p Manager . ActionListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( reason : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( reason ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW ifi P 2 p Manager . P 2 P _ UNSUPPORTED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" P 2 P Ġisn 't Ġsupported Ġon Ġthis Ġdevice .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠLog . d ( TAG , Ġ" Error : Ġ$ reason ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠClient Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Available Services Changed ( services : ĠList < Wifi P 2 p Device >) ĊĠĠĠ Ġ} Ċ }