package Ġcom . fer dy has pin . ad han _ pr ayer _ android . utils Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . location . Location Ċ import Ġandroid . location . Location Manager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . google . android . gms . location .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġfer dy has pin Ġon Ġ 1 9 / 0 3 / 2 0 . Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 Ġ ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ class ĠLocation Provider Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġf used Location Client : ĠF used Location Provider Client ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlocation Request : ĠLocation Request ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlocation Callback : ĠLocation Callback ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Location Provider Callback : ĠLocation Provider Callback ĊĊĠĠĠ Ġprivate Ġvar Ġis Location Permission Denied Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġretain Instance Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġm Location Provider Callback Ġ= Ġif Ġ( context Ġis ĠLocation Provider Callback ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" activity Ġimplement ĠLocation Provider . Location Provider Callback ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġrequire Context (). getSystem Service ( Context . LOCATION _ SERVICE ) Ġas ĠLocation Manager ĊĠĠĠĠĠĠĠ Ġif Ġ(! manager . is Provider Enabled ( Location Manager . GPS _ PROVIDER )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Location Provider Callback . on GPS is Disable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpermissions Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Permission Util . has Self Permission ( require Activity (), Ġpermissions )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Location Updates () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Location Permission Denied Ġ&& ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( permissions , ĠConstants . REQUEST _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Location Provider Callback . on Location Error (" Permission ĠDen ied ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Location Updates () Ġ{ ĊĠĠĠĠĠĠĠ Ġf used Location Client Ġ= ĠLocation Services . getF used Location Provider Client ( require Activity ()) ĊĠĠĠĠĠĠĠ Ġlocation Request Ġ= ĠLocation Request () ĊĠĠĠĠĠĠĠ Ġlocation Request . interval Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġlocation Request . fast est Interval Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġlocation Request . sm allest Dis placement Ġ= Ġ 1 7 0 f Ġ// 1 7 0 Ġm Ġ= Ġ 0 . 1 Ġm ile ĊĠĠĠĠĠĠĠ Ġlocation Request . priority Ġ= ĠLocation Request . PRIORITY _ HIGH _ AC CUR ACY Ġ// accord ing Ġto Ġyour Ġapp ĊĊĠĠĠĠĠĠĠ Ġlocation Callback Ġ= Ġobject Ġ: ĠLocation Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Location Result ( result : ĠLocation Result ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Location Provider Callback . on Location Changed ( result . last Location ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Location Provider Callback . on Location Error (" Location Ġresult Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠStart Ġlocation Ġupdates ĊĠĠĠ Ġprivate Ġfun Ġstart Location Updates () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(:: f used Location Client . isInitialized ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf used Location Client . request Location Updates ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Callback , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠStop Ġlocation Ġupdates ĊĠĠĠ Ġprivate Ġfun Ġstop Location Updates () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(:: f used Location Client . isInitialized ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf used Location Client . remove Location Updates ( location Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠStop Ġreceiving Ġlocation Ġupdate Ġwhen Ġactivity Ġnot Ġvisible / foreground ĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġstop Location Updates () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠStart Ġreceiving Ġlocation Ġupdate Ġwhen Ġactivity Ġ Ġvisible / foreground ĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġstart Location Updates () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠConstants . REQUEST _ LOCATION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Location Updates () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Location Permission Denied Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠLocation Provider Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Location Changed ( location : ĠLocation ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Location Error ( msg : ĠString ) ĊĠĠĠĠĠĠĠ Ġfun Ġon GPS is Disable () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Location Provider : ĠLocation Provider ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠLocation Provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Location Provider Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Location Provider Ġ= ĠLocation Provider () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Location Provider Ġas ĠLocation Provider ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }