package Ġcom . eb n rd wan . task . presentation . articles Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġcom . eb n rd wan . task . R Ċ import Ġcom . eb n rd wan . task . data . dto . articles . Article Item Ċ import Ġcom . eb n rd wan . core . data . models . Ui State Ċ import Ġcom . eb n rd wan . task . presentation . Application Controller Ċ import Ġcom . eb n rd wan . core presentation . base . Base Fragment Ċ import Ġcom . eb n rd wan . core presentation . base . export Error View Ċ import Ġcom . eb n rd wan . core presentation . base . export Tv Error Ċ import Ġcom . eb n rd wan . core presentation . base . export _ loading Ċ import Ġcom . eb n rd wan . core presentation . utils . fade Ċ import Ġcom . eb n rd wan . core presentation . utils . hide Ċ import Ġcom . eb n rd wan . core presentation . utils . show Ċ import Ġkotlinx . android . synt hetic . main . fragment _ articles .* Ċ import Ġjava . util . Collections . emptyList Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠArticles Fragment Ġ: ĠBase Fragment () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Layout (): ĠInt Ġ= ĠR . layout . fragment _ articles ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Provider . Factory ĊĠĠĠ Ġprivate Ġval Ġarticles ViewModel Ġby Ġactivity ViewModels < Articles ViewModel > Ġ{ ĠviewModel Factory Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . application Ġas ĠApplication Controller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. app Component . register Article Component () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inject ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ main Adapter : ĠArticles Adapter Paged ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ Ġarticles ViewModel . load Articles () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġval Ġrefresh Listener Ġ= ĠSw ipe Refresh Layout . On Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġarticles ViewModel . reload Articles () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . articles , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġset Listeners () ĊĠĠĠĠĠĠĠ Ġsubscribe To ViewModel Observable s () ĊĠĠĠĠĠĠĠ Ġinitialize Adapter () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġswipe _ refresh . setOn Refresh Listener ( refresh Listener ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe To ViewModel Observable s () Ġ{ ĊĠĠĠĠĠĠĠ Ġarticles ViewModel . get Article List (). observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ main Adapter ?. update Articles ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġobserve On Ui State () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ main Adapter Ġ= Ġactivity ?. let Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArticles Adapter Paged ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Article Item Click ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrv Articles . layout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġrv Articles . adapter Ġ= Ġ_ main Adapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Article Item Click ( article : ĠArticle Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġarticles ViewModel . setSelected Article ( article ) ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArticles Fragment Directions . action Nav Home To Nav Details ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticle . id . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġobserve On Ui State () Ġ{ ĊĠĠĠĠĠĠĠ Ġarticles ViewModel . get Ui State Model (). observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUi State . LOADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUi State . RE LOADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Re loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUi State . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUi State . ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( it . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUi State . NO DATA Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( it . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUi State . NO INTER NET Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( it . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Refresh ing ( refresh ing : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġswipe _ refresh . is Refresh ing Ġ= Ġrefresh ing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Refresh ing ( false ) ĊĠĠĠĠĠĠĠ Ġexport _ loading . show () ĊĠĠĠĠĠĠĠ Ġrv Articles . hide () ĊĠĠĠĠĠĠĠ Ġexport Error View . hide () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Re loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Refresh ing ( true ) ĊĠĠĠĠĠĠĠ Ġexport _ loading . hide () ĊĠĠĠĠĠĠĠ Ġrv Articles . hide () ĊĠĠĠĠĠĠĠ Ġexport Error View . hide () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Refresh ing ( false ) ĊĠĠĠĠĠĠĠ Ġexport _ loading . hide () ĊĠĠĠĠĠĠĠ Ġrv Articles . fade () ĊĠĠĠĠĠĠĠ Ġexport Error View . hide () ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Error ( message : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Refresh ing ( false ) ĊĠĠĠĠĠĠĠ Ġexport Tv Error . text Ġ= ĠgetString ( message ) ĊĠĠĠĠĠĠĠ Ġexport _ loading . hide () ĊĠĠĠĠĠĠĠ Ġrv Articles . hide () ĊĠĠĠĠĠĠĠ Ġexport Error View . fade () ĊĠĠĠ Ġ} ĊĊ Ċ }