package Ġcom . commit 4 5 1 . gitlab . fragment Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . design . widget . Snackbar Ċ import Ġandroid . support . v 4 . widget . Swipe Refresh Layout Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . Spinner Ċ import Ġandroid . widget . TextView Ċ import Ġbutter knife . BindView Ċ import Ġbutter knife . OnClick Ċ import Ġcom . commit 4 5 1 . gitlab . App Ċ import Ġcom . commit 4 5 1 . gitlab . R Ċ import Ġcom . commit 4 5 1 . gitlab . activity . Project Activity Ċ import Ġcom . commit 4 5 1 . gitlab . adapter . Divider Item Decoration Ċ import Ġcom . commit 4 5 1 . gitlab . adapter . M ilestone Adapter Ċ import Ġcom . commit 4 5 1 . gitlab . event . M ilestone Changed Event Ċ import Ġcom . commit 4 5 1 . gitlab . event . M ilestone Created Event Ċ import Ġcom . commit 4 5 1 . gitlab . event . Project Reload Event Ċ import Ġcom . commit 4 5 1 . gitlab . extension . with Ċ import Ġcom . commit 4 5 1 . gitlab . model . api . M ilestone Ċ import Ġcom . commit 4 5 1 . gitlab . model . api . Project Ċ import Ġcom . commit 4 5 1 . gitlab . navigation . Navigator Ċ import Ġcom . commit 4 5 1 . gitlab . rx . Custom Response Single Observer Ċ import Ġcom . commit 4 5 1 . gitlab . util . Link Header Parser Ċ import Ġorg . green robot . event bus . Subscribe Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠM ilestones Fragment Ġ: ĠB utter Kn ife Fragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠM ilestones Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠM ilestones Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ BindView ( R . id . root ) ĊĠĠĠ Ġlateinit Ġvar Ġroot : ĠViewGroup ĊĠĠĠ Ġ@ BindView ( R . id . swipe _ layout ) ĊĠĠĠ Ġlateinit Ġvar Ġswipe Refresh Layout : ĠSw ipe Refresh Layout ĊĠĠĠ Ġ@ BindView ( R . id . list ) ĊĠĠĠ Ġlateinit Ġvar Ġlist M ilestones : ĠRecyclerView ĊĠĠĠ Ġ@ BindView ( R . id . message _ text ) ĊĠĠĠ Ġlateinit Ġvar Ġtext Message : ĠTextView ĊĠĠĠ Ġ@ BindView ( R . id . state _ spinner ) ĊĠĠĠ Ġlateinit Ġvar Ġspinner States : ĠSp inner ĊĊĠĠĠ Ġlateinit Ġvar Ġadapter M ilestones : ĠM ilestone Adapter ĊĠĠĠ Ġlateinit Ġvar Ġlayout Manager M ilestones : ĠLinearLayoutManager ĊĊĠĠĠ Ġvar Ġstate : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġstates : ĠArray < String > ĊĠĠĠ Ġvar Ġproject : ĠProject ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġloading Ġ= Ġfalse ĊĠĠĠ Ġvar Ġnext Page Url : ĠUri ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġm On Scroll Listener Ġ= Ġobject Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView ?, Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvisible ItemCount Ġ= Ġlayout Manager M ilestones . child Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal ItemCount Ġ= Ġlayout Manager M ilestones . item Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Visible Item Ġ= Ġlayout Manager M ilestones . findFirst Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Visible Item Ġ+ Ġvisible ItemCount Ġ>= Ġtotal ItemCount Ġ&& Ġ! loading Ġ&& Ġnext Page Url Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload More () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ OnClick ( R . id . add ) ĊĠĠĠ Ġfun Ġon Add Clicked ( fab : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( project Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigator . navigate ToAdd M ilestone ( base Activ ty , Ġfab , Ġproject !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( root , ĠgetString ( R . string . wait _ for _ project _ to _ load ), ĠSn ackbar . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġstate Ġ= Ġresources . getString ( R . string . milestone _ state _ value _ default ) ĊĠĠĠĠĠĠĠ Ġstates Ġ= Ġresources . getString Array ( R . array . milestone _ state _ values ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ m ilestones , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠApp . bus (). register ( this ) ĊĊĠĠĠĠĠĠĠ Ġadapter M ilestones Ġ= ĠM ilestone Adapter ( object Ġ: ĠM ilestone Adapter . Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon M ilestone Clicked ( milestone : ĠM ilestone ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigator . navigate To M ilestone ( base Activ ty , Ġproject !! , Ġmilestone ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġlayout Manager M ilestones Ġ= ĠLinearLayoutManager ( activity ) ĊĠĠĠĠĠĠĠ Ġlist M ilestones . layout Manager Ġ= Ġlayout Manager M ilestones ĊĠĠĠĠĠĠĠ Ġlist M ilestones . addItem Decoration ( Divider Item Decoration ( base Activ ty )) ĊĠĠĠĠĠĠĠ Ġlist M ilestones . adapter Ġ= Ġadapter M ilestones ĊĠĠĠĠĠĠĠ Ġlist M ilestones . add On Scroll Listener ( m On Scroll Listener ) ĊĊĠĠĠĠĠĠĠ Ġspinner States . adapter Ġ= ĠArray Adapter ( activity , Ġandroid . R . layout . simple _ list _ item _ 1 , Ġandroid . R . id . text 1 , Ġresources . getString Array ( R . array . milestone _ state _ names )) ĊĠĠĠĠĠĠĠ Ġspinner States . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġstates [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġswipe Refresh Layout . setOn Refresh Listener Ġ{ Ġload Data () Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġis ĠProject Activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Ġ= Ġ( activity Ġas ĠProject Activity ). project ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Data () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Incorrect Ġparent Ġactivity ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ ĠApp . bus (). unregister ( this ) ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Message . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġnext Page Url Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġloading Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠApp . get (). git Lab . getM ilestones ( project !!. id , Ġstate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( object Ġ: ĠCustom Response Single Observer < List < M ilestone >>() Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġerror ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Message . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Message . setText ( R . string . connection _ error _ m ilestones ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter M ilestones . setData ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Page Url Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġresponse NonNull Success ( m ilestones : ĠList < M ilestone >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m ilestones . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Message . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Message . setText ( R . string . no _ m ilestones ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter M ilestones . setData ( m ilestones ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Page Url Ġ= ĠLink Header Parser . parse ( response ()). next ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Next Ġpage Ġurl Ġ" Ġ+ Ġnext Page Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload More () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( next Page Url Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġloading Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġadapter M ilestones . set Loading ( true ) ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" load More Ġcalled Ġfor Ġ" Ġ+ Ġnext Page Url !! ) ĊĠĠĠĠĠĠĠ ĠApp . get (). git Lab . getM ilestones ( next Page Url !!. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( object Ġ: ĠCustom Response Single Observer < List < M ilestone >>() Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġerror ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter M ilestones . set Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġresponse NonNull Success ( m ilestones : ĠList < M ilestone >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter M ilestones . set Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Page Url Ġ= ĠLink Header Parser . parse ( response ()). next ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter M ilestones . addData ( m ilestones ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe ĊĠĠĠ Ġfun Ġon Event ( event : ĠProject Reload Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject Ġ= Ġevent . project ĊĠĠĠĠĠĠĠ Ġload Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe ĊĠĠĠ Ġfun Ġon Event ( event : ĠM ilestone Created Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter M ilestones . add M ilestone ( event . milestone ) ĊĠĠĠĠĠĠĠ Ġtext Message . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġlist M ilestones . smooth Scroll To Position ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe ĊĠĠĠ Ġfun Ġon Event ( event : ĠM ilestone Changed Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter M ilestones . update Issue ( event . milestone ) ĊĠĠĠ Ġ} Ċ } Ċ