package Ġcom . amazonaws . iv s . player . e commerce . activities . adapters Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . amazonaws . iv s . player . e commerce . databinding . Player Product Item Binding Ċ import Ġcom . amazonaws . iv s . player . e commerce . models . Product Model Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ /** Ċ Ġ* ĠProduct Ġadapter Ċ Ġ*/ Ċ class ĠProduct Adapter ( private Ġval Ġon Learn More Click : Ġ( position : ĠInt ) Ġ-> ĠUnit ) Ġ: ĊĠĠĠ ĠRecyclerView . Adapter < Product Adapter . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġvar Ġitems : ĠList < Product Model > Ġby ĠDeleg ates . observable ( emptyList ()) Ġ{ Ġ_, Ġold , Ġnew Ġ-> ĊĠĠĠĠĠĠĠ ĠDiff Util . calculate Diff ( Source Option Diff ( old , Ġnew )). dispatch Updates To ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Feature d Position (): ĠInt Ġ= Ġitems . indexOf ( items . find Ġ{ Ġit . is Feature d Ġ}) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Product Item Binding . inflate ( LayoutInflater . from ( parent . context ), Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġitems . size ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġitems [ position ] ĊĠĠĠĠĠĠĠ Ġholder . binding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġitems ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ= Ġposition Ġ== Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Ġ= Ġposition Ġ== Ġitem Count Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder . binding . btn Learn More . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Learn More Click ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠViewHolder ( val Ġbinding : ĠPlayer Product Item Binding ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) ĊĊĠĠĠ Ġinner Ġclass ĠSource Option Diff ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġold Items : ĠList < Product Model >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnew Items : ĠList < Product Model > ĊĠĠĠ Ġ) Ġ: ĠDiff Util . Callback () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Old List Size () Ġ= Ġold Items . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget New List Size () Ġ= Ġnew Items . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Items [ old Item Position ]. id Ġ== Ġnew Items [ new Item Position ]. id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Items [ old Item Position ] Ġ== Ġnew Items [ new Item Position ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ