package Ġsoftware . or ping ton . ro z klad mp k . route Details Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . support . design . widget . AppBar Layout Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 4 . app . FragmentManager Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Alpha Animation Ċ import Ġcom . eth anh ua . skeleton . Skeleton Ċ import Ġcom . eth anh ua . skeleton . Skeleton Screen Ċ import Ġkotlinx . android . synt hetic . main . activity _ route _ details .* Ċ import Ġkotlinx . android . synt hetic . main . route _ details _ header .* Ċ import Ġsoftware . or ping ton . ro z klad mp k . Injection Ċ import Ġsoftware . or ping ton . ro z klad mp k . R Ċ import Ġsoftware . or ping ton . ro z klad mp k . data . model . Route Info Ċ import Ġsoftware . or ping ton . ro z klad mp k . data . source . ApiClient Ċ import Ġjava . util .* ĊĊ Ċ class ĠRoute Details Activity Ġ: ĠAppCompatActivity (), ĊĠĠĠ ĠRoute Details Contract . Info View , ĊĠĠĠ ĠApp Bar Layout . On Offset Changed Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpresenter : ĠRoute Details Contract . Presenter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstop Name : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġroute ID : ĠString ĊĊĠĠĠ Ġprivate Ġval ĠPER CENT AGE _ TO _ SHOW _ TITLE _ AT _ TOOL BAR Ġ= Ġ 0 . 9 f ĊĠĠĠ Ġprivate Ġval ĠPER CENT AGE _ TO _ HIDE _ TITLE _ DETAILS Ġ= Ġ 0 . 3 f ĊĠĠĠ Ġprivate Ġval ĠAL PH A _ ANIM ATIONS _ DURATION Ġ= Ġ 2 0 0 L ĊĊĠĠĠ Ġprivate Ġvar Ġm Is The Title Visible Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Is The Title Container Visible Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ route _ details ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( findViewById ( R . id . toolbar )) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. title Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġapp Bar Layout . add On Offset Changed Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġroute ID Ġ= Ġintent . getString Extra (" route ID ") ĊĠĠĠĠĠĠĠ Ġstop Name Ġ= Ġintent . getString Extra (" stop Name ") ĊĠĠĠĠĠĠĠ Ġval Ġdirection Ġ= Ġif Ġ( intent . has Extra (" direction ")) Ġintent . getString Extra (" direction ") Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġdepart ure Time Ġ= Ġif Ġ( intent . has Extra (" depart ure Time ")) Ġintent . getString Extra (" depart ure Time ") Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġval ĠhttpClient Ġ= ĠApi Client . get HttpClient ( cacheDir ) ĊĠĠĠĠĠĠĠ Ġpresenter Ġ= ĠRoute Details Presenter ( Injection . provide DataSource ( httpClient )) ĊĠĠĠĠĠĠĠ Ġpresenter . attach Info View ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . set Route ID ( route ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . set Stop Name ( stop Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( direction Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . set Direction ( direction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( depart ure Time Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrip ID Ġ= Ġintent . getInt Extra (" trip ID ", Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . set Depart ure Time ( depart ure Time , Ġtrip ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠsavedInstanceState . get Parcelable < Route Details State >(" state ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . setState ( state ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview Pager . adapter Ġ= ĠRoute Details Pager Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview Pager . off screen Page Limit Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġtab Layout . setup With ViewPager ( view Pager ) ĊĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . register Fragment Lifecycle Callbacks ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠFragment Manager . Fragment Lifecycle Callbacks () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fragment View Created ( fm : ĠFragment Manager , Ġf : ĠFragment , Ġv : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f Ġis ĠRoute Details Contract . Directions View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf . attach Presenter ( presenter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f Ġis ĠRoute Details Contract . Time table View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf . attach Presenter ( presenter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f Ġis ĠRoute Details Contract . Timeline View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf . attach Presenter ( presenter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġpresenter . load Route Info () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( depart ure Time Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Pager . currentItem Ġ= Ġ 2 Ġ// Ġtimeline ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( direction Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Pager . currentItem Ġ= Ġ 1 Ġ// Ġtime table ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . detach Info View () ĊĠĠĠĠĠĠĠ ĠprogressBar Handler . remove Callbacks And Messages ( null ) ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State . put Parcelable (" state ", Ġpresenter . getState ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġoverride Ġfun Ġshow Route Info ( route Info : ĠRoute Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroute Text Ġ= Ġ"${ getString ( R . string . route )} Ġ${ route Info . route ID }" ĊĠĠĠĠĠĠĠ Ġroute _ text view . text Ġ= Ġroute Text ĊĠĠĠĠĠĠĠ Ġstop Name _ text view . text Ġ= Ġstop Name ĊĠĠĠĠĠĠĠ Ġtoolbar Title . text Ġ= Ġ"$ route Text ĠâĢĶ Ġ$ stop Name " ĊĊĠĠĠĠĠĠĠ Ġcarrier _ text view . text Ġ= Ġroute Info . agency Name ĊĠĠĠĠĠĠĠ Ġicon _ image view . setImage Resource ( when Ġ( route Info . is Bus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> ĠR . drawable . bus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> ĠR . drawable . tr am ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġroute Type _ text view . text Ġ= Ġtranslate Route Type ( route Info . route Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġskeleton Screen : ĠS keleton Screen ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval ĠprogressBar Handler Ġ= ĠHandler () ĊĠĠĠ Ġoverride Ġfun Ġshow ProgressBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrunnable Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġskeleton Screen Ġ= ĠS keleton . bind ( header Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( R . layout . route _ details _ skeleton _ header ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠprogressBar Handler . post Delayed ( run nable , Ġ 5 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhide ProgressBar () Ġ{ ĊĠĠĠĠĠĠĠ ĠprogressBar Handler . remove Callbacks And Messages ( null ) ĊĠĠĠĠĠĠĠ Ġskeleton Screen ?. hide () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreport That Something W ent Wrong () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġthere 's Ġreally Ġno Ġspace Ġin Ġthe Ġheader Ġfor Ġany Ġkind Ġof Ġerror Ġreporting ĊĠĠĠĠĠĠĠ Ġ// Ġjust Ġtry Ġto Ġload Ġagain ĊĠĠĠĠĠĠĠ Ġpresenter . load Route Info () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġswitch To Time table Tab () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Pager . currentItem Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġswitch To Timeline Tab () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Pager . currentItem Ġ= Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtranslate Route Type ( route Type : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Language Ġ= ĠLocale . getDefault (). display Language ĊĠĠĠĠĠĠĠ Ġif Ġ( current Language Ġ== Ġ" pol ski ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAPI Ġalready Ġserves Ġroute Ġtypes Ġin ĠPol ish ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġroute Type ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Normal na Ġaut ob us owa " Ġto ĠR . string . normal Bus , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Normal na Ġtr am w aj owa " Ġto ĠR . string . normal Tr am , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ok res owa Ġaut ob us owa " Ġto ĠR . string . season al Bus , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Pod m ie js ka Ġaut ob us owa " Ġto ĠR . string . sub ur ban Bus , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Po sp ies z na Ġaut ob us owa " Ġto ĠR . string . express Bus , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" St ref owa Ġaut ob us owa " Ġto ĠR . string . zone Bus , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" N oc na Ġaut ob us owa " Ġto ĠR . string . night Bus ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! map . containsKey ( route Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUnknown Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġlogging ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġroute Type ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠgetString ( map [ route Type ] !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Offset Changed ( app Bar Layout : ĠApp Bar Layout , Ġvertical Offset : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Scroll Ġ= Ġapp Bar Layout . total Scroll Range ĊĠĠĠĠĠĠĠ Ġval Ġpercentage Ġ= ĠMath . abs ( vertical Offset ). toFloat () Ġ/ Ġmax Scroll . toFloat () ĊĊĠĠĠĠĠĠĠ Ġhandle Alpha On Title ( percentage ) ĊĠĠĠĠĠĠĠ Ġhandle Toolbar Title Visibility ( percentage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Toolbar Title Visibility ( percentage : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( percentage Ġ>= ĠPER CENT AGE _ TO _ SHOW _ TITLE _ AT _ TOOL BAR ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Is The Title Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Alpha Animation ( toolbar Title , ĠAL PH A _ ANIM ATIONS _ DURATION , ĠView . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Is The Title Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Is The Title Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Alpha Animation ( toolbar Title , ĠAL PH A _ ANIM ATIONS _ DURATION , ĠView . IN VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Is The Title Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Alpha On Title ( percentage : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( percentage Ġ>= ĠPER CENT AGE _ TO _ HIDE _ TITLE _ DETAILS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Is The Title Container Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Alpha Animation ( header Layout , ĠAL PH A _ ANIM ATIONS _ DURATION , ĠView . IN VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Is The Title Container Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Is The Title Container Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Alpha Animation ( header Layout , ĠAL PH A _ ANIM ATIONS _ DURATION , ĠView . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Is The Title Container Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Alpha Animation ( v : ĠView , Ġduration : ĠLong , Ġvisibility : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalpha Animation Ġ= Ġif Ġ( visibility Ġ== ĠView . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlpha Animation ( 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlpha Animation ( 1 f , Ġ 0 f ) ĊĊĠĠĠĠĠĠĠ Ġalpha Animation . duration Ġ= Ġduration ĊĠĠĠĠĠĠĠ Ġalpha Animation . fill After Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġv . start Animation ( alpha Animation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item ?. itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ