package Ġuk . n hs . n hs x . covid 1 9 . android . app . widgets Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . accessibility . Accessibility Event Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . LinearLayout Ċ import Ġtim ber . log . Tim ber Ċ import Ġuk . n hs . n hs x . covid 1 9 . android . app . R Ċ import Ġuk . n hs . n hs x . covid 1 9 . android . app . databinding . View PostCode Binding Ċ import Ġuk . n hs . n hs x . covid 1 9 . android . app . util . view utils . g one Ċ import Ġuk . n hs . n hs x . covid 1 9 . android . app . util . view utils . invisible Ċ import Ġuk . n hs . n hs x . covid 1 9 . android . app . util . view utils . smooth Scroll To And Then Ċ import Ġuk . n hs . n hs x . covid 1 9 . android . app . util . view utils . visible Ċ Ċ class ĠPost Code View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠLinearLayout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding Ġ= ĠView PostCode Binding . inflate ( LayoutInflater . from ( context ), Ġthis , Ġtrue ) ĊĊĠĠĠ Ġval Ġpost Code District : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbinding . post Code EditText . text . toString () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġconfigure Layout () ĊĊĠĠĠĠĠĠĠ Ġadd MaxLength Filter Work around () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd MaxLength Filter Work around () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSee Ġhttps :// issue tracker . google . com / issues / 1 4 1 4 9 7 5 7 5 ĊĠĠĠĠĠĠĠ Ġbinding . post Code EditText . add TextChanged Listener ( MaxLength Text Watcher ( binding . post Code EditText )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Error State () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Error State View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ getString ( R . string . post _ code _ invalid _ title )}. Ġ${ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . valid _ post _ code _ is _ required ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . post _ code _ invalid _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . error Text . text Ġ= Ġcontext . getString ( R . string . valid _ post _ code _ is _ required ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow PostCode NotSupported Error State () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Error State View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ context . getString ( R . string . post _ code _ invalid _ title )}. Ġ${ context . getString ( R . string . postcode _ not _ supported )} ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . post _ code _ invalid _ title ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . error Text . text Ġ= Ġcontext . getString ( R . string . postcode _ not _ supported ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Error State View ( ĊĠĠĠĠĠĠĠ Ġanno uncement Text : ĠString , ĊĠĠĠĠĠĠĠ Ġerror Text : ĠString ĊĠĠĠ Ġ) Ġ= Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpost Code EditText . setBackground Resource ( R . drawable . edit _ text _ background _ error ) ĊĠĠĠĠĠĠĠ Ġerror Info Container . smooth Scroll To And Then ( 0 , Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Info Container . announce For Accessibility ( announcement Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Info Container . send Accessibility Event ( Accessibility Event . TYPE _ VIEW _ FOC USED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġerror Info Container . visible () ĊĠĠĠĠĠĠĠ Ġerror Indicator Left . visible () ĊĠĠĠĠĠĠĠ Ġerror Text Title . text Ġ= Ġerror Text ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Error State () Ġ= Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror Info Container . g one () ĊĠĠĠĠĠĠĠ Ġpost Code EditText . setBackground Resource ( R . drawable . edit _ text _ background ) ĊĠĠĠĠĠĠĠ Ġerror Indicator Left . invisible () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġorientation Ġ= ĠV ERT ICAL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠMax Length Text Watcher ( private Ġval Ġedit Text : ĠEditText , Ġprivate Ġval ĠmaxLength : ĠInt Ġ= Ġ 4 ) Ġ: ĊĠĠĠĠĠĠĠ ĠText Watcher Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . remove TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Ġ= Ġs . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Code District Ġ= Ġif Ġ( string . length Ġ> ĠmaxLength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring . substring ( 0 Ġuntil ĠmaxLength ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s . toString () Ġ!= Ġpost Code District ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . setText ( post Code District ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . setSelection ( edit Text . text . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIndex OutOfBoundsException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . add TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ