package Ġio . horizontal systems . bank wallet . ui . extensions Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġio . horizontal systems . bank wallet . R Ċ import Ġio . horizontal systems . bank wallet . modules . swap . trade options . I Verified Input ViewModel Ċ import Ġio . horizontal systems . bank wallet . ui . helpers . Text Helper Ċ import Ġkotlinx . android . synt hetic . main . view _ input _ address . view .* Ċ Ċ class ĠAddress Input View Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 ) ĊĠĠĠ Ġ: ĠConstraint Layout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġon Text Change Callback : Ġ(( String ?) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġshow Qr Button : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġtext Watcher Ġ= Ġobject Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Text Change Callback ?. invoke ( s ?. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Delete Button Visibility (! s . isNull Or Blank ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinf late ( context , ĠR . layout . view _ input _ address , Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġval Ġta Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Address Input View ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle . text Ġ= Ġta . getString ( R . style able . Address Input View _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . text Ġ= Ġta . getString ( R . style able . Address Input View _ description ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Qr Button Ġ= Ġta . getBoolean ( R . style able . Address Input View _ show Qr Button , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . hint Ġ= Ġta . getString ( R . style able . Address Input View _ hint ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġta . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinput . add TextChanged Listener ( text Watcher ) ĊĠĠĠĠĠĠĠ Ġdelete Button . setOnClickListener Ġ{ Ġinput . text Ġ= Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġbutton Paste . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . setText ( Text Helper . getC op ied Text (). trim ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Text ( text : ĠString ?, Ġskip ChangeEvent : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( skip ChangeEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove TextChanged Listener ( text Watcher ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( skip ChangeEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd TextChanged Listener ( text Watcher ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Selection ( it . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Delete Button Visibility (! text . isNull Or Blank ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Hint ( text : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . hint Ġ= Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetError ( text : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror . text Ġ= Ġtext ĊĠĠĠĠĠĠĠ Ġerror . isVisible Ġ= Ġ! text . isNull OrEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Text Change ( callback : Ġ( String ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Text Change Callback Ġ= Ġcallback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Button Qr Scan Click ( callback : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbutton Qr Scan . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Delete Button Visibility ( visible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelete Button . isVisible Ġ= Ġvisible ĊĠĠĠĠĠĠĠ Ġbutton Qr Scan . isVisible Ġ= Ġshow Qr Button Ġ&& Ġ! visible ĊĠĠĠĠĠĠĠ Ġbutton Paste . isVisible Ġ= Ġ! visible ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset ViewModel ( viewModel : ĠI Verified Input ViewModel , Ġlifecycle Owner : ĠLifecycle Owner , Ġon Button Qr Scan Click : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . max Lines Ġ= ĠviewModel . input Field Maximum NumberOf Lines ĊĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . input Field Can Edit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . key Listener Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . input FieldValue LiveData . observe ( lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . input Field Ca ution LiveData . observe ( lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetError ( it ?. text ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġset Hint ( viewModel . input Field Placeholder ) ĊĠĠĠĠĠĠĠ Ġset Text ( viewModel . input Field Initial Value ) ĊĊĠĠĠĠĠĠĠ Ġon Text Change Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . setInput FieldValue ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġon Button Qr Scan Click ( on Button Qr Scan Click ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ