package Ġcom . github . program m err 4 7 . currency calculator . currency list Ċ Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . github . program m err 4 7 . currency calculator . R Ċ import Ġcom . github . program m err 4 7 . currency calculator . db . Currency Entity Ċ import Ġcom . github . program m err 4 7 . currency calculator . services . Currency Evaluator Ċ import Ġcom . github . program m err 4 7 . currency calculator . services . Currency Formatter Ċ import Ġcom . github . program m err 4 7 . currency calculator . util . bind Ċ import Ġcom . github . program m err 4 7 . currency calculator . util . calculate Diff Ċ import Ġcom . github . program m err 4 7 . currency calculator . util . hide Keyboard Ċ import Ġorg . jetbrains . ank o . An ko Context Ċ import Ġjava . math . BigDecimal Ċ Ċ class ĠCurrency ListAdapter ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġevaluator : ĠCurrency Evaluator , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġformatter : ĠCurrency Formatter < BigDecimal >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdiff Factory : Ġ( List < Currency Entity >, ĠList < Currency Entity >) Ġ-> ĠDiff Util . Callback Ġ= Ġ{ Ġold , Ġnew Ġ-> ĠCurrency Diff Callback ( old , Ġnew ) Ġ} Ċ ) Ġ: ĠRecyclerView . Adapter < Currency ListAdapter . Holder >() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġlist : ĠList < Currency Entity > Ġ= Ġempty List () ĊĠĠĠ Ġprivate Ġval Ġcurrency Text Watcher : ĠText Watcher Ġby Ġlazy Ġ{ ĠCurrency Watcher ( evaluator , Ġformatter ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠH older Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH older ( Currency Item Ui . create View ( An ko Context . create ( parent . context , Ġparent ))) ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġlist . size ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠH older , Ġposition : ĠInt ) Ġ= Ġwith ( holder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġlist [ position ] ĊĠĠĠĠĠĠĠ Ġtype View . text Ġ= Ġitem . type ĊĠĠĠĠĠĠĠ Ġif Ġ(! value View . is Focused ) Ġvalue View . setText ( formatter . to Str ( item . value )) ĊĠĠĠĠĠĠĠ Ġvalue View . on Focus ChangeListener Ġ= ĠView . On Focus ChangeListener Ġ{ Ġv , Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Focus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevaluator . set New Type ( item . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( v Ġas ? ĠEditText )?. add TextChanged Listener ( currency Text Watcher ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( v Ġas ? ĠEditText )?. remove TextChanged Listener ( currency Text Watcher ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Detached From Window ( holder : ĠH older ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . value View . run Ġ{ Ġif Ġ( is Focused ) Ġhide Keyboard () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( new List : ĠList < Currency Entity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalculate Diff ( diff Factory ( list , Ġnew List )) ĊĠĠĠĠĠĠĠ Ġlist Ġ= Ġnew List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠH older ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype View Ġ= Ġbind < TextView >( R . id . tv _ type ) ĊĠĠĠĠĠĠĠ Ġval Ġvalue View Ġ= Ġbind < EditText >( R . id . et _ value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠCurrency Watcher ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġevaluator : ĠCurrency Evaluator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġformatter : ĠCurrency Formatter < BigDecimal > ĊĠĠĠ Ġ) Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevaluator . set NewValue ( formatter . from Str ( s . toString ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{} ĊĠĠĠ Ġ} Ċ } Ċ