package Ġcom . example . route tracker Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . location . Location Ċ import Ġandroid . location . Location Listener Ċ import Ġandroid . location . Location Manager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Animation Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . content . res . AppCompat Resources Ċ import Ġandroidx . core . graphics . scale Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . example . route tracker . helpers .* Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton Ċ import Ġcom . google . gson . Gson Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . os md roid . bonus pack . location . PO I Ċ import Ġorg . os md roid . config . Configuration Ċ import Ġorg . os md roid . events . Map Adapter Ċ import Ġorg . os md roid . events . Zoom Event Ċ import Ġorg . os md roid . tile provider . tile source . Tile Source Factory Ċ import Ġorg . os md roid . util . Geo Point Ċ import Ġorg . os md roid . views . MapView Ċ import Ġorg . os md roid . views . overlay . Marker Ċ import Ġorg . os md roid . views . overlay . Overlay Ċ import Ġorg . os md roid . views . overlay . Polyline ĊĊ Ċ class ĠMap Fragment Ġ: ĠFragment (), ĠLocation Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlm : ĠLocation Manager ĊĊĠĠĠ Ġlateinit Ġvar Ġmap : ĠMap View ĊĠĠĠ Ġvar Ġpo is : ĠMutable List < PO I > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġvar Ġdestination : ĠGeo Point ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmarker : ĠMarker ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpath : ĠPoly line ĊĠĠĠ Ġvar Ġroute : ĠOverlay ? Ġ= Ġnull ĊĠĠĠ Ġval Ġpo i Markers : ĠMutable List < Overlay > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġlateinit Ġvar Ġtoggle : ĠFloating ActionButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinfo : ĠFloating ActionButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclose : ĠFloating ActionButton ĊĊĠĠĠ Ġ// ĠAnim ations ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġappear : ĠAnimation ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdis appear : ĠAnimation ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrotate clock : ĠAnimation ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrotate antic lock : ĠAnimation ĊĊĠĠĠ Ġvar Ġp anning Ġ= Ġtrue ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠMap Fragment () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/* ĠUI Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . fragment _ map , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠConfiguration . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( context , ĠPreference Manager . getDefault SharedPreferences ( context )) ĊĊĊĠĠĠĠĠĠĠ Ġ// ĠMap ĊĠĠĠĠĠĠĠ Ġlm Ġ= Ġthis . context ?. getSystem Service ( Context . LOCATION _ SERVICE ) Ġas ĠLocation Manager ĊĠĠĠĠĠĠĠ Ġmap Ġ= Ġview . findViewById < MapView >( R . id . map ) ĊĠĠĠĠĠĠĠ Ġmap . set Tile Source ( Tile Source Factory . MAP NI K ) ĊĠĠĠĠĠĠĠ Ġmap . is Tiles Scaled To D pi Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmap . set Multi Touch Controls ( true ) ĊĠĠĠĠĠĠĠ Ġmap . controller . set Zoom ( 3 . 0 ) ĊĠĠĠĠĠĠĠ Ġmap . setOn Touch Listener Ġ{ Ġv , Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . action Ġ== ĠMotion Event . ACTION _ DOWN ) Ġv . tag Ġ= Ġtrue Ġ// ĠIf Ġdrag Ġpossibly Ġstarted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( e . action Ġ== ĠMotion Event . ACTION _ MOVE Ġ&& Ġv . tag Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! p anning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . start Animation ( appear ); ĠLog . d (" P anning : Ġ", Ġ" true ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp anning Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ// ĠIs Ġdrag Ġnot Ġclick ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġv . tag Ġ= Ġfalse Ġ// ĠIt Ġwas Ġnot Ġa Ġdrag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmap . add Map Listener ( object Ġ: ĠMap Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Zoom ( event : ĠZoom Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ġ!= Ġnull Ġ&& Ġpo is . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . zoom Level Ġ>= Ġ 1 7 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Points Of Interest () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġshow Points Of Interest () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Zoom ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĊĊĠĠĠĠĠĠĠ Ġcreate Overlay s () ĊĊĠĠĠĠĠĠĠ Ġ// ĠG ps ĠF ab ĊĠĠĠĠĠĠĠ Ġtoggle Ġ= Ġview . findViewById < Floating ActionButton >( R . id . toggle ) ĊĠĠĠĠĠĠĠ Ġtoggle . image Tint List Ġ= ĠColor State List . valueOf ( Color . parse Color ("# 4 2 8 5 F 4 ")) ĊĠĠĠĠĠĠĠ Ġtoggle . tag Ġ= Ġfalse Ġ// ĠRecord ing ? ĊĠĠĠĠĠĠĠ Ġtoggle . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( toggle . tag Ġ== Ġfalse Ġ&& Ġrequest Location Permissions ( require Activity ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable G ps () Ġ// ĠStart Ġrecording ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisable G ps () Ġ// ĠStop Ġrecording ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠClose ĠF ab ĊĠĠĠĠĠĠĠ Ġclose Ġ= Ġview . findViewById < Floating ActionButton >( R . id . close ) ĊĠĠĠĠĠĠĠ Ġclose . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . overlay s . remove ( route ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠInfo ĠF ab ĊĠĠĠĠĠĠĠ Ġinfo Ġ= Ġview . findViewById < Floating ActionButton >( R . id . info ) ĊĠĠĠĠĠĠĠ Ġinfo . image Tint List Ġ= ĠColor State List . valueOf ( Color . WHITE ) ĊĠĠĠĠĠĠĠ Ġinfo . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent FragmentManager . beginTransaction (). hide ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( R . id . fragment Container View , ĠDashboard Fragment . newInstance ( this )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Back Stack ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAnim ations ĊĠĠĠĠĠĠĠ Ġappear Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . appear ) ĊĠĠĠĠĠĠĠ Ġdis appear Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . dis appear ) ĊĠĠĠĠĠĠĠ Ġrotate clock Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . rotate _ clock ) ĊĠĠĠĠĠĠĠ Ġrotate antic lock Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . rotate _ antic lock ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInt ents ĊĠĠĠĠĠĠĠ Ġ// ĠLocation Ġcan Ġbe Ġshown Ġcalling Ġthe Ġfollowing : ĊĠĠĠĠĠĠĠ Ġ// val Ġmap Intent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse (" geo : 3 7 . 7 7 4 9 ,- 1 2 2 . 4 1 9 4 ")) ĊĠĠĠĠĠĠĠ Ġ// startActivity ( map Intent ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIntent ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull Ġ&& Ġrequire Activity (). intent . data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . controller . set Center ( parse Location ( require Activity (). intent . data . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . controller . set Zoom ( 1 8 . 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġlm . remove Updates ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġon Save () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ ĠonLoad () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠMAP Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Overlay s () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠPath ĊĠĠĠĠĠĠĠ Ġpath Ġ= ĠPoly line ( map , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġpath . outline Paint . color Ġ= ĠColor . parse Color ("# 7 3 B 9 FF ") ĊĠĠĠĠĠĠĠ Ġpath . info Window Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmap . overlay s . add ( path ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPosition ĊĠĠĠĠĠĠĠ Ġmarker Ġ= ĠMarker ( map ) ĊĠĠĠĠĠĠĠ Ġmarker . setOn Marker ClickListener Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p anning ) Ġinfo . start Animation ( dis appear ); Ġp anning Ġ= Ġfalse ; ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" P anning : Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" false " ĊĠĠĠĠĠĠĠ Ġ); Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmarker . icon Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Resources . get Drawable ( this . require Context (), ĠR . drawable . ic _ baseline _ position ) ĊĠĠĠĠĠĠĠ Ġmarker . set Anchor ( Marker . AN CH OR _ CENTER , ĠMarker . AN CH OR _ CENTER ) ĊĠĠĠĠĠĠĠ Ġmarker . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġmap . overlay s . add ( marker ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Points Of Interest () Ġ{ ĊĠĠĠĠĠĠĠ Ġpo i Markers . forEach Ġ{ Ġit Ġas ĠMarker ; Ġit . alpha Ġ= Ġ 0 f Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Points Of Interest () Ġ{ ĊĠĠĠĠĠĠĠ Ġpo i Markers . forEach Ġ{ Ġit Ġas ĠMarker ; Ġit . alpha Ġ= Ġ 1 f Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġcreate Points Of Interest () Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Un conf ined ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . overlay s . removeAll ( poi Markers ) Ġ// ĠRemove Ġold Ġoverlay s Ġif Ġany Ġexist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpo is . forEach Ġ{ Ġpo i Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpo im ark er Ġ= ĠMarker ( map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( poi . thumbnail Ġ!= Ġnull ) Ġpo im ark er . icon Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Drawable ( resources , Ġpo i . m Thumbnail . scale ( 1 0 0 , Ġ 1 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpo im ark er . set Anchor ( Marker . AN CH OR _ CENTER , ĠMarker . AN CH OR _ CENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpo im ark er . position Ġ= Ġpo i . m Location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpo im ark er . is Flat Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Window Ġ= ĠMarker Window ( require Context (), Ġmap , Ġthis @ Map Fragment ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Window . setTitle ( poi . m Description . take While Ġ{ Ġit Ġ!= Ġ',' Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Window . setType ( poi . m Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Window . on Route Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( marker . position Ġ!= Ġnull Ġ&& Ġmarker . position Ġ!= ĠGeo Point ( 0 . 0 , Ġ 0 . 0 , Ġ 0 . 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Position ", Ġmarker . position . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Ġ= Ġpo im ark er . position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . set Points ( listOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Mode Location ( marker . position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! close . isVisible ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Please Ġenable Ġlocation ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpo im ark er . info Window Ġ= Ġinfo Window ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpo im ark er . close Info Window () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpo i Markers . add ( po im ark er ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Main ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . overlay s . addAll ( poi Markers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠLocation Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun Ġenable G ps () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( location Provider ( require Context ()) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle . tag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p anning ) Ġinfo . start Animation ( dis appear ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp anning Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle . start Animation ( rotate clock ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlm . request Location Updates ( location Provider ( require Context ()) !! , Ġ 1 0 0 0 , Ġ 1 5 f , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Location Permissions ( require Activity ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisable G ps ( animation : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtoggle . tag Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( animation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Disable G ps : Ġ", Ġ" Animated ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! p anning ) Ġinfo . start Animation ( appear ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp anning Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle . start Animation ( rotate antic lock ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle . setImage Resource ( R . drawable . ic _ baseline _ location off ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= Ġthis . require Activity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get SharedPreferences (" pref ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). clear (). commit () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠStop Ġrecording ĊĠĠĠĠĠĠĠ Ġlm . remove Updates ( this ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠClear Ġmap ĊĠĠĠĠĠĠĠ Ġpath . set Points ( listOf ()) ĊĠĠĠĠĠĠĠ Ġmarker . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġmarker . close Info Window () ĊĠĠĠĠĠĠĠ Ġmap . invalidate () ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Provider Enabled ( provider : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( toggle . tag Ġ== Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle . setImage Resource ( R . drawable . ic _ baseline _ location off ) ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle . start Animation ( rotate clock ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle . setImage Resource ( R . drawable . ic _ baseline _ location ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Provider Disabled ( provider : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Please Ġenable Ġ$ provider ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠ Ġ). show () ĊĊĠĠĠĠĠĠĠ Ġtoggle . start Animation ( rotate antic lock ) ĊĠĠĠĠĠĠĠ Ġtoggle . setImage Resource ( R . drawable . ic _ baseline _ location disabled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Location Changed ( p 0 : ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" GEO LOCATION ", Ġ" new Ġlatitude : Ġ${ p 0 . latitude } Ġand Ġlongitude : Ġ${ p 0 . longitude }") ĊĠĠĠĠĠĠĠ Ġif Ġ(! close . isVisible ) Ġ// ĠFollow Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath ingMode Location ( Geo Point ( p 0 . latitude , Ġp 0 . longitude )) ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( destination Ġ!= Ġnull ) Ġ// ĠNavigation Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Mode Location ( Geo Point ( p 0 . latitude , Ġp 0 . longitude )) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigation Mode Location ( location : ĠGeo Point ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Marker ( location ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! p anning ) Ġmap . controller . set Center ( location ) ĊĊĠĠĠĠĠĠĠ Ġcreate Path ( context , Ġdestination !! , Ġlocation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPath ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( route Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . overlay s . remove ( route ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . overlay s . add ( route ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . invalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpath ingMode Location ( location : ĠGeo Point ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Marker ( location ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( path . actual Points . isEmpty ()) Ġ// ĠFirst Ġlocation ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . alpha Ġ= Ġ 1 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle . setImage Resource ( R . drawable . ic _ baseline _ location ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . controller . set Zoom ( 1 8 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . controller . set Center ( location ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! p anning ) Ġmap . controller . set Center ( location ) ĊĊĠĠĠĠĠĠĠ Ġpath . add Point ( location ) ĊĠĠĠĠĠĠĠ Ġmap . invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Marker ( location : ĠGeo Point ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠMarker ĊĠĠĠĠĠĠĠ Ġmarker . position Ġ= Ġlocation ĊĠĠĠĠĠĠĠ Ġmarker . title Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation . longitude . round To Decimal ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () Ġ+ Ġ',' Ġ+ Ġlocation . latitude . round To Decimal ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () ĊĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . sub Description Ġ= Ġget Address ( context , Ġlocation ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Save () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠGson (). toJson ( path ) ĊĠĠĠĠĠĠĠ Ġval Ġshared Preferences : ĠSharedPreferences Ġ= Ġthis . require Activity (). get SharedPreferences ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" pref ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext . MODE _ PRIVATE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġshared Preferences . edit () ĊĠĠĠĠĠĠĠ Ġeditor . putString (" Polyline ", Ġjson ) ĊĠĠĠĠĠĠĠ Ġeditor . put Boolean (" toggle Ġtag ", Ġtoggle . tag Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠ Ġif Ġ( toggle . tag Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġeditor . commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonLoad () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠGson (). toJson ( path ) ĊĠĠĠĠĠĠĠ Ġval Ġshared Preferences : ĠSharedPreferences Ġ= Ġthis . require Activity (). get SharedPreferences ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" pref ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext . MODE _ PRIVATE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġshared Preferences . getString (" Polyline ", Ġjson ) ĊĠĠĠĠĠĠĠ Ġshared Preferences . getBoolean (" toggle Ġtag ", Ġtoggle . tag Ġas ĠBoolean ) ĊĠĠĠ Ġ} Ċ } Ċ