package Ġcom . om ars he he . form input kotlin Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . InputType Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . annotation . Color Res Ċ import Ġandroidx . core . content . with Styled Attributes Ċ import Ġcom . om ars he he . form input kotlin . interfaces . On Text ChangeListener Ċ import Ġcom . om ars he he . form input kotlin . utils .* Ċ import Ġkotlinx . android . synt hetic . main . form _ input _ pin . view .* Ċ Ċ class ĠForm Input Pin : ĠBase Form Input , Text Watcher Ġ Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Presenter : ĠForm Input Contract . Presenter ĊĊĠĠĠ Ġprivate Ġvar Ġinput Error : Boolean Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġm TextColor = R . color . black ĊĠĠĠ Ġprivate Ġvar Ġm Label : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġm ErrorMessage Ġ: String Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġis Mandatory : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġm InputType : Int Ġ= Ġ 3 ĊĠĠĠ Ġprivate Ġvar Ġshow Valid Icon = Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġview To Confirm Ġ: Form Input Pin ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Pin Value Ġ: ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġm Valid Pin Ġ: ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġpin View List = Ġempty List < EditText >() ĊĊĠĠĠ Ġprivate Ġvar Ġm Text ChangeListener Ġ: ĠOn Text ChangeListener ? Ġ= null ĊĊĠĠĠ Ġprivate Ġvar Ġattrs : ĠAttributeSet ? Ġ= null ĊĠĠĠ Ġprivate Ġvar Ġstyle Attr : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ){ ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠ Ġ} ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . attrs = attrs ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠ Ġ} ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style Attr : ĠInt ): Ġsuper ( context , Ġattrs , def Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . attrs Ġ= Ġattrs ĊĠĠĠĠĠĠĠ Ġstyle Attr = def Style Attr ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġinf late ( context , ĠR . layout . form _ input _ pin , Ġthis ) ĊĠĠĠĠĠĠĠ Ġm Presenter Ġ= ĠForm Input Presenter Impl () ĊĠĠĠĠĠĠĠ Ġpin View List = ĠlistOf ( txt Pin One , txt Pin Two , txt Pin Three , txt Pin Four ) ĊĠĠĠĠĠĠĠ Ġorientation = ĠV ERT ICAL ĊĠĠĠĠĠĠĠ Ġcontext . with Styled Attributes ( attrs , ĠR . style able . Form Input Layout , Ġstyle Attr , Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( getResource Id ( R . style able . Form Input Layout _ form _ textColor , R . color . black )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Hint TextColor ( getResource Id ( R . style able . Form Input Layout _ form _ textColor Hint , R . color . hint _ text _ color )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Label TextColor ( getResource Id ( R . style able . Form Input Layout _ form _ textColor Label , R . color . black )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Mandatory ( Ġget Boolean ( R . style able . Form Input Layout _ form _ is Mandatory , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Label ( ĠgetString ( R . style able . Form Input Layout _ form _ label ). or Empty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Hint ( ĠgetString ( R . style able . Form Input Layout _ form _ hint ). or Empty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Input View Height ( get Dimension ( R . style able . Form Input Layout _ form _ height , resources . get Dimension ( ĠR . dim en . form Input Input _ box _ height )). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Background ( getResource Id ( R . style able . Form Input Layout _ form _ background , ĠR . drawable . bg _ txt _ square )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Valid Icon ( Ġget Boolean ( R . style able . Form Input Layout _ form _ show Valid Icon , Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset InputType ( Ġget Int ( R . style able . Form Input Layout _ form _ input Type , Ġ 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Label Visibility ( getBoolean ( R . style able . Form Input Layout _ form _ show Label , Ġtrue )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ErrorMessage = ĠString . format ( resources . getString ( R . string . cant Be Empty ), Ġm Label ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinit Events () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Events (){ ĊĠĠĠĠĠĠĠ Ġtxt Pin One . add TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠ Ġtxt Pin Two . add TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠ Ġtxt Pin Three . add TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠ Ġtxt Pin Four . add TextChanged Listener ( this ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġcomponents ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġfun Ġset Label ( text : String ): ĠForm Input Pin { ĊĠĠĠĠĠĠĠ Ġm Label = tv Label . setLabel ( text , is Mandatory ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Mandatory ( mandatory : ĠBoolean ) Ġ: ĠForm Input Pin Ġ{ ĊĠĠĠĠĠĠĠ Ġis Mandatory Ġ= mandatory ĊĠĠĠĠĠĠĠ Ġmandatory . isNot True { Ġinput Error = false Ġ} ĊĠĠĠĠĠĠĠ Ġm Label = tv Label . setLabel ( m Label , is Mandatory ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġset Label Visibility ( show : Boolean ): ĠForm Input Pin Ġ{ ĊĠĠĠĠĠĠĠ Ġtv Label . visible If ( show ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Hint ( hint : ĠString ) Ġ: Form Input Pin Ġ{ ĊĠĠĠĠĠĠĠ Ġpin View List . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . hint = Ġhint ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġpin Ġvalues ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Values ( var arg Ġvalues : ĠString ) Ġ: Form Input Pin Ġ{ ĊĠĠĠĠĠĠĠ Ġpin View List . forEach Indexed { index , view -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setText ( values [ index ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Input View Height ( m Height : ĠInt ) Ġ: ĠForm Input Pin Ġ{ ĊĠĠĠĠĠĠĠ Ġpin View List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . height = m Height ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Background ( background : ĠInt ) Ġ: ĠForm Input Pin Ġ Ġ{ ĊĠĠĠĠĠĠĠ Ġpin View List . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setBackground Resource ( background ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset View To Confirm ( view : Form Input Pin ): Form Input Pin { ĊĠĠĠĠĠĠĠ Ġview To Confirm = view ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġcustom Ġerror ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsetError ( errorMessage : ĠString ){ ĊĠĠĠĠĠĠĠ Ġpin View List . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . textColor ( R . color . color OnError ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify Input Error ( errorMessage , ĠVIS IBLE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Valid Icon ( show Icon : ĠBoolean ) Ġ: ĠForm Input Pin Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Valid Icon = show Icon ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset InputType ( input Type : ĠInt ) Ġ: ĠForm Input Pin Ġ Ġ{ ĊĠĠĠĠĠĠĠ Ġm InputType Ġ= Ġinput Type ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( m InputType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINPUT _ TYPE _ NUMBER Ġ-> Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpin View List . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . input Type Ġ= ĠInput Type . TYPE _ CLASS _ NUMBER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpin View List . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . input Type Ġ= ĠInput Type . TYPE _ CLASS _ TEXT Ġor ĠInput Type . TYPE _ TEXT _ FLAG _ CAP _ CHAR ACT ERS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Text ChangeListener ( listener : ĠOn Text ChangeListener ): Form Input Pin { ĊĠĠĠĠĠĠĠ Ġm Text ChangeListener = listener ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset TextColor ( color : Int ): Form Input Pin { ĊĠĠĠĠĠĠĠ Ġm TextColor = color ĊĠĠĠĠĠĠĠ Ġpin View List . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . textColor ( m TextColor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Hint TextColor (@ Color Res Ġcolor : ĠInt ): Form Input Pin { ĊĠĠĠĠĠĠĠ Ġpin View List . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . hint TextColor ( color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Label TextColor (@ Color Res Ġcolor : ĠInt ): Form Input Pin { ĊĠĠĠĠĠĠĠ Ġtv Label . textColor ( color ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Red TextColor (){ ĊĠĠĠĠĠĠĠ Ġpin View List . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . textColor ( R . color . color OnError ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFor Ġsave ĠInstance ĠState Ġof Ġthe Ġview Ġin Ġprogram matically Ġaccess ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset ID ( id : Int ): Form Input Pin { ĊĠĠĠĠĠĠĠ Ġthis . id = id ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġcomponents ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetValue (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Presenter . append Pin ( txt Pin One . text . toString (), Ġtxt Pin Two . text . toString (), Ġtxt Pin Three . text . toString (), Ġtxt Pin Four . text . toString ()) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠErrors ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġverify Input Error ( string Error : ĠString , Ġvisible : ĠInt ){ ĊĠĠĠĠĠĠĠ Ġm ErrorMessage = string Error ĊĠĠĠĠĠĠĠ Ġinput Error = tv Error . show Input Error ( valid Icon , check If Should Show Valid Icon (), Ġstring Error , Ġvisible ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck If Should Show Valid Icon (): Boolean { ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( getValue (). isBlank ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Valid Icon ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġthere Ġis Ġan Ġerror . ĊĠĠĠĠ Ġ* Ġif Ġthere Ġany ĊĠĠĠĠ Ġ* Ġ* Ġreturn Ġtrue , ĊĠĠĠĠ Ġ* Ġ* Ġhide Ġsoft Keyboard ĊĠĠĠĠ Ġ* Ġ* Ġscroll Ġtop Ġto Ġthe Ġview ĊĠĠĠĠ Ġ* Ġ* Ġput Ġview Ġon Ġfocus ĊĠĠĠĠ Ġ* Ġ* Ġshow Ġerror Ġmessage ĊĠĠĠĠ Ġ* Ġelse Ġreturn Ġfalse ĊĠĠĠĠ Ġ* Ġset Ġ[ show Error ] Ġto Ġfalse Ġif Ġyou Ġwant Ġto Ġget Ġonly Ġthe Ġreturn Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġno Error ( parent View : ĠView ? Ġ= Ġnull , Ġshow Error : Boolean = true ): Boolean { ĊĠĠĠĠĠĠĠ Ġinput Error . isTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error . isTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Input Error ( m ErrorMessage , ĠVIS IBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent View . hide Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent View ?. scrollTo ( 0 , Ġtv Error . top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Pin One . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. isNot True Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Input Error ("", ĠView . GONE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ! input Error ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠListener Ġon Ġtext Ġchange ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġon TextChanged ( value : ĠCharSequence , Ġi : ĠInt , Ġi 1 : ĠInt , Ġi 2 : ĠInt ) Ġ{ Ġperform On Text Change ( value . toString ()) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġperform On Text Change ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( value . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedit Text Ġ= Ġ( context Ġas ĠActivity ). current Focus Ġas ĠEditText ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text ?. focus Search ( View . FOCUS _ RIGHT )?. request Focus () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Pin Value = m Presenter . append Pin ( txt Pin One . text . toString (), Ġtxt Pin Two . text . toString (), Ġtxt Pin Three . text . toString (), Ġtxt Pin Four . text . toString ()) ĊĠĠĠĠĠĠĠ Ġif ( view To Confirm . isNotNull ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( pin View Is NotEmpty () Ġ&& Ġview To Confirm ?. getValue ()== m Pin Value ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( m TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Input Error ("", ĠView . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Red TextColor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Input Error ( resources . getString ( R . string . do Not Match , m Label ), ĠView . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pin View Is NotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( m Valid Pin . isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( m TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Input Error ("", ĠView . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( m Pin Value == m Valid Pin ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( m TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Input Error ("", ĠView . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Red TextColor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Input Error ( resources . getString ( R . string . in Valid , m Label ), ĠView . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Red TextColor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Input Error ( resources . getString ( R . string . isRequired , m Label ), ĠView . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Text ChangeListener ?. on Text Change ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpin View Is NotEmpty (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġpin View List . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . text . isNull OrEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ }