package Ġcom . am ino graphy . world cities . user list Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . paging . Combined Load States Ċ import Ġandroidx . paging . Load State Ċ import Ġcom . am ino graphy . navigation . deep Link Nav Arg Ċ import Ġcom . am ino graphy . navigation . observe Navigation Ċ import Ġcom . am ino graphy . world cities . navigation . model . UserList Nav Arg Ċ import Ġcom . am ino graphy . world cities . ui . base . Base Fragment Ċ import Ġcom . am ino graphy . world cities . ui . base . adapter . Base Data Holder Ċ import Ġcom . am ino graphy . world cities . ui . base . adapter . On ListItem ClickListener Ċ import Ġcom . am ino graphy . world cities . ui . util . toast Ċ import Ġcom . am ino graphy . world cities . user list . adapter . User ListAdapter Ċ import Ġcom . am ino graphy . world cities . user list . databinding . Fragment UserList Binding Ċ import Ġcom . am ino graphy . world cities . user list . di . inject Component Ċ import Ġcom . am ino graphy . world cities . user list . vm . UserList ViewModel Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* Ġ@ author Ġa mino graphy Ċ Ġ*/ Ċ class ĠUser List Fragment Ġ: ĠBase Fragment < Fragment UserList Binding >(), ĠOn ListItem ClickListener Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel : ĠUser List ViewModel ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġadapter : ĠUser ListAdapter ĊĊĠĠĠ Ġprivate Ġval Ġnav Arg : ĠUser List Nav Arg Ġby Ġdeep Link Nav Arg () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinject Component () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinf late Binding ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ? ĊĠĠĠ Ġ): ĠFragment UserList Binding Ġ= ĠFragment UserList Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Init Views ( root View : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ= Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġadapter . setOn ListItem ClickListener ( this @ UserList Fragment ) ĊĠĠĠĠĠĠĠ Ġadapter . add Load State Listener Ġ{ Ġload State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload State . dec ide ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . isVisible Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow List State Ġ= Ġ{ Ġvisible , Ġtext , Ġimage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list State ImageView . setImage Resource ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list State TextView . text Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . list State . isVisible Ġ= Ġvisible ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit ViewModel () ĊĊĠĠĠĠĠĠĠ Ġtoolbar . set Navigation OnClickListener Ġ{ ĠviewModel . on Navigate Up Clicked () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġobserve Navigation ( viewModel . navigation ) ĊĊĠĠĠĠĠĠĠ Ġval Ġowner Ġ= Ġview Lifecycle Owner ĊĠĠĠĠĠĠĠ ĠviewModel . init ( nav Arg ) ĊĠĠĠĠĠĠĠ ĠviewModel . city Name . observe ( owner ) Ġ{ Ġbinding . toolbar . title Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . search Result . observe ( owner ) Ġ{ Ġadapter . submit Data ( lifecycle , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . errorMessage . observe ( owner ) Ġ{ Ġcontext ?. toast ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Clicked ( data Holder : ĠBase Data Holder ?) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun ĠCom bined Load States . dec ide ( ĊĠĠĠĠĠĠĠ Ġshow Loading : Ġ( Boolean ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġshow List State : Ġ( Boolean , ĠString , ĠInt ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Loading ( refresh Ġis ĠLoad State . Loading ) ĊĊĠĠĠĠĠĠĠ Ġval Ġempty Ġ= Ġsource . append Ġis ĠLoad State . Not Loading ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġsource . append . end Of Pagination Reached ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġadapter . item Count Ġ== Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġerror State Ġ= Ġrefresh Ġas ? ĠLoad State . Error ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Ġ-> Ġshow List State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . result _ not _ found ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ outline _ explore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror State Ġ!= Ġnull Ġ-> Ġshow List State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror State . error . message Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ sad _ cloud ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġshow List State ( false , Ġ"", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }