/** Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġ- Ġ 2 0 2 1 Ċ Ġ* Ċ Ġ* ĠMat thew ĠR af use Ġ< mat thew . raf use @ u water lo o . ca > Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġca . u water lo o . mr af use . location plugin Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . location . Location Ċ import Ġandroid . location . Location Manager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġca . u water lo o . mr af use . location plugin . common . Database Ċ import Ġca . u water lo o . mr af use . location plugin . common . Permission Helper Ċ import Ġcom . google . android . gms . maps . Camera Update Factory Ċ import Ġcom . google . android . gms . maps . model . Circle Options Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġkotlinx . android . synt hetic . main . activity _ location _ configuration .* Ċ import Ġjava . io . IOException Ċ Ċ // ĠTODO : ĠV ast ly Ġreduce Ġthe Ġamount Ġof Ġwork Ġthis Ġactivity Ġis Ġdoing Ċ class ĠLocation Configuration Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġlocation Manager : ĠLocation Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġdatabase Ġ= ĠDatabase . getInstance ( this ) ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ location _ configuration ) ĊĊĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" onCreate ") ĊĊĠĠĠĠĠĠĠ ĠPermission Helper . check AndGet Permissions ( this , ĠManifest . permission . ACCESS _ F INE _ LOCATION ) ĊĊĠĠĠĠĠĠĠ Ġlocation Manager Ġ= Ġget System Service ( Location Manager :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġmap View . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġmap View . getMap Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is My Location Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd Safe Locations () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġmap View . onStart () ĊĊĠĠĠĠĠĠĠ Ġset Safe Location . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap View . getMap Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . add Location ( it . camera Position . target ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Safe Locations () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġremove Locations . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . remove Locations () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap View . getMap Async Ġ{ Ġit . clear () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġmap View . on Resume () ĊĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" on Resume ") ĊĠĠĠĠĠĠĠ Ġset Location On Map ( try Get Location ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun Ġtry Get Location (): ĠLocation ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Permission Helper . has Permission ( this , ĠManifest . permission . ACCESS _ F INE _ LOCATION )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" have Ġpermissions ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlocation Manager ?. getLast Known Location ( Location Manager . GPS _ PROVIDER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Location On Map ( location : ĠLocation ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" setLocation On Map ") ĊĠĠĠĠĠĠĠ Ġmap View . getMap Async Ġ{ Ġmap Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġloc Ġ= Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( loc Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloc Ġ= Ġtry Get Location () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġloc . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( loc Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . move Camera ( Camera Update Factory . new LatLng Zoom ( LatLng ( loc . latitude , Ġloc . longitude ), ĠDEFAULT _ ZO OM )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" loc Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Safe Locations () Ġ{ ĊĠĠĠĠĠĠĠ Ġmap View . getMap Async Ġ{ Ġmap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . get Locations (). forEach Ġ{ loc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . add Circle ( Circle Options (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter ( loc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġradius ( 5 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Color ( Color . arg b ( 2 5 5 , Ġ 0 , Ġ 2 5 5 , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Color ( Color . arg b ( 6 4 , Ġ 0 , Ġ 2 5 5 , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġmap View . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġmap View . on Stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġmap View . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġmap View . on Save InstanceState ( out State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Low Memory () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Low Memory () ĊĠĠĠĠĠĠĠ Ġmap View . on Low Memory () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠLOG _ TAG Ġ= ĠLocation Configuration Activity :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ ZO OM Ġ= Ġ 1 5 . 0 f ĊĠĠĠ Ġ} Ċ }