package Ġid . ac . ui . cs . mobile programming . ah mad sup ri yan to . j ah it co id . view model Ċ Ċ import Ġandroidx . lifecycle .* Ċ import Ġid . ac . ui . cs . mobile programming . ah mad sup ri yan to . j ah it co id . dao . Project Dao Ċ import Ġid . ac . ui . cs . mobile programming . ah mad sup ri yan to . j ah it co id . database . Project Db Ċ import Ġid . ac . ui . cs . mobile programming . ah mad sup ri yan to . j ah it co id . repository . Project Repo Ċ import Ġkotlinx . coroutines . flow . observe On Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠProject ViewModel ( private Ġval Ġproject Repo : ĠProject Repo ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġvar Ġproject List : ĠLive Data < Mutable List < Project Db >> Ġ= Ġproject Repo . getAll (). as LiveData () ĊĊĠĠĠ Ġfun Ġsave Project ( project Db : ĠProject Db ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġproject Repo . save Project ( project Db ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Project ( name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnote : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview : ĠString ): ĠProject Db Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproject Repo . generate Project ( name , Ġcategory , Ġamount , Ġaddress , Ġnote , Ġpreview ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġdelete Project ( project : ĠProject Db ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject Repo . delete Project ( project ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlisten Projects Result (): ĠLive Data < Mutable List < Project Db >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproject List ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠProject ViewModel Factory ( private Ġval Ġrepository : ĠProject Repo ) Ġ: ĠViewModel Provider . Factory Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel > Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( model Class . isAssignableFrom ( Project ViewModel :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠProject ViewModel ( repository ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unknown ĠViewModel Ġclass ") ĊĠĠĠ Ġ} Ċ }