package Ġcom . prog ix . f rid gex . light . fragment . product selection Ċ Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Pair Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . google . android . material . transition . Material Fade Through Ċ import Ġcom . jak ew h art on . r xb ind ing 4 . appcompat . query Text Change Events Ċ import Ġcom . prog ix . f rid gex . light . R Ċ import Ġcom . prog ix . f rid gex . light . activity . MainActivity . Companion . m Db Ċ import Ġcom . prog ix . f rid gex . light . adapter . product selection . Products Adapter Ċ import Ġcom . prog ix . f rid gex . light . application . F ridge X Light Application . Companion . all Products Ċ import Ġcom . prog ix . f rid gex . light . functions . Functions . delayed Action Ċ import Ġcom . prog ix . f rid gex . light . functions . Functions . search String Ċ import Ġio . reactivex . rx java 3 . android . schedul ers . Android Schedulers Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠProducts Fragment Ġ: ĠFragment ( R . layout . fragment _ products ) Ġ{ ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ Ġenter Transition Ġ= ĠMaterial Fade Through (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġresources . getInteger ( R . integer . anim _ duration ). to Long () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġexit Transition Ġ= ĠMaterial Fade Through (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġresources . getInteger ( R . integer . anim _ duration ). to Long () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġre cycler : ĠRecyclerView ĊĠĠĠ Ġprivate Ġvar Ġprod List : ĠArrayList < String > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġvar Ġprod Category : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġjob : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( v : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( v , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġprod Category Ġ= Ġrequire Arguments (). getInt (" prod Cat ") ĊĠĠĠĠĠĠĠ Ġre cycler Ġ= Ġv . findViewById ( R . id . products Recycler ) ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġarguments ?. getString (" category ") ĊĊĠĠĠĠĠĠĠ Ġdelayed Action ( 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). findViewById < Toolbar >( R . id . toolbar ). title Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġjob ?. cancel () ĊĠĠĠĠĠĠĠ Ġjob Ġ= ĠCor outine Scope ( Dispatch ers . Main ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprod List Ġ= Ġcoroutine () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproducts Adapter Ġ= ĠProducts Adapter ( require Context (), Ġprod List , Ġprod Category ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler . adapter Ġ= Ġproducts Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcoroutine (): ĠArrayList < String > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġarguments ?. getString (" category ") ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġval Ġcursor : ĠCursor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Db . raw Query (" SELECT Ġ* ĠFROM Ġproducts ĠWHERE Ġcategory Ġ= Ġ?", ĠlistOf ( name ). to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġcursor . moveTo First () ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! cursor . is After Last ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray . add ( cursor . getString ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . moveTo Next () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġarray . sortBy Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġcursor . close () ĊĠĠĠĠĠĠĠ Ġreturn @ with Context Ġarray ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġproducts Adapter : ĠProducts Adapter ? Ġ= Ġnull ĊĊĊĠĠĠ Ġprivate Ġfun Ġsearch ( s : ĠString ?, Ġint : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( s !!. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpair ArrayList Ġ= ĠArrayList < Pair < Int , ĠString >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġall Products !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp : ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch String ( s . lowercase (), Ġitem ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( temp Ġ!= Ġ 1 0 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpair ArrayList . add ( Pair ( temp , Ġitem )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpair ArrayList . sortBy Ġ{ Ġit . first Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġpair ArrayList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( item . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler . adapter Ġ= ĠProducts Adapter ( require Context (), Ġlist , Ġint !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recycler . adapter Ġ!= Ġproducts Adapter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler . adapter Ġ= ĠProducts Adapter ( require Context (), Ġprod List , Ġprod Category ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . folder _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġval Ġmy Action MenuItem Ġ= Ġmenu . find Item ( R . id . search _ search ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch View Ġ= Ġmy Action MenuItem . action View Ġas ĠSearch View ĊĠĠĠĠĠĠĠ Ġsearch View . query Text Change Events () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. de bounce ( 3 5 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch ( it . query Text . toString (), Ġarguments ?. getInt (" prod Cat ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠ Ġ} Ċ Ċ }