package Ġcom . ag us yc . day counter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . design . widget . TextInput Layout Ċ import Ġandroid . support . v 4 . view . View Compat Ċ import Ġandroid . support . v 4 . view . View Property Animator Listener Adapter Ċ import Ġandroid . support . v 4 . view . animation . Fast Out Slow In Interpolator Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Interpolator Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . TextView Ċ Ċ class ĠCustom TextInput Layout Ġ: ĠText Input Layout Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Helper Text : ĠCharSequence ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Helper TextColor : ĠColor State List ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Helper Text Enabled Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Error Enabled Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Helper View : ĠTextView ? Ġ= Ġnull ĊĊĠĠĠ Ġconstructor (_ context : ĠContext ) Ġ: Ġsuper (_ context ) ĊĊĠĠĠ Ġconstructor (_ context : ĠContext , Ġ_ attrs : ĠAttributeSet ) Ġ: Ġsuper (_ context , Ġ_ attrs ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . obtain Styled Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ attrs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Custom TextInput Layout , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Helper TextColor Ġ= Ġa . getColor State List ( R . style able . Custom TextInput Layout _ helper TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Helper Text Ġ= Ġa . getText ( R . style able . Custom TextInput Layout _ helper Text ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd View ( child : ĠView , Ġindex : ĠInt , Ġparams : ĠViewGroup . LayoutParams ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . addView ( child , Ġindex , Ġparams ) ĊĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠEditText ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( m Helper Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Helper Text ( m Helper Text !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Helper Text Enabled (_ enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Helper Text Enabled Ġ== Ġ_ enabled ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ(_ enabled Ġ&& Ġm Error Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( this . m Helper Text Enabled Ġ!= Ġ_ enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Helper View Ġ= ĠTextView ( this . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Helper TextAppearance Ġ= ĠR . style . Helper TextAppearance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Helper View !!. setText Appearance ( this . context , Ġm Helper TextAppearance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Helper View !!. setText Appearance ( m Helper TextAppearance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Helper TextColor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Helper View !!. setTextColor ( m Helper TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Helper View !!. text Ġ= Ġm Helper Text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Helper View !!. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . addView ( this . m Helper View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . m Helper View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edit Text Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Padding Relative ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Helper View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . get Padding Start ( edit Text ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĠView Compat . get Padding End ( edit Text ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text !!. padding Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . remove View ( this . m Helper View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Helper View Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Helper Text Enabled Ġ= Ġ_ enabled ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Helper Text (_ helper Text : ĠCharSequence ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Helper Text Ġ= Ġ_ helper Text ĊĠĠĠĠĠĠĠ Ġif Ġ(! this . m Helper Text Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( m Helper Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Helper Text Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( m Helper Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Helper View !!. text Ġ= Ġm Helper Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Helper View !!. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . set Alpha ( this . m Helper View !! , Ġ 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . animate ( this . m Helper View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 1 . 0 f ). set Duration ( 2 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( FAST _ OUT _ S LOW _ IN _ INTER POL ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( null ). start () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( this . m Helper View !!. visibility Ġ== ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . animate ( this . m Helper View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 0 . 0 f ). set Duration ( 2 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( FAST _ OUT _ S LOW _ IN _ INTER POL ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠView Property Animator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( view : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Helper View !!. text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Helper View !!. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . send Accessibility Event ( 2 0 4 8 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetError Enabled (_ enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Error Enabled Ġ== Ġ_ enabled ) Ġreturn ĊĠĠĠĠĠĠĠ Ġm Error Enabled Ġ= Ġ_ enabled ĊĠĠĠĠĠĠĠ Ġif Ġ(_ enabled Ġ&& Ġm Helper Text Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Helper Text Enabled ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . setError Enabled (_ enabled ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! (_ enabled Ġ|| ĠText Utils . isEmpty ( m Helper Text ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Helper Text ( m Helper Text !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠFAST _ OUT _ S LOW _ IN _ INTER POL ATOR : ĠInterpol ator Ġ= ĠFast Out Slow In Interpolator () ĊĠĠĠ Ġ} Ċ Ċ }