package Ġcom . h oly gun ner . discover _ me als . ui . me als _ home Ċ Ċ import Ġandroidx . lifecycle .* Ċ import Ġcom . h oly gun ner . discover _ me als . business _ logic . Ingredient Manager Ċ import Ġcom . h oly gun ner . discover _ me als . models . Ingredient Ċ import Ġcom . h oly gun ner . discover _ me als . models . Ing redients Category Ċ import Ġcom . h oly gun ner . discover _ me als . models . User Selection Ċ import Ġcom . h oly gun ner . discover _ me als . repository . Db Wrapper Ċ import Ġio . realm . Realm List Ċ import Ġkotlinx . coroutines .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠMe als Home ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġdb Wrapper : ĠDb Wrapper , ĊĠĠĠ Ġprivate Ġval Ġingredient Manager : ĠIng redient Manager ĊĠĠĠ Ġ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcategories LiveData Ġ= ĠMutable LiveData < List < Ing redients Category >>() ĊĠĠĠ Ġprivate Ġval Ġio Scope Ġ= ĠCor outine Scope ( Dispatch ers . IO Ġ+ ĠSuper visor Job ()) ĊĠĠĠ Ġprivate Ġval Ġuser Selection Ġ= ĠUser Selection . Builder () ĊĠĠĠĠĠĠĠ Ġ. selected Ing redients ( Realm List ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġload From Assets () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload From Assets () Ġ{ ĊĠĠĠĠĠĠĠ Ġio Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Categories ( ingredient Manager . getAll Ingredient Categories ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh Filled Ing redients () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Selection Ġ= Ġdb Wrapper . getUser Selection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Selection . load () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! user Selection . isValid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ launch ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Me als Home ViewModel . user Selection . refresh Content ( user Selection . selected Ing redients ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategories : ĠList < Ing redients Category >? Ġ= Ġcategories LiveData . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( category Ġin Ġcategories !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ing r Ġin Ġcategory . ingredients ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġing r . is Fill Ġ= Ġuser Selection . selected Ing redients . contains ( ing r . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġobserve Categories LiveData () Ġ: ĠLive Data < List < Ing redients Category >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcategories LiveData . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Filled Ing redients () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost Categories ( categories : ĠList < Ing redients Category >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcategories LiveData . post Value ( categories ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Selected Ing redients () Ġ: ĠArray < Ingredient > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( user Selection . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected In gs Ġ= Ġmutable ListOf < Ingredient >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategories : ĠList < Ing redients Category >? Ġ= Ġcategories LiveData . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( category Ġin Ġcategories !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ing r Ġin Ġcategory . ingredients ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Fill Ġ= Ġuser Selection . selected Ing redients . contains ( ing r . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Fill ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected In gs . add ( ing r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġselected In gs . to Typed Array () ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstore Selected Ing redients ( categories : ĠMutable List < Ing redients Category >) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Save Ġ= ĠRealm List < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( category Ġin Ġcategories ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiltered Ġ= Ġcategory . ingredients ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . is Fill Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Save . addAll ( filtered ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Selection . isValid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Selection . refresh Content ( to Save ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Wrapper . store User Selection ( user Selection ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }