package Ġcom . di am ont . expense . tracker . manage Categories Fragment Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . di am ont . expense . tracker . MainActivity ViewModel Ċ import Ġcom . di am ont . expense . tracker . MainActivity ViewModel Factory Ċ import Ġcom . di am ont . expense . tracker . R Ċ import Ġcom . di am ont . expense . tracker . add Category Dialog Fragment . Add Category Dialog Fragment Ċ import Ġcom . di am ont . expense . tracker . databinding . Fragment Manage Categories Binding Ċ import Ġcom . di am ont . expense . tracker . util . database . Transaction Category ListAdapter Ċ import Ġcom . di am ont . expense . tracker . util . database . Transaction Database Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġkotlinx . android . synt hetic . main . fragment _ manage _ categories .* Ċ Ċ class ĠManage Categories Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġ/** ĠData Ġbinding Ġand Ġview Ġmodel Ġ*/ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding Ġ: ĠFragment Manage Categories Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠManage Categories Fragment ViewModel ĊĊĠĠĠ Ġ/** ĠGet Ġthe ĠActivity ĠView ĠModel Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġactivity ViewModel Ġ: ĠMainActivity ViewModel Ġby Ġactivity ViewModels Ġ{ ĊĠĠĠĠĠĠĠ ĠMainActivity ViewModel Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( this . activity ). application ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment Ġ*/ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( in flater , ĠR . layout . fragment _ manage _ categories , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ĠCreate Ġthe Ġview Ġmodel Ġusing Ġa Ġview Ġmodel Ġfactory ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġapplication Ġ= Ġrequire NotNull ( this . activity ). application ĊĠĠĠĠĠĠĠ Ġval Ġdatabase Dao Ġ= ĠTransaction Database . getInstance ( application ). transaction Database Dao ĊĠĠĠĠĠĠĠ Ġval ĠviewModel Factory Ġ= ĠManage Categories Fragment ViewModel Factory ( database Dao ) ĊĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this , ĠviewModel Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( Manage Categories Fragment ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSet Ġup Ġvalues Ġfor Ġactivity Ġview Ġmodel Ġ*/ ĊĠĠĠĠĠĠĠ Ġactivity ViewModel . setTitle ( getString ( R . string . manage _ categories )) ĊĠĠĠĠĠĠĠ Ġactivity ViewModel . set Bottom NavBar Visibility ( false ) ĊĠĠĠĠĠĠĠ Ġactivity ViewModel . setUp Button Visibility ( true ) ĊĠĠĠĠĠĠĠ Ġactivity ViewModel . set Drawer Layout Enabled ( false ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSet Ġup Ġthe Ġre cycler Ġview Ġwith Ġthe Ġadapter Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠTransaction Category ListAdapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġid Ġ-> ĠAdd Category Dialog Fragment ( id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Category List Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show ( child FragmentManager , ĠAdd Category Dialog Fragment . TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ id , Ġname , Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm Delete Category ( id , Ġname , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbinding . rv Transaction Category List . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġ/** ĠOb serve Ġthe Ġdata Ġand Ġrefresh Ġre cycler Ġview Ġif Ġit Ġchanges Ġ*/ ĊĠĠĠĠĠĠĠ ĠviewModel . categories . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠAdd ĠonClick Listener Ġto Ġadd Ġcategory ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġbinding . ll Add Category . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Category Dialog Fragment ( null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Category List Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show ( child FragmentManager , ĠAdd Category Dialog Fragment . TAG ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturn Ġthe Ġinfl ated Ġlayout Ġ*/ ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCall Ġthis Ġmethod Ġto Ġshow Ġthe Ġconfirmation Ġdialog Ġfor Ġdeleting Ġa Ġcategory ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġconfirm Delete Category ( id : ĠInt , Ġname : ĠString , Ġposition : ĠInt ){ ĊĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( resources . getString ( R . string . confirm _ delete _ dialog _ title )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( resources . getString ( R . string . confirm _ delete _ category _ dialog _ text , Ġname )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( resources . getString ( R . string . cancel )) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( resources . getString ( R . string . delete )) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Category ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} Ċ }