package Ġcom . wo jd or . feature _ rates . view Ċ Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . wo jd or . common _ android . extension . inflate Ċ import Ġcom . wo jd or . domain . Rate Ċ import Ġcom . wo jd or . feature _ rates . R Ċ import Ġjava . math . BigDecimal Ċ Ċ class ĠR ates Adapter Ġ: ĠRecyclerView . Adapter < Rate ViewHolder >() Ġ{ ĊĊĠĠĠ Ġval Ġitems Ġ= Ġmutable ListOf < Rate >() ĊĠĠĠ Ġvar ĠonClick : Ġ( Rate ) Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠ Ġvar Ġon User Input : Ġ( BigDecimal ) Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRate ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġparent . inflate ( R . layout . item _ rate ) ĊĠĠĠĠĠĠĠ Ġreturn ĠRate ViewHolder ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġitems . size ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRate ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . on Bind ( items [ position ], ĠonClick , Ġon User Input ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( ĊĠĠĠĠĠĠĠ Ġholder : ĠRate ViewHolder , ĊĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠ Ġpayload s : ĠMutable List < Any > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload s . isEmpty () Ġ-> Ġsuper . on Bind ViewHolder ( holder , Ġposition , Ġpayload s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġholder . on Update ( payload s ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Rates ( rates : ĠList < Rate >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Result Ġ= ĠDiff Util . calculate Diff ( Rates Diff Util Callback ( items , Ġrates )) ĊĠĠĠĠĠĠĠ Ġdiff Result . dispatch Updates To ( this ) ĊĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠ Ġitems . addAll ( rates ) ĊĠĠĠ Ġ} Ċ }