/** Ċ Ġ* ĠDesign ed Ġand Ġdeveloped Ġby ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ċ Ġ* Ċ Ġ* Ġ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 . af ol le st ad . date . util Ċ Ċ import Ġandroid . content . Context . INPUT _ METHOD _ SERVICE Ċ import Ġandroid . os . Handler Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . view . input method . Input Method Manager . SHOW _ IMP LICIT Ċ import Ġandroid . widget . EditText Ċ Ċ /** Ġ@ author ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ġ*/ Ċ internal Ġfun ĠEditText . show Keyboard () Ġ{ ĊĠ Ġpost Ġ{ ĊĠĠĠ Ġrequest Focus () ĊĠĠĠ Ġval Ġimm Ġ= Ġcontext . getSystem Service ( INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠ Ġimm . show Soft Input ( this , ĠSHOW _ IMP LICIT ) ĊĠ Ġ} Ċ } Ċ Ċ /** Ġ@ author ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ġ*/ Ċ internal Ġfun ĠEditText . hide Keyboard () Ġ{ ĊĠ Ġval Ġimm Ġ= Ġcontext . getSystem Service ( INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠ Ġimm . hide Soft Input From Window ( window Token , Ġ 0 ) Ċ } Ċ Ċ /** Ġ@ author ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ġ*/ Ċ internal Ġfun ĠEditText . on TextChanged ( ĊĠ Ġdebounce Ms : ĠLong Ġ= Ġ 1 5 0 , ĊĠ Ġrequired Length : ĠInt ? Ġ= Ġnull , ĊĠ Ġblock : Ġ( input : ĠCharSequence ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠ Ġval Ġtext Watcher Ġ= ĠDe bounc ed Text Watcher ( ĊĠĠĠĠĠ Ġdebounce Ms Ġ= Ġdebounce Ms , ĊĠĠĠĠĠ Ġrequired Length Ġ= Ġrequired Length , ĊĠĠĠĠĠ Ġblock Ġ= Ġblock ĊĠ Ġ) ĊĠ Ġadd TextChanged Listener ( text Watcher ) ĊĠ Ġadd On Attach State ChangeListener ( object Ġ: ĠView . On Attach State ChangeListener Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon View Detached From Window ( view : ĠView ) Ġ{ ĊĠĠĠĠĠ Ġremove TextChanged Listener ( text Watcher ) ĊĠĠĠĠĠ Ġtext Watcher . dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Attached To Window ( view : ĠView ) Ġ= ĠUnit ĊĠ Ġ}) Ċ } Ċ Ċ /** Ġ@ author ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ġ*/ Ċ private Ġclass ĠDe bounc ed Text Watcher ( ĊĠ Ġprivate Ġval Ġdebounce Ms : ĠLong Ġ= Ġ 0 , ĊĠ Ġprivate Ġval Ġrequired Length : ĠInt ? Ġ= Ġnull , ĊĠ Ġprivate Ġval Ġblock : Ġ( input : ĠCharSequence ) Ġ-> ĠUnit Ċ ) Ġ: ĠText Watcher Ġ{ ĊĠ Ġprivate Ġval Ġhandler Ġ= ĠHandler () ĊĠ Ġprivate Ġvar Ġscheduled Event : ĠRunnable ? Ġ= Ġnull ĊĊĠ Ġoverride Ġfun Ġafter TextChanged ( p : ĠEdit able ) Ġ= ĠUnit ĊĊĠ Ġoverride Ġfun Ġbefore TextChanged ( ĊĠĠĠ Ġp 0 : ĠCharSequence , ĊĠĠĠ Ġstart : ĠInt , ĊĠĠĠ Ġcount : ĠInt , ĊĠĠĠ Ġafter : ĠInt ĊĠ Ġ) Ġ= ĠUnit ĊĊĠ Ġoverride Ġfun Ġon TextChanged ( ĊĠĠĠ Ġtext : ĠCharSequence , ĊĠĠĠ Ġstart : ĠInt , ĊĠĠĠ Ġbefore : ĠInt , ĊĠĠĠ Ġcount : ĠInt ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġif Ġ( required Length Ġ!= Ġnull Ġ&& Ġtext . length Ġ< Ġrequired Length ) Ġreturn ĊĠĠĠ Ġscheduled Event Ġ= ĠRunnable Ġ{ Ġblock ( text ) Ġ} ĊĠĠĠ Ġhandler . post Delayed ( scheduled Event !! , Ġdebounce Ms ) ĊĠ Ġ} ĊĊĠ Ġfun Ġdispose () Ġ{ ĊĠĠĠ Ġscheduled Event ?. let Ġ{ Ġhandler . remove Callbacks ( it ) Ġ} ĊĠĠĠ Ġscheduled Event Ġ= Ġnull ĊĠ Ġ} Ċ } Ċ