/** Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠCar l - Phil ipp ĠH arm ant Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġfr . c ph . ch icago . core . activity . map Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . widget . TextView Ċ import Ġcom . mapbox . geojson . Feature Ċ import Ġcom . mapbox . geojson . Feature Collection Ċ import Ġcom . mapbox . geojson . Point Ċ import Ġcom . mapbox . mapbox sdk . annotations . Bubble Layout Ċ import Ġcom . mapbox . mapbox sdk . geometry . LatLng Ċ import Ġcom . mapbox . mapbox sdk . maps . Map box Map Ċ import Ġcom . mapbox . mapbox sdk . maps . Style Ċ import Ġcom . mapbox . mapbox sdk . plugins . annotation . Line Options Ċ import Ġcom . mapbox . mapbox sdk . style . expressions . Expression . eq Ċ import Ġcom . mapbox . mapbox sdk . style . expressions . Expression . get Ċ import Ġcom . mapbox . mapbox sdk . style . expressions . Expression . literal Ċ import Ġcom . mapbox . mapbox sdk . style . expressions . Expression . step Ċ import Ġcom . mapbox . mapbox sdk . style . expressions . Expression . stop Ċ import Ġcom . mapbox . mapbox sdk . style . expressions . Expression . zoom Ċ import Ġcom . mapbox . mapbox sdk . style . layers . Property . ICON _ AN CH OR _ BOTTOM _ LEFT Ċ import Ġcom . mapbox . mapbox sdk . style . layers . Property . ICON _ ROT ATION _ ALIGNMENT _ MAP Ċ import Ġcom . mapbox . mapbox sdk . style . layers . Property Factory . icon Allow Overlap Ċ import Ġcom . mapbox . mapbox sdk . style . layers . Property Factory . icon Anchor Ċ import Ġcom . mapbox . mapbox sdk . style . layers . Property Factory . icon Image Ċ import Ġcom . mapbox . mapbox sdk . style . layers . Property Factory . icon Offset Ċ import Ġcom . mapbox . mapbox sdk . style . layers . Property Factory . icon Rotate Ċ import Ġcom . mapbox . mapbox sdk . style . layers . Property Factory . icon Rotation Alignment Ċ import Ġcom . mapbox . mapbox sdk . style . layers . Property Factory . icon Size Ċ import Ġcom . mapbox . mapbox sdk . style . layers . Symbol Layer Ċ import Ġcom . mapbox . mapbox sdk . utils . Color Utils Ċ import Ġfr . c ph . ch icago . R Ċ import Ġfr . c ph . ch icago . core . App Ċ import Ġfr . c ph . ch icago . core . model . Train Ċ import Ġfr . c ph . ch icago . core . model . Train Station Pattern Ċ import Ġfr . c ph . ch icago . core . model . enumeration . Train Line Ċ import Ġfr . c ph . ch icago . core . utils . Bitmap Generator Ċ import Ġfr . c ph . ch icago . rx . Rx Util . single From Callable Ċ import Ġfr . c ph . ch icago . rx . Tr ains Function Ċ import Ġfr . c ph . ch icago . service . Train Service Ċ import Ġfr . c ph . ch icago . util . Util Ċ import Ġio . reactivex . rx java 3 . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . rx java 3 . core . Single Ċ import Ġio . reactivex . rx java 3 . schedul ers . Schedulers Ċ import Ġorg . apache . commons . lang 3 . StringUtils Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util . concurrent . Callable Ċ Ċ /** Ċ Ġ* Ġ@ author ĠCar l - Phil ipp ĠH arm ant Ċ Ġ* Ġ@ version Ġ 1 Ċ Ġ*/ Ċ // FIX ME : Ġto Ġremove Ġdeprecated ĠAPI , Ġneed Ġhttps :// github . com / mapbox / mapbox - plugins - android / issues / 6 4 9 Ċ class ĠTrain Map Activity Ġ: ĠFragment Map Activity () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtrain Service Ġ= ĠTrain Service ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġutil Ġ= ĠUtil ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġline : ĠString ĊĠĠĠ Ġval Ġtrain Line : ĠTrain Line Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠTrain Line . from Xml String ( line ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġline Ġ= Ġif Ġ( savedInstanceState Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState . getString ( getString ( R . string . bundle _ train _ line )) Ġ?: ĠStringUtils . EMPTY ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . getString Extra ( getString ( R . string . bundle _ train _ line )) Ġ?: ĠStringUtils . EMPTY ĊĊĠĠĠĠĠĠĠ Ġinit Map () ĊĊĠĠĠĠĠĠĠ Ġset Toolbar () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set Toolbar () ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Ġ= Ġbinding . included . toolbar ĊĠĠĠĠĠĠĠ Ġtoolbar . setOn MenuItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Activity Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġutil . set Windows Color ( this , Ġtoolbar , Ġtrain Line ) ĊĠĠĠĠĠĠĠ Ġtoolbar . title Ġ= Ġtrain Line . toString With Line () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Restore InstanceState ( savedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġline Ġ= ĠsavedInstanceState . getString ( getString ( R . string . bundle _ train _ line )) Ġ?: ĠStringUtils . EMPTY ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Save InstanceState ( savedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsavedInstanceState . putString ( getString ( R . string . bundle _ train _ line ), Ġline ) ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( savedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Map Ready ( map : ĠMap box Map ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Map Ready ( map ) ĊĠĠĠĠĠĠĠ Ġthis . map . add On Map ClickListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Map Style Ready ( style : ĠStyle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage Train Ġ= Ġsingle From Callable ( Callable Ġ{ ĠBitmap Factory . decode Resource ( resources , ĠR . drawable . train ) Ġ}, ĠS chedulers . computation ()) ĊĠĠĠĠĠĠĠ Ġval Ġstation Marker Ġ= Ġsingle From Callable ( Callable Ġ{ ĠBitmap Factory . decode Resource ( resources , Ġcolor Drawable ()) Ġ}, ĠS chedulers . computation ()) ĊĊĠĠĠĠĠĠĠ ĠSingle . zip ( image Train , Ġstation Marker , Ġ{ Ġbitmap Train , Ġbitmap Station Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . add Image ( IMAGE _ TRAIN , Ġbitmap Train ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . add Image ( IMAGE _ ST ATION , Ġbitmap Station ) ĊĠĠĠĠĠĠĠ Ġ}). subscribe () ĊĊĠĠĠĠĠĠĠ Ġstyle . add Layer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol Layer ( VE H IC LE _ LAYER _ ID , ĠV EH IC LE _ SOURCE _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Properties ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Image ( IMAGE _ TRAIN ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Rotate ( get ( PROPERTY _ HEAD ING )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep ( zoom (), Ġ 0 . 0 5 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop ( 9 , Ġ 0 . 1 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop ( 1 0 . 5 , Ġ 0 . 1 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop ( 1 2 , Ġ 0 . 2 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop ( 1 5 , Ġ 0 . 3 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop ( 1 7 , Ġ 0 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Allow Overlap ( true ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Rotation Alignment ( ICON _ ROT ATION _ ALIGNMENT _ MAP ))) ĊĊĠĠĠĠĠĠĠ Ġstyle . add Layer Above ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol Layer ( VE H IC LE _ INFO _ LAYER _ ID , ĠV EH IC LE _ SOURCE _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Properties ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshow Ġimage Ġwith Ġid Ġtitle Ġbased Ġon Ġthe Ġvalue Ġof Ġthe Ġtitle Ġfeature Ġproperty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Image ("{ title } "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġanchor Ġof Ġicon Ġto Ġbottom - left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Anchor ( ICON _ AN CH OR _ BOTTOM _ LEFT ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġoffset Ġicon Ġslightly Ġto Ġmatch Ġbubble Ġlayout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Offset ( array Of (- 2 0 . 0 f , Ġ- 1 0 . 0 f )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Allow Overlap ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Filter ( eq ( get ( PROPERTY _ SELECTED ), Ġliteral ( true ))), ĠV EH IC LE _ LAYER _ ID ) ĊĊĠĠĠĠĠĠĠ Ġstyle . add Layer Below ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol Layer ( ST ATION _ LAYER _ ID , ĠST ATION _ SOURCE _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Properties ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Image ( IMAGE _ ST ATION ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep ( zoom (), Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop ( 1 3 , Ġ 0 . 6 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop ( 1 5 , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop ( 1 7 , Ġ 1 . 3 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Allow Overlap ( true )), ĠV EH IC LE _ LAYER _ ID ) ĊĊĠĠĠĠĠĠĠ Ġstyle . add Layer Above ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol Layer ( ST ATION _ INFO _ LAYER _ ID , ĠST ATION _ SOURCE _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Properties ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshow Ġimage Ġwith Ġid Ġtitle Ġbased Ġon Ġthe Ġvalue Ġof Ġthe Ġtitle Ġfeature Ġproperty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Image ("{ title } "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġanchor Ġof Ġicon Ġto Ġbottom - left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Anchor ( ICON _ AN CH OR _ BOTTOM _ LEFT ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep ( zoom (), Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop ( 1 3 , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġoffset Ġicon Ġslightly Ġto Ġmatch Ġbubble Ġlayout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Offset ( array Of (- 2 0 . 0 f , Ġ- 2 4 . 0 f )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Allow Overlap ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Filter ( eq ( get ( PROPERTY _ SELECTED ), Ġliteral ( true ))), ĠV EH IC LE _ LAYER _ ID ) ĊĠĠĠĠĠĠĠ Ġload Activity Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Map Click ( point : ĠLat Lng ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfinal Point Ġ= Ġmap . projection . to Screen Location ( point ) ĊĠĠĠĠĠĠĠ Ġval Ġvehicle Info Features Ġ= Ġmap . query Rendered Features ( final Point , ĠV EH IC LE _ INFO _ LAYER _ ID ) ĊĠĠĠĠĠĠĠ Ġif Ġ( vehicle Info Features . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeature Ġ= Ġvehicle Info Features [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick On Vehicle Info ( feature ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrectangle Ġ= Ġto Rect ( final Point ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarker Features Ġ= Ġmap . query Rendered Features ( rectangle , ĠV EH IC LE _ LAYER _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( marker Features . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġmarker Features [ 0 ]. getString Property ( PROPERTY _ TITLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeature List Ġ= Ġvehicle Feature Collection !!. features () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfeature List !!. indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( feature List [ i ]. getString Property ( PROPERTY _ TITLE ) Ġ== Ġtitle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeature Ġ= Ġvehicle Feature Collection !!. features () ! ![ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Vehicle ( feature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstations Info Features Ġ= Ġmap . query Rendered Features ( rectangle , ĠST ATION _ LAYER _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stations Info Features . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġstations Info Features [ 0 ]. getString Property ( PROPERTY _ TITLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeature List Ġ= Ġstation Feature Collection !!. features () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfeature List !!. indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( feature List [ i ]. getString Property ( PROPERTY _ TITLE ) Ġ== Ġtitle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeature Ġ= Ġstation Feature Collection !!. features () ! ![ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Station ( feature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde selectAll () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Veh icles () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġselect Vehicle ( feature : ĠFeature ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . select Vehicle ( feature ) ĊĠĠĠĠĠĠĠ Ġload AndUpdate Train Arrival Feature ( feature , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Station ( feature : ĠFeature ) Ġ{ ĊĠĠĠĠĠĠĠ Ġde selectAll () ĊĠĠĠĠĠĠĠ Ġfeature . properties ()?. addProperty ( PROPERTY _ SELECTED , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġrefresh St ations () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclick On Vehicle Info ( feature : ĠFeature ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Progress ( true ) ĊĠĠĠĠĠĠĠ Ġload AndUpdate Train Arrival Feature ( feature , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġprivate Ġfun Ġload AndUpdate Train Arrival Feature ( feature : ĠFeature , Ġload All : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrun Number Ġ= Ġfeature . getString Property ( PROPERTY _ TITLE ) ĊĠĠĠĠĠĠĠ Ġtrain Service . train Et as ( run Number , Ġload All ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Schedulers . computation ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Tr ains Function ( this @ Train Map Activity , Ġfeature )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġview Ġ-> Ġupdate ( feature , Ġrun Number , Ġview ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġutil . show Sn ackBar ( binding . map Container , ĠR . string . message _ no _ data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Progress ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġprivate Ġfun Ġload Activity Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠLoad Ġtrain Ġlocation ĊĠĠĠĠĠĠĠ Ġval Ġfeatures Tr ains Ġ= Ġtrain Service . train Locations ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Schedulers . computation ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtr ains : ĠList < Train > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeatures Ġ= Ġtr ains . map Ġ{ Ġtrain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeature Ġ= ĠFeature . from Geometry ( Point . from Lng Lat ( train . position . longitude , Ġtrain . position . latitude )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeature . add Number Property ( PROPERTY _ HEAD ING , Ġtrain . heading ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeature . add String Property ( PROPERTY _ TITLE , Ġtrain . run Number . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeature . add String Property ( PROPERTY _ DEST INATION , Ġ" To Ġ${ train . dest Name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeature . add Boolean Property ( PROPERTY _ FA VO UR ITE , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeature ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeature Collection . from Features ( features ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( draw Line ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoad Ġpattern Ġfrom Ġlocal Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpatterns Ġ= Ġtrain Service . read Patterns ( Train Line . from Xml String ( line )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Schedulers . computation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtrain Station Patterns : ĠList < Train Station Pattern > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlat Lng s Ġ= Ġtrain Station Patterns . map Ġ{ Ġstation Pattern Ġ-> ĠLat Lng ( station Pattern . position . latitude , Ġstation Pattern . position . longitude ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Options Ġ= ĠLine Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with LatLng s ( lat Lng s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Line Color ( Color Utils . color To Rg ba String ( Train Line . from Xml String ( line ). color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with LineWidth (( application Ġas ĠApp ). lineWidth Map Box ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeatures Ġ= Ġtrain Station Patterns ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġtrain Station Pattern Ġ-> Ġtrain Station Pattern . station Name Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtrain Station Pattern Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeature Ġ= ĠFeature . from Geometry ( Point . from Lng Lat ( train Station Pattern . position . longitude , Ġtrain Station Pattern . position . latitude )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeature . add String Property ( PROPERTY _ TITLE , Ġtrain Station Pattern . station Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeature ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeature Collection Ġ= ĠFeature Collection . from Features ( features ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( line Options , Ġfeature Collection ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . zip ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeatures Tr ains . observe On ( Android Schedulers . main Thread ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpatterns . observe On ( Android Schedulers . main Thread ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġfeatures Train : ĠFeature Collection , Ġpair : ĠPair < Line Options , ĠFeature Collection > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Vehicle Feature Collection ( features Train ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Station Feature Collection ( pair . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Station On Map ( pair . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Polyline ( pair . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( features Train . features () Ġ!= Ġnull Ġ&& Ġfeatures Train . features () !!. isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġutil . show Sn ackBar ( binding . map Container , ĠR . string . message _ no _ train _ found ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpair . first . lat Lng s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġpoints Ġ-> Ġcenter Map ( points ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġutil . show Sn ackBar ( binding . map Container , ĠR . string . message _ error _ while _ loading _ data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeatures Tr ains ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġfeature Collection Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Vehicle Feature Collection ( feature Collection ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( feature Collection . features () Ġ!= Ġnull Ġ&& Ġfeature Collection . features () !!. isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġutil . show Sn ackBar ( binding . map Container , ĠR . string . message _ no _ train _ found ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġutil . show Sn ackBar ( binding . map Container , ĠR . string . message _ error _ while _ loading _ data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint ( value Ġ= Ġ[" Check Result ", Ġ" Inf late Params "]) ĊĠĠĠ Ġprivate Ġfun Ġadd Station On Map ( station Info Feature Collection : ĠFeature Collection ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSingle . defer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbit maps Ġ= Ġstation Info Feature Collection . features ()?. map Ġ{ Ġfeature Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( this @ Train Map Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbubble Layout Ġ= Ġinflater . inflate ( R . layout . marker _ mapbox , Ġnull ) Ġas ĠB ubble Layout ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġfeature . getString Property ( PROPERTY _ TITLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle TextView Ġ= Ġbubble Layout . findViewById < TextView >( R . id . title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle TextView . text Ġ= Ġtitle ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap Generator . generate ( bubble Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( title , Ġbitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( bit maps ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . computation ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġbit maps Ġ-> Ġmap . style !!. add Images ( bit maps Ġas ĠHashMap < String , ĠBitmap >) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĠTim ber . e ( error ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcolor Drawable (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( train Line ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrain Line . BLUE Ġ-> ĠR . drawable . blue _ marker ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrain Line . BRO WN Ġ-> ĠR . drawable . brown _ marker ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrain Line . GREEN Ġ-> ĠR . drawable . green _ marker ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrain Line . OR ANGE Ġ-> ĠR . drawable . orange _ marker ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrain Line . PIN K Ġ-> ĠR . drawable . pink _ marker ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrain Line . PUR PLE Ġ-> ĠR . drawable . purple _ marker ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrain Line . RED Ġ-> ĠR . drawable . red _ marker ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrain Line . YELLOW Ġ-> ĠR . drawable . yellow _ marker ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrain Line . NA Ġ-> ĠR . drawable . red _ marker ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ