package Ġcom . p ich u . nan am are . ext Ċ Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Input Filter Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . databinding . Binding Adapter Ċ import Ġandroidx . databinding . Inverse Binding Adapter Ċ import Ġandroidx . databinding . Inverse Binding Listener Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . text . Decimal Format Symbols Ċ Ċ @ Binding Adapter ( value Ġ= Ġ[" decimal Text Attr Changed "]) Ċ fun ĠEditText . set Decimal Text Listener ( listener : ĠIn verse Binding Listener ) Ġ{ ĊĠĠĠ Ġadd TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . onChange () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) Ċ } Ċ Ċ @ Binding Adapter ( value Ġ= Ġ[" decimal Text "]) Ċ fun ĠEditText . setInt Value ( value : ĠInt ?) Ġ{ ĊĠĠĠ Ġval Ġdecimal Format Ġ= ĠDecimal Format ("# , ## 0 ") ĊĠĠĠ Ġval Ġnon NullValue Ġ= Ġvalue Ġ?: Ġ 0 ĊĊĠĠĠ Ġval Ġstr Value Ġ= Ġdecimal Format . format ( non NullValue ) ĊĠĠĠ Ġif Ġ( text . toString () Ġ== Ġstr Value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġselection Position Ġ= Ġselection End Ġ+ Ġ( str Value . length Ġ- Ġtext . length ) ĊĠĠĠ Ġif Ġ( selection Position Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselection Position Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĠĠĠ Ġset Text ( str Value ) ĊĠĠĠ Ġset Selection ( selection Position ) Ċ } ĊĊ Ċ @ Inverse Binding Adapter ( attribute Ġ= Ġ" decimal Text ") Ċ fun ĠEditText . getInt Value (): ĠInt Ġ{ ĊĠĠĠ Ġval Ġgrouping Separator Ġ= ĠDecimal Format Symbols . getInstance (). grouping Separator ĊĠĠĠ Ġreturn Ġtext . toString (). replace ( Regex (" [$ grouping Separator ] "), Ġ""). let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ let Ġit . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ let Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter ( value Ġ= Ġ[" double Text Attr Changed "]) Ċ fun ĠEditText . set Double Text Listener ( listener : ĠIn verse Binding Listener ) Ġ{ ĊĠĠĠ Ġadd TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . onChange () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) Ċ } Ċ Ċ val Ġdouble Format Ġ= ĠDecimal Format ("# , ## 0 . ## ") Ċ Ċ @ Binding Adapter ( value Ġ= Ġ[" double Text "]) Ċ fun ĠEditText . set Double Value ( value : ĠDouble ?) Ġ{ ĊĠĠĠ Ġval Ġnon NullValue Ġ= Ġvalue Ġ?: Ġ. 0 ĊĊĠĠĠ Ġval Ġstr Value Ġ= Ġdouble Format . format ( non NullValue ) ĊĠĠĠ Ġif Ġ( text . toString () Ġ== Ġstr Value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġselection Position Ġ= Ġselection End Ġ+ Ġ( str Value . length Ġ- Ġtext . length ) ĊĠĠĠ Ġif Ġ( selection Position Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselection Position Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĠĠĠ Ġset Text ( str Value ) ĊĠĠĠ Ġset Selection ( selection Position ) Ċ } Ċ Ċ @ Inverse Binding Adapter ( attribute Ġ= Ġ" double Text ") Ċ fun ĠEditText . getDouble Value (): ĠDouble Ġ{ ĊĠĠĠ Ġreturn Ġtext . toString (). replace (",", Ġ""). let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ let Ġit . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ let Ġ. 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠTODO ĠAdd Ġbinding Ġadapter Ċ fun ĠEditText . limit Length ( maxLength : ĠInt ) Ġ{ ĊĠĠĠ Ġfilters Ġ= ĠarrayOf < Input Filter >( Input Filter . Length Filter ( maxLength )) Ċ } Ċ