package Ġcom . example . sv book market . activities . view model Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . example . sv book market . activities . common . Constants Ċ import Ġcom . example . sv book market . activities . data . Cart Repository Ċ import Ġcom . example . sv book market . activities . model . Book Ċ import Ġcom . example . sv book market . activities . model . Cart Ċ import Ġcom . google . firebase . firestore .* Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . annotation . meta . When Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . math . round ToInt Ċ Ċ @ H ilt ViewModel Ċ class ĠCart ViewModel Ġ@ Inject Ġconstructor ( private Ġval Ġcart Repository : ĠCart Repository ) Ġ: ViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ cart Item Ġ= ĠMutable LiveData < Mutable List < Cart >>() ĊĠĠĠ Ġval Ġcart Item Ġget () Ġ= Ġ_ cart Item ĊĊĊĠĠĠ Ġinit { ĊĠĠĠĠĠĠĠ Ġload Cart Item () ĊĠĠĠĠĠĠĠ ĠonDelete Handle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Cart Item () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġcart Repository . get Cart ( Current UserInfo . getInstance (). current Profile ). add Snapshot Listener Ġ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Listener < Query Snapshot > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Event ( value : ĠQuery Snapshot ?, Ġerror : ĠFirebase Fire store Exception ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( Constants . V MT AG , Ġ" Listen Ġfailed .", Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcart List : ĠMutable List < Cart > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( doc Ġin Ġvalue !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbool Ġ= Ġdoc . data [" is Ch ose "]. toString () Ġ== Ġ" true " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġitem Ġ= ĠCart ("", Ġdoc . data [" image "]. toString (), doc . data [" title "]. toString (), Ġdoc . data [" author "]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc . data [" Quantity "]. toString (). toDouble (). round ToInt (), Ġdoc . data [" price "]. toString (). to Long (), Ġdoc . data [" sal er "]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc . data [" sal er Name "]. toString (), bool ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . id Ġ= Ġdoc . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcart List . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcart Item . value Ġ= Ġcart List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġupdate Quantity ( id : ĠString , Ġplus Or Minus : Boolean ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcart Repository . new Quantity For Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplus Or Minus , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCurrent UserInfo . getInstance (). current Profile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Cart ( id : ĠString ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġcart Repository . delete Cart ( Current UserInfo . getInstance (). current Profile , Ġid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Ch ose Change ( id : ĠString , Ġis Ch ose : ĠBoolean ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġcart Repository . is Ch ose Change ( Current UserInfo . getInstance (). current Profile , Ġid , Ġis Ch ose ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonDelete Handle () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠFirebase Fire store . getInstance (). collection (" books "). add Snapshot Listener Ġ{ Ġsnapshots , Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" 0 0 0 0 0 0 0 0 0 0 ", Ġe . message !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( doc Ġin Ġsnapshots !!. document Changes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( doc . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDocument Change . Type . RE MOVED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Cart ( doc . document . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }