package Ġcom . k any ide veloper . shop pie . cart Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . google . firebase . firestore . k tx . firestore Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġcom . k any ide veloper . shop pie . model . Product ĊĊ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Cart ViewModel " Ċ Ċ enum Ġclass ĠStatus Ġ{ ĠLO ADING , ĠERROR , ĠDONE Ġ} Ċ Ċ class ĠCart ViewModel Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfire store Database Ġ= ĠFirebase . firestore ĊĊĠĠĠ Ġprivate Ġval Ġ_ status Ġ= ĠMutable LiveData < Status >() ĊĠĠĠ Ġval Ġstatus : ĠLive Data < Status > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ status ĊĊĊĠĠĠ Ġprivate Ġval Ġ_ products Ġ= ĠMutable LiveData < List < Product >>() ĊĠĠĠ Ġval Ġproducts : ĠLive Data < List < Product >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ products ĊĊĠĠĠ Ġprivate Ġval Ġ_ cart Empty Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġcart Status : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ cart Empty ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Cart () ĊĠĠĠĠĠĠĠ Ġget Cart Products () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Cart Products () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠStatus . LOADING ĊĊĠĠĠĠĠĠĠ Ġfire store Database . collection (" cart _ items "). get (). add On Complete Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . result !!. documents . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprod List Ġ= ĠArrayList < Product >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( document Ġin Ġit . result !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprod Ġ= Ġdocument . toObject ( Product :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprod List . add ( prod ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠStatus . DONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ products . value Ġ= Ġprod List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠStatus . DONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ products . value Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" getAll Products : ĠNot ĠSuccessful ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠStatus . ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ products . value Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" getAll Products : ĠError Ġ${ it . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠStatus . ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ products . value Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Cart () Ġ{ ĊĠĠĠĠĠĠĠ Ġfire store Database . collection (" cart _ items "). get (). add On Complete Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ cart Empty . value Ġ= Ġit . result !!. documents . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }