package Ġnet . dub lin . bus . ui . utilities Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Sender Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . location . Location Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . util . Log Ċ Ċ import Ġcom . google . android . gms . common . Connection Result Ċ import Ġcom . google . android . gms . common . api . Google ApiClient Ċ import Ġcom . google . android . gms . location . Location Listener Ċ import Ġcom . google . android . gms . location . Location Request Ċ import Ġcom . google . android . gms . location . Location Services Ċ Ċ class ĠLocation Request Wrapper ( private Ġval Ġactivity : ĠActivity , Ġprivate Ġval Ġon New Location Listener : ĠOn New Location Listener ?) Ġ: ĠLocation Listener , ĠGoogle ApiClient . Connection Callbacks , ĠGoogle ApiClient . On Connection Failed Listener Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġgoogle ApiClient : ĠGoogle ApiClient ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlocation Request : ĠLocation Request ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Google ApiClient ( activity ) ĊĠĠĠĠĠĠĠ Ġsetup Location Request () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġgoogle ApiClient !!. connect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( google ApiClient !!. isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocation Services . F used Location Api . remove Location Updates ( google ApiClient , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle ApiClient !!. disconnect () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . check Self Permission ( activity , ĠManifest . permission . ACCESS _ F INE _ LOCATION ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED Ġ&& ĠActivity Compat . check Self Permission ( activity , ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠLocation Services . F used Location Api . getLast Location ( google ApiClient ) ĊĠĠĠĠĠĠĠ Ġif Ġ( location Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocation Services . F used Location Api . request Location Updates ( google ApiClient , Ġlocation Request , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Google ApiClient ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgoogle ApiClient Ġ= ĠGoogle ApiClient . Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Connection Callbacks ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Connection Failed Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Api ( Location Services . API ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Location Request () Ġ{ ĊĠĠĠĠĠĠĠ Ġlocation Request Ġ= ĠLocation Request . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Priority ( Location Request . PRIORITY _ HIGH _ AC CUR ACY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interval ( LOCATION _ REQUEST _ INTERVAL . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Fast est Interval ( LOCATION _ REQUEST _ FAST EST _ INTERVAL . to Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Connected ( bundle : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . check Self Permission ( activity , ĠManifest . permission . ACCESS _ F INE _ LOCATION ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED Ġ&& ĠActivity Compat . check Self Permission ( activity , ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠLocation Services . F used Location Api . getLast Location ( google ApiClient ) ĊĠĠĠĠĠĠĠ Ġif Ġ( location Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocation Services . F used Location Api . request Location Updates ( google ApiClient , Ġlocation Request , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon New Location Listener ?. on New Location ( location ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Connection Sus pended ( i : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Location Ġservice ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Connection Failed ( connection Result : ĠConnection Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( connection Result . has Resolution ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġan ĠActivity Ġthat Ġtries Ġto Ġresolve Ġthe Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Result . start Resolution For Result ( activity , ĠCONNECTION _ FAILURE _ RESOL UTION _ REQUEST ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIntent Sender . Send Intent Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Location Ġservices Ġconnection Ġfailed Ġwith Ġcode Ġ" Ġ+ Ġconnection Result . errorCode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Location Changed ( location : ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// if Ġ( on New Location Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// on New Location Listener . on New Location ( location ); ĊĠĠĠĠĠĠĠ Ġ//} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn New Location Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon New Location ( location : ĠLocation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠLocation Request Wrapper :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCONNECTION _ FAILURE _ RESOL UTION _ REQUEST Ġ= Ġ 9 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLOC ATION _ REQUEST _ INTERVAL Ġ= Ġ 1 0 0 0 0 Ġ// Ġ 1 0 Ġseconds , Ġin Ġmilliseconds ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLOC ATION _ REQUEST _ FAST EST _ INTERVAL Ġ= Ġ 1 0 0 0 Ġ// Ġ 1 Ġsecond , Ġin Ġmilliseconds ĊĠĠĠ Ġ} Ċ Ċ }