package Ġcom . k art ik cd . medium x . ui . feed Ċ Ċ import Ġandroid . text . Layout Ċ import Ġandroid . util . Patterns Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . paging . Paging Data Ċ import Ġandroidx . paging . Paging Data Adapter Ċ import Ġandroidx . recyclerview . widget . Async List Differ Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . k art ik cd . api . models . entities . Article Ċ import Ġcom . k art ik cd . medium x . databinding . List Feed Layout Binding Ċ import Ġcom . k art ik cd . medium x . extensions . load Image Ċ import Ġcom . k art ik cd . medium x . extensions . time Stamp Ċ Ċ class ĠFeed ListAdapter : ĠP aging Data Adapter < Article , ĠFeed ListAdapter . Feed ViewHolder >( callback ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġon Article ClickListener : Ġ(( Article ) Ġ-> ĠUnit ) Ġ?= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcallback Ġ= Ġobject Ġ: ĠDiff Util . Item Callback < Article >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠArticle , Ġnew Item : ĠArticle ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . slug Ġ== Ġnew Item . slug ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠArticle , Ġnew Item : ĠArticle ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠFeed ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠList Feed Layout Binding ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( LayoutInflater . from ( parent . context ), Ġparent , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠFeed ViewHolder ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠFeed ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠgetItem ( position )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Article ClickListener ( listener : Ġ( Article ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Article ClickListener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinner Ġclass ĠFeed ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding : ĠList Feed Layout Binding ĊĠĠĠ Ġ): ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( article : ĠArticle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . username TextView . text Ġ= Ġarticle . author . username ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . title TextView . text Ġ= Ġarticle . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . body TextView . text Ġ= Ġarticle . body ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Patterns . WEB _ URL . matcher ( article . author . image ). matches ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . avatar ImageView . load Image ( article . author . image , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . avatar ImageView . load Image (" https :// static . production ready . io / images / smile y - cy rus . jpg ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . date TextView . time Stamp Ġ= Ġarticle . createdAt ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Article ClickListener ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ( article ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }