package Ġdev . mu ham m ads abe el ah med . exp enses . added it expense . presentation . tag selection Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġdev . mu ham m ads abe el ah med . exp enses . R Ċ import Ġdev . mu ham m ads abe el ah med . exp enses . util . extensions . application Ċ import Ġdev . mu ham m ads abe el ah med . exp enses . util . extensions . plus Assign Ċ import Ġdev . mu ham m ads abe el ah med . exp enses . added it expense . presentation . Add Edit Expense Activity Model Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ Ċ class ĠTag Selection Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġre cyclerView : ĠRecyclerView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠTag Selection Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlayout Manager : ĠLinearLayoutManager ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġactivity Model : ĠAdd Edit Expense Activity Model ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmodel : ĠTag Selection Fragment Model ĊĊĠĠĠ Ġprivate Ġval Ġdis pos ables Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġ// ĠLifecycle Ġstart ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ tag _ selection , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbind Widgets ( view ) ĊĠĠĠĠĠĠĠ Ġsetup ActionBar () ĊĠĠĠĠĠĠĠ Ġsetup RecyclerView () ĊĠĠĠĠĠĠĠ Ġsetup Models () ĊĠĠĠĠĠĠĠ Ġbind Model () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind Widgets ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView Ġ= Ġview . findViewById ( R . id . recycler _ view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ActionBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaction Bar Ġ= Ġ( require Activity () Ġas ĠAppCompatActivity ). support ActionBar Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġaction Bar . title Ġ= ĠgetString ( R . string . select _ tags ) ĊĠĠĠĠĠĠĠ Ġaction Bar . set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġaction Bar . set Home As Up Indicator ( R . drawable . ic _ arrow _ back _ 2 4 dp ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠTag Selection Adapter () ĊĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= Ġlayout Manager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Models () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Model Ġ= ĠViewModel Providers . of ( require Activity ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( Add Edit Expense Activity Model :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠTag Selection Fragment Model . Factory ( require Context (). application ) ĊĠĠĠĠĠĠĠ Ġmodel Ġ= ĠViewModel Providers . of ( this , Ġfactory ). get ( Tag Selection Fragment Model :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind Model () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis pos ables Ġ+= Ġmodel . item Models . to Observable (). subscribe ( adapter :: submit List ) ĊĠĠĠĠĠĠĠ Ġdis pos ables Ġ+= Ġmodel . show New Tag Dialog ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġshow New Tag Dialog () Ġ} ĊĠĠĠĠĠĠĠ Ġdis pos ables Ġ+= Ġmodel . delegate Selected Tags ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġactivity Model . select Tags ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġdis pos ables Ġ+= Ġmodel . finish ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġrequire Activity (). on Back Pressed () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow New Tag Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Fragment Ġ= ĠNew Tag Dialog Fragment . newInstance () ĊĠĠĠĠĠĠĠ Ġdialog Fragment . tag Created Ġ= Ġ{ Ġmodel . create Tag ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġdialog Fragment . show ( require FragmentManager (), Ġ" New Tag Dialog Fragment ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠLifecycle Ġend ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġclear Dis pos ables () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Dis pos ables () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis pos ables . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠOptions ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ tag _ selection , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġback Selected () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . confirm Ġ-> Ġconfirm Selected () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġback Selected (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfirm Selected (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel . confirm () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ }