Ċ Ċ package Ġcom . example . digital _ journal Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . as LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . example . digital _ journal . data . Post Ċ import Ġcom . example . digital _ journal . data . Post Dao Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* ĠView ĠModel Ġto Ġkeep Ġa Ġreference Ġto Ġthe ĠInventory Ġrepository Ġand Ġan Ġup - to - date Ġlist Ġof Ġall Ġitems . Ċ Ġ* Ċ Ġ*/ Ċ class ĠInventory ViewModel ( private Ġval Ġpost Dao : ĠPost Dao ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġ// ĠCache Ġall Ġitems Ġform Ġthe Ġdatabase Ġusing ĠLive Data . ĊĠĠĠ Ġval Ġall Items : ĠLive Data < List < Post >> Ġ= Ġpost Dao . getItems (). as LiveData () ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġan Ġexisting ĠItem Ġin Ġthe Ġdatabase . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Item ( ĊĠĠĠĠĠĠĠ ĠitemId : ĠInt , ĊĠĠĠĠĠĠĠ Ġitem Post : ĠString , ĊĠĠĠĠĠĠĠ Ġitem Date : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupdated Item Ġ= Ġget Updated Item Entry ( itemId , Ġitem Post , Ġitem Date ) ĊĠĠĠĠĠĠĠ Ġupdate Item ( updated Item ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLaunch ing Ġa Ġnew Ġcoroutine Ġto Ġupdate Ġan Ġitem Ġin Ġa Ġnon - blocking Ġway ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Item ( post : ĠPost ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Dao . update ( post ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInser ts Ġthe Ġnew ĠItem Ġinto Ġdatabase . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd New Item ( item Post : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Post Ġ= Ġget New Item Entry ( item Post ) ĊĠĠĠĠĠĠĠ Ġinsert Item ( new Post ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLaunch ing Ġa Ġnew Ġcoroutine Ġto Ġinsert Ġan Ġitem Ġin Ġa Ġnon - blocking Ġway ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinsert Item ( post : ĠPost ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Dao . insert ( post ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLaunch ing Ġa Ġnew Ġcoroutine Ġto Ġdelete Ġan Ġitem Ġin Ġa Ġnon - blocking Ġway ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdelete Item ( post : ĠPost ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Dao . delete ( post ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRetrieve Ġan Ġitem Ġfrom Ġthe Ġrepository . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġretrieve Item ( id : ĠInt ): ĠLive Data < Post > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpost Dao . getItem ( id ). as LiveData () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġthe ĠEdit Texts Ġare Ġnot Ġempty ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Entry Valid ( item Post : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item Post . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġinstance Ġof Ġthe Ġ[ Post ] Ġentity Ġclass Ġwith Ġthe Ġitem Ġinfo Ġentered Ġby Ġthe Ġuser . ĊĠĠĠĠ Ġ* ĠThis Ġwill Ġbe Ġused Ġto Ġadd Ġa Ġnew Ġentry Ġto Ġthe ĠInventory Ġdatabase . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget New Item Entry ( item Post : ĠString ): ĠPost Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPost ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Post Ġ= Ġitem Post ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġto Ġupdate Ġan Ġexisting Ġentry Ġin Ġthe ĠInventory Ġdatabase . ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġinstance Ġof Ġthe Ġ[ Post ] Ġentity Ġclass Ġwith Ġthe Ġitem Ġinfo Ġupdated Ġby Ġthe Ġuser . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Updated Item Entry ( ĊĠĠĠĠĠĠĠ ĠitemId : ĠInt , ĊĠĠĠĠĠĠĠ Ġitem Post : ĠString , ĊĠĠĠĠĠĠĠ Ġitem Date : ĠString , ĊĠĠĠ Ġ): ĠPost Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPost ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠitemId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Post Ġ= Ġitem Post , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Date Ġ= Ġitem Date , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠFactory Ġclass Ġto Ġinstantiate Ġthe Ġ[ ViewModel ] Ġinstance . Ċ Ġ*/ Ċ class ĠInventory ViewModel Factory ( private Ġval Ġpost Dao : ĠPost Dao ) Ġ: ĠViewModel Provider . Factory Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel > Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( model Class . isAssignableFrom ( Inventory ViewModel :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠInventory ViewModel ( post Dao ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unknown ĠViewModel Ġclass ") ĊĠĠĠ Ġ} Ċ } ĊĊ