/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠPaul ĠR y bits ky i , Ġpa ul . ry bits ky i . work @ gmail . com Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . paul ry bits ky i . commons . widgets Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroidx . appcompat . widget . AppCompat EditText Ċ Ċ class ĠAdvanced EditText Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= ĠR . attr . edit TextStyle Ċ ) Ġ: ĠAppCompat EditText ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlisteners Ġ= Ġmutable ListOf < Text Watcher >() ĊĊĠĠĠ Ġfun Ġset InputType ( type : ĠInt , Ġshould Notify Listeners : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġperform Action ( should Notify Listeners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . set InputType ( type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Text ( text : ĠCharSequence , Ġshould Notify Listeners : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġperform Action ( should Notify Listeners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . setText ( text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd TextChanged Listener ( listener : ĠText Watcher ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . add ( listener ) ĊĊĠĠĠĠĠĠĠ Ġsuper . add TextChanged Listener ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove TextChanged Listener ( listener : ĠText Watcher ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( listeners . isEmpty ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġlisteners . indexOf ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit Ġ>= Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġlisteners . remove At ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . remove TextChanged Listener ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear TextChanged Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( listeners . isEmpty ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġlisteners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . remove TextChanged Listener ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlisteners . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġperform Action ( ĊĠĠĠĠĠĠĠ Ġshould Notify Listeners : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġaction : Ġ(() Ġ-> ĠUnit ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( should Notify Listeners Ġ|| Ġlisteners . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlisteners Copy Ġ= Ġlisteners . to Mutable List () ĊĊĠĠĠĠĠĠĠ Ġclear TextChanged Listeners () ĊĠĠĠĠĠĠĠ Ġaction () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġlisteners Copy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd TextChanged Listener ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ