/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . example . android . architecture . blueprint s . random user . user detail Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . example . android . architecture . blueprint s . random user . Event Ċ import Ġcom . example . android . architecture . blueprint s . random user . data . Result Ċ import Ġcom . example . android . architecture . blueprint s . random user . data . Result . Success Ċ import Ġcom . example . android . architecture . blueprint s . random user . data . User Ċ import Ġcom . example . android . architecture . blueprint s . random user . data . source . Users Repository Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠViewModel Ġfor Ġthe ĠDetails Ġscreen . Ċ Ġ*/ Ċ class ĠUser Detail ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġusers Repository : ĠUsers Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ user Ġ= ĠMutable LiveData < User >() ĊĠĠĠ Ġval Ġuser : ĠLive Data < User > Ġ= Ġ_ user ĊĊĠĠĠ Ġprivate Ġval Ġ_ is Data Available Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġis Data Available : ĠLive Data < Boolean > Ġ= Ġ_ is Data Available ĊĊĠĠĠ Ġprivate Ġval Ġ_ data Loading Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġdata Loading : ĠLive Data < Boolean > Ġ= Ġ_ data Loading ĊĊĠĠĠ Ġprivate Ġval Ġ_ add User To Contacts Command Ġ= ĠMutable LiveData < Event < Unit >>() ĊĠĠĠ Ġval Ġadd User To Contacts Command : ĠLive Data < Event < Unit >> Ġ= Ġ_ add User To Contacts Command ĊĊĠĠĠ Ġprivate Ġval ĠuserId : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ user . value ?. id ĊĊĠĠĠ Ġfun Ġsave User () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser . value ĊĠĠĠĠĠĠĠ Ġuser ?. is Saved As Favorite Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġuser ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġusers Repository . save User ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġv ictor . val encia Ġmanage Ġthe Ġresult Ġfor Ġexceptions ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete User () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġuser . value ?. is Saved As Favorite Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠuserId ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusers Repository . delete User ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart ( userId : ĠString ?, Ġforce Refresh : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ is Data Available . value Ġ== Ġtrue Ġ&& Ġ! force Refresh Ġ|| Ġ_ data Loading . value Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠShow Ġloading Ġindicator ĊĠĠĠĠĠĠĠ Ġ_ data Loading . value Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( userId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Repository . getUser ( userId ). let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠSuccess ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon User Loaded ( result . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Data Not Available ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ data Loading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd User To Contacts () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ add User To Contacts Command . value Ġ= ĠEvent ( Unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUser ( user : ĠUser ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis ._ user . value Ġ= Ġuser ĊĠĠĠĠĠĠĠ Ġ_ is Data Available . value Ġ= Ġuser Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon User Loaded ( user : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetUser ( user ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Data Not Available ( result : ĠResult < User >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ user . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ_ is Data Available . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ ĠuserId ?. let Ġ{ Ġstart ( it , Ġtrue ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ