package Ġcom . sup . dev . android . views . settings Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Parcelable Ċ import Ġandroidx . annotation . String Res Ċ import Ġcom . google . android . material . text field . TextInput Layout Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġcom . sup . dev . android . R Ċ import Ġcom . sup . dev . android . tools . Tools Resources Ċ import Ġcom . sup . dev . android . tools . Tools View Ċ import Ġcom . sup . dev . android . views . support . watch ers . Text Watcher Changed Ċ import Ġcom . sup . dev . android . views . views . View EditText Ċ Ċ class ĠSettings Field Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull Ċ ) Ġ: ĠSettings ( context , Ġattrs , ĠR . layout . settings _ field ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġvar ĠGLOBAL _ TRANSP ARENT _ BACKGROUND Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġv Field : ĠView EditText Ġ= ĠfindViewById ( R . id . v Dev Sup Field ) ĊĠĠĠ Ġval Ġv Field Layout : ĠText Input Layout Ġ= ĠfindViewById ( R . id . v Dev Sup Input Layout ) ĊĊĠĠĠ Ġprivate Ġvar Ġis Error : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġchecker : Ġ(( String ) Ġ-> ĠString ? )? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġv Field . id Ġ= ĠView . NO _ ID Ġ// ĠĠ ĠÐ § ÑĤ Ð¾Ð± ĠÑģÐ¸ÑģÑĤÐµÐ¼ Ð° ĠÐ½Ðµ ĠÐ² Ð¾ÑģÑĤ Ð¾Ð½ Ð°Ð² Ð»Ð¸ Ð² Ð°Ð»Ð° ĠÑģ Ð¾ÑģÑĤ Ð¾Ñı Ð½Ð¸ Ðµ ĊĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Settings Field , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif ( a . hasValue ( R . style able . Settings Field _ android _ textColor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextColor Ġ= Ġa . getColor ( R . style able . Settings Field _ android _ textColor , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Field . setTextColor ( textColor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġhint Ġ= Ġa . getString ( R . style able . Settings Field _ android _ hint ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġa . getString ( R . style able . Settings Field _ Settings _ text ) ĊĠĠĠĠĠĠĠ Ġval Ġinput Type Ġ= Ġa . getInteger ( R . style able . Settings Field _ android _ input Type , Ġv Field . input Type ) ĊĠĠĠĠĠĠĠ Ġval Ġsingle Line Ġ= Ġa . getBoolean ( R . style able . Settings Field _ android _ single Line , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval ĠmaxLength Ġ= Ġa . getInteger ( R . style able . Settings Field _ Settings _ maxLength , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġa . recycle () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( single Line ) Ġv Field . set Single Line () ĊĠĠĠĠĠĠĠ Ġv Field . add TextChanged Listener ( Text Watcher Changed Ġ{ Ġcheck Error () Ġ}) ĊĠĠĠĠĠĠĠ Ġif ( GLOBAL _ TRANSP ARENT _ BACKGROUND ) v Field . set BackgroundColor ( Tools Resources . getColor ( R . color . transparent )) ĊĠĠĠĠĠĠĠ Ġv Field Layout . box Stroke Color Ġ= ĠTools Resources . getColor Attr ( R . attr . color Secondary ) ĊĊĠĠĠĠĠĠĠ Ġset Line Visible ( false ) ĊĠĠĠĠĠĠĠ Ġset Text ( text ) ĊĠĠĠĠĠĠĠ Ġset Hint ( hint ) ĊĠĠĠĠĠĠĠ Ġset InputType ( input Type ) ĊĠĠĠĠĠĠĠ Ġset MaxLength ( maxLength ) ĊĠĠĠĠĠĠĠ Ġv Field . clear Focus () ĊĠĠĠĠĠĠĠ Ġis Focus able Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Keyboard (){ ĊĠĠĠĠĠĠĠ ĠTools View . show Keyboard ( v Field ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĊĠĠĠ Ġ// Ġ ĠState ĊĠĠĠ Ġ// ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Save InstanceState (): ĠParcel able ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġbundle . put Parcelable (" SUPER _ STATE ", Ġsuper . on Save InstanceState ()) ĊĠĠĠĠĠĠĠ Ġbundle . putString (" v Text ", Ġv Field . text . toString ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġbundle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġstate V Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġif Ġ( state V Ġis ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġstate V Ġas ĠBundle ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( bundle !!. getString (" v Text ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate V Ġ= Ġbundle . get Parcelable (" SUPER _ STATE ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( state V ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( checker Ġ!= Ġnull ) ĠsetError (( checker !!. invoke ( getText ()))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĊĠĠĠ Ġ// Ġ ĠSet ters ĊĠĠĠ Ġ// ĊĊĠĠĠ Ġfun Ġset Text ( text : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġv Field . setText ( text ) ĊĠĠĠĠĠĠĠ Ġif Ġ( text Ġ!= Ġnull ) Ġv Field . setSelection ( text . length ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Use Property Access Syntax ") ĊĠĠĠ Ġfun ĠsetError ( b : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetError ( if Ġ( b ) Ġ"" Ġelse Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetError ( error : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetError ( Tools Resources . s ( error )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetError ( error : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Error Ġ= Ġerror Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġv Field . error Ġ= Ġerror ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Error () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetError ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetError Checker ( checker : Ġ( String ) Ġ-> ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . checker Ġ= Ġchecker ĊĠĠĠĠĠĠĠ Ġcheck Error () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Hint (@ String Res Ġhint Res : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Hint ( Tools Resources . s ( hint Res )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Hint ( hint : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġv Field Layout . hint Ġ= Ġhint ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset InputType ( input Type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġv Field . input Type Ġ= Ġinput Type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset MaxLength ( max : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġv Field Layout . counter MaxLength Ġ= Ġmax ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd On TextChanged ( callback : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġv Field . add TextChanged Listener ( Text Watcher Changed ( callback )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Enabled ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setEnabled ( enabled ) ĊĠĠĠĠĠĠĠ Ġv Field . isEnabled Ġ= Ġenabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĊĠĠĠ Ġ// Ġ ĠGet ters ĊĠĠĠ Ġ// ĊĊĠĠĠ Ġfun ĠgetText () Ġ= Ġv Field . text . toString () ĊĊĠĠĠ Ġfun Ġis Error (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Error () ĊĠĠĠĠĠĠĠ Ġreturn Ġis Error ĊĠĠĠ Ġ} Ċ Ċ }