package Ġcom . jint in . fancy location Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Looper Ċ import Ġandroidx . annotation . Requires Permission Ċ import Ġcom . google . android . gms . location .* Ċ Ċ class ĠLocation Provider ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġlocation Request : ĠLocation Request Ċ ) Ġ: ĠI Location Provider Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlocation Provider Client Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠLocation Services . getF used Location Provider Client ( context ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġlocation Listener Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠLocation Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Permission ( any Of Ġ= Ġ[ Manifest . permission . ACCESS _ CO AR SE _ LOCATION , ĠManifest . permission . ACCESS _ F INE _ LOCATION ]) ĊĠĠĠ Ġoverride Ġfun Ġrequest Location Updates ( location Observer : ĠI Location Observer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlocation Listener . location Observer Ġ= Ġlocation Observer ĊĠĠĠĠĠĠĠ Ġlocation Provider Client . request Location Updates ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Listener , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠL ooper . get Main Looper () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Location Updates () Ġ{ ĊĠĠĠĠĠĠĠ Ġlocation Provider Client . remove Location Updates ( location Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠLocation Listener Ġ: ĠLocation Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlocation Observer : ĠI Location Observer ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Location Result ( result : ĠLocation Result ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ?. last Location ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Observer ?. on Location Result ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Location Availability ( availability : ĠLocation Availability ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( availability ?. is Location Available Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Observer ?. on Location Failed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }