package Ġcom . c act ust e am . money . ui . activity Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Port er D uff Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . util . Array Map Ċ import Ġandroid . support . v 4 . view . MenuItem Compat Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . support . v 7 . widget . Search View Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġcom . c act ust e am . money . R Ċ import Ġcom . c act ust e am . money . data . dao . Category Ċ import Ġcom . c act ust e am . money . data . dao . Sub category Ċ import Ġcom . c act ust e am . money . ui . ListItem Ċ import Ġcom . c act ust e am . money . ui . Ui Constants Ċ import Ġcom . c act ust e am . money . ui . Ui Object Ref ĊĊ Ċ class ĠSelect Category Activity Ġ: ĠBase Data Activity (" Select Category Activity ") Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġtype : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar ĠlistView : ĠRecyclerView ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġicons Ġ= ĠArray Map < String , ĠUi Object Ref >() ĊĠĠĠ Ġprivate Ġvar Ġmock Bitmap : ĠBitmap ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġshow All : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠUi Constants . EDIT _ CATEGORY _ REQUEST _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠRESULT _ OK Ġ&& Ġdata Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd . putExtra ( Ui Constants . EXTRA _ CATEGORY , Ġdata . getLong Extra ( Ui Constants . EXTRA _ ID , Ġ- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd . putExtra ( Ui Constants . EXTRA _ TYPE , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd . putExtra ( Ui Constants . EXTRA _ CHANG ES , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġd ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmenu Inflater Ġ= Ġmenu Inflater ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . activity _ select _ category , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsearch Item Ġ= Ġmenu . find Item ( R . id . action _ search ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch View Ġ= ĠMenuItem Compat . getAction View ( search Item ) Ġas ĠSearch View ĊĠĠĠĠĠĠĠ Ġ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 Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch TextChanged ( new Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġsearch View . setOn Close Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Closed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsearch TextChanged ( new Text : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠlistView !!. adapter Ġas ĠList Adapter ĊĠĠĠĠĠĠĠ Ġadapter . apply Filter ( new Text ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! show All ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow All Clicked () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsearch Closed () Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch TextChanged ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠitemId Ġ= Ġitem . itemId ĊĠĠĠĠĠĠĠ Ġif Ġ( itemId Ġ== ĠR . id . new _ category ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Category Clicked () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnew Category Clicked () Ġ{ ĊĠĠĠĠĠĠĠ ĠEdit Category Activity . action Start ( this , ĠUi Constants . EDIT _ CATEGORY _ REQUEST _ CODE , Ġtype ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinject Extras () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestore State ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ select _ category ) ĊĊĠĠĠĠĠĠĠ Ġinitialize View Progress () ĊĠĠĠĠĠĠĠ Ġinitialize Toolbar () ĊĊĠĠĠĠĠĠĠ ĠlistView Ġ= ĠfindViewById ( R . id . list ) Ġas ĠRecyclerView ĊĠĠĠĠĠĠĠ ĠlistView !!. layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ ĠlistView !!. adapter Ġ= ĠList Adapter () ĊĊĠĠĠĠĠĠĠ Ġload Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Progress () ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġif Ġ( show All ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Manager . category Service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getC ategories ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Categories ( r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Manager . category Service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getF requ ently Categories ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Categories ( r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcomposite Subscription . add ( s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Categories ( list : ĠList < Category > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( list Ġ== Ġnull Ġ&& Ġ! show All ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow All Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Data () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠlistView !!. adapter Ġas ĠList Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . all Items . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist ?. forEach Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . all Items . add ( ListItem ( CATEGORY _ ITEM , Ġc )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . sub categories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit . deleted Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġadapter . all Items . add ( ListItem ( SUB CATEGORY _ ITEM , Ġit )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! show All ) Ġadapter . all Items . add ( ListItem ( SHOW _ ALL _ ITEM , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . apply Filter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġicons ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . ref Ġ!= Ġnull ) Ġvalue . get Ref As ( Bitmap :: class . java ). recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( mock Bitmap Ġ!= Ġnull Ġ&& Ġ! mock Bitmap !!. is Re cyc led ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Bitmap !!. recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġout State ?. put Int ( Ui Constants . EXTRA _ TYPE , Ġtype ) ĊĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrestore State ( savedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtype Ġ= ĠsavedInstanceState . getInt ( Ui Constants . EXTRA _ TYPE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinject Extras () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġextras Ġ= Ġintent . extras ĊĠĠĠĠĠĠĠ Ġif Ġ( extras Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extras . containsKey ( Ui Constants . EXTRA _ TYPE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġextras . getInt ( Ui Constants . EXTRA _ TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsub category Clicked ( s : ĠSub category ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġs . category ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġdata . putExtra ( Ui Constants . EXTRA _ CATEGORY , Ġc . id ) ĊĠĠĠĠĠĠĠ Ġdata . putExtra ( Ui Constants . EXTRA _ SUB CATEGORY , Ġs . id ) ĊĠĠĠĠĠĠĠ Ġdata . putExtra ( Ui Constants . EXTRA _ TYPE , Ġc . type ) ĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġdata ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow All Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow All Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġload Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcategory Clicked ( c : ĠCategory ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġdata . putExtra ( Ui Constants . EXTRA _ CATEGORY , Ġc . id ) ĊĠĠĠĠĠĠĠ Ġdata . putExtra ( Ui Constants . EXTRA _ TYPE , Ġc . type ) ĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġdata ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Category Icon ( icon Key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġicon Ġ= ĠUi Object Ref () ĊĠĠĠĠĠĠĠ Ġicons . put ( icon Key , Ġicon ) ĊĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġdata Manager . system Service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Icon Image ( icon Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . ref Ġ= Ġr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( list View !!. adapter Ġas ĠList Adapter ). notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġe Ġ-> Ġshow Error ( e . message ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcomposite Subscription . add ( s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Mock Bitmap (): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mock Bitmap Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Bitmap Ġ= ĠBitmap Factory . decode Resource ( resources , ĠR . drawable . ic _ mock _ category ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmock Bitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Icon View ( view : ĠView , Ġcategory : ĠCategory ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġicon View Ġ= Ġview . findViewById ( R . id . category _ icon ) Ġas ĠImageView ĊĠĠĠĠĠĠĠ Ġval Ġicon Ġ= Ġcategory . icon ĊĠĠĠĠĠĠĠ Ġif Ġ( icon Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategory Icon Ġ= Ġicons [ icon ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( category Icon Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Category Icon ( icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠBitmap Drawable ( resources , Ġif Ġ( category Icon . ref Ġ!= Ġnull ) Ġcategory Icon . get Ref As ( Bitmap :: class . java ) Ġelse Ġget Mock Bitmap ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . setColor Filter ( Color . GRAY , ĠPort er D uff . Mode . SRC _ AT OP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon View . setImage Drawable ( drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠBitmap Drawable ( resources , Ġget Mock Bitmap ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . setColor Filter ( Color . GRAY , ĠPort er D uff . Mode . SRC _ AT OP ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon View . setImage Drawable ( drawable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠCategory Item Holder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind Category ( c : ĠCategory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( item View . findViewById ( R . id . name ) Ġas ĠTextView ). text Ġ= Ġc . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Icon View ( item View , Ġc ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . findViewById ( R . id . list _ item ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Clicked ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind Sub category ( s : ĠSub category ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( item View . findViewById ( R . id . name ) Ġas ĠTextView ). text Ġ= Ġs . name ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . findViewById ( R . id . list _ item ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub category Clicked ( s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind Show All () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . findViewById ( R . id . show _ all _ btn )?. setOnClickListener Ġ{ Ġshow All Clicked () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠList Adapter Ġ: ĠRecyclerView . Adapter < Category Item Holder >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġitems Ġ= Ġmutable ListOf < ListItem >() ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent Filter : ĠString ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġall Items Ġ= Ġmutable ListOf < ListItem >() ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠCategory Item Holder ?, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( getItem ViewType ( position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC ATEG ORY _ ITEM Ġ-> Ġholder ?. bind Category ( items [ position ]. obj Ġas ĠCategory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSUB CATEGORY _ ITEM Ġ-> Ġholder ?. bind Sub category ( items [ position ]. obj Ġas ĠSub category ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSHOW _ ALL _ ITEM Ġ-> Ġholder ?. bind Show All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġitems [ position ]. type ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġitems . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup ?, Ġview Type : ĠInt ): ĠCategory Item Holder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlayout Id Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC ATEG ORY _ ITEM Ġ-> Ġlayout Id Ġ= ĠR . layout . activity _ select _ category _ item ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSUB CATEGORY _ ITEM Ġ-> Ġlayout Id Ġ= ĠR . layout . activity _ select _ category _ subcategory _ item ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSHOW _ ALL _ ITEM Ġ-> Ġlayout Id Ġ= ĠR . layout . activity _ select _ category _ show _ all ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠLayoutInflater . from ( parent !!. context ). inflate ( layout Id , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCategory Item Holder ( v ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġapply Filter ( txt : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Filter Ġ= Ġtxt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Filter () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġapply Filter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Filter . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . addAll ( all Items ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Items . filter To ( items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC ATEG ORY _ ITEM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġit . obj Ġas ĠCategory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . name . contains ( current Filter Ġas ĠCharSequence , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSUB CATEGORY _ ITEM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġit . obj Ġas ĠSub category ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs . name . contains ( current Filter Ġas ĠCharSequence , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠC ATEG ORY _ ITEM Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval ĠSUB CATEGORY _ ITEM Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval ĠSHOW _ ALL _ ITEM Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġfun Ġaction Start ( activity : ĠActivity , Ġrequest Code : ĠInt , Ġtype : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( activity , ĠSelect Category Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Ui Constants . EXTRA _ TYPE , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( intent , Ġrequest Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ