package Ġcom . architect coders . ar qu itect om ar vel . ui . detail Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . architect coders . ar qu itect om ar vel . ui . common . Coroutine Dispatch ers Ċ import Ġcom . architect coders . domain . character . Character Ċ import Ġcom . architect coders . use cases . Delete Local Favorite Character Ċ import Ġcom . architect coders . use cases . Get Local Character ById Ċ import Ġcom . architect coders . use cases . Insert Local Favorite Character Ċ import Ġcom . architect coders . use cases . Is Local Character Favorite Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . net . Unknown Host Exception Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Named Ċ Ċ @ H ilt ViewModel Ċ class ĠCharacter Detail ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġcoroutine Dispatch ers : ĠCor outine Dispatch ers , ĊĠĠĠ Ġ@ Named (" character Id ") Ġprivate Ġval Ġcharacter Id : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġget Local Character ById : ĠGet Local Character ById , ĊĠĠĠ Ġprivate Ġval Ġis Local Character Favorite : ĠIs Local Character Favorite , ĊĠĠĠ Ġprivate Ġval Ġinsert Local Favorite Character : ĠInsert Local Favorite Character , ĊĠĠĠ Ġprivate Ġval Ġdelete Local Favorite Character : ĠDelete Local Favorite Character , ĊĠĠĠ Ġget Com ics Interactor : ĠGet Com ics Interactor Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġcom ic Resource Ġ= Ġget Com ics Interactor . network Bound Resource Result ( character Id ) ĊĊĠĠĠ Ġprivate Ġval Ġ_ ui Model : ĠMutable State Flow < Ui Model > Ġ= ĊĠĠĠĠĠĠĠ ĠMutable State Flow ( Ui Model . Refresh ) ĊĠĠĠ Ġval Ġui Model : ĠState Flow < Ui Model > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ ui Model . value Ġ== ĠUi Model . Refresh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ_ ui Model ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠUi Model Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠRefresh Ġ: ĠUi Model () ĊĠĠĠĠĠĠĠ Ġobject ĠLoading Ġ: ĠUi Model () ĊĠĠĠĠĠĠĠ Ġclass ĠSet Ui Details ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacter : ĠCharacter , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Character Favorite : ĠFlow < Int >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Character : ĠCharacter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Character Favorite : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠUi Model () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ ui Model . value Ġ= ĠUi Model . Loading ĊĠĠĠĠĠĠĠ Ġload Character ById ( character Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġfun Ġload Character ById ( character Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( coroutine Dispatch ers . main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacter Ġ= Ġget Local Character ById . invoke ( character Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Character Favorite Ġ= Ġis Local Character Favorite . invoke ( character Id ) Ġas ĠFlow < Int > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui Model . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUi Model . Set Ui Details ( character , Ġis Character Favorite , Ġ:: on Fab Click ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUnknown Host Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" qq _ Main Presenter . onCreate : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Fab Click ( ĊĠĠĠĠĠĠĠ Ġselected Character : ĠCharacter , ĊĠĠĠĠĠĠĠ Ġis Character Favorite : ĠBoolean , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( coroutine Dispatch ers . main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Character Favorite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Local Favorite Character . invoke ( selected Character ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Local Favorite Character . invoke ( selected Character ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ