package Ġcom . sha . food _ delivery _ app . view model Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . air bnb . mv rx .* Ċ import Ġcom . sha . food _ delivery _ app . Food Delivery Application Ċ import Ġcom . sha . food _ delivery _ app . data . repository . Main Food Item Data Repository Ċ import Ġcom . sha . food _ delivery _ app . mv rx . Mv Rx ViewModel Ċ import Ġcom . sha . food _ delivery _ app . state . Food Item State Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠSh ah ul ĠH ame ed ĠSh a ik Ġon Ġ 1 3 / 1 2 / 2 0 2 0 . Ċ Ġ*/ Ċ class ĠFood Items ViewModel Ġ( ĊĠĠĠ ĠinitialState : ĠFood Item State , ĊĠĠĠ Ġprivate Ġval Ġmain Food Item Data Repository : ĠMain Food Item Data Repository Ċ ) Ġ: ĠM v Rx ViewModel < Food Item State >( initialState ) Ġ{ ĊĠĠĠ Ġval ĠerrorMessage Ġ= ĠMutable LiveData < String >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( main Food Data Items Ġ= ĠLoading ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmain Food Item Data Repository . get Main Food Item Data (). execute Ġ{ Ġcopy ( main Food Data Items Ġ= Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Main Food Item Data ( item : ĠString ) Ġ= Ġwith State Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠ Ġmain Food Item Data Repository . fetch Main Food Item Data ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute Ġ{ Ġcopy ( main Food Data Item Ġ= Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Added Food Items From Cart () Ġ= Ġwith State Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠ Ġmain Food Item Data Repository . fetch Added Food Items To The Cart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute Ġ{ Ġcopy ( food Items Ġ= Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Food Item To Cart ( itemId : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith State Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . main Food Data Items Ġis ĠSuccess ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Food Item Data Repository . add Cart Food Items ( itemId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠSuccess ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( food Item Ġ= Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it Ġis ĠFail ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage . post Value (" Failed Ġto Ġadd Ġfood Ġitem Ġto Ġcart ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Food Item From Cart ( itemId : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith State Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . main Food Data Items Ġis ĠSuccess ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Food Item Data Repository . remove Food Item From Cart ( itemId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠSuccess ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( food Item Ġ= Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it Ġis ĠFail ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage . post Value (" Failed Ġto Ġremove Ġfood item Ġfrom Ġcart ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠM aver icks ViewModel Factory < Food Items ViewModel , ĠFood Item State > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( viewModel Context : ĠViewModel Context , Ġstate : ĠFood Item State ): ĠFood Items ViewModel ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmain Food Item Data Repository Ġ= ĠviewModel Context . app < Food Delivery Application >(). main Food Item Data Repository ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFood Items ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Food Item Data Repository ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }