package Ġcom . cle ver o ad . bootstrap . kotlin _ validators ĊĊ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Patterns Ċ import Ġandroidx . annotation . String Res Ċ import Ġjava . util . regex . Pattern Ċ Ċ open Ġclass ĠEmail Validator Ġprivate Ġconstructor ( private Ġval Ġempty Error : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġinvalid Error : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġadditional Regex : ĠRegex ?) Ġ: ĠValidator Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinline Ġfun Ġbuild ( context : ĠContext , Ġblock : ĠBuilder . () Ġ-> ĠUnit ) Ġ= ĠBuilder ( context ). apply ( block ). build () ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuilder ( context : ĠContext ) Ġ= ĠBuilder ( context ) ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetDefault Validator ( context : ĠContext ) Ġ= Ġbuilder ( context ). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalidate ( email : ĠString ?): ĠValidation Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġif Ġ( email . isNull OrEmpty ()) Ġempty Error Ġelse Ġif Ġ(! is Email Valid ( email )) Ġinvalid Error Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn ĠValidation Response Impl ( error . isEmpty (), Ġerror ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Email Valid ( email : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ!( email . isEmpty () Ġ|| Ġemail . is Digits Only ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġemail . matches ( Patterns . EMAIL _ ADDRESS . to Regex ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġadditional Check ( email ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadditional Check ( email : ĠString ) Ġ= Ġadditional Regex ?. matches ( email ) Ġ?: Ġtrue ĊĊĠĠĠ Ġclass ĠBuilder ( a Context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontext Ġ= Ġa Context . application Context ĊĠĠĠĠĠĠĠ Ġvar Ġempty Error : ĠString Ġ= Ġcontext . getString ( R . string . email _ is _ empty ) ĊĠĠĠĠĠĠĠ Ġvar Ġinvalid Error : ĠString Ġ= Ġcontext . getString ( R . string . email _ is _ invalid ) ĊĠĠĠĠĠĠĠ Ġvar Ġadditional Regex : ĠRegex ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun Ġempty Error ( empty Error : ĠString ?) Ġ= Ġapply Ġ{ Ġthis . empty Error Ġ= Ġempty Error Ġ?: Ġ"" Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġempty Error (@ String Res Ġempty Error : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . empty Error Ġ= Ġcontext . getString ( empty Error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġinvalid Error ( invalid Error : ĠString ?) Ġ= Ġapply Ġ{ Ġthis . invalid Error Ġ= Ġinvalid Error Ġ?: Ġ"" Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġinvalid Error (@ String Res Ġinvalid Error : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . empty Error Ġ= Ġcontext . getString ( invalid Error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadditional Regex ( additional Regex : ĠRegex ?) Ġ= Ġapply Ġ{ Ġthis . additional Regex Ġ= Ġadditional Regex Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadditional Regex ( additional Regex : ĠString ?) Ġ= Ġapply Ġ{ Ġthis . additional Regex Ġ= Ġadditional Regex ?. to Regex () Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadditional Regex ( additional Regex : ĠPattern ?) Ġ= Ġapply Ġ{ Ġthis . additional Regex Ġ= Ġadditional Regex ?. to Regex () Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild () Ġ= ĠEmail Validator ( empty Error , Ġinvalid Error , Ġadditional Regex ) ĊĠĠĠ Ġ} Ċ } Ċ