package Ġorg . ah iv s . custom view . ext ending Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . widget . AppCompat EditText Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġorg . ah iv s . custom view . R Ċ Ċ class ĠCustom EditText Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠAppCompat EditText ( context , Ġattrs , Ġdef Style ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġclear Button Image : ĠDrawable ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Clear Button Image ( R . drawable . ic _ clear _ black _ 2 4 ) ĊĠĠĠĠĠĠĠ Ġadd Text ChangeListener () ĊĠĠĠĠĠĠĠ Ġadd Touch Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Text ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠ Ġadd TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( length () Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Clear Button () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Clear Button () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Touch Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġset On Touch Listener Ġ{ Ġv , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compound Draw ables [ 2 ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Clear Btn Clicked Ġ= Ġif Ġ( layout Direction Ġ== ĠView . LAYOUT _ DIRECTION _ RTL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclear Btn End Ġ= Ġwidth Ġ+ Ġpadding Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . x Ġ< Ġclear Btn End ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclear Btn Start Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( width Ġ- Ġpadding End Ġ- Ġ( clear Button Image ?. intrinsic Width Ġ?: Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . x Ġ> Ġclear Btn Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Clear Btn Clicked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Clear Button Image ( R . drawable . ic _ clear _ transparent _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Clear Button () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Clear Button Image ( R . drawable . ic _ clear _ black _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext ?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Touch Listener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Clear Button Image ( drawable Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclear Button Image Ġ= ĠResources Compat . get Drawable ( resources , Ġdrawable Id , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Clear Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Compound Draw ables Relative With Intr insic Bounds ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Button Image , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Clear Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Compound Draw ables Relative With Intr insic Bounds ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġnull , Ġnull , Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }