package Ġcom . sk ed go . android . tri pk it Ċ Ċ import Ġandroid . text . TextUtils Ċ Ċ import Ġcom . sk ed go . android . common . model . Location Ċ import Ġcom . sk ed go . android . common . model . Query Ċ import Ġcom . sk ed go . android . common . model . Region Ċ import Ġcom . sk ed go . android . tri pk it . routing . Extra Query Map Provider Ċ import Ġcom . sk ed go . android . tri pk it . t sp . Region Info Ċ import Ġcom . sk ed go . android . tri pk it . t sp . Region Info Repository Ċ Ċ import Ġjava . util . Collections Ċ import Ġjava . util . HashMap Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ import Ġandroidx . collection . Array Map Ċ import Ġrx . Observable Ċ import Ġrx . functions . Func 1 Ċ import Ġrx . functions . Func 2 Ċ import Ġsk ed go . tri pk it . a 2 bro uting . F ailover A 2 b Routing Api Ċ import Ġsk ed go . tri pk it . a 2 bro uting . Route Service Ċ import Ġsk ed go . tri pk it . a 2 bro uting . To Weight ing Profile String Ċ import Ġsk ed go . tri pk it . routing . Trip Group Ċ Ċ internal Ġclass ĠRoute ServiceImpl ( ĊĠĠĠ Ġprivate Ġval Ġquery Generator : ĠQuery Generator , ĊĠĠĠ Ġprivate Ġval Ġco 2 Preferences : ĠCo 2 Preferences ?, ĊĠĠĠ Ġprivate Ġval Ġtrip Preferences : ĠTrip Preferences ?, ĊĠĠĠ Ġprivate Ġval Ġextra Query Map Provider : ĠExtra Query Map Provider ?, ĊĠĠĠ Ġprivate Ġval Ġrouting Api : ĠF ailover A 2 b Routing Api , ĊĠĠĠ Ġprivate Ġval Ġregion Info Repository : ĠRegion Info Repository ) Ġ: ĠRoute Service Ġ{ ĊĊĠ Ġprivate Ġfun Ġto Coordinates Text ( location : ĠLocation ): ĠString Ġ{ ĊĠĠĠ Ġval Ġcoordinates Text Ġ= ĠStringBuilder (" (" Ġ+ Ġlocation . lat Ġ+ Ġ"," Ġ+ Ġlocation . lon Ġ+ Ġ") ") ĊĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( location . address )) Ġ{ ĊĠĠĠĠĠ Ġcoordinates Text . append ("\ "" ). append ( location . address ). append ("\" ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġcoordinates Text . toString () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġroute Async ( ĊĠĠĠĠĠ Ġquery : ĠQuery , ĊĠĠĠĠĠ Ġtransport Mode Filter : ĠTransport Mode Filter , ĊĠĠĠĠĠ Ġtransit Mode Filter : ĠTrans it Mode Filter ): ĠObservable < List < Trip Group >> Ġ{ ĊĠĠĠ Ġreturn Ġflat Sub Queries ( query , Ġtransport Mode Filter ) ĊĠĠĠĠĠĠĠ Ġ. concat Map Ġ{ Ġsub Query Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġregion Info Repository . get Region Info By Region ( sub Query . region !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġregion Info Ġ-> ĠPair ( sub Query , Ġregion Info ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ( sub Query , Ġregion Info ) Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġregion Ġ= Ġsub Query . region ĊĠĠĠĠĠĠĠĠĠ Ġval Ġbase Urls Ġ= Ġregion !!. ur Ls ĊĠĠĠĠĠĠĠĠĠ Ġval Ġmodes Ġ= Ġsub Query . transport Mode Ids ĊĠĠĠĠĠĠĠĠĠ Ġval Ġexclude Stops Ġ= Ġsub Query . excluded Stop Codes ĊĠĠĠĠĠĠĠĠĠ Ġval Ġall Transit Modes Ġ= Ġregion Info . transit Modes (). or Empty (). map Ġ{ Ġit . id !! Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġval Ġexcluded Transit Modes Ġ= Ġall Transit Modes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subtract ( transit Mode Filter . filter Transit Modes ( region Info ). map Ġ{ Ġit . id !! Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġto Options ( sub Query , Ġregion Info ) ĊĠĠĠĠĠĠĠĠĠ Ġrouting Api . fetch Routes Async ( base Urls , Ġmodes , Ġexcluded Transit Modes , Ġexclude Stops , Ġoptions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/* ĠTODO : ĠConsider Ġmaking Ġthis Ġpublic Ġfor ĠX er ox Ġteam . Ġ*/ ĊĠ Ġfun Ġget Params By Preferences ( region Info : ĠRegion Info ): ĠMap < String , ĠAny > Ġ{ ĊĠĠĠ Ġval Ġmap Ġ= ĠArray Map < String , ĠAny >() ĊĠĠĠ Ġif Ġ( trip Preferences Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( trip Preferences . is Con cess ion Pricing Preferred ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap [" conc "] Ġ= Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( trip Preferences . is Wheel ch air Preferred Ġ&& Ġregion Info . transit Wheel ch air Accessibility ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap [" wheel ch air "] Ġ= Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( co 2 Preferences Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġco 2 Profile Ġ= Ġco 2 Preferences . co 2 Profile ĊĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġco 2 Profile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap [" co 2 [$ key ] "] Ġ= Ġvalue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġmap ĊĠ Ġ} ĊĊĠ Ġfun Ġto Options ( query : ĠQuery , Ġregion Info : ĠRegion Info ): ĠMap < String , ĠAny > Ġ{ ĊĠĠĠ Ġval Ġdepart ure Coordinates Ġ= Ġto Coordinates Text ( query . from Location !! ) ĊĠĠĠ Ġval Ġar rival Coordinates Ġ= Ġto Coordinates Text ( query . to Location !! ) ĊĠĠĠ Ġval Ġar rive Before Ġ= ĠTimeUnit . MILLISECONDS . to Seconds ( query . ar rive By ) ĊĠĠĠ Ġval Ġdepart After Ġ= ĠTimeUnit . MILLISECONDS . to Seconds ( query . depart After ) ĊĠĠĠ Ġval Ġunit Ġ= Ġquery . unit ĊĠĠĠ Ġval Ġtransfer Time Ġ= Ġquery . transfer Time ĊĠĠĠ Ġval Ġwalking Speed Ġ= Ġquery . walk ing Speed ĊĠĠĠ Ġval Ġcy cl ing Speed Ġ= Ġquery . cycl ing Speed ĊĊĠĠĠ Ġval Ġoptions Ġ= ĠHashMap < String , ĠAny >() ĊĠĠĠ Ġoptions [" from "] Ġ= Ġdepart ure Coordinates ĊĠĠĠ Ġoptions [" to "] Ġ= Ġar rival Coordinates ĊĠĠĠ Ġoptions [" ar rive Before "] Ġ= Ġjava . lang . Long . toString ( ar rive Before ) ĊĠĠĠ Ġoptions [" depart After "] Ġ= Ġjava . lang . Long . toString ( depart After ) ĊĠĠĠ Ġoptions [" unit "] Ġ= Ġunit ĊĠĠĠ Ġoptions [" v "] Ġ= Ġ" 1 2 " ĊĠĠĠ Ġoptions [" tt "] Ġ= ĠInteger . toString ( transfer Time ) ĊĠĠĠ Ġoptions [" ws "] Ġ= ĠInteger . toString ( walk ing Speed ) ĊĠĠĠ Ġoptions [" cs "] Ġ= ĠInteger . toString ( cycl ing Speed ) ĊĠĠĠ Ġoptions [" include Stops "] Ġ= Ġ" 1 " ĊĠĠĠ Ġoptions [" wp "] Ġ= ĠTo Weight ing Profile String . to Weight ing Profile String ( query ) ĊĠĠĠ Ġoptions . put All ( get Params By Preferences ( region Info )) ĊĠĠĠ Ġif Ġ( extra Query Map Provider Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġextra Query Map Ġ= Ġextra Query Map Provider . call () ĊĠĠĠĠĠ Ġoptions . put All ( extra Query Map ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġoptions ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġflat Sub Queries ( query : ĠQuery , Ġtransport Mode Filter : ĠTransport Mode Filter ): ĠObservable < Query > Ġ{ ĊĠĠĠ Ġreturn Ġquery Generator . call ( query , Ġtransport Mode Filter ) ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĠObservable . from ( it ) Ġ} ĊĠ Ġ} Ċ }