package Ġcom . air wal lex . android . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . LinearLayout Ċ import Ġcom . air wal lex . android . R Ċ import Ġcom . air wal lex . android . R . style able Ċ import Ġcom . google . android . material . text field . TextInput EditText Ċ import Ġcom . google . android . material . text field . TextInput Layout Ċ Ċ open Ġclass ĠAir wal lex TextInput Layout Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġresource Layout : ĠInt Ġ= ĠR . layout . common _ text _ input _ layout Ċ ) Ġ: ĠLinearLayout ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġvar Ġtl Input : ĠText Input Layout ĊĠĠĠ Ġvar Ġte Input : ĠText Input EditText ĊĊĠĠĠ Ġprivate Ġval ĠborderWidth Default Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġresources . get Dimension ( R . dim en . air wal lex _ input _ layout _ border _ width _ default ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠborderWidth Focused Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġresources . get Dimension ( R . dim en . air wal lex _ input _ layout _ border _ width _ focused ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġerror : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtl Input . isError Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtl Input . box Stroke Width Ġ= ĠborderWidth Default ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtl Input . error Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtl Input . box Stroke Width Ġ= ĠborderWidth Focused ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġvalue : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġte Input . text ?. trim (). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġte Input . setText ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠView . inflate ( getContext (), Ġresource Layout , Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġtl Input Ġ= ĠfindViewById ( R . id . tl Input ) ĊĠĠĠĠĠĠĠ Ġte Input Ġ= ĠfindViewById ( R . id . te Input ) ĊĊĠĠĠĠĠĠĠ Ġcontext . theme . obtain Styled Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle able . Air wal lex TextInput Layout , Ġ 0 , Ġ 0 ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hasValue ( style able . Air wal lex TextInput Layout _ hint )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtl Input . hint Ġ= ĠgetString ( style able . Air wal lex TextInput Layout _ hint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hasValue ( style able . Air wal lex TextInput Layout _ text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġte Input . setText ( getString ( style able . Air wal lex TextInput Layout _ text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hasValue ( style able . Air wal lex TextInput Layout _ android _ ime Options )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġte Input . ime Options Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Int ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle able . Air wal lex TextInput Layout _ android _ ime Options , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEditor Info . IME _ NULL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hasValue ( style able . Air wal lex TextInput Layout _ android _ input Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġte Input . input Type Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Int ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle able . Air wal lex TextInput Layout _ android _ input Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEditor Info . TYPE _ NULL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset InputType ( type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġte Input . input Type Ġ= Ġtype ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Hint ( hint : ĠCharSequence ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtl Input . hint Ġ= Ġhint ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset I me Options ( ime Options : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġte Input . ime Options Ġ= Ġ ime Options ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Input Focus () Ġ{ ĊĠĠĠĠĠĠĠ Ġte Input . request Focus () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġafter TextChanged ( after TextChanged : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġte Input . after TextChanged ( after TextChanged ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġafter Focus Changed ( after Focus Changed : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġte Input . setOn Focus ChangeListener Ġ{ Ġ_, Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter Focus Changed . invoke ( has Focus ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠEditText . after TextChanged ( after TextChanged : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġthis . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( editable : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter TextChanged . invoke ( editable . 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 ) Ġ{} ĊĠĠĠ Ġ}) Ċ } Ċ