package Ġcom . sz y mon st as ik . k alk ulators red nie jw az one j . calculator Ċ Ċ import Ġandroid . graphics . Port er D uff Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . sz y mon st as ik . k alk ulators red nie jw az one j . R Ċ import Ġcom . sz y mon st as ik . k alk ulators red nie jw az one j . database . Note N Weight Ċ import Ġcom . sz y mon st as ik . k alk ulators red nie jw az one j . databinding . ListItem Note And Weight Binding Ċ import Ġcom . sz y mon st as ik . k alk ulators red nie jw az one j . utils . Utils ĊĊ Ċ class ĠCalculator Adapter ( ĊĠĠĠ Ġval Ġchange Note Listener : ĠChange Note Listener , ĊĠĠĠ Ġval Ġchange Weight Listener : ĠChange Weight Listener Ċ ): ĠList Adapter < Note N Weight , ĊĠĠĠĠĠĠĠ ĠCalculator Adapter . ViewHolder >( Note N Weight Diff Callback ()) Ġ{ ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder . from ( parent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) Ġas ĠNote N Weight ĊĠĠĠĠĠĠĠ Ġholder . bind ( change Note Listener , Ġchange Weight Listener , Ġitem ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġclass ĠViewHolder Ġprivate Ġconstructor ( private Ġval Ġbinding : ĠListItem Note And Weight Binding ) ĊĠĠĠĠĠĠĠ Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Note Listener : ĠChange Note Listener , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Weight Listener : ĠChange Weight Listener , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem : ĠNote N Weight ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . note N Weight Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . position Ġ= Ġadapter Position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Setting Ġadapter Ġfor ĠNote ĠSp inner ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Numbers : ĠMutable List < String > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 .. 2 0 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġvalue Ġ= ĠUtils . get Note From Id ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġif Ġ( Utils . is Whole ( value . toDouble ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . toInt (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ value . toInt ()} Ġ+" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Numbers . add ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Weights : ĠMutable List < String > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 1 .. 1 0 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Weights . add ( i . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnote Adapter Ġ= ĠArray Adapter < String >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . dropdown _ item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Numbers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspinner Drawable : ĠDrawable Ġ= Ġbinding . note Spinner . background . constant State !!. new Drawable () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġspinner Drawable . setColor Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . context . resources . getColor ( R . color . color _ title ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPort er D uff . Mode . SRC _ AT OP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . note Spinner . background Ġ= Ġspinner Drawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . weight Spinner . background Ġ= Ġspinner Drawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnote Adapter . set DropDown View Resource ( android . R . layout . simple _ spinner _ dropdown _ item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . note Spinner . adapter Ġ= Ġnote Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . note Spinner . setSelection ( item . note ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Setting Ġadapter Ġfor ĠWeight ĠSp inner ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġweight Adapter Ġ= ĠArray Adapter < String >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . dropdown _ item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Weights ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweight Adapter . set DropDown View Resource ( android . R . layout . simple _ spinner _ dropdown _ item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . weight Spinner . adapter Ġ= Ġweight Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . weight Spinner . setSelection ( item . weight ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . note Spinner . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠAdapter View < *> ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠView ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Note Listener . onChange ( adapter Position , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . weight Spinner . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠAdapter View < *> ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠView ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Weight Listener . onChange ( adapter Position , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġfrom ( parent : ĠViewGroup ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠListItem Note And Weight Binding . inflate ( layout Inflater , Ġparent , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( binding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback Ġfor Ġcalculating Ġthe Ġdiff Ġbetween Ġtwo Ġnon - null Ġitems Ġin Ġa Ġlist . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠUsed Ġby ĠList Adapter Ġto Ġcalculate Ġthe Ġmin um um Ġnumber Ġof Ġchanges Ġbetween Ġand Ġold Ġlist Ġand Ġa Ġnew ĊĠĠĠĠ Ġ* Ġlist Ġthat 's Ġbeen Ġpassed Ġto Ġ` submit List `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠNote N Weight Diff Callback Ġ: ĠDiff Util . Item Callback < Note N Weight > (){ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠNote N Weight , Ġnew Item : ĠNote N Weight ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠNote N Weight , Ġnew Item : ĠNote N Weight ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . note Ġ== Ġnew Item . note Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Item . weight Ġ== Ġnew Item . weight ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġclass ĠChange Note Listener ( val Ġchange Listener : Ġ( position : ĠInt , Ġnote Value : ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonChange ( pos : ĠInt , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Listener ( pos , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġclass ĠChange Weight Listener ( val Ġchange Listener : Ġ( position : ĠInt , Ġweight Value : ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonChange ( pos : ĠInt , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Listener ( pos , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }