package Ġfr . uge . conf roid . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . widget . Filter Ċ import Ġandroid . widget . Search View Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġfr . uge . conf roid . R Ċ Ċ /*** Ċ Ġ* ĠWill Ġdeal Ġwith Ġthe Ġfeatures Ġof Ġan Ġ[ Filter ]. Ċ Ġ* Ċ Ġ* Ġ@ author ĠA il ton ĠL op es ĠMen des Ċ Ġ* Ġ@ author ĠJon athan ĠCH U Ċ Ġ* Ġ@ author ĠF ab ien ĠL AM BER T -- DEL AVA QU ER IE Ċ Ġ* Ġ@ author ĠAk ram ĠM ALE K Ċ Ġ* Ġ@ author ĠG Ã© ral d ĠLIN Ċ Ġ*/ Ċ object ĠFilter Utils Ġ{ ĊĊĠĠĠ Ġ/** * ĊĠĠĠĠ Ġ* ĠWill Ġcreate Ġa Ġfilter Ġfrom Ġthe Ġlist Ġgiven . ĊĠĠĠĠ Ġ* ĠWill Ġuse Ġ[ transform String ] Ġto Ġfilter Ġthe Ġpattern . ĊĠĠĠĠ Ġ* ĠWill Ġuse Ġ[ update Requests ] Ġto Ġupdate Ġthe Ġlist Ġof Ġthe Ġrequests Ġso Ġthe Ġfilter Ġcan Ġhappen . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlist Ġthe Ġ[ List ] Ġof Ġ[ T ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġtransform String Ġa Ġfunction Ġthat Ġtakes Ġ[ T ] Ġand Ġreturns Ġ[ String ] ĊĠĠĠĠ Ġ* Ġ@ param Ġupdate Requests Ġa Ġfunction Ġthat Ġtakes Ġ[ List ] Ġof Ġ[ T ] Ġand Ġreturns Ġ[ Unit ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġfilter ( list Ġ: ĠList < T >, Ġtransform String Ġ: Ġ( list Item Ġ: ĠT ) Ġ-> ĠString , Ġupdate Requests Ġ: Ġ( new List : ĠList < T >) Ġ-> ĠUnit ) Ġ: ĠFilter Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠFilter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġperform Filtering ( constraint : ĠCharSequence ?): ĠFilter Results Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfilter edList Ġ= Ġmutable ListOf < T >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( constraint Ġ== Ġnull Ġ|| Ġconstraint . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter edList Ġ= Ġlist . to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Pattern Ġ= Ġconstraint . toString (). toLowerCase (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transform String ( item ). toLowerCase (). contains ( filter Pattern )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter edList . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= ĠFilter Results () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . values Ġ= Ġfilter edList ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpublish Results ( constraint : ĠCharSequence ?, Ġresults : ĠFilter Results ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġresults ?. values Ġas ĠList < T > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( results Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Requests ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Requests ( results ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** * ĊĠĠĠĠ Ġ* ĠWill Ġgenerate Ġa Ġmenu Ġwith Ġa Ġ[ Search View ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġthe Ġ[ Context ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġresources Ġthe Ġ[ Resources ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġmenu Ġthe Ġ[ Menu ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġinflater Ġthe Ġ[ Menu Inflater ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġa Ġfunction Ġthat Ġtakes Ġ[ String ] Ġand Ġreturns Ġ[ Unit ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . LO L LI POP ) ĊĠĠĠ Ġfun ĠonCreate Options Menu ( context Ġ: ĠContext , Ġresources : ĠResources , Ġmenu : ĠMenu , Ġinflater : ĠMenu Inflater , Ġcallback Ġ: Ġ( text Ġ: ĠString ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . files _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch Item : ĠMenuItem Ġ= Ġmenu . find Item ( R . id . search Item ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch View : ĠSearch View Ġ= Ġsearch Item . action View Ġas ĠSearch View ĊĠĠĠĠĠĠĠ Ġsearch View . ime Options Ġ= ĠEditor Info . IME _ ACTION _ DONE ĊĊĠĠĠĠĠĠĠ Ġsearch View . background Ġ= Ġresources . get Drawable ( R . drawable . search _ bg , Ġcontext . theme ) ĊĊĠĠĠĠĠĠĠ Ġsearch View . setOn Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Text Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( new Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }