package Ġcom . h oly gun ner . discover _ me als . ui . selected _ ingredients Ċ Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ 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 . User Selection Ċ import Ġcom . h oly gun ner . discover _ me als . repository . Db Wrapper Ċ import Ġcom . h oly gun ner . discover _ me als . repository . Repository Component Ċ import Ġio . realm . Realm List Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠSelected Ing redients ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġingredient Manager : ĠIng redient Manager , ĊĠĠĠ Ġprivate Ġval Ġdb Wrapper : ĠDb Wrapper ĊĠĠĠ Ġ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġval Ġingredients LD Ġ= ĠMutable LiveData < List < Ingredient >>() ĊĠĠĠ Ġval Ġitems To Del Ġ= Ġhash Set Of < Ingredient >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġload Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Selection Ġ= Ġdb Wrapper . getUser Selection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Selection . load () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! user Selection . isValid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ launch ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Ing redients Ġ= Ġuser Selection . selected Ing redients ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected In gr s Ġ= Ġmutable ListOf < Ingredient >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( name Ġin Ġselected Ing redients ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategory : ĠString Ġ= Ġingredient Manager . find Ingredient Category ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġing r Ġ= ĠIng redient ( name Ġ= Ġname , Ġcategory Ġ= Ġcategory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected In gr s . add ( ing r ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Data ( selected In gr s ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost Data ( ingredients : ĠList < Ingredient >) Ġ{ ĊĠĠĠĠĠĠĠ Ġingredients LD . post Value ( ingredients ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Selected () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġingredients : ĠMutable List < Ingredient > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ: ĠList < Ingredient > Ġ= Ġingredients LD . value !! ĊĠĠĠĠĠĠĠ Ġingredients . addAll ( value ) ĊĠĠĠĠĠĠĠ Ġif Ġ( ingredients . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ing r Ġin Ġitems To Del ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġingredients . remove ( ing r ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems To Del . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore Selected ( ingredients ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Data ( ingredients ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstore Selected ( ingredients : ĠList < Ingredient >) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġing rs Ġ= ĠRealm List < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġing rs . addAll ( ingredients . map Ġ{ Ġit . name Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Selection Ġ: ĠUser Selection Ġ= ĠUser Selection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. selected Ing redients ( ing rs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Wrapper . store User Selection ( user Selection ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }