package Ġcom . g im ang i . single line _ note . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . g im ang i . single line _ note . data . model . Memo Item Data Ċ import Ġcom . g im ang i . single line _ note . databinding . Item Memo Items List Binding Ċ import Ġjava . text . Decimal Format Ċ Ċ class ĠM emo ItemList Adapter () Ġ: ĠRecyclerView . Adapter < Memo ItemList Adapter . Memo Item Holder >() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġdata List Ġ= Ġmutable ListOf < Memo Item Data >() ĊĊĠĠĠ Ġ// Ġë³Ģê²½ ëĲľ ĠìķĦ ìĿ´ íħľ ĠìŀĲ ëıĻ ìłĢ ìŀ¥ ìĿĦ ĠìľĦ íķľ ĠObservable ĊĠĠĠ Ġprivate Ġval Ġ_ changed Data Ġ= ĠMutable LiveData < Memo Item Data >() ĊĠĠĠ Ġval Ġchanged Data Ġ: ĠLive Data < Memo Item Data > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ changed Data ĊĊĠĠĠ Ġinner Ġclass ĠM emo Item Holder ( private Ġval Ġbinding : ĠItem Memo Items List Binding , Ġprivate Ġval Ġcontext : ĠContext ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Bind ( data : ĠM emo Item Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . item Ġ= Ġdata ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfocus Ġíķ´ ìłľ Ġìĭľ ĠìŀĲ ëıĻ ĠìłĢìŀ¥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauto Save Listener Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . On Focus ChangeListener Ġ{ Ġ_, Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/// Ġfocus Ġíķ´ ìłľ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! b ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewName Ġ= Ġbinding . et Memo ItemName . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Str Ġ= Ġbinding . et Memo Item Value . text . toString (). replace (",", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠnewValue Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Str . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewValue Ġ= Ġvalue Str . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġobserver ĠìĹĲ ê²Į ĠìķĮ ë¦ ¼ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ changed Data . value Ġ= ĠM emo Item Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Ġ= Ġdata . number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠnewName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠnewValue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemId Ġ= Ġdata . itemId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Id Ġ= Ġdata . table Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdata Ġlist ĠìĪĺ ìłķ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata List . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . number Ġ== Ġdata . number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ= ĠnewName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . et Memo ItemName . on Focus ChangeListener Ġ= Ġauto Save Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . et Memo Item Value . on Focus ChangeListener Ġ= Ġauto Save Listener ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠM emo Item Holder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠItem Memo Items List Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent , Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbinding . et Memo Item Value . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd TextChanged Listener ( Comma Text With Limit Watcher ( this )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠM emo Item Holder ( binding , Ġparent . context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠM emo Item Holder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . on Bind ( data List [ position ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġdata List . size ĊĊĠĠĠ Ġfun ĠgetData List () Ġ= Ġthis . data List ĊĊĠĠĠ Ġfun Ġset DataList ( data List : ĠMutable List < Memo Item Data >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . data List Ġ= Ġdata List ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠCom ma Text With Limit Watcher ( val Ġedit Text : ĠEditText ) Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġbefore Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Ġ= Ġedit Text . text . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! s . isNull OrEmpty () Ġ&& Ġs . toString () Ġ!= Ġbefore ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Value Ġ= Ġs . toString (). replace (", "," ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( str Value . length Ġ> Ġ 1 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . setText ( before ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Number Ġ= Ġstr Value . toDouble OrNull () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . setText ( Decimal Format ("# , ### "). format ( str Number )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . setSelection ( edit Text . text . length ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊ Ċ }