package Ġcom . s ild ian . apps . to ge trail . trail . map Ċ Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . load . DataSource Ċ import Ġcom . bump tech . glide . load . engine . G lide Exception Ċ import Ġcom . bump tech . glide . request . RequestListener Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . bump tech . glide . request . target . Target Ċ import Ġcom . google . android . gms . maps . Camera Update Factory Ċ import Ġcom . google . android . gms . maps . Google Map Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġcom . google . android . gms . maps . model . Marker Ċ import Ġcom . google . android . gms . maps . model . Marker Options Ċ import Ġcom . google . android . material . button . Material Button Toggle Group Ċ import Ġcom . s ild ian . apps . to ge trail . R Ċ import Ġcom . s ild ian . apps . to ge trail . common . utils . Date Utilities Ċ import Ġcom . s ild ian . apps . to ge trail . common . utils . Map Markers Utilities Ċ import Ġcom . s ild ian . apps . to ge trail . common . utils . Metrics Helper Ċ import Ġcom . s ild ian . apps . to ge trail . databinding . Fragment Trail Map Binding Ċ import Ġcom . s ild ian . apps . to ge trail . event . model . core . Event Ċ import Ġcom . s ild ian . apps . to ge trail . event . model . view Models . Events ViewModel Ċ import Ġcom . s ild ian . apps . to ge trail . main . MainActivity Ċ import Ġcom . s ild ian . apps . to ge trail . trail . model . core . Trail Ċ import Ġcom . s ild ian . apps . to ge trail . trail . model . core . Trail Level Ċ import Ġcom . s ild ian . apps . to ge trail . trail . model . view Models . Tr ails ViewModel Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ Ċ /**************************************************************** ******************************** * Ċ Ġ* ĠShows Ġthe Ġlist Ġof Ġtr ails Ġon Ġa Ġmap , Ġand Ġalso Ġthe Ġlist Ġof Ġevents Ċ Ġ***************************************************************** ************************ *******/ Ċ Ċ @ Android EntryPoint Ċ class ĠTr ail Map Fragment Ġ: ĊĠĠĠ ĠBase Trail Map Fragment < Fragment Trail Map Binding >(), ĊĠĠĠ ĠGoogle Map . Info Window Adapter , ĊĠĠĠ ĠGoogle Map . On Info Window ClickListener Ċ { ĊĊĠĠĠ Ġ// TODO Ġadd Ġprogress bar Ġwhile Ġloading Ġtr ails Ġand Ġevents ĊĊĠĠĠ Ġ/ ******************************** ** Static Ġitems **************************************** ******/ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** Logs **/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Trail Map Fragment " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/ ******************************** ****** Data ************************************************ **/ ĊĊĠĠĠ Ġprivate Ġval Ġtr ails ViewModel : ĠTr ails ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġval Ġevents ViewModel : ĠEvents ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġvar Ġshow Tr ails Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġshow Events Ġ= Ġfalse ĊĊĠĠĠ Ġ/ ******************************** ** Data Ġmonitoring **************************************** ***/ ĊĊĠĠĠ Ġoverride Ġfun Ġload Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġinitialize Data () ĊĠĠĠĠĠĠĠ Ġobserve Tr ails () ĊĠĠĠĠĠĠĠ Ġobserve Events () ĊĠĠĠĠĠĠĠ Ġobserve Request Failure () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . binding . trail Map Fragment Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Tr ails () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . tr ails ViewModel . data . observe ( this ) Ġ{ Ġtr ails Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tr ails Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tr ails . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Tr ails On Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( base Activity Ġas ĠMainActivity ). show QueryResult Empty Message () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Events () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . events ViewModel . data . observe ( this ) Ġ{ Ġevents Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( events Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( events . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Events On Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( base Activity Ġas ĠMainActivity ). show QueryResult Empty Message () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Request Failure () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . tr ails ViewModel . error . observe ( this ) Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Query Error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . events ViewModel . error . observe ( this ) Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Query Error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Data ( data : Any ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( data == null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . show Tr ails ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Tr ails () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . show Events ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Events () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Tr ails (){ ĊĠĠĠĠĠĠĠ Ġval Ġtr ails Query =( activity Ġas ĠMainActivity ). tr ails Query ĊĠĠĠĠĠĠĠ Ġthis . tr ails ViewModel . load Tr ails Real Time ( tr ails Query ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Events (){ ĊĠĠĠĠĠĠĠ Ġval Ġevents Query =( activity Ġas ĠMainActivity ). events Query ĊĠĠĠĠĠĠĠ Ġthis . events ViewModel . load Events Real Time ( events Query ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/ ******************************** **** UI Ġmonitoring **************************************** ***/ ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Id (): ĠInt Ġ= ĠR . layout . fragment _ trail _ map ĊĊĠĠĠ Ġoverride Ġfun Ġget MapView Id (): ĠInt Ġ= ĠR . id . fragment _ trail _ map _ map _ view ĊĊĠĠĠ Ġoverride Ġfun Ġget Info Bottom Sheet Id (): ĠInt Ġ= ĠR . id . fragment _ trail _ map _ bottom _ sheet _ info ĊĊĠĠĠ Ġoverride Ġfun Ġget Info Fragment Id (): ĠInt Ġ= ĠR . id . fragment _ trail _ map _ fragment _ info ĊĊĠĠĠ Ġoverride Ġfun Ġenable UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . map ?. ui Settings ?. set All Gest ures Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġthis . binding . fragment Trail Map Button Search . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġthis . binding . fragment Trail Map Toggle Filter . isEnabled Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdisable UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . map ?. ui Settings ?. set All Gest ures Enabled ( false ) ĊĠĠĠĠĠĠĠ Ġthis . binding . fragment Trail Map Button Search . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġthis . binding . fragment Trail Map Toggle Filter . isEnabled Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetMessage View (): ĠView Ġ= Ġthis . binding . fragment Trail MapView Message ĊĊĠĠĠ Ġoverride Ġfun ĠgetMessage Anchor View (): ĠView ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Suppress (" UNUSED _ PARAMETER ") ĊĠĠĠ Ġfun Ġon Search Button Click ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġthis . map ?. camera Position ?. target ĊĠĠĠĠĠĠĠ Ġif Ġ( point Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠMainActivity ). set Queries To Search Around Point ( point ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . show Tr ails ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Tr ails () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . show Events ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Events () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UNUSED _ PARAMETER ") ĊĠĠĠ Ġfun Ġon Filter ToggleButton Checked ( group : ĠMaterial Button Toggle Group , Ġchecked Id : ĠInt , Ġis Checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( checked Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . fragment _ trail _ map _ toggle _ filter _ tr ails Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . show Tr ails Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . show Events Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Tr ails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . fragment _ trail _ map _ toggle _ filter _ events Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . show Tr ails Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . show Events Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Events () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/ ******************************** *** Map Ġmonitoring **************************************** ***/ ĊĊĠĠĠ Ġoverride Ġfun Ġon Map Ready Actions Finished () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . map ?. set Info Window Adapter ( this ) ĊĠĠĠĠĠĠĠ Ġthis . map ?. setOn Info Window ClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġwhen { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . show Tr ails Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . tr ails ViewModel . data . value . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Tr ails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Tr ails On Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . show Events Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . events ViewModel . data . value . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Events () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Events On Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Map Click ( point : ĠLat Lng ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Info Bottom Sheet () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Marker Click ( marker : ĠMarker ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . map ?. animate Camera ( Camera Update Factory . new LatLng ( marker . position )) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( marker . tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTr ail Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . show Info Window () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEvent Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . show Info Window () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Info Window ( marker : ĠMarker ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( marker . tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTr ail Ġ-> Ġshow Trail Info Window ( marker , Ġmarker . tag Ġas ĠTr ail ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEvent Ġ-> Ġshow Event Info Window ( marker , Ġmarker . tag Ġas ĠEvent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Info Contents ( marker : ĠMarker ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Info Window Click ( marker : ĠMarker ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( marker . tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTr ail Ġ-> Ġ( activity Ġas ĠMainActivity ). see Trail ( marker . tag Ġas ĠTr ail ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEvent Ġ-> Ġ( activity Ġas ĠMainActivity ). see Event ( marker . tag Ġas ĠEvent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Trail Info Window ( marker : Marker ?, Ġtrail : Trail ): View ? Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġlayout Inflater . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . map _ info _ window _ trail , Ġthis . layout Ġas ĠViewGroup , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġphoto ImageView Ġ= Ġview . findViewById < ImageView >( R . id . map _ info _ window _ trail _ image _ view _ photo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Text Ġ= Ġview . findViewById < TextView >( R . id . map _ info _ window _ trail _ text _ name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlevel Text Ġ= Ġview . findViewById < TextView >( R . id . map _ info _ window _ trail _ text _ level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Text Ġ= Ġview . findViewById < TextView >( R . id . map _ info _ window _ trail _ text _ duration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġas cent Text Ġ= Ġview . findViewById < TextView >( R . id . map _ info _ window _ trail _ text _ as cent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Text Ġ= Ġview . findViewById < TextView >( R . id . map _ info _ window _ trail _ text _ location ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( trail . getFirst Photo Url () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( trail . getFirst Photo Url ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions . center Crop Transform ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . ic _ trail _ black ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. listener ( object Ġ: ĠRequest Listener < Drawable >{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Failed ( e : ĠG lide Exception ?, Ġmodel : ĠAny ?, Ġtarget : ĠTarget < Drawable > ?, Ġis First Resource : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġe ?. message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( resource : ĠDrawable ?, Ġmodel : ĠAny ?, Ġtarget : ĠTarget < Drawable > ?, ĠdataSource : ĠDataSource ?, Ġis First Resource : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dataSource Ġ!= ĠDataSource . MEMORY _ CACHE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker ?. show Info Window () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( photo ImageView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Text . text Ġ= Ġtrail . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( trail . level ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr ail Level . UNKNOWN Ġ-> Ġlevel Text . setText ( R . string . label _ trail _ level _ unknown ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr ail Level . E ASY Ġ-> Ġlevel Text . setText ( R . string . label _ trail _ level _ easy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr ail Level . MEDIUM Ġ-> Ġlevel Text . setText ( R . string . label _ trail _ level _ medium ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr ail Level . HARD Ġ-> Ġlevel Text . setText ( R . string . label _ trail _ level _ hard ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Text . text = ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMetrics Helper . display Duration ( context , Ġtrail . duration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġas cent Text . text = ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMetrics Helper . display Asc ent ( context , Ġtrail . as cent , Ġtrue , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Text . text Ġ= Ġtrail . location . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Event Info Window ( marker : Marker ?, Ġevent : Event ): View ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġlayout Inflater . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . map _ info _ window _ event , Ġthis . layout Ġas ĠViewGroup , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġphoto ImageView Ġ= Ġview . findViewById < ImageView >( R . id . map _ info _ window _ event _ image _ view _ photo ) ĊĠĠĠĠĠĠĠ Ġval Ġname Text Ġ= Ġview . findViewById < TextView >( R . id . map _ info _ window _ event _ text _ name ) ĊĠĠĠĠĠĠĠ Ġval Ġbegin Date Text Ġ= Ġview . findViewById < TextView >( R . id . map _ info _ window _ event _ text _ begin _ date ) ĊĠĠĠĠĠĠĠ Ġval Ġnb Days Text Ġ= Ġview . findViewById < TextView >( R . id . map _ info _ window _ event _ text _ nb _ days ) ĊĠĠĠĠĠĠĠ Ġval Ġlocation Text Ġ= Ġview . findViewById < TextView >( R . id . map _ info _ window _ event _ text _ location ) ĊĠĠĠĠĠĠĠ Ġif Ġ( event . main Photo Url != null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( event . main Photo Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions . center Crop Transform ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . ic _ trail _ black ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. listener ( object Ġ: ĠRequest Listener < Drawable >{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Failed ( e : ĠG lide Exception ?, Ġmodel : ĠAny ?, Ġtarget : ĠTarget < Drawable > ?, Ġis First Resource : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġe ?. message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( resource : ĠDrawable ?, Ġmodel : ĠAny ?, Ġtarget : ĠTarget < Drawable > ?, ĠdataSource : ĠDataSource ?, Ġis First Resource : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dataSource Ġ!= ĠDataSource . MEMORY _ CACHE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker ?. show Info Window () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( photo ImageView ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġname Text . text = event . name ĊĠĠĠĠĠĠĠ Ġevent . begin Date ?. let Ġ{ Ġbegin Date Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Date Text . text Ġ= ĠDate Utilities . display Date Short ( begin Date ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġevent . get Nb Days ()?. let Ġ{ Ġnb Days Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetric Ġ= Ġif Ġ( nb Days Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . label _ event _ days ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . label _ event _ day ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnb Days To Display Ġ= Ġ"$ nb Days Ġ$ metric " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnb Days Text . text Ġ= Ġnb Days To Display ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlocation Text . text = event . meeting Point . toString () ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/ ******************************** *** Tr ails Ġmonitoring **************************************** / ĊĊĠĠĠ Ġprivate Ġfun Ġshow Tr ails On Map (){ ĊĊĠĠĠĠĠĠĠ Ġthis . map ?. clear () ĊĊĠĠĠĠĠĠĠ Ġ/* For Ġeach Ġtrail Ġin Ġthe Ġlist , Ġshows Ġa Ġmarker */ ĊĊĠĠĠĠĠĠĠ Ġthis . tr ails ViewModel . data . value ?. forEach Ġ{ Ġtrail Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( trail . position Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . map ?. add Marker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMarker Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. position ( LatLng ( trail . position !!. latitude , Ġtrail . position !!. longitude )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. icon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMap Markers Utilities . create Map Marker From Vector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĠR . drawable . ic _ location _ trail _ map ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . tag Ġ= Ġtrail ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/ ******************************** *** Events Ġmonitoring **************************************** / ĊĊĠĠĠ Ġprivate Ġfun Ġshow Events On Map (){ ĊĊĠĠĠĠĠĠĠ Ġthis . map ?. clear () ĊĊĠĠĠĠĠĠĠ Ġ/* For Ġeach Ġevent Ġin Ġthe Ġlist , Ġshows Ġa Ġmarker */ ĊĊĠĠĠĠĠĠĠ Ġthis . events ViewModel . data . value ?. forEach Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . position != null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . map ?. add Marker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMarker Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. position ( LatLng ( event . position !!. latitude , Ġevent . position !!. longitude )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. icon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMap Markers Utilities . create Map Marker From Vector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĠR . drawable . ic _ location _ event _ map ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . tag Ġ= Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ