package Ġcom . phil soft . metro trip per . app . ui . view Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . graphics . Bitmap Ċ import Ġcom . google . android . gms . maps . Camera Update Factory Ċ import Ġcom . google . android . gms . maps . Google Map Ċ import Ġcom . google . android . gms . maps . model . Bitmap Descriptor Factory Ċ 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 . phil soft . metro trip per . app . state . AppState Transformer Ċ import Ġcom . phil soft . metro trip per . app . state . Map Action Ċ import Ġcom . phil soft . metro trip per . app . state . Map Ui Event Ċ import Ġcom . phil soft . metro trip per . app . state . Map Ui Event . Camera Idle Ċ import Ġcom . phil soft . metro trip per . app . state . Map Ui Event . Marker Clicked Ċ import Ġcom . phil soft . metro trip per . model . Stop Ċ import Ġcom . phil soft . metro trip per . utils . map . Rx Google Map Ċ import Ġcom . phil soft . metro trip per . utils . map . fadeIn Ċ import Ġcom . phil soft . metro trip per . utils . map . fadeOut And Remove Ċ import Ġio . reactivex . Observable Ċ Ċ class ĠMap Helper ( private Ġval Ġstop Bitmap : ĠBitmap , Ġprivate Ġval Ġstar red Bitmap : ĠBitmap , Ġprivate Ġval Ġmap : ĠGoogle Map ) Ġ{ ĊĊĠĠĠ Ġval Ġcamera Idle Events : ĠObservable < Camera Idle > Ġ= ĠRx Google Map . camera Idle Events ( map ). map Ġ{ Ġcamera Position Ġ-> ĊĠĠĠĠĠĠĠ ĠMap Ui Event . Camera Idle ( camera Position ) ĊĠĠĠ Ġ}. share () ĊĊĠĠĠ Ġval Ġmarker Click s : ĠObservable < Marker Clicked > Ġ= ĠRx Google Map . marker Click s ( map ). map Ġ{ Ġmarker Ġ-> ĊĠĠĠĠĠĠĠ ĠMap Ui Event . Marker Clicked ( marker . title . to Long ()) ĊĠĠĠ Ġ}. share () ĊĊĠĠĠ Ġprivate Ġval Ġstop Markers Map Ġ= Ġhash Map Of < Long , ĠMarker >() ĊĊĠĠĠ Ġfun Ġrender ( action : ĠMap Action ) Ġ= Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠMap Action . Move Camera To Position Ġ-> Ġmove Camera To Position ( action . lat Lng ) ĊĠĠĠĠĠĠĠ Ġis ĠMap Action . Show Stop Markers Ġ-> Ġshow Stop Markers ( action . stops ) ĊĠĠĠĠĠĠĠ Ġis ĠMap Action . Select Stop Marker Ġ-> Ġselect Stop Marker ( action . stop ) ĊĠĠĠĠĠĠĠ Ġis ĠMap Action . Enable Location Button Ġ-> Ġenable Location Button ( action . enabled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun Ġenable Location Button ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap . is My Location Enabled Ġ= Ġenabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Stop Marker ( stop : ĠStop ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstop Id Ġ= Ġstop . stop Id ĊĠĠĠĠĠĠĠ Ġif Ġ( stop Markers Map . containsKey ( stop Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Markers Map [ stop Id ]?. show Info Window () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Marker Ġ= Ġadd Stop Marker ToMap ( stop ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Marker . show Info Window () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Markers Map [ stop . stop Id ] Ġ= Ġnew Marker ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġmove Camera To Position ( lat Lng : ĠLat Lng ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap . center Camera On LatLng ( lat Lng , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Stop Markers ( stops : ĠList < Stop >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Fade Ġout Ġexisting Ġmarkers Ġthat Ġare Ġno Ġlonger Ġto Ġbe Ġshown ĊĠĠĠĠĠĠĠ Ġval Ġstop Ids To Show Ġ= Ġstops . map Ġ{ Ġit . stop Id Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmarkers ToDelete Ġ= Ġstop Markers Map . minus ( stop Ids To Show ) ĊĠĠĠĠĠĠĠ Ġmarkers ToDelete . forEach Ġ{ Ġ( stop Id , Ġmarker ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Marker ( stop Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Fade Ġin Ġnew Ġmarkers ĊĠĠĠĠĠĠĠ Ġstops . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarker Is Shown Ġ= Ġstop Markers Map . containsKey ( it . stop Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! marker Is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarker Ġ= Ġadd Stop Marker ToMap ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . fadeIn ( 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Markers Map [ it . stop Id ] Ġ= Ġmarker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Marker ( stop Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmarker Ġ= Ġstop Markers Map . remove ( stop Id ) ĊĠĠĠĠĠĠĠ Ġmarker ?. fadeOut And Remove ( 5 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Stop Marker ToMap ( stop : ĠStop ): ĠMarker Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap . add Marker ( Marker Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( stop . stop Id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. position ( LatLng ( stop . stop Lat , Ġstop . stop Lon )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. icon ( Bitmap Descriptor Factory . from Bitmap ( stop Bitmap ))) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Extension Ġfunctions Ċ private Ġfun ĠGoogle Map . center Camera On LatLng ( lat Lng : ĠLat Lng , Ġanimate : ĠBoolean ) Ġ{ ĊĠĠĠ Ġval Ġcamera Update Ġ= ĠCamera Update Factory . new LatLng Zoom ( lat Lng , ĠApp State Transformer . MIN _ ZO OM _ LEVEL ) ĊĠĠĠ Ġif Ġ( animate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġanimate Camera ( camera Update ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġmove Camera ( camera Update ) ĊĠĠĠ Ġ} Ċ } ĊĊĊ