package Ġio . e ber le in . product eval Ċ Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Window Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . core . view . Gravity Compat Ċ import Ġandroidx . drawer layout . widget . Drawer Layout Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġio . e ber le in . product eval . adapters . Base Adapter Ċ import Ġio . e ber le in . product eval . adapters . Category Adapter Ċ import Ġio . e ber le in . product eval . objects . Category Ċ import Ġio . e ber le in . product eval . objects . Category Dao Ċ import Ġio . e ber le in . product eval . objects . DB Ċ import Ġio . e ber le in . product eval . objects . Product Dao Ċ import Ġio . e ber le in . product eval . ui . products . Products Fragment Ċ import Ġio . e ber le in . product eval . view models . Category ViewModel Ċ import Ġio . e ber le in . product eval . view models . Category ViewModel Factory Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġsplit ties . arch . room . room Db Ċ import Ġsplit ties . experimental . Internal Split ties Api Ċ import Ġsplit ties . fragments . fragment Transaction Ċ Ċ @ Internal Split ties Api Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠBase Adapter . ViewHolder . Host < Category > Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtoolbar : ĠToolbar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdrawer Layout : ĠDraw er Layout ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcat RV : ĠRecyclerView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcat R VA : ĠCategory Adapter ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġproduct Dao : ĠProduct Dao ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcategory Dao : ĠCategory Dao ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmodel : ĠCategory ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġsetup Toolbar () ĊĠĠĠĠĠĠĠ Ġsetup Recycler () ĊĠĠĠĠĠĠĠ Ġsetup DB () ĊĠĠĠĠĠĠĠ Ġsetup ViewModel () ĊĠĠĠĠĠĠĠ Ġsetup NavBar () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ViewModel (){ ĊĠĠĠĠĠĠĠ Ġmodel Ġ= Ġview Models < Category ViewModel > Ġ{ ĠCategory ViewModel Factory ( category Dao ) Ġ}. value ĊĠĠĠĠĠĠĠ Ġmodel . getC ategories (). observe ( this , ĠObserver Ġ{ Ġcats Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcat R VA . add ( cats ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup DB (){ ĊĠĠĠĠĠĠĠ Ġval Ġdb : ĠDB Ġ= Ġroom Db (" pro de val ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfallback To Dest ruct ive Migration () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcategory Dao Ġ= Ġdb . category () ĊĠĠĠĠĠĠĠ Ġproduct Dao Ġ= Ġdb . product () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup NavBar (){ ĊĠĠĠĠĠĠĠ Ġdrawer Layout Ġ= ĠfindViewById ( R . id . drawer _ layout ) ĊĠĠĠĠĠĠĠ Ġif ( cat R VA . item Count Ġ== Ġ 0 ) Ġdrawer Layout . open Drawer ( Gravity Compat . START ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Toolbar (){ ĊĠĠĠĠĠĠĠ Ġtoolbar Ġ= ĠfindViewById ( R . id . toolbar ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Category Dialog ( item : ĠCategory ? Ġ= Ġnull ){ ĊĠĠĠĠĠĠĠ Ġvar Ġc : ĠCategory ? Ġ= Ġitem ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠDialog ( this ) ĊĠĠĠĠĠĠĠ Ġdialog . request Window Feature ( Window . FEATURE _ NO _ TITLE ) ĊĠĠĠĠĠĠĠ Ġdialog . set ContentView ( R . layout . dialog _ category ) ĊĠĠĠĠĠĠĠ Ġval Ġet : ĠEditText Ġ= Ġdialog . findViewById ( R . id . et _ category _ name ) ĊĠĠĠĠĠĠĠ Ġif ( c Ġ!= Ġnull ) Ġet . setText ( c . name ) ĊĠĠĠĠĠĠĠ Ġval Ġok : ĠButton Ġ= Ġdialog . findViewById ( R . id . btn _ ok ) ĊĠĠĠĠĠĠĠ Ġval Ġcancel : ĠButton Ġ= Ġdialog . findViewById ( R . id . btn _ cancel ) ĊĠĠĠĠĠĠĠ Ġcancel . setOnClickListener Ġ{ Ġdialog . dismiss () Ġ} ĊĠĠĠĠĠĠĠ Ġok . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( c Ġ== Ġnull ) Ġc Ġ= ĠCategory ( et . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġc !!. name Ġ= Ġet . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ= Ġcategory Dao . getById ( category Dao . insert ( c !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcat R VA . add ( c !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Recycler (){ ĊĠĠĠĠĠĠĠ Ġcat RV Ġ= ĠfindViewById ( R . id . rv Categories ) ĊĠĠĠĠĠĠĠ Ġcat RV . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġcat R VA Ġ= ĠCategory Adapter ( this ) ĊĠĠĠĠĠĠĠ Ġcat RV . adapter Ġ= Ġcat R VA ĊĠĠĠĠĠĠĠ Ġcat RV . addItem Decoration ( Divider Item Decoration ( this , ĠDiv ider Item Decoration . VERTICAL )) ĊĠĠĠĠĠĠĠ Ġcat RV . setOnClickListener Ġ{} ĊĠĠĠĠĠĠĠ Ġval Ġadd Btn Ġ= ĠfindViewById < Button >( R . id . btn Add Category ) ĊĠĠĠĠĠĠĠ Ġadd Btn . setOnClickListener Ġ{ create Category Dialog ()} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . main , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Clicked ( item : ĠCategory ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( R . id . nav _ host _ fragment , ĠProducts Fragment ( product Dao , Ġitem )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdrawer Layout . close Draw ers () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Btn One Clicked ( item : ĠCategory ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Default ) Ġ{ Ġcategory Dao . delete ( item ) Ġ} ĊĠĠĠĠĠĠĠ Ġcat R VA . remove ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Btn Two Clicked ( item : ĠCategory ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Category Dialog ( item ) ĊĠĠĠ Ġ} Ċ } Ċ