package Ġcom . Tech f reak s . Services Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . text . B oring Layout Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġcom . google . android . gms . near by . Near by Ċ import Ġcom . google . android . gms . near by . connection .* Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ Ċ const Ġval ĠTAG Ġ= Ġ" Bluetooth Helper " Ċ Ċ fun Ġstart Discovery ( context : ĠContext ){ ĊĠĠĠ Ġval Ġdiscovery Options Ġ= ĠDiscovery Options . Builder (). set Strategy ( Strategy . P 2 P _ CLUSTER ). build () ĊĠĠĠ Ġval Ġdiscovery Callback Ġ= Ġobject Ġ: ĠEndpoint Discovery Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Endpoint Found ( endpoint Id : ĠString , Ġinfo : ĠDis covered Endpoint Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," Endpoint Ġfound Ġ: Ġ" Ġ+ Ġinfo . endpoint Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġinfo . endpoint Name . split (" --- ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" userID Ġ= Ġ${ data [ 0 ]} Ġ:: Ġco - ord inates Ġ= Ġ${ data [ 1 ]}, ${ data [ 2 ] }", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , m EventListener :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" chain S OS ", true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" chain ", info . endpoint Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . start Service ( intent ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Endpoint Lost ( p 0 : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ ĠN ear by . get Connections Client ( context ). start Discovery ( context . packageName , Ġdiscovery Callback , Ġdiscovery Options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" starting Ġdiscovery ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" exception : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġstop Discovery ( context : ĠContext ){ ĊĠĠĠ ĠN ear by . get Connections Client ( context ). stop Discovery () Ċ } Ċ Ċ fun Ġstart Ad vertising ( context : ĠContext , Ġlatitude Ġ: ĠString , Ġlongitude : ĠString , owner : Boolean , priv S OS : String ?): ĠUnit Ġ{ ĊĠĠĠ Ġval Ġadvertising Options Ġ= ĠAd vertising Options . Builder (). set Strategy ( Strategy . P 2 P _ CLUSTER ). build () ĊĠĠĠ Ġval ĠcurrentUser Ġ= ĠFirebase Auth . getInstance (). currentUser ?. uid ĊĠĠĠ Ġlateinit Ġvar Ġendpoint Name Ġ: ĠString ĊĠĠĠ Ġif ( owner ) ĊĠĠĠĠĠĠĠ Ġendpoint Name Ġ= Ġ"$ currentUser --- $ latitude --- $ longitude " ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( priv S OS ?. split (" --- ") ?. size !! Ġ< 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġendpoint Name Ġ= Ġ"$ priv S OS --- $ currentUser " ĊĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Ad vertising ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Discovery ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġadvertising Callback Ġ= Ġobject Ġ: ĠConnection Lifecycle Callback (){ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Connection Result ( p 0 : ĠString , Ġp 1 : ĠConnection Resolution ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Disconnected ( p 0 : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Connection Initi ated ( p 0 : ĠString , Ġp 1 : ĠConnection Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ ĠN ear by . get Connections Client ( context ). start Ad vertising ( endpoint Name , Ġcontext . packageName , Ġadvertising Callback , Ġadvertising Options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" started Ġadvertising Ġwith ĠID Ġ$ endpoint Name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" unable Ġto Ġstart Ġadvertising ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġstop Ad vertising ( context : ĠContext ){ ĊĠĠĠ ĠN ear by . get Connections Client ( context ). stop Ad vertising () Ċ } Ċ Ċ fun Ġrestart Discovery ( context : ĠContext ){ ĊĠĠĠ Ġstop Discovery ( context ) ĊĠĠĠ Ġstart Discovery ( context ) Ċ } Ċ fun Ġrestart Ad vertising ( context Ġ: ĠContext , latitude : String , longitude : String , owner : Boolean , priv S OS : String ){ ĊĠĠĠ Ġstop Ad vertising ( context ) ĊĠĠĠ Ġstart Ad vertising ( context , latitude , longitude , owner , null ) Ċ }