package Ġlocation Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . location . Location Ċ import Ġandroid . location . Location Manager Ċ import Ġandroid . os . Bundle Ċ 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 Ċ import Ġui . permission . Permission Group Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ċ Ġ* ĠS idd har th Ġon Ġ 0 6 / 0 7 / 1 7 . Ċ Ġ*/ Ċ Ċ object ĠU Location Provider Ġ{ ĊĊĠ Ġprivate Ġval ĠLOC ATION _ ST ALE _ TIME Ġ= Ġ 6 Ġ* Ġ 6 0 Ġ* Ġ 6 0 Ġ* Ġ 1 0 0 0 L ĊĠ Ġprivate Ġvar Ġin Progress Ġ= Ġfalse ĊĠ Ġprivate Ġvar Ġlast Location : ĠLocation ? Ġ= Ġnull ĊĊĠ Ġinternal Ġfun ĠgetLast Location ( context : ĠContext ): ĠLocation ? Ġ{ ĊĊĠĠĠ Ġif Ġ(! Permission Group . LOCATION . has Permission ( context )) Ġreturn Ġnull ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ Ġlast Location Ġ= Ġnewer Location ( last Location , Ġlast Known Location ( context )) ĊĠĠĠĠĠ Ġlast Location ĊĠĠĠ Ġ} Ġcatch Ġ( ex : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġlast Known Location ( context : ĠContext ): ĠLocation ? Ġ{ ĊĊĠĠĠ Ġvar Ġbest Result : ĠLocation ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġbest Accuracy Ġ= Ġjava . lang . Float . MAX _ VALUE ĊĠĠĠ Ġval ĠcurrentTime Ġ= ĠDate (). time ĊĠĠĠ Ġval Ġlocation Manager Ġ= Ġcontext . getSystem Service ( Context . LOCATION _ SERVICE ) Ġas ĠLocation Manager ĊĠĠĠ Ġval Ġmatching Providers Ġ= Ġlocation Manager . all Providers ĊĊĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠ Ġfor Ġ( provider Ġin Ġmatching Providers ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġlocation Manager . getLast Known Location ( provider ) ĊĠĠĠĠĠĠĠ Ġif Ġ( location Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġaccuracy Ġ= Ġlocation . accuracy ĊĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġlocation . time ĊĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ+ ĠLOC ATION _ ST ALE _ TIME Ġ> ĠcurrentTime Ġ&& Ġaccuracy Ġ< Ġbest Accuracy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbest Result Ġ= Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbest Accuracy Ġ= Ġaccuracy ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ( best Result Ġ== Ġnull Ġ&& Ġ! in Progress ) Ġ{ ĊĠĠĠĠĠĠĠ Ġin Progress Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠF used Location Service ( context ). connect () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ġcatch Ġ( ex : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġbest Result ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġnewer Location ( first : ĠLocation ?, Ġsecond : ĠLocation ?): ĠLocation ? Ġ{ ĊĊĠĠĠ Ġif Ġ( first Ġ== Ġnull ) Ġreturn Ġsecond ĊĠĠĠ Ġif Ġ( second Ġ== Ġnull ) Ġreturn Ġfirst ĊĊĠĠĠ Ġreturn Ġif Ġ( first . time Ġ> Ġsecond . time ) Ġfirst Ġelse Ġsecond ĊĠ Ġ} ĊĊĠ Ġ/ **************** ******* ĠInner Ġclasses Ġ Ġ*/ ĊĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠ Ġprivate Ġclass ĠF used Location Service Ġinternal Ġconstructor ( context : ĠContext ) Ġ: ĠLocation Listener , ĠGoogle ApiClient . On Connection Failed Listener , ĠGoogle ApiClient . Connection Callbacks Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġgoogle ApiClient : ĠGoogle ApiClient ? Ġ= ĠGoogle ApiClient . Builder ( context ) ĊĠĠĠĠĠĠĠ Ġ. add Api ( Location Services . API ) ĊĠĠĠĠĠĠĠ Ġ. add Connection Callbacks ( this ) ĊĠĠĠĠĠĠĠ Ġ. add On Connection Failed Listener ( this ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġval Ġlocation Request : ĠLocation Request Ġ= ĠLocation Request . create (). set Priority ( Location Request . PRIORITY _ LOW _ POWER ) ĊĊĠĠĠ Ġinternal Ġfun Ġconnect () Ġ{ ĊĊĠĠĠĠĠ Ġgoogle ApiClient ?. connect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Connected ( connection Hint : ĠBundle ?) Ġ{ ĊĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Location Ġ= ĠLocation Services . F used Location Api ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getLast Location ( google ApiClient ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( current Location Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlast Location Ġ= Ġcurrent Location ĊĠĠĠĠĠĠĠĠĠ Ġin Progress Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLocation Services . F used Location Api . request Location Updates ( google ApiClient , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Request , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Location Changed ( location : ĠLocation ) Ġ{ ĊĊĠĠĠĠĠ Ġlast Location Ġ= Ġlocation ĊĠĠĠĠĠ ĠLocation Services . F used Location Api . remove Location Updates ( google ApiClient , Ġthis ) ĊĠĠĠĠĠ Ġin Progress Ġ= Ġfalse ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Connection Failed ( connection Result : ĠConnection Result ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Connection Sus pended ( cause : ĠInt ) Ġ{ ĊĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ