package Ġnet . dub lin . bus . ui . view . route . detail Ċ Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . arch . lifecycle . ViewModel Providers Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . widget . PopupMenu Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġkotlinx . android . synt hetic . main . activity _ route _ detail .* Ċ import Ġnet . dub lin . bus . R Ċ import Ġnet . dub lin . bus . common . Analytics Ċ import Ġnet . dub lin . bus . data . route . repository . Route Repository Ċ import Ġnet . dub lin . bus . model . Route Ċ import Ġnet . dub lin . bus . model . Stop Ċ import Ġnet . dub lin . bus . ui . utilities .* Ċ import Ġnet . dub lin . bus . ui . view . main . MainActivity Ċ import Ġnet . dub lin . bus . ui . view . route . detail . list . Route Detail Fragment Ċ import Ġnet . dub lin . bus . ui . view . route . detail . map . Route Detail Map Fragment Ċ import Ġnet . dub lin . bus . ui . view . timetable . Time tables Activity Ċ import Ġjava . util .* Ċ Ċ class ĠRoute Detail Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnumber : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcode : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmodel : ĠRoute Detail ViewModel ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġoutbound : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinbound : ĠString ĊĠĠĠ Ġprivate Ġvar Ġmap : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġmenu Ġ= ĠTreeMap < Int , ĠString >() ĊĠĠĠ Ġprivate Ġvar Ġdirection Current : ĠString Ġ= Ġ" I " ĊĠĠĠ Ġprivate Ġvar Ġroute Name Tow ards : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġmenu Assignment : ĠMenuItem ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB UNDLE _ DIRECTION Ġ= Ġ" bundle _ direction " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB UNDLE _ TO WAR DS Ġ= Ġ" bundle _ tow ards " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ ROUTE _ NUMBER Ġ= Ġ" route _ number " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ ROUTE _ CODE Ġ= Ġ" route _ code " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ ROUTE _ OUT _ TO WAR DS Ġ= Ġ" route _ outbound _ tow ards " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ ROUTE _ IN _ TO WAR DS Ġ= Ġ" route _ inbound _ tow ards " ĊĊĠĠĠĠĠĠĠ Ġfun Ġnavigate ( context : ĠContext , Ġitem : ĠRoute ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠRoute Detail Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ ROUTE _ NUMBER , Ġitem . number ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ ROUTE _ CODE , Ġitem . code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ ROUTE _ OUT _ TO WAR DS , Ġitem . outbound Tow ards Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ ROUTE _ IN _ TO WAR DS , Ġitem . inbound Tow ards Ġ?: Ġ"") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( item . outbound Tow ards ) Ġ|| Ġ! TextUtils . isEmpty ( item . inbound Tow ards )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , ĠR . string . route _ detail _ no _ items , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ route _ detail ) ĊĠĠĠĠĠĠĠ Ġinit Extra ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsetup Toolbar () ĊĠĠĠĠĠĠĠ Ġsetup View () ĊĠĠĠĠĠĠĠ Ġinit Container ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsetup Load Data () ĊĠĠĠĠĠĠĠ Ġload Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĊĠĠĠĠĠĠĠ Ġout State ?. putString ( B UNDLE _ DIRECTION , Ġdirection Current ) ĊĠĠĠĠĠĠĠ Ġout State ?. putString ( B UNDLE _ TO WAR DS , Ġroute Name Tow ards ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . route _ detail , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġmenu Assignment Ġ= Ġmenu . find Item ( R . id . menu _ assignment ) ĊĠĠĠĠĠĠĠ Ġmenu Assignment ?. isVisible Ġ= Ġ! TextUtils . isEmpty ( code ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ assignment Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalytics . send Menu Time tables Event ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTime tables Activity . navigate ( this , Ġnumber , Ġcode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Load Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠRoute Detail ViewModel Factory ( Route Repository ( this )) ĊĠĠĠĠĠĠĠ Ġmodel Ġ= ĠViewModel Providers . of ( this , Ġfactory ). get ( Route Detail ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġmodel . get Stops (). observe ( this , ĠObserver < List < Stop >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute _ count _ view . text Ġ= ĠgetString ( R . string . route _ detail _ size _ stops , Ġit . size . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute _ name _ tow ards _ view . text Ġ= Ġroute Name Tow ards ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonError () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Network Available ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar Error () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar No Connection () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel . load Stops ( number , Ġdirection Current ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreload Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel . reload Stops ( number , Ġdirection Current ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Sn ackBar No Connection () Ġ{ ĊĠĠĠĠĠĠĠ Ġsn ackBar No Connection ( container ) Ġ{ Ġload Data () Ġ}. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Sn ackBar Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġsn ackBar ErrorMessage ( container ) Ġ{ Ġload Data () Ġ}. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. title Ġ= ĠgetString ( R . string . route _ detail _ title , Ġnumber ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup View () Ġ{ ĊĠĠĠĠĠĠĠ Ġroute _ name _ tow ards _ view . text Ġ= Ġroute Name Tow ards ĊĠĠĠĠĠĠĠ Ġmap Ġ= Ġget Show Map At Route Detail () ĊĊĠĠĠĠĠĠĠ Ġroute _ change _ map _ list _ view . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Ġ= Ġ! map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Map Or List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange I co Map Or List () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Detail Activity @ this . save Show Map At Route Detail ( map ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġroute _ change _ direction _ view . setOnClickListener Ġ{ Ġv Ġ-> Ġshow Filter Popup ( v ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Container ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġsupport FragmentManager . find Fragment By Tag (" fragment Base ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull Ġ|| Ġfragment Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Map Or List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġchange I co Map Or List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Event () Ġ{ ĊĠĠĠĠĠĠĠ ĠAnalytics . send Map Or List Property ( this , Ġmap ) ĊĠĠĠĠĠĠĠ ĠAnalytics . send List Or Map Event ( this , Ġmap ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Map Or List () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Content ( Route Detail Map Fragment . newInstance ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Content ( Route Detail Fragment . newInstance ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange I co Map Or List () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute _ change _ map _ list _ view . setImage Resource ( R . drawable . ic _ view _ list _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute _ change _ map _ list _ view . setImage Resource ( R . drawable . ic _ map _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Filter Popup ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpopup Ġ= ĠPopup Menu ( this , Ġv ) ĊĊĠĠĠĠĠĠĠ Ġmenu . entries . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup . menu . add ( 0 , Ġit . key , Ġ 0 , Ġit . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpopup . show () ĊĠĠĠĠĠĠĠ Ġpopup . setOn MenuItem ClickListener Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Inbound () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange To Outbound () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Inbound () Ġ{ ĊĠĠĠĠĠĠĠ Ġroute Name Tow ards Ġ= Ġinbound ĊĠĠĠĠĠĠĠ Ġdirection Current Ġ= Ġ" I " ĊĠĠĠĠĠĠĠ Ġreload Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange To Outbound () Ġ{ ĊĠĠĠĠĠĠĠ Ġroute Name Tow ards Ġ= Ġoutbound ĊĠĠĠĠĠĠĠ Ġdirection Current Ġ= Ġ" O " ĊĠĠĠĠĠĠĠ Ġreload Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Extra ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġnumber Ġ= Ġintent . getString Extra ( EXTRA _ ROUTE _ NUMBER ) ĊĠĠĠĠĠĠĠ Ġcode Ġ= Ġintent . getString Extra ( EXTRA _ ROUTE _ CODE ) ĊĊĠĠĠĠĠĠĠ Ġoutbound Ġ= Ġintent . getString Extra ( EXTRA _ ROUTE _ OUT _ TO WAR DS ) ĊĠĠĠĠĠĠĠ Ġinbound Ġ= Ġintent . getString Extra ( EXTRA _ ROUTE _ IN _ TO WAR DS ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! outbound . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu [ 2 ] Ġ= Ġoutbound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Current Ġ= Ġ" O " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute Name Tow ards Ġ= Ġoutbound ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! inbound . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu [ 1 ] Ġ= Ġinbound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Current Ġ= Ġ" I " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute Name Tow ards Ġ= Ġinbound ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Current Ġ= ĠsavedInstanceState . getString ( B UNDLE _ DIRECTION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute Name Tow ards Ġ= ĠsavedInstanceState . getString ( B UNDLE _ TO WAR DS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġswitch Content ( fragment : ĠFragment ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . replace ( R . id . container , Ġfragment , Ġ" fragment Base ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . commit Allow ing State Loss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( MainActivity :: class . java . name , Ġ" Error Ġin Ġshow Ġview ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ