package Ġcom . alf ian . github user app 3 . ui . detail Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . alf ian . github user app 3 . database . Favorite Entity Ċ import Ġcom . alf ian . github user app 3 . datasource . User Response Ċ import Ġcom . alf ian . github user app 3 . networking . Api Config Ċ import Ġcom . alf ian . github user app 3 . repository . Favorite Repository Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠDetail ViewModel ( username : ĠString , Ġapp : ĠApplication ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġm Favorite Repository : ĠF avorite Repository Ġ= ĠF avorite Repository ( app ) ĊĠĠĠ Ġprivate Ġval Ġ_ user Detail Ġ= ĠMutable LiveData < User Response ?> () ĊĠĠĠ Ġval Ġdetail User : ĠLive Data < User Response ?> Ġ= Ġ_ user Detail ĊĠĠĠ Ġprivate Ġval Ġ_ isLoading Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval ĠisLoading : ĠLive Data < Boolean > Ġ= Ġ_ isLoading ĊĠĠĠ Ġprivate Ġval Ġ_ is Data Failed Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġis Data Failed : ĠLive Data < Boolean > Ġ= Ġ_ is Data Failed ĊĠĠĠ Ġprivate Ġvar ĠviewModel Job Ġ= ĠJob () ĊĠĠĠ Ġprivate Ġval Ġcoroutine Scope Ġ= ĠCor outine Scope ( viewModel Job Ġ+ ĠDispatch ers . Main ) ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ Ġget Detail User ( username ) Ġ} ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Detail ViewModel Ġis ĠCreated ") ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert ( fav Entity : ĠF avorite Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Favorite Repository . insert ( fav Entity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete ( fav Entity : ĠF avorite Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Favorite Repository . delete ( fav Entity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Favorite ById ( id : ĠInt ): ĠLive Data < List < Favorite Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Favorite Repository . getUser Favorite ById ( id ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Detail User ( username : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ isLoading . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠgetUser Detail Deferred Ġ= ĠApi Config . get ApiService (). get Detail User Async ( username ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ isLoading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Data Failed . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ user Detail . post Value ( getUser Detail Deferred ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ isLoading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Data Failed . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" on Failure : Ġ${ e . message . toString () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ ĠviewModel Job . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Detail ViewModel " ĊĠĠĠ Ġ} Ċ Ċ }