package Ġsoftware . or ping ton . ro z klad mp k . home . news List Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . support . constraint . Group Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . TextView Ċ import Ġkotlinx . android . synt hetic . main . home _ news _ error . view .* Ċ import Ġkotlinx . android . synt hetic . main . home _ news _ item . view .* Ċ import Ġsoftware . or ping ton . ro z klad mp k . R Ċ import Ġsoftware . or ping ton . ro z klad mp k . data . model . News Item Ċ Ċ class ĠNews ListAdapter ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġpresenter : ĠNews List Presenter Ċ ) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠITEM _ TYPE _ PROGRESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( context ). inflate ( R . layout . home _ news _ progress , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDummy ViewHolder ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠITEM _ TYPE _ FAILED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( context ). inflate ( R . layout . home _ news _ error , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError ViewHolder ( view , Ġpresenter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( context ). inflate ( R . layout . home _ news _ item , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNews ViewHolder ( view , Ġpresenter ) Ġ{ Ġis Clickable Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġitems : ĠMutable List < ViewModel > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġitems . size ĊĊĠĠĠ Ġfun Ġadd Items ( data : ĠList < News Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġitems . size ĊĠĠĠĠĠĠĠ Ġitems . addAll ( data . map Ġ{ Ġit Ġ-> ĠViewModel . News ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġnotify Item Range Inserted ( position , Ġdata . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġappend Item ( item : ĠViewModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġitems . size ĊĠĠĠĠĠĠĠ Ġitems . add ( item ) ĊĠĠĠĠĠĠĠ Ġnotify Item Inserted ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Item ( item : ĠViewModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġitems . indexOf ( item ) ĊĠĠĠĠĠĠĠ Ġitems . remove ( item ) ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( idx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow ProgressBar () Ġ= Ġappend Item ( ViewModel . Progress ) ĊĠĠĠ Ġfun Ġhide ProgressBar () Ġ= Ġremove Item ( ViewModel . Progress ) ĊĠĠĠ Ġfun Ġshow Error () Ġ= Ġappend Item ( ViewModel . Error ) ĊĠĠĠ Ġfun Ġhide Data Failed To Load () Ġ= Ġremove Item ( ViewModel . Error ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġitems [ position ] ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠViewModel . News Ġ-> Ġ( holder Ġas ĠNews ViewHolder ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . text Ġ= Ġitem . data . a ffect s Day ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle . text Ġ= Ġitem . data . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsyn opsis . text Ġ= Ġitem . data . syn opsis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . text Ġ= Ġitem . data . a ffect s Lines ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines Group . visibility Ġ= Ġif Ġ( item . data . a ffect s Lines . isEmpty ()) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( items [ position ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠViewModel . News Ġ-> ĠITEM _ TYPE _ NE WS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠViewModel . Error Ġ-> ĠITEM _ TYPE _ FAILED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠViewModel . End Ġ-> ĠITEM _ TYPE _ END ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠViewModel . Progress Ġ-> ĠITEM _ TYPE _ PROGRESS ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠITEM _ TYPE _ NE WS Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval ĠITEM _ TYPE _ FAILED Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġval ĠITEM _ TYPE _ END Ġ= Ġ 2 ĊĠĠĠ Ġprivate Ġval ĠITEM _ TYPE _ PROGRESS Ġ= Ġ 2 ĊĠĠĠ Ġvar Ġis Clickable : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġsealed Ġclass ĠViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠNews ( val Ġdata : ĠNews Item ) Ġ: ĠViewModel () ĊĠĠĠĠĠĠĠ Ġobject ĠError Ġ: ĠViewModel () ĊĠĠĠĠĠĠĠ Ġobject ĠEnd Ġ: ĠViewModel () ĊĠĠĠĠĠĠĠ Ġobject ĠProgress Ġ: ĠViewModel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠNews ViewHolder ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġview : ĠView , ĊĠĠĠĠĠĠĠ Ġpresenter : ĠNews List Presenter , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġclick able : Ġ() Ġ-> ĠBoolean ĊĠĠĠ Ġ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate : ĠTextView Ġ= Ġview . news Card _ date ĊĠĠĠĠĠĠĠ Ġval Ġlines Group : ĠGroup Ġ= Ġview . news Card _ lines Group ĊĠĠĠĠĠĠĠ Ġval Ġlines : ĠTextView Ġ= Ġview . news Card _ lines ĊĠĠĠĠĠĠĠ Ġval Ġtitle : ĠTextView Ġ= Ġview . news Card _ title ĊĠĠĠĠĠĠĠ Ġval Ġsyn opsis : ĠTextView Ġ= Ġview . news Card _ syn opsis ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click able ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . item Clicked ( adapter Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠError ViewHolder ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġview : ĠView , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpresenter : ĠNews List Presenter ĊĠĠĠ Ġ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġretry : ĠButton Ġ= Ġview . retry Button ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretry . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . retry Button Clicked () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠDummy ViewHolder ( ĊĠĠĠĠĠĠĠ Ġview : ĠView ĊĠĠĠ Ġ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ċ }