package Ġcom . k ier an . win ni peg bus . activities Ċ Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . hardware . Sensor Ċ import Ġandroid . hardware . Sensor Manager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . ListView Ċ import Ġandroid . widget . TextView Ċ import Ġcom . k ier an . win ni peg bus . R Ċ import Ġcom . k ier an . win ni peg bus . Sh ake Detector Ċ import Ġcom . k ier an . win ni peg bus . adapters . Stop Time Adapter Ċ import Ġcom . k ier an . win ni peg bus . views . Styled Swipe Refresh Ċ import Ġcom . k ier an . win ni peg bus backend . agency . win ni peg transit . Trip Planner . classes . Stop Location Ċ import Ġcom . k ier an . win ni peg bus backend . agency . win ni peg transit . Trip Planner . classes . Trip Parameters Ċ import Ġcom . k ier an . win ni peg bus backend . common .* Ċ import Ġcom . k ier an . win ni peg bus backend . enums . Supported Feature Ċ import Ġcom . k ier an . win ni peg bus backend . interfaces . Route Identifier Ċ // import Ġcom . roll bar . android . Roll bar Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ Ċ class ĠStop Times Activity Ġ: ĠBase Activity (), ĠSw ipe Refresh Layout . On Refresh Listener , ĠAdapter View . On ItemClickListener , ĠSh ake Detector . On Sh ake Listener Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġstop Schedule : ĠStop Schedule ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġstop Name : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġloading Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġstops Ġ= ĠArrayList < Scheduled Stop >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠStop Time Adapter ĊĠĠĠ Ġprivate Ġval Ġroute Number Filter Ġ= ĠArrayList < Route Identifier >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtitle : ĠTextView ĊĠĠĠ Ġprivate Ġvar Ġselected Routes : ĠBoolean Array ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġroute Filter Routes Ġ= ĠArrayList < Route >() ĊĠĠĠ Ġprivate Ġvar Ġload Stop Times Task : ĠJob ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsensor Manager : ĠSensor Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġaccel erometer : ĠSensor ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsh ake Detector : ĠSh ake Detector ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġhas Filter Changed : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġswipe Refresh Layout : ĠStyled Swipe Refresh ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlast Updated View : ĠTextView ĊĠĠĠ Ġprivate Ġvar Ġlast Updated : ĠStop Time ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġfavour ite Button : ĠMenuItem ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfavour ite Stop : ĠF avour ite Stop ĊĊĠĠĠ Ġprivate Ġval Ġschedule EndTime : ĠStop Time ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefs Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠendTime Ġ= ĠStop Time () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠendTime . increase Hour ( Integer . parseInt ( prefs . getString ( getString ( R . string . pref _ schedule _ load _ interval ), Ġ" 4 ") !! )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠendTime ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ stop _ times ) ĊĊĠĠĠĠĠĠĠ Ġad View Res Id Ġ= ĠR . id . stop Times Ad View ĊĊĠĠĠĠĠĠĠ Ġval ĠlistView Ġ= ĠfindViewById < ListView >( R . id . stop _ times _ list view ) !! ĊĊĠĠĠĠĠĠĠ Ġswipe Refresh Layout Ġ= ĠfindViewById ( R . id . stop _ times _ swipe _ refresh ) ĊĠĠĠĠĠĠĠ Ġswipe Refresh Layout !!. setOn Refresh Listener ( this ) ĊĊĊĠĠĠĠĠĠĠ ĠlistView . on ItemClickListener Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠStop Time Adapter ( this , ĠR . layout . list view _ stop _ times _ row , Ġstops ) ĊĠĠĠĠĠĠĠ ĠlistView . add Header View ( layout Inflater . inflate ( R . layout . list view _ stop _ times _ header , Ġnull )) ĊĠĠĠĠĠĠĠ ĠlistView . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġintent ĊĊĠĠĠĠĠĠĠ Ġtitle Ġ= ĠfindViewById ( R . id . list View _ stop _ times _ header _ text ) ĊĠĠĠĠĠĠĠ Ġlast Updated View Ġ= ĠfindViewById ( R . id . stop _ times _ header _ last _ updated ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstop Extra Ġ= Ġintent . get Serializable Extra ( STOP ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstop Ġ= Ġstop Extra Ġas ĠF avour ite Stop ĊĠĠĠĠĠĠĠ Ġfavour ite Stop Ġ= Ġstop ĊĊĠĠĠĠĠĠĠ Ġif Ġ( fav our ite Stop . id Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting F avour ites Ġ= Ġfavour ites Service . getAll () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting F avour ite Ġ= Ġexisting F avour ites . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . identifier Ġ== Ġfavour ite Stop . identifier Ġ&& Ġit . routes Ġ== Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing F avour ite Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavour ite Stop Ġ= Ġexisting F avour ite ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( stop . routes Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute Number Filter . addAll ( stop . routes !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Routes Ġ= ĠBoolean Array ( route Number Filter . size ) Ġ{ Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstop Name Ġ= Ġstop . name ĊĠĠĠĠĠĠĠ Ġtitle . text Ġ= Ġstop Name ĊĊĠĠĠĠĠĠĠ ĠsetTitle ( String . format ( Locale . CAN ADA , ĠACTION BAR _ TEXT , Ġstop . identifier . toString ())) ĊĊĠĠĠĠĠĠĠ Ġinitialize Ads If Enabled () ĊĠĠĠĠĠĠĠ Ġcreate Sh ake Listener () ĊĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Sh ake Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpackage Manager Ġ= Ġpackage Manager ĊĊĠĠĠĠĠĠĠ Ġif Ġ( package Manager . has System Feature ( PackageManager . FEATURE _ SENSOR _ AC CEL ERO METER )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Manager Ġ= Ġget System Service ( Context . SENSOR _ SERVICE ) Ġas ĠSensor Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccel erometer Ġ= Ġsensor Manager !!. getDefault Sensor ( Sensor . TYPE _ AC CEL ERO METER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsh ake Detector Ġ= ĠSh ake Detector ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( load Stop Times Task Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Stop Times Task !!. cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sensor Manager Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Manager !!. register Listener ( shake Detector , Ġaccel erometer , ĠSensor Manager . SENSOR _ DELAY _ UI ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Boolean Setting Enabled (" pref _ refresh _ on _ resume ", Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Updated Ġ!= Ġnull Ġ&& ĠSystem . currentTimeMillis () Ġ- ĠStatic Config . STOP _ TIMES _ MIN _ AUTO _ REFRESH _ MILLISECONDS _ DELTA Ġ> Ġlast Updated !!. milliseconds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sensor Manager Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Manager !!. unregister Listener ( shake Detector ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Additional Info ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent : ĠIntent ĊĠĠĠĠĠĠĠ Ġif Ġ( stop Schedule Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠIntent ( this , ĠStop Info Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Stop Info Activity . STOP _ FEATURES , Ġstop Schedule !!. create Stop Features ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠIntent ( this , ĠScheduled Stop Info Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Scheduled Stop Info Activity . STOP _ EXTRA , Ġstops [ position Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Times () Ġ{ ĊĠĠĠĠĠĠĠ Ġload Stop Times Task Ġ= ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstop Schedule Ġ= Ġtransit Service . get Stop Schedule ( fav our ite Stop . identifier , Ġnull , Ġschedule EndTime , Ġroute Number Filter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstops . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstops . addAll ( stop Schedule . scheduled Stops Sorted ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Name Ġ= Ġstop Schedule . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle . text Ġ= Ġstop Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Stop Times Activity . stop Schedule Ġ= Ġstop Schedule ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoll bar . instance ()?. error ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( ex ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stop Schedule Ġ== Ġnull Ġ&& Ġex Ġis ĠIOException ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle . setText ( R . string . network _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Updated Ġ= ĠStop Time () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Updated View . text Ġ= ĠString . format ( UPDATED _ STRING , Ġlast Updated !!. to Formatted String ( null , Ġtime Setting )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout !!. is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavour ite Button ?. icon Ġ= Ġget F avour ites Button Drawable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ stop _ times , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfeatures Ġ= Ġtransit Service . supported Features () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( features . contains ( Supported Feature . TR IP _ PLAN NING )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . trip _ planner ). isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfavour ite Button Ġ= Ġmenu . find Item ( R . id . add _ to _ fav our ites _ button ) ĊĠĠĠĠĠĠĠ Ġfavour ite Button ?. icon Ġ= Ġget F avour ites Button Drawable () ĊĠĠĠĠĠĠĠ Ġon Options ItemSelected ( menu . find Item ( R . id . action _ refresh )) Ġ// man ually Ġclick Ġthe Ġrefresh Ġbutton , Ġthis Ġis Ġthe Ġonly Ġway Ġthe Ġswipe Ġrefresh Ġloading Ġspinner Ġworks Ġcorrectly Ġon Ġinitial Ġload . ĠNot Ġhappy Ġwith Ġthis Ġbut Ġit Ġwas Ġthe Ġonly Ġway ĠI Ġcould Ġget Ġit Ġto Ġwork ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget F avour ites Button Drawable (): ĠDrawable Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtheme Id Ġ= Ġtheme Res Id ĊĠĠĠĠĠĠĠ Ġval Ġdrawable Id : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġfilter Matches Ġ= Ġdoes Filter Match Routes () ĊĊĠĠĠĠĠĠĠ Ġdrawable Id Ġ= Ġif Ġ( fav our ite Stop . id Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filter Matches Ġ&& Ġfavour ite Stop . routes Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( theme Id Ġ== ĠR . style . Light ) ĠR . drawable . ic _ filtered _ fav our ite _ light Ġelse ĠR . drawable . ic _ filtered _ fav our ite _ dark ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( fav our ite Stop . routes Ġ== Ġnull Ġ&& Ġ! route Number Filter . any ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( theme Id Ġ== ĠR . style . Light ) ĠR . drawable . ic _ fav our ite _ stops _ light Ġelse ĠR . drawable . ic _ fav our ite _ stops _ dark ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( theme Id Ġ== ĠR . style . Light ) ĠR . drawable . ic _ add _ to _ fav our ites _ light Ġelse ĠR . drawable . ic _ add _ to _ fav our ites _ dark ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( theme Id Ġ== ĠR . style . Light ) ĠR . drawable . ic _ add _ to _ fav our ites _ light Ġelse ĠR . drawable . ic _ add _ to _ fav our ites _ dark ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresources . get Drawable ( drawable Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdoes Filter Match Routes (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( stop Schedule Ġ== Ġnull Ġ|| Ġfavour ite Stop . routes Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( fav our ite Stop . routes !!. count () Ġ!= Ġstop Schedule !!. get Route List (). count ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( route Identifier Ġin Ġfavour ite Stop . routes !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfound Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( route Ġin Ġstop Schedule !!. get Route List ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( route . route Identifier Ġ== Ġroute Identifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Online ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . load Time Setting () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Times () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Long To aster ( R . string . network _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġswipe Refresh Layout !!. is Refresh ing Ġ= Ġloading ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ refresh Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . add _ to _ fav our ites _ button Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle F avour ites Click ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ filter Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! loading Ġ&& Ġstop Schedule Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Filter Window () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Long To aster ( R . string . wait _ for _ load ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . get _ directions _ button Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠTrip Planner Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= ĠTrip Parameters () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . origin Ġ= ĠStop Location ( stop Schedule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Trip Planner Activity . PARAMETERS , Ġparameters ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle F avour ites Click ( item : ĠMenuItem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fav our ite Stop . id Ġ> Ġ 0 Ġ&& Ġ(( fav our ite Stop . routes Ġ== Ġnull Ġ&& Ġ! route Number Filter . any ()) Ġ|| Ġdoes Filter Match Routes ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Delete F avour ite Dialog ( item ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( stop Name Ġ!= Ġnull Ġ&& Ġstop Name Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew F avour ite Stop Ġ= Ġfavour ites Service . add ( F avour ite Stop ( stop Name !! , Ġfavour ite Stop . identifier , Ġroutes Ġ= Ġroute Number Filter )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new F avour ite Stop Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavour ite Stop Ġ= Ġnew F avour ite Stop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . icon Ġ= Ġget F avour ites Button Drawable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Short To aster ( R . string . unknown _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Long To aster ( R . string . wait _ for _ load ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Delete F avour ite Dialog ( item : ĠMenuItem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalert Dialog Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠ Ġalert Dialog . setMessage ( DELETE _ THIS _ FA VO UR ITE ) ĊĊĠĠĠĠĠĠĠ Ġalert Dialog . set Positive Button ( R . string . yes ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfavour ites Service . delete ( fav our ite Stop . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfavour ite Stop Ġ= ĠF avour ite Stop ( fav our ite Stop . name , Ġfavour ite Stop . identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . icon Ġ= Ġget F avour ites Button Drawable () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġalert Dialog . set Negative Button ( R . string . no , Ġnull ) ĊĠĠĠĠĠĠĠ Ġalert Dialog . create (). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Filter Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( stop Schedule Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Filter Changed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Dialog Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Dialog . setTitle ( R . string . filter _ dialog _ title ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( route Filter Routes . size Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Filter Routes () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( route Filter Routes . size Ġ< Ġstop Schedule !!. get Route List (). size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Filter Routes . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Filter Routes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Sequence Ġ= ĠarrayOf Null s < CharSequence >( route Filter Routes . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Routes Ġ== Ġnull Ġ|| Ġ( selected Routes !!. size Ġ< Ġstop Schedule !!. get Route List (). size )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Routes Ġ= ĠBoolean Array ( route Filter Routes . size ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġchar Sequence . indices ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar Sequence [ i ] Ġ= Ġroute Filter Routes [ i ]. toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Dialog . set Multi Choice Items ( char Sequence , Ġselected Routes ) Ġ{ Ġ_, Ġwhich , Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Filter Changed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Number Ġ= Ġroute Filter Routes [ which ]. route Identifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Routes ! ![ which ] Ġ= Ġis Checked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Number Filter . add ( route Number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Number Filter . remove ( route Number ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Dialog . set Positive Button ( FILTER _ POSITIVE ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Filter Changed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Dialog . set Neutral Button ( R . string . clear _ filter ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Number Filter . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Routes Ġ= ĠBoolean Array ( route Filter Routes . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Dialog . create (). show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Long To aster ( R . string . wait _ for _ load ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Filter Routes () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( route Schedule Ġin Ġstop Schedule !!. get Route List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute Filter Routes . add ( Route ( route Schedule )) ĊĊĠĠĠĠĠĠĠ Ġroute Filter Routes . sort () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( parent : ĠAdapter View <* >, Ġview : ĠView , Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġopen Additional Info ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Sh ake () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Boolean Setting Enabled (" pref _ refresh _ on _ shake ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFILTER _ POSITIVE Ġ= Ġ" Done " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTOP Ġ= Ġ" stop " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠUP D ATED _ STRING Ġ= Ġ" Updated Ġ% s " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION BAR _ TEXT Ġ= Ġ" Stop Ġ% s " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDELETE _ THIS _ FA VO UR ITE Ġ= Ġ" Delete Ġthis ĠF avour ite ?" ĊĠĠĠ Ġ} Ċ }