package Ġsi . bet oo . hod ler . ui . main Ċ Ċ import Ġandroid . support . v 7 . util . Diff Util Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġk ot ter knife . bind View Ċ import Ġsi . bet oo . hod ler . Currency Formatter Ċ import Ġsi . bet oo . hod ler . R Ċ import Ġsi . bet oo . hod ler . data . coin . Coin Ċ import Ġsi . bet oo . hod ler . round To 2 Decimal Places Ċ Ċ class ĠMain Adapter ( var Ġlistener : ĠOn ItemClickListener ) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcoins : ĠList < Coin With Prices > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġvar Ġcurrent Currency Code : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġinterface ĠOn ItemClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Coin Clicked ( item : ĠCoin , Ġview : ĠView ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Add Clicked ( view : ĠView ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠAdd Coin ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( holder Ġis ĠViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( coins [ position ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . item _ coin , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewHolder ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . item _ select _ coins , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Coin ViewHolder ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ< Ġcoins . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġcoins . size Ġ+ Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ= Ġposition . to Long () ĊĊĠĠĠ Ġinner Ġclass ĠAdd Coin ViewHolder ( private Ġval Ġroot View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( root View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot View . setOnClickListener ({ Ġlistener . on Add Clicked ( root View ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠViewHolder ( private Ġval Ġroot View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( root View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtext Symbol : ĠTextView Ġby Ġbind View ( R . id . text _ symbol ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtext Amount : ĠTextView Ġby Ġbind View ( R . id . text _ amount ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtext Amount Value : ĠTextView Ġby Ġbind View ( R . id . text _ amount _ value ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcoin Price : ĠCoin Prices Compound View Ġby Ġbind View ( R . id . price ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( coin With Price : ĠCoin With Prices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot View . setOnClickListener ({ Ġlistener . on Coin Clicked ( coin With Price . coin . coin , Ġroot View ) Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġcoin With Price . hold ings Amount () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount Ġ== Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Amount . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Amount Value . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Amount . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Amount Value . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Amount . text Ġ= Ġamount . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Symbol . text Ġ= Ġcoin With Price . coin . coin . symbol ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Amount Value . text Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprice Ġ= Ġcoin With Price . prices . filter Ġ{ Ġit . value . currency . toLowerCase () Ġ!= Ġcoin With Price . coin . coin . symbol . toLowerCase () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Currency Code . let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( entry Ġin Ġprice ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . key Ġ== Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoin Price . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoin Price . show Price ( entry ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠAlso Ġuse Ġprice Ġto Ġshow Ġvalue Ġfor Ġthe Ġamount Ġof Ġcoins ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// text Amount Value . text Ġ= Ġentry . value . currency Symbol Ġ+ Ġ( entry . value . price Ġ* Ġamount ). round To 2 Decimal Places () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= ĠCurrency Formatter ( entry . value . currency , Ġentry . value . currency Symbol ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Amount Value . text Ġ= Ġformatter . format (( entry . value . price Ġ* Ġamount ). round To 2 Decimal Places ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoin Price . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Coins ( new Coins : ĠList < Coin With Prices >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Results Ġ= ĠDiff Util . calculate Diff ( Main Diff Util ( new Coins , Ġthis . coins ), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġthis . coins Ġ= Ġnew Coins ĊĠĠĠĠĠĠĠ Ġdiff Results . dispatch Updates To ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Prices ( updated Coins : ĠList < Coin With Prices >, Ġcurrency Code : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Currency Code Ġ= Ġcurrency Code ĊĊĠĠĠĠĠĠĠ Ġupdated Coins . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( coin Ġin Ġcoins ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( coin . coin Ġ== Ġit . coin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoin . prices . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoin . prices . put All ( it . prices ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} Ċ }