package Ġcom . quotes . ui . quotes Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . quotes . data . model . Quote Ċ import Ġcom . quotes . data . repository . F avour ite Quote Repository Ċ import Ġcom . quotes . data . repository . Quotes Repository Ċ import Ġcom . quotes . utils . Dispatcher Provider Ċ import Ġcom . quotes . utils . Failure Ċ import Ġcom . quotes . utils . Success Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġjavax . inject . Inject Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . as State Flow Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ Ċ @ H ilt ViewModel Ċ class ĠQu otes ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠQu otes Repository , ĊĠĠĠ Ġprivate Ġval Ġfavour ite Quotes Repository : ĠF avour ite Quote Repository , ĊĠĠĠ Ġprivate Ġval Ġdispatcher Provider : ĠDispatcher Provider Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ quote Ġ= ĠMutable State Flow < Quote State >( Quote State . Loading ) ĊĊĠĠĠ Ġval Ġquote : ĠState Flow < Quote State > Ġ= Ġ_ quote . as State Flow () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠgetRandom Quote () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetRandom Quote () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( dispatcher Provider . io ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġrandom Quote Ġ= Ġrepository . getRandom Quote ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSuccess Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Fetch Ġsuccess ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ quote . value Ġ= ĠQuote State . Success ( random Quote . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFailure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ quote . value Ġ= ĠQuote State . Error ( random Quote . reason ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Quote ( quote : ĠQuote ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( dispatcher Provider . io ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfavour ite Quotes Repository . add F avour ite Quote ( quote ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ