// Ġ ĠCOMP 4 5 2 1 ĠĠĠ ĠH ON ĠK IN ĠT AT ĠĠĠĠĠ 2 0 5 1 4 3 3 2 ĠĠĠĠĠĠĠ Ġk thon @ connect . ust . hk Ċ // Ġ ĠCOMP 4 5 2 1 ĠĠĠ ĠL AI ĠCHE UK ĠHE I ĠĠĠ 2 0 4 6 4 0 4 4 ĠĠĠĠĠĠĠ Ġch l ai ak @ connect . ust . hk Ċ // Ġ ĠCOMP 4 5 2 1 ĠĠĠ ĠCHAN ĠH OK ĠH IM ĠĠĠĠ 2 0 4 3 5 3 9 2 ĠĠĠĠĠĠĠ Ġhh chan al @ connect . ust . hk Ċ Ċ package Ġcom . y ose m ite y ss . gre entr ans it . app . home Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . location . Location Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . lifecycle . repeat On Lifecycle Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . google . android . gms . maps . Camera Update Factory Ċ import Ġcom . google . android . gms . maps . Google Map Ċ import Ġcom . google . android . gms . maps . Location Source Ċ import Ġcom . google . android . gms . maps . Location Source .* Ċ import Ġcom . google . android . gms . maps . Support Map Fragment Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġcom . google . android . gms . maps . model . Map Style Options Ċ import Ġcom . google . android . gms . maps . model . Marker Ċ import Ġcom . google . android . material . progress indicator . Linear Progress Indicator Ċ import Ġcom . google . android . material . shape . Material Shape Drawable Ċ import Ġcom . google . android . material . shape . Shape Appearance Model Ċ import Ġcom . google . maps . android . k tx . await Map Ċ import Ġcom . y ose m ite y ss . gre entr ans it . app . R Ċ import Ġcom . y ose m ite y ss . gre entr ans it . app . databinding . Fragment Home Binding Ċ import Ġcom . y ose m ite y ss . gre entr ans it . app . main . Main ViewModel Ċ import Ġcom . y ose m ite y ss . gre entr ans it . app . route . Route Option Ċ import Ġcom . y ose m ite y ss . gre entr ans it . app . utils .* Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . collect Latest Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . launch Ċ Ċ private Ġconst Ġval ĠMAP _ DEFAULT _ ZO OM Ġ= Ġ 1 6 f Ċ Ċ @ Android EntryPoint Ċ class ĠHome Fragment Ġ: ĠFragment ( R . layout . fragment _ home ), ĊĠĠĠ ĠLocation Source , ĊĠĠĠ ĠGoogle Map . On Marker ClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding : ĠFragment Home Binding Ġby Ġview Binding ( Fragment Home Binding :: bind ) ĊĠĠĠ Ġprivate Ġval Ġmain ViewModel : ĠMain ViewModel Ġby Ġactivity ViewModels () ĊĠĠĠ Ġprivate Ġval Ġhome ViewModel : ĠHome ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġprivate Ġvar Ġon Location Changed Listener : ĠOn Location Changed Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġhas Loaded Initial Coordinate : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġnearby Stops Markers : ĠMutable List < Marker > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsetup Map Fragment () ĊĠĠĠĠĠĠĠ Ġsetup Bottom Sheet () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġnearby Stops Markers . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġactivate ( listener : ĠOn Location Changed Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Location Changed Listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeactivate () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Location Changed Listener Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Marker Click ( marker : ĠMarker ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( marker Ġ== Ġnull ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġit Ġis Ġa Ġstop Ġmarker ĊĠĠĠĠĠĠĠ Ġif Ġ( marker Ġin Ġnearby Stops Markers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . tag ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Stop ( stop Id Ġ= Ġit Ġas ĠLong ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ", Ġ" Potential Behavior Override ") ĊĠĠĠ Ġprivate Ġfun Ġsetup Map Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠMap Ġinitialization ĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Map Instance (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( ui Settings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Comp ass Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis My Location Button Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Map Toolbar Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSwitch Ġmap Ġto Ġnight Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( require Context (). is Night Mode On ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnight Style Ġ= ĠMap Style Options . load Raw Resource Style ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĠR . raw . night _ map _ style ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Map Style ( night Style ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMove Ġto Ġdefault Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Loaded Initial Coordinate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Camera ( Camera Update Factory . new LatLng Zoom ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLat Lng ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . initial Coordinate . latitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . initial Coordinate . longitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġ 1 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Loaded Initial Coordinate Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On Marker ClickListener ( this @ Home Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAttach Ġlocation Ġsource Ġif Ġpermission Ġis Ġgranted ĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . permission Granted . collect Ġ{ Ġis Granted Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Map Instance (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis My Location Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Location Source ( this @ Home Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠZoom Ġto Ġcurrent Ġlocation Ġwhen Ġstart ĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzoom To Current Location () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠPass Ġcurrent Ġlocation Ġto Ġlocation Ġsource ĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle . repeat On Lifecycle ( Lifecycle . State . STARTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . user Location . collect Latest Ġ{ Ġuser Location Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠLocation (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġuser Location . coordinate . latitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Ġ= Ġuser Location . coordinate . longitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe aring Ġ= Ġuser Location . orientation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Location Changed Listener ?. on Location Changed ( location ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠN ear by Ġstops Ġmarker ĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . near by Stops . collect Ġ{ Ġstops Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Map Instance (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClear Ġexisting Ġmarkers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnearby Stops Markers . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . clear () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġnew Ġgroup Ġof Ġmarkers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnearby Stops Markers . addAll ( stops . map Ġ{ Ġstop Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Marker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= ĠLat Lng ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop . location . latitude , Ġstop . location . longitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Res Ġ= ĠR . drawable . ic _ stop , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġstop . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠMy Ġlocation Ġbutton ĊĠĠĠĠĠĠĠ Ġbinding . home Search Bar Layout . my Location Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzoom To Current Location () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Bottom Sheet () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . bottom Sheet Layout . background Ġ= ĠMaterial Shape Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . attr . bottom Sheet Style , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill Color Ġ= ĠColor State List . valueOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). theme Color ( R . attr . color Surface ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelevation Ġ= Ġresources . get Dimension ( R . dim en . elevation _ x medium ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape Appearance Model Ġ= ĠShape Appearance Model . builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . attr . shape Appearance Large Component , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize Elevation Overlay ( require Context ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠNavigate Ġto ĠSearch Fragment ĊĠĠĠĠĠĠĠ Ġbinding . home Search Bar Layout . root . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHome Fragment Directions . action Home Fragment To Search Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠBottom Ġsheet Ġtop Ġmargin ĊĠĠĠĠĠĠĠ Ġbinding . bottom Sheet Coordinator Layout . apply System Window Insets Margin ( apply Top Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠFailed Ġto Ġdisplay Ġprogress Ġbar Ġusing Ġxml Ġanimation Ġattributes ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// github . com / material - components / material - components - android / issues / 1 9 7 2 ĊĠĠĠĠĠĠĠ Ġwith ( binding . loading ProgressBar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Visibility After Hide ( View . IN VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Animation Behavior Ġ= ĠLinear Progress Indicator . SHOW _ IN WARD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Animation Behavior Ġ= ĠLinear Progress Indicator . SHOW _ OUT WARD ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġnearby Ġroutes ĊĠĠĠĠĠĠĠ Ġval Ġnearby Routes Adapter Ġ= ĠN ear by Routes Adapter Ġ{ Ġ_, Ġroute Id , Ġroute Code Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHome Fragment Directions . action Home Fragment To Route Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Option ( route Id Ġ= Ġroute Id , Ġroute Code Ġ= Ġroute Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwith ( binding . near by Routes RecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġnearby Routes Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . near by Stops . collect Ġ{ Ġstops Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome ViewModel . fetch Near by Routes ( stops ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhome ViewModel . home Ui State . collect Ġ{ Ġui State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading ProgressBar . show If ( ui State Ġis ĠHome Ui State . Loading ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ui State Ġis ĠHome Ui State . Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnearby Routes Adapter . submit List ( ui State . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ui State Ġis ĠHome Ui State . Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Short Toast ( ui State . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRoutes Ġtitle ĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhome ViewModel . near by Routes Count . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . near by Routes Count TextView . text Ġ= ĠgetString ( R . string . near by _ routes _ count , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġzoom To Current Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġmain ViewModel . user Location . first () ĊĠĠĠĠĠĠĠ Ġget Map Instance (). zoom Animate To ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Ġ= ĠLat Lng ( location . coordinate . latitude , Ġlocation . coordinate . longitude ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= ĠMAP _ DEFAULT _ ZO OM ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate To Stop ( stop Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Stop Ġ= Ġmain ViewModel . near by Stops . value . first Ġ{ Ġit . id Ġ== Ġstop Id Ġ} ĊĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHome Fragment Directions . action Home Fragment To Stop Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Id Ġ= Ġstop Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġselected Stop . location . latitude . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Ġ= Ġselected Stop . location . longitude . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Map Instance (): ĠGoogle Map Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Fragment Ġ= Ġchild FragmentManager . find Fragment ById ( R . id . map _ container _ view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġas ĠSupport Map Fragment ĊĠĠĠĠĠĠĠ Ġreturn Ġmap Fragment . await Map () ĊĠĠĠ Ġ} Ċ }