package Ġcom . me lo die . par ot ia . ui . feed Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . paging . Load State Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . St agger ed Grid LayoutManager Ċ import Ġcom . me lo die . par ot ia . R Ċ import Ġcom . me lo die . par ot ia . databinding . Fragment Feed List Binding Ċ import Ġcom . me lo die . par ot ia . ui . list . Par ot ia Load State Adapter Ċ import Ġcom . me lo die . par ot ia . ui . list . Photo Paging Adapter Ċ import Ġcom . me lo die . par ot ia . widget . Spacing Decoration Ċ import Ġjavax . inject . Inject Ċ Ċ abstract Ġclass ĠFeed List Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprotected Ġabstract Ġval ĠviewModel : ĠViewModel ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġadapter : ĠPhoto Paging Adapter ĊĠĠĠ Ġlateinit Ġvar Ġbinding : ĠFragment Feed List Binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Feed List Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġobserve UI Data () ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsetup RecyclerView ( binding . re cyclerView ) ĊĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . refresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . set Retry Click Ġ{ Ġadapter . retry () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup RecyclerView ( view : ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġview . addItem Decoration ( Spacing Decoration ()) ĊĠĠĠĠĠĠĠ Ġview . layout Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSt agger ed Grid LayoutManager ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. resources ?. getInteger ( R . integer . photo _ spans ) Ġ?: Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSt agger ed Grid LayoutManager . VERTICAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview . adapter Ġ= Ġadapter . with Load State Footer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPar ot ia Load State Adapter Ġ{ Ġadapter . retry () Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġadapter . add Load State Listener Ġ{ Ġload State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShow Ġthe Ġlist Ġin Ġtwo Ġcases : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 . Ġrefresh Ġsucceeds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġrefresh Ġsucceeds Ġand Ġuser Ġforces Ġa Ġrefresh Ġby Ġsw ip ing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . isVisible Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload State . source . refresh Ġis ĠLoad State . Not Loading Ġ|| Ġadapter . item Count Ġ> Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . isVisible Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload State . source . refresh Ġis ĠLoad State . Loading Ġ&& Ġadapter . item Count Ġ== Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . retry Button . isVisible Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload State . source . refresh Ġis ĠLoad State . Error Ġ&& Ġadapter . item Count Ġ== Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( load State . source . refresh Ġis ĠLoad State . Not Loading Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload State . source . refresh Ġis ĠLoad State . Error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . swipe Refresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠToast Ġon Ġany Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror State Ġ= Ġload State . source . refresh Ġas ? ĠLoad State . Error ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġload State . source . append Ġas ? ĠLoad State . Error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror State ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġit . error . toString (), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġis Ġwhere Ġwe Ġshould Ġstart Ġto Ġobserve Ġdata Ġfor Ġthe ĠUI . ĠThe Ġear liest Ġplace Ġto Ġput Ġit Ġis ĊĠĠĠĠ Ġ* Ġin ĠonCreate View () Ġsince Ġwe Ġare Ġgoing Ġto Ġrely Ġon ĠView Lifecycle Owner Ġrather Ġthan ĠLifecycle Owner . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġobserve UI Data () Ċ } Ċ