package Ġir . es ma e ili . stop car . utils Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . location . Location Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Looper Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . google . android . gms . location .* Ċ import Ġcom . google . android . gms . tasks . Task Ċ Ċ class ĠLocation Helper Ġconstructor ( private Ġval Ġcontext : ĠContext ) Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlocation Request : ĠLocation Request ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġf used Location Provider Client : ĠF used Location Provider Client ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclient : ĠSettings Client ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsettings : ĠLocation Settings Request . Builder ĊĠĠĠ Ġprivate Ġval Ġrequired Permissions Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION , ĊĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitialize ĠLocation Helper ĠProperties ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinit ( ĊĠĠĠĠĠĠĠ Ġactivity : ĠActivity , ĊĠĠĠĠĠĠĠ Ġinterval : ĠLong Ġ= Ġ 6 0 0 , ĊĠĠĠĠĠĠĠ Ġfast est Interval : ĠLong Ġ= Ġ 5 0 0 , ĊĠĠĠĠĠĠĠ Ġpriority : ĠInt Ġ= ĠLocation Request . PRIORITY _ HIGH _ AC CUR ACY ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlocation Request Ġ= ĠLocation Request . create () ĊĠĠĠĠĠĠĠ Ġsettings Ġ= ĠLocation Settings Request . Builder (). add Location Request ( location Request ) ĊĠĠĠĠĠĠĠ Ġclient Ġ= ĠLocation Services . get Settings Client ( activity ) ĊĠĠĠĠĠĠĠ Ġf used Location Provider Client Ġ= ĠLocation Services . getF used Location Provider Client ( activity ) ĊĠĠĠĠĠĠĠ Ġlocation Request . interval Ġ= Ġinterval ĊĠĠĠĠĠĠĠ Ġlocation Request . fast est Interval Ġ= Ġfast est Interval ĊĠĠĠĠĠĠĠ Ġlocation Request . priority Ġ= Ġpriority ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġneed Ġfor Ġrequest Ġgrant Ġpermission Ġrequest Ġon ĠAndroid ĠM Ġ& Ġabove ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . M ) ĊĠĠĠ Ġfun Ġis Location Permissions Granted (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Permissions [ 0 ] ĊĠĠĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Permissions [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġrequest Code Ġrequest Ġcode Ġfor Ġrequest Ġthe Ġlocation Ġpermissions ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . M ) ĊĠĠĠ Ġfun Ġrequest Location Permissions ( activity : ĠActivity , Ġrequest Code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( activity , Ġrequired Permissions , Ġrequest Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġf used Ġlocation Ġprovider Ġlast Ġsaved Ġlocation ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġfun ĠgetLast Location (): ĠTask < Location > Ġ= Ġf used Location Provider Client . last Location ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġcallback Ġfor Ġhandle Ġlocation Ġchanges ĊĠĠĠĠ Ġ* Ġ@ return Ġstart Ġlocation Ġupdates ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrequest Location Updates ( callback : ĠLocation Callback ): ĠTask < Void > Ġ= ĊĠĠĠĠĠĠĠ Ġf used Location Provider Client . request Location Updates ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Request , Ġcallback , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠL ooper . get Main Looper () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġremove Ġlocation Ġupdate Ġcallback ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġfun Ġremove Location Updates ( callback : ĠLocation Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġf used Location Provider Client . remove Location Updates ( callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġcheck Ġare ĠPro viders ĠEnabled ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcheck Location Settings (): ĠTask < Location Settings Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclient . check Location Settings ( settings . build ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġis Ġrequest Ġpermission Ġrequired ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Required Permission Request (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ĊĠĠĠ Ġ} Ċ }