package Ġxyz . har mony app . oly mp us blog . ui . main . article Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget .* Ċ import Ġcom . bump tech . glide . Request Manager Ċ import Ġxyz . har mony app . oly mp us blog . api . main . responses . Comment Response Ċ import Ġxyz . har mony app . oly mp us blog . databinding . Layout Comment ListItem Binding Ċ import Ġxyz . har mony app . oly mp us blog . databinding . Layout No Comments Binding Ċ import Ġxyz . har mony app . oly mp us blog . models . Author Ċ import Ġxyz . har mony app . oly mp us blog . utils . Date Utils Ċ import Ġxyz . har mony app . oly mp us blog . utils . Generic ViewHolder Ċ Ċ class ĠComment ListAdapter ( ĊĠĠĠ Ġprivate Ġval Ġrequest Manager : ĠRequest Manager , ĊĠĠĠ Ġprivate Ġval ĠuserId : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġinteraction : ĠComment Interaction ? Ġ= Ġnull Ċ ) Ġ: ĊĠĠĠ ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG : ĠString Ġ= Ġ" App Debug " ĊĠĠĠ Ġprivate Ġval ĠNO _ MORE _ RESULTS Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġval ĠCOMMENT _ ITEM Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval ĠNO _ MORE _ RESULTS _ COMMENT _ MARKER Ġ= ĠComment Response ( ĊĠĠĠĠĠĠĠ ĠNO _ MORE _ RESULTS , ĊĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠ ĠAuthor (- 1 , Ġ"", Ġ"", Ġ"", Ġfalse , Ġ 0 , Ġ 0 ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval ĠDIFF _ CALLBACK Ġ= Ġobject Ġ: ĠDiff Util . Item Callback < Comment Response >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠComment Response , Ġnew Item : ĠComment Response ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item : ĠComment Response , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item : ĠComment Response ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġdiffer Ġ= ĊĠĠĠĠĠĠĠ ĠAsync List Differ ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComment Recycler Change Callback ( this ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAsync Differ Config . Builder ( DIFF _ CALLBACK ). build () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( view Type ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠNO _ MORE _ RESULTS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠLayout No Comments Binding . inflate ( in flater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGeneric ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Ġ= Ġbinding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCOMMENT _ ITEM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠLayout Comment ListItem Binding . inflate ( in flater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComment ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Ġ= Ġbinding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteraction Ġ= Ġinteraction , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Manager Ġ= Ġrequest Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠLayout Comment ListItem Binding . inflate ( in flater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComment ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Ġ= Ġbinding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteraction Ġ= Ġinteraction , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Manager Ġ= Ġrequest Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġinner Ġclass ĠComment Recycler Change Callback ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġadapter : ĠComment ListAdapter ĊĠĠĠ Ġ) Ġ: ĠList Update Callback Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( position : ĠInt , Ġcount : ĠInt , Ġpayload : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify Item Range Changed ( position , Ġcount , Ġpayload ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Inserted ( position : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify Item Range Changed ( position , Ġcount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Moved ( from Position : ĠInt , Ġto Position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Removed ( position : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠComment ViewHolder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( differ . current List [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( differ . current List [ position ]. id Ġ> Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCOMMENT _ ITEM ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdiffer . current List [ position ]. id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdiffer . current List . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubmit List ( comment List : ĠList < Comment Response > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew List Ġ= Ġcomment List ?. to Mutable List () ĊĠĠĠĠĠĠĠ Ġif Ġ( new List ?. size Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew List . add ( NO _ MORE _ RESULTS _ COMMENT _ MARKER ) ĊĠĠĠĠĠĠĠ Ġdiffer . submit List ( new List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠComment ViewHolder ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġval Ġbinding : ĠLayout Comment ListItem Binding , ĊĠĠĠĠĠĠĠ Ġval Ġrequest Manager : ĠRequest Manager , ĊĠĠĠĠĠĠĠ Ġval ĠuserId : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġinteraction : ĠComment Interaction ? ĊĠĠĠ Ġ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( item : ĠComment Response ) Ġ= Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( item . author . image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( comment Profile Image ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Username . text Ġ= Ġitem . author . username ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomment . text Ġ= Ġitem . body ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomment CreatedAt . text Ġ= ĠDate Utils . format Date ( item . createdAt ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( userId Ġ== Ġitem . author . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Comment . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Comment . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteraction ?. onDelete Comment ( adapter Position , Ġitem ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠComment Interaction Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonDelete Comment ( position : ĠInt , Ġitem : ĠComment Response ) ĊĠĠĠ Ġ} Ċ }