package Ġorg . s ugar andro se . app . ui . display items . recyclerview Ċ Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġorg . s ugar andro se . app . R Ċ import Ġorg . s ugar andro se . app . data . model . Local Display Header Ċ import Ġorg . s ugar andro se . app . data . model . Local Display Item Ċ import Ġorg . s ugar andro se . app . data . model . Local Media Ċ import Ġorg . s ugar andro se . app . data . model . Local Post Ċ import Ġorg . s ugar andro se . app . data . model . Local R ose Ċ import Ġorg . s ugar andro se . app . util . Utils Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠFl orian ĠSch uster Ċ Ġ* Ġfl orian . sch uster @ ta ilo red - apps . com Ċ Ġ*/ Ċ Ċ open Ġclass ĠDisplay Item Adapter Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĠĠĠ Ġprotected Ġval ĠTYPE _ HEADER Ġ= Ġ 0 ĊĠĠĠ Ġprotected Ġval ĠTYPE _ POST Ġ= Ġ 1 ĊĠĠĠ Ġprotected Ġval ĠTYPE _ MEDIA Ġ= Ġ 2 ĊĠĠĠ Ġprotected Ġval ĠTYPE _ RO SE Ġ= Ġ 3 ĊĠĠĠ Ġprotected Ġval ĠTYPE _ LOADING Ġ= Ġ 4 ĊĊĠĠĠ Ġprotected Ġval Ġdata Ġ= ĠArrayList < Local Display Item >() ĊĠĠĠ Ġval ĠisEmpty : ĠBoolean Ġget () Ġ= Ġdata . isEmpty () ĊĠĠĠ Ġvar Ġend Of Pages Ġ= Ġfalse ĊĠĠĠ Ġvar Ġloading Ġ= Ġtrue ĊĠĠĠ Ġvar Ġdisplay First Loading Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . set Has Stable Ids ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( items : ĠList < Local Display Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Size Ġ= Ġdata . size ĊĠĠĠĠĠĠĠ Ġdata . addAll ( items ) ĊĠĠĠĠĠĠĠ Ġnotify Item Range Inserted ( old Size Ġ+ Ġ 1 , Ġitems . count ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . clear () ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset ( items : ĠList < Local Display Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . clear () ĊĠĠĠĠĠĠĠ Ġdata . addAll ( items ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ= Ġif Ġ( position Ġ== Ġdata . size ) Ġ 0 Ġelse Ġdata [ position ]. id ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġdata . size ) ĠTYPE _ LOADING Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( data [ position ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLocal Post Ġ-> ĠTYPE _ POST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLocal R ose Ġ-> ĠTYPE _ RO SE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLocal Display Header Ġ-> ĠTYPE _ HEADER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTYPE _ MEDIA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġif Ġ( data . isEmpty () Ġ&& Ġ! display First Loading ) Ġ 0 ĊĠĠĠ Ġelse Ġif Ġ(! loading ) Ġdata . size ĊĠĠĠ Ġelse Ġdata . size Ġ+ Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ= Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTYPE _ POST Ġ-> ĠUtils . create ViewHolder ( parent , ĠR . layout . item _ post , Ġ:: Post Item ViewHolder ) ĊĠĠĠĠĠĠĠ ĠTYPE _ RO SE Ġ-> ĠUtils . create ViewHolder ( parent , ĠR . layout . item _ rose , Ġ:: R ose Item ViewHolder ) ĊĠĠĠĠĠĠĠ ĠTYPE _ HEADER Ġ-> ĠUtils . create ViewHolder ( parent , ĠR . layout . item _ display _ header , Ġ:: Local Display Header ViewHolder ) ĊĠĠĠĠĠĠĠ ĠTYPE _ MEDIA Ġ-> ĠUtils . create ViewHolder ( parent , ĠR . layout . item _ media , Ġ:: Media Item ViewHolder ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUtils . create ViewHolder ( parent , ĠR . layout . item _ loading , Ġ:: Loading ViewHolder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( view Holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( view Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPost Item ViewHolder Ġ-> ĠviewHolder . viewModel . update ( data [ position ] Ġas ĠLocal Post ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMedia Item ViewHolder Ġ-> ĠviewHolder . viewModel . update ( data [ position ] Ġas ĠLocal Media ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠR ose Item ViewHolder Ġ-> ĠviewHolder . viewModel . update ( data [ position ] Ġas ĠLocal R ose ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLocal Display Header ViewHolder Ġ-> ĠviewHolder . update ( data [ position ] Ġas ĠLocal Display Header ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLoading ViewHolder Ġ-> ĠviewHolder . update (! end Of Pages ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ