package Ġcom . speak out all . ui . search Ċ Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġkotlinx . coroutines .* Ċ Ċ internal Ġclass ĠDe bounc ing Query Text Listener ( ĊĠĠĠ Ġprivate Ġval Ġon De bounc ing Query Text Change : Ġ( String ?) Ġ-> ĠUnit , ĊĠĠĠ Ġprivate Ġval Ġrun Before : Ġ( String ?) Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠ Ġvar Ġdebounce Period : ĠLong Ġ= Ġ 1 0 0 0 ĊĊĠĠĠ Ġprivate Ġval Ġcoroutine Scope : ĠCor outine Scope Ġ= ĠCor outine Scope ( Dispatch ers . Main ) ĊĊĠĠĠ Ġprivate Ġvar Ġsearch Job : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Job ?. cancel () ĊĠĠĠĠĠĠĠ Ġrun Before ( new Text ) ĊĠĠĠĠĠĠĠ Ġsearch Job Ġ= Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Text ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( de bounce Period ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon De bounc ing Query Text Change ( new Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ }