package Ġcom . example . android . room word ss ample . ViewModel ĊĊĊ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . example . android . room word ss ample . Entities . Book Ċ import Ġcom . example . android . room word ss ample . Database . Library Room Database Ċ import Ġcom . example . android . room word ss ample . Repository . Book Repository Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* ĠView ĠModel Ġto Ġkeep Ġa Ġreference Ġto Ġthe Ġword Ġrepository Ġand Ċ Ġ* Ġan Ġup - to - date Ġlist Ġof Ġall Ġwords . Ċ Ġ*/ Ċ Ċ class ĠBook ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrepository : ĠBook Repository ĊĠĠĠ Ġ// ĠUsing ĠLive Data Ġand Ġcaching Ġwhat Ġget Alphabet ized Words Ġreturns Ġhas Ġseveral Ġbenefits : ĊĠĠĠ Ġ// Ġ- ĠWe Ġcan Ġput Ġan Ġobserver Ġon Ġthe Ġdata Ġ( instead Ġof Ġpolling Ġfor Ġchanges ) Ġand Ġonly Ġupdate Ġthe ĊĠĠĠ Ġ// ĠĠ Ġthe ĠUI Ġwhen Ġthe Ġdata Ġactually Ġchanges . ĊĠĠĠ Ġ// Ġ- ĠRepository Ġis Ġcompletely Ġseparated Ġfrom Ġthe ĠUI Ġthrough Ġthe ĠViewModel . ĊĠĠĠ Ġval Ġall Words : ĠLive Data < List < Book >> ĊĠĠĠ Ġval Ġall Favorite : ĠLive Data < List < Book >> ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwords Dao Ġ= ĠLibrary Room Database . get Database ( application , ĠviewModel Scope ). word Dao () ĊĠĠĠĠĠĠĠ Ġrepository Ġ= ĠBook Repository ( words Dao ) ĊĠĠĠĠĠĠĠ Ġall Words Ġ= Ġrepository . all Words ĊĠĠĠĠĠĠĠ Ġall Favorite Ġ= Ġrepository . all Favorite Words ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLaunch ing Ġa Ġnew Ġcoroutine Ġto Ġinsert Ġthe Ġdata Ġin Ġa Ġnon - blocking Ġway ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinsert ( book : ĠBook ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . insert ( book ) ĊĠĠĠ Ġ} Ċ } Ċ