package Ġcom . f riday tech . dex . presentation . balance . recycler Ċ Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . f riday tech . dex . R Ċ import Ġcom . f riday tech . dex . core . model . Coin Balance Ċ import Ġcom . f riday tech . dex . presentation . common . Action ViewHolder Ċ import Ġcom . f riday tech . dex . utils . get Attr Ċ import Ġcom . f riday tech . dex . utils . inflate Ċ Ċ class ĠBalance Adapter ( ĊĠĠĠ Ġprivate Ġval Ġwallet Listener : ĠBalance ViewHolder . Listener , ĊĠĠĠ Ġprivate Ġval Ġmanage Coins Listener : ĠAction ViewHolder . Listener Ċ ) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTYPE _ WAL LET Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġval ĠTYPE _ MANAGE _ CO INS Ġ= Ġ 2 ĊĊĠĠĠ Ġprivate Ġval Ġm Balances Ġ= ĠArrayList < Coin Balance >() ĊĠĠĠ Ġprivate Ġvar Ġm Expanded View Position : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġm Balances . size Ġ+ Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ= Ġwhen Ġ( position ) Ġ{ ĊĠĠĠĠĠĠĠ Ġin Ġ 0 Ġuntil Ġm Balances . size Ġ-> ĠTYPE _ WAL LET ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTYPE _ MANAGE _ CO INS ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ WAL LET Ġ-> ĠBalance ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ balance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġwallet Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt int Ġ= Ġparent . context . theme . get Attr ( R . attr . Accent TextColor ) Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAction ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . inflate ( R . layout . item _ action ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAction ViewHolder . Action Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ manage _ coins , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . action _ add _ coin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt int ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanage Coins Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ= ĠUnit ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt , Ġpayload s : ĠMutable List < Any >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBalance ViewHolder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( payload s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . on Bind ( m Balances [ position ], Ġm Expanded View Position Ġ== Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( payload s . any Ġ{ Ġit Ġis ĠBoolean Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind Partial ( m Expanded View Position Ġ== Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Coins ( coins : ĠList < Coin Balance >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Result Ġ= ĠDiff Util . calculate Diff ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBalance Diff Callback ( m Balances , Ġcoins ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġm Balances . clear () ĊĠĠĠĠĠĠĠ Ġm Balances . addAll ( coins ) ĊĠĠĠĠĠĠĠ Ġdiff Result . dispatch Updates To ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle ViewHolder ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Expanded View Position ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( it , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Expanded View Position Ġ!= Ġposition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( position , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Expanded View Position Ġ= Ġif Ġ( m Expanded View Position Ġ== Ġposition ) Ġnull Ġelse Ġposition ĊĠĠĠ Ġ} Ċ } Ċ