/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠI ce Rock ĠMAG ĠInc . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġdev . icer ock . mo ko . widgets Ċ Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . LinearLayout Ċ import Ġcom . google . android . material . text field . TextInput EditText Ċ import Ġcom . google . android . material . text field . TextInput Layout Ċ import Ġdev . icer ock . mo ko . widgets . core . V FC Ċ import Ġdev . icer ock . mo ko . widgets . core . View Factory Context Ċ import Ġdev . icer ock . mo ko . widgets . style . apply InputType Ċ import Ġdev . icer ock . mo ko . widgets . style . apply Style Ċ import Ġdev . icer ock . mo ko . widgets . style . apply TextStyle Ċ import Ġdev . icer ock . mo ko . widgets . style . with Size Ċ import Ġdev . icer ock . mo ko . widgets . utils . bind Ċ import Ġdev . icer ock . mo ko . widgets . utils . dp Ċ Ċ actual Ġvar Ġinput Widget View Factory : ĠV FC < Input Widget > Ġ= Ġ{ Ġview Factory Context : ĠView Factory Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Widget : ĠInput Widget Ġ-> ĊĠĠĠ Ġval Ġcontext Ġ= Ġview Factory Context . android Context ĊĠĠĠ Ġval Ġlifecycle Owner Ġ= Ġview Factory Context . lifecycle Owner ĊĠĠĠ Ġval Ġstyle Ġ= Ġinput Widget . style ĊĊĠĠĠ Ġval Ġtext Input Layout Ġ= ĠText Input Layout ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle . label TextStyle . color ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhint Color Ġ= ĠColor State List . valueOf ( it . arg b . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Hint TextColor Ġ= Ġhint Color ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstyle . error TextStyle . color ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Color Ġ= ĠColor State List . valueOf ( it . arg b . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetError TextColor ( error Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġedit Text Ġ= ĠText Input EditText ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠLinearLayout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEditText 's Ġdefault Ġbackground Ġhave Ġp add ings Ġ 4 dp , Ġwhile Ġwe Ġnot Ġchange Ġbackground Ġto Ġown Ġwe Ġjust Ġchange Ġmargins ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhttps :// stackoverflow . com / questions / 3 1 7 3 5 2 9 1 / re moving - the - left - padding - on - an - android - edit text / 4 4 4 9 7 5 5 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Start Ġ= Ġ(- 4 ). dp ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmargin End Ġ= Ġ(- 4 ). dp ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġapply TextStyle ( style . text Style ) ĊĠĠĠĠĠĠĠ Ġinput Widget . input Type ?. also Ġ{ Ġapply InputType ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġstyle . under Line Color ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Tint List Ġ= ĠColor State List . valueOf ( it . arg b . toInt ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset On Focus ChangeListener Ġ{ Ġ_, Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Focus ) Ġinput Widget . field . validate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd TextChanged Listener ( object Ġ: Ġ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 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Widget . field . data . value Ġ= Ġs . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtext Input Layout . addView ( edit Text ) ĊĊĠĠĠ Ġinput Widget . field . data . bind ( lifecycle Owner ) Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( edit Text . text ?. toString () Ġ== Ġdata ) Ġreturn @ bind ĊĊĠĠĠĠĠĠĠ Ġedit Text . setText ( data ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġinput Widget . field . error . bind ( lifecycle Owner ) Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠ Ġtext Input Layout . error Ġ= Ġerror ?. toString ( context ) ĊĠĠĠĠĠĠĠ Ġtext Input Layout . isError Enabled Ġ= Ġerror Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinput Widget . label . bind ( lifecycle Owner ) Ġ{ Ġtext Input Layout . hint Ġ= Ġit ?. toString ( context ) Ġ} ĊĠĠĠ Ġinput Widget . enabled ?. bind ( lifecycle Owner ) Ġ{ Ġedit Text . isEnabled Ġ= Ġit Ġ== Ġtrue Ġ} ĊĠĠĠ Ġinput Widget . max Lines ?. bind ( lifecycle Owner ) Ġ{ Ġmax Lines Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( max Lines ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġedit Text . set Single Line ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġedit Text . set Single Line ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . set Single Line ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text . max Lines Ġ= Ġmax Lines ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtext Input Layout . with Size ( style . size ). apply Ġ{ Ġapply Style ( style ) Ġ} Ċ Ċ //// ĠĠĠ Ġbinding . setup Listeners ( widget . field ) Ċ // ĠĠĠ Ġbinding . hint . apply Style ( style . label TextStyle ) Ċ // ĠĠĠ Ġbinding . error . apply Style ( style . error TextStyle ) Ċ } Ċ