package Ġio . github . br un og ab riel . rick mort y . main . episodes . presentation . fragment Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġdagger . android . support . D agger Fragment Ċ import Ġio . github . br un og ab riel . rick mort y . main . databinding . Fragment Episode s Binding Ċ import Ġio . github . br un og ab riel . rick mort y . main . episodes . presentation . adapter . Episode RecyclerView Adapter Ċ import Ġio . github . br un og ab riel . rick mort y . main . episodes . presentation . view model . Episode ViewModel Ċ import Ġio . github . br un og ab riel . rick mort y . network . result . Network Result Ċ import Ġio . github . br un og ab riel . rick mort y . shared . exception . Pagination Exception Ċ import Ġio . github . br un og ab riel . rick mort y . shared . extensions . hide Ċ import Ġio . github . br un og ab riel . rick mort y . shared . extensions . show Ċ import Ġio . github . br un og ab riel . rick mort y . shared . recyclerview . adapter . Generic Item Ċ import Ġio . github . br un og ab riel . rick mort y . shared . recyclerview . pagination . Recycler Pagination Listener Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠEp isode s Fragment Ġ: ĠD agger Fragment () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel : ĠEp isode ViewModel ĊĊĠĠĠ Ġprivate Ġvar Ġis First Loading Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġvar Ġpage Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġvar Ġloaded All Items Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġre cyclerView Adapter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠEp isode RecyclerView Adapter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load Data ( page ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Episode s Binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Episode s Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġlisten Events () ĊĠĠĠĠĠĠĠ Ġsetup View () ĊĠĠĠĠĠĠĠ ĠviewModel . load Data ( page ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġsetup View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Re cycle View () ĊĠĠĠĠĠĠĠ Ġbinding . try Again View . bind Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load Data ( page ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Re cycle View () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( binding . re cyclerView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġre cyclerView Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Scroll Listener ( Recycler Pagination Listener ( layout Manager Ġas ĠLinearLayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is First Loading . not () Ġ&& Ġre cyclerView Adapter . is Last Item Loading Or Try Again () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. not () Ġ&& Ġloaded All Items . not () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load Data ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlisten Events () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . episode Result . collect Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNetwork Result . Loading Ġ-> Ġtreat Loading Event () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNetwork Result . Error Ġ-> Ġtreat Error Event ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNetwork Result . Success Ġ-> Ġtreat Success Event ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNetwork Result . None Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtreat Success Event ( result : ĠNetwork Result . Success < List < Any >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġis First Loading Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . try Again View . hide () ĊĠĠĠĠĠĠĠ Ġbinding . shim mer Layout . hide () ĊĠĠĠĠĠĠĠ Ġre cyclerView Adapter . add Models ( Generic Item . View ( result . data )) ĊĠĠĠĠĠĠĠ Ġpage ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtreat Error Event ( result : ĠNetwork Result . Error ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . shim mer Layout . hide () ĊĠĠĠĠĠĠĠ Ġif Ġ( result . throwable Ġis ĠPagination Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloaded All Items Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView Adapter . remove Loading Or Try Again () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is First Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . try Again View . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView Adapter . add Try Again () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtreat Loading Event () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . try Again View . hide () ĊĠĠĠĠĠĠĠ Ġif Ġ( is First Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . shim mer Layout . show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView Adapter . add Loading () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġbinding . shim mer Layout . start Sh im mer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġbinding . shim mer Layout . stop Sh im mer () ĊĠĠĠ Ġ} Ċ } ĊĊ