package Ġcom . example . inventory ĊĊ Ġimport Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . example . inventory . data . Item Ċ import Ġcom . example . inventory . data . Session AddItem Ċ import Ġcom . example . inventory . databinding . ItemList Fragment Binding Ċ import Ġcom . example . inventory . src . Email Room Instance Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . auth . k tx . auth Ċ import Ġcom . google . firebase . database . k tx . database Ċ import Ġcom . google . firebase . k tx . Firebase Ċ Ċ /** Ċ Ġ* ĠMain Ġfragment Ġdisplaying Ġdetails Ġfor Ġall Ġitems Ġin Ġthe Ġdatabase . Ċ Ġ*/ Ċ class ĠItem List Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠInventory ViewModel Ġby Ġactivity ViewModels Ġ{ ĊĠĠĠĠĠĠĠ ĠInventory ViewModel Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity ?. application Ġas ĠInventory Application ). database . item Dao () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġsession AddItem : ĠSession AddItem Ġby Ġactivity ViewModels () ĊĠĠĠ Ġprivate Ġval Ġemail Room Instance Ġ= ĠEmail Room Instance () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth : ĠFirebase Auth ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠItem List Fragment Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠItem List Fragment Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Confirmation Dialog () Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( getString ( android . R . string . dialog _ alert _ title )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( getString ( R . string . delete _ question 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( getString ( R . string . no )) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . yes )) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete All Items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠItem ListAdapter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem List Fragment Directions . action ItemList Fragment To Item Detail Fragment ( it . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . find Nav Controller (). navigate ( action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( this . context ) ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġ/* ĠAttach Ġan Ġobserver Ġon Ġthe Ġall Items Ġlist Ġto Ġupdate Ġthe ĠUI Ġautomatically Ġwhen Ġthe Ġdata ĊĠĠĠĠĠĠĠ Ġchanges . Ġ*/ ĊĠĠĠĠĠĠĠ ĠviewModel . all Items . observe ( this . view Lifecycle Owner ) Ġ{ Ġitems Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠInitialize ĠFirebase ĠAuth ĊĠĠĠĠĠĠĠ Ġauth Ġ= ĠFirebase . auth ĊĠĠĠĠĠĠĠ Ġval ĠcurrentUser Ġ= Ġauth . currentUser ĊĠĠĠĠĠĠĠ Ġif ( currentUser Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// attempt Ġa Ġlogin ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠFirebase . database . reference ĊĠĠĠĠĠĠĠ Ġ// val Ġmy Ref Ġ= Ġdatabase . getReference (" message ") ĊĊĊĠĠĠĠĠĠĠ ĠLog . d (" Log ", Ġ" value : Ġ" Ġ+ ĠviewModel . all Items . value . toString ()) ĊĠĠĠĠĠĠĠ Ġ// val Ġkey Ġ= Ġdatabase . child (" posts "). push (). key ĊĠĠĠĠĠĠĠ Ġval Ġpost Ġ= ĠviewModel . all Items . value ĊĊĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġpost ?. map Ġ{ Ġ Ġit . id Ġto Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" barcode " Ġto Ġit . item Barcode , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġit . itemName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" price " Ġto Ġit . item Price , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" quantity " Ġto Ġit . quantity In Stock , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" note " Ġto Ġit . item Note ) Ġ} ĊĠĠĠĠĠĠĠ Ġ// val Ġmap 2 Ġ= Ġmap ?. associate { Ġit Ġto Ġit . second Ġ} ĊĠĠĠĠĠĠĠ Ġ// val Ġmap 2 Ġ= Ġmap ?. to Mutable Set () ĊĠĠĠĠĠĠĠ Ġ// val Ġmap Ġ= Ġpost ?. groupBy ({" Item ĠName " Ġto Ġit . itemName }, Ġ{" Item ĠBar code " Ġto Ġit . item Barcode }) ĊĊĠĠĠĠĠĠĠ ĠLog . d (" Log ", Ġ" value : Ġ$ map ") ĊĠĠĠĠĠĠĠ Ġ// Log . d (" Log ", Ġ" value : Ġ$ map 2 ") ĊĊĠĠĠĠĠĠĠ Ġmap ?. forEach Ġ{ Ġdatabase . child ( it . first . toString ()). update Children ( it . second Ġas ĠMap < String , ĠAny >) Ġ} ĊĠĠĠĠĠĠĠ Ġ// database . update Children () ĊĊĠĠĠĠĠĠĠ Ġbinding . floating ActionButton . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession AddItem . set Barcode ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession AddItem . setName ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠItem List Fragment Directions . action ItemList Fragment ToAdd Item Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . add _ fragment _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . find Nav Controller (). navigate ( action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . floating ActionButton 2 . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Room Instance . backup Database ( this . require Activity (), ĠviewModel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . floating ActionButton 3 . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Confirmation Dialog () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }