package Ġcom . sp rot te . geo locator . demo . kotlin Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . location . Criteria Ċ import Ġandroid . location . Location Ċ import Ġandroid . location . Location Manager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Seek Bar Ċ import Ġandroidx . core . content . getSystem Service Ċ import Ġandroidx . core . view . is G one Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . google . android . gms . maps . Camera Update Factory Ċ import Ġcom . google . android . gms . maps . Google Map Ċ import Ġcom . google . android . gms . maps . Support Map Fragment Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġcom . google . android . gms . maps . model . Marker Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . sp rot te . geo locator . demo . R Ċ import Ġcom . sp rot te . geo locator . demo . databinding . Fragment Map Binding Ċ import Ġcom . sp rot te . geo locator . demo . misc .* Ċ import Ġcom . sp rot te . geo locator . ge of encer . Ge of encer Ċ import Ġcom . sp rot te . geo locator . ge of encer . models . Ge ofence Ċ import Ġcom . sp rot te . geo locator . tracking . Location Tracker Ċ import Ġtim ber . log . Tim ber Ċ import Ġkotlin . math . round ToInt ĊĊ Ċ class ĠMap Fragment Ġ: ĠFragment (), ĠGoogle Map . On Marker ClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġbinding : ĠFragment Map Binding ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġmap : ĠGoogle Map ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġge ofence Ġ= ĠGe ofence () ĊĊĠĠĠ Ġprivate Ġval Ġpreference Changed Listener Ġ= ĊĠĠĠĠĠĠĠ ĠSharedPreferences . On Shared Preference ChangeListener Ġ{ Ġshared Preferences , Ġkey Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġkey Ġhas Ġbeen Ġupdated ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== ĠLocation Tracker Service . PREFER ENCE _ LOCATION ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġretrieve Ġlocation Ġfrom Ġpreferences ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Result Ġ= Ġshared Preferences . getString ( key , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġretrieve Ġlocation Ġdata : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġval Ġlast Location Ġ= Ġlocation Result . last Location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġval Ġlocations Ġ= Ġlocation Result . locations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlocations . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġit . latitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġit . longitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġit . altitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġit . speed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġit . be aring ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlast Location . latitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlast Location . longitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlast Location . altitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlast Location . speed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlast Location . be aring ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" On Shared Preference Change Ġ 1 Ġ$ location Result ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView Ġ= ĠFragment Map Binding . inflate ( in flater , Ġcontainer , Ġfalse ). also Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= Ġit ĊĠĠĠ Ġ}. root ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding ?. setup () ĊĊĠĠĠĠĠĠĠ Ġrequire Context (). get Shared Prefs (). register On Shared Preference ChangeListener ( preference Changed Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun ĠFragment Map Binding . setup () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġnew Reminder . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcurrent Location . is G one Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġcurrent Location . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Manager Ġ= Ġrequire Context (). getSystem Service < Location Manager >() Ġ?: Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbest Provider Ġ= Ġlocation Manager . get Best Provider ( Criteria (), Ġfalse ) Ġ?: Ġreturn @ setOnClickListener ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġlocation Manager . getLast Known Location ( best Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( location Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlat Lng Ġ= ĠLat Lng ( location . latitude , Ġlocation . longitude ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap ?. animate Camera ( Camera Update Factory . new LatLng Zoom ( lat Lng , Ġ 1 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnew Reminder . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Configure Location Step () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmap Fragment Ġ= Ġchild FragmentManager . find Fragment ById ( R . id . map ) Ġas ĠSupport Map Fragment ĊĊĠĠĠĠĠĠĠ Ġmap Fragment . getMap Async Ġ{ Ġmap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Map Fragment . map Ġ= Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). request Location Permission Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocation Tracker . remove Location Updates ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocation Tracker . request Location Updates ( require Context (), ĠLocation Tracker Service :: class . java ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . is My Location Enabled Ġ= Ġit . gr anted ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . gr anted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Reminder . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Location . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠgetLast Known Location () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( location Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlat Lng Ġ= ĠLat Lng ( location . latitude , Ġlocation . longitude ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . animate Camera ( Camera Update Factory . new LatLng Zoom ( lat Lng , Ġ 1 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Ge of ences () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . on Map Ready () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġmap Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġbinding Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠGoogle Map . on Map Ready () Ġ{ ĊĠĠĠĠĠĠĠ Ġui Settings . is My Location Button Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġui Settings . is Map Toolbar Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset On Marker ClickListener ( this @ Map Fragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun Ġadd Ge ofence ( ge ofence : ĠGe ofence ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Activity (). request Location Permission Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . gr anted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGe of encer ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Ge ofence ( ge ofence , ĠGe ofence Intent Service :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. container ?. is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Ge of ences () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Ge ofence Update () Ġ{ ĊĠĠĠĠĠĠĠ Ġmap ?. clear () ĊĠĠĠĠĠĠĠ Ġshow Ge ofence In Map ( require Context (), Ġmap !! , Ġge ofence ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Ge of ences () Ġ{ ĊĠĠĠĠĠĠĠ Ġmap ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ge ofence Ġin ĠGe of encer ( require Context ()). getAll ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Ge ofence In Map ( require Context (), Ġthis , Ġge ofence ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Marker Click ( marker : ĠMarker ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġge ofence Ġ= ĠGe of encer ( require Context ()). get ( marker . tag Ġas ĠString ) ĊĠĠĠĠĠĠĠ Ġif Ġ( ge ofence Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. show Ge ofence Remove Alert ( ge ofence ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Map Binding . show Ge ofence Remove Alert ( ge ofence : ĠGe ofence ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalert Dialog Ġ= ĠAlertDialog . Builder ( require Context ()). create () ĊĠĠĠĠĠĠĠ Ġalert Dialog . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( getString ( R . string . reminder _ remo val _ alert )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . BUTTON _ POSITIVE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . reminder _ remo val _ alert _ positive ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Ge ofence ( ge ofence ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . BUTTON _ NEGATIVE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . reminder _ remo val _ alert _ negative ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Map Binding . remove Ge ofence ( ge ofence : ĠGe ofence ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGe of encer ( require Context ()). remove Ge ofence ( ge ofence . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Ge of ences () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . reminder _ removed _ success , ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Map Binding . show Configure Location Step () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontainer . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmarker . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinstruction Title . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinstruction Subtitle . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġradius Bar . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġradius Description . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmessage . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinstruction Title . text Ġ= ĠgetString ( R . string . instruction _ where _ description ) ĊĠĠĠĠĠĠĠ Ġnext . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġge ofence . latitude Ġ= Ġmap ?. camera Position ?. target ?. latitude Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġge ofence . longitude Ġ= Ġmap ?. camera Position ?. target ?. longitude Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Configure Radius Step () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshow Ge ofence Update () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Map Binding . show Configure Radius Step () Ġ{ ĊĠĠĠĠĠĠĠ Ġmarker . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinstruction Title . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinstruction Subtitle . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġradius Bar . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġradius Description . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmessage . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinstruction Title . text Ġ= ĠgetString ( R . string . instruction _ radius _ description ) ĊĠĠĠĠĠĠĠ Ġnext . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Configure Message Step () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġradius Bar . setOn Seek Bar ChangeListener ( radius Bar ChangeListener ) ĊĠĠĠĠĠĠĠ Ġupdate Radius With Progress ( radius Bar . progress ) ĊĠĠĠĠĠĠĠ Ġmap ?. animate Camera ( Camera Update Factory . zoom To ( 1 5 f )) ĊĠĠĠĠĠĠĠ Ġshow Ge ofence Update () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Map Binding . show Configure Message Step () Ġ{ ĊĠĠĠĠĠĠĠ Ġmarker . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinstruction Title . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinstruction Subtitle . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġradius Bar . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġradius Description . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmessage . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinstruction Title . text Ġ= ĠgetString ( R . string . instruction _ message _ description ) ĊĠĠĠĠĠĠĠ Ġnext . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard ( require Context (), Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġge ofence . message Ġ= Ġmessage . text . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ge ofence . message . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . error Ġ= ĠgetString ( R . string . error _ required ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Ge ofence ( ge ofence ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmessage . request Focus With Keyboard () ĊĠĠĠĠĠĠĠ Ġshow Ge ofence Update () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Radius ( progress : ĠInt ) Ġ= Ġ 1 0 0 Ġ+ Ġ( 2 Ġ* Ġprogress . toDouble () Ġ+ Ġ 1 ) Ġ* Ġ 1 0 0 ĊĊĠĠĠ Ġprivate Ġval Ġradius Bar ChangeListener Ġ= Ġobject Ġ: ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. update Radius With Progress ( progress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Ge ofence Update () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Map Binding . update Radius With Progress ( progress : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġget Radius ( progress ) ĊĠĠĠĠĠĠĠ Ġge ofence . radius Ġ= Ġradius ĊĠĠĠĠĠĠĠ Ġradius Description . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . radius _ description , Ġradius . round ToInt (). toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun ĠgetLast Known Location (): ĠLocation ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Manager Ġ= Ġrequire Context (). getSystem Service < Location Manager >() Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġproviders Ġ= Ġlocation Manager . get Providers ( true ) ĊĠĠĠĠĠĠĠ Ġvar Ġbest Location : ĠLocation ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfor Ġ( provider Ġin Ġproviders ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġlocation Manager . getLast Known Location ( provider ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( best Location Ġ== Ġnull Ġ|| Ġl . accuracy Ġ< Ġbest Location . accuracy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Location Ġ= Ġl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbest Location ĊĠĠĠ Ġ} Ċ } ĊĊ