package Ġcom . dark min st rel . po cket dict . ui . act _ main Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . dark min st rel . po cket dict .* Ċ import Ġcom . dark min st rel . po cket dict . data . Parsed Translation Ċ import Ġcom . dark min st rel . po cket dict . ui . views . ViewHolder Simple Ċ import Ġcom . dark min st rel . po cket dict . ui . views . ViewHolder Text Ċ import Ġcom . dark min st rel . po cket dict . ui . views . ViewHolder Text Pair Ċ import Ġcom . dark min st rel . po cket dict . utils . assert Ui Thread Ċ import Ġcom . dark min st rel . po cket dict . utils . color ize Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠAdapter F avorites ( private Ġval Ġscope View : ĠCor outine Scope , Ġprivate Ġval Ġvm : ĠAct Main VM , Ġprivate Ġval Ġon Item Clicked : Ġ( position : Int , Ġtranslation : Parsed Translation ) Ġ-> ĠUnit ): ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġquery Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġval Ġall Keys Ġ= ĠArrayList < String >() ĊĠĠĠ Ġprivate Ġval Ġobjects Ġ= ĠArrayList < Any >() ĊĠĠĠ Ġprivate Ġval Ġjobs Map Ġ= ĠIdentity HashMap < ViewHolder Text Pair , ĠJob >() ĊĊĠĠĠ Ġprivate Ġval Ġobject Title Ġ= ĠObject () ĊĠĠĠ Ġprivate Ġval Ġobject Nothing Found Ġ= ĠObject () ĊĠĠĠ Ġprivate Ġval Ġobject Empty Ġ= ĠObject () ĊĊĠĠĠ Ġfun Ġset Keys ( keys : List < String > ){ ĊĠĠĠĠĠĠĠ Ġthis . all Keys . clear () ĊĠĠĠĠĠĠĠ Ġthis . all Keys . addAll ( keys ) ĊĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Query ( query : String ){ ĊĠĠĠĠĠĠĠ Ġthis . query Ġ= Ġquery ĊĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh (){ ĊĠĠĠĠĠĠĠ Ġobjects . clear () ĊĠĠĠĠĠĠĠ Ġval Ġfiltered Keys Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġif ( query . isEmpty ()) Ġfiltered Keys . addAll ( all Keys ) ĊĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Keys . addAll ( all Keys . filter { Ġit . startsWith ( query ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Keys . addAll ( all Keys . filter { Ġit . contains ( query ) Ġ}. subtract ( filtered Keys )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( filtered Keys . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobjects . add ( object Title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobjects . addAll ( filtered Keys ) ĊĠĠĠĠĠĠĠ Ġ} else Ġif ( filtered Keys . isEmpty () Ġ&& Ġall Keys . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobjects . add ( object Nothing Found ) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobjects . add ( object Empty ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () Ġ// TODO Ġoptimize ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġobjects . size ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( objects [ position ]){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Title Ġ-> ĠR . layout . list item _ title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Nothing Found Ġ-> ĠR . layout . list item _ nothing _ found ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Empty Ġ-> ĠR . layout . list item _ empty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . layout . list item _ word ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): RecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( view Type , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( view Type ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . list item _ title Ġ-> ĠViewHolder Text ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . list item _ word Ġ-> ĠViewHolder Text Pair ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . list item _ nothing _ found Ġ-> ĠViewHolder Simple ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . list item _ empty Ġ-> ĠViewHolder Simple ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException (" Unknown Ġview Ġtype ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġo Ġ= Ġobjects [ position ] ĊĠĠĠĠĠĠĠ Ġwhen ( holder ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠViewHolder Text Pair Ġ-> Ġbind Text Pair ( holder , Ġo Ġas ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠViewHolder Text Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( o ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Title Ġ-> Ġholder . setText ( R . string . favorite Translations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind Text Pair ( holder : ĠViewHolder Text Pair , Ġkey : ĠString ){ ĊĠĠĠĠĠĠĠ Ġholder . item View . tag Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġkey Color ized Ġ= Ġif ( query . isEmpty ()) Ġkey Ġelse Ġcolor ize ( holder . item View . context , Ġkey , Ġquery ) ĊĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ Ġview -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( view . tag Ġas ? ĠParsed Translation )?. let { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Clicked ( holder . adapter Position , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġjobs Map [ holder ]?. cancel () ĊĠĠĠĠĠĠĠ Ġholder . setText s ("", Ġ"") ĊĠĠĠĠĠĠĠ Ġjobs Map [ holder ] Ġ= Ġscope View . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvm . get Favorite ( key )?. let Ġ{ Ġtranslation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġensure Active () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Ui Thread () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . setText s ( key Color ized , Ġtranslation . getDescription ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . tag Ġ= Ġtranslation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Re cyc led ( holder : ĠRecyclerView . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( holder Ġis ĠViewHolder Text Pair ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjobs Map [ holder ]?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjobs Map . remove ( holder ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on View Re cyc led ( holder ) ĊĠĠĠ Ġ} Ċ }