package Ġcom . hard soft studio . android x . movies . ui . details Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mediator LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . hard soft studio . android x . movies . domain . ErrorType Ċ import Ġcom . hard soft studio . android x . movies . domain . Main Actions Ċ import Ġcom . hard soft studio . android x . movies . domain . Main State Ċ import Ġcom . hard soft studio . android x . movies . domain . Movies Repository Ċ import Ġcom . hard soft studio . android x . movies . domain . data . Movie Ċ import Ġcom . hard soft studio . android x . movies . model . Resource Ċ Ċ class ĠMovie Details ViewModel ( details Actions : ĠMain Actions . Details , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmovies Repository : ĠMov ies Repository ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsource LiveData Ġ= ĠMed iator LiveData < Movie Details ViewData >() ĊĊĠĠĠ Ġprivate Ġvar Ġmovie Source : ĠLive Data < Resource < Movie , ĠError Type >> ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsource LiveData . value Ġ= ĠMovie Details ViewData . Loading ĊĠĠĠĠĠĠĠ Ġsource LiveData . add Source ( details Actions . get Main State ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠMain State . Movie Details ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Source ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource LiveData . remove Source ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Source Ġ= Ġmovies Repository . get Movie ( it . id ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource LiveData . add Source ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ViewData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ViewData () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ViewData (): ĠLive Data < Movie Details ViewData > Ġ= Ġsource LiveData ĊĊĠĠĠ Ġprivate Ġfun Ġupdate ViewData () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġmovie Source ?. value ĊĠĠĠĠĠĠĠ Ġsource LiveData . value Ġ= Ġwhen Ġ( data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Completed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . data . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Details ViewData . Details ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Failed Ġ-> ĠMovie Details ViewData . Error ( data . error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> ĠMovie Details ViewData . Loading ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ sealed Ġclass ĠMovie Details ViewData Ġ{ ĊĊĠĠĠ Ġobject ĠLoading Ġ: ĠMovie Details ViewData () ĊĊĠĠĠ Ġdata Ġclass ĠDetails ( val Ġmovie : ĠMovie ) Ġ: ĠMovie Details ViewData () ĊĊĠĠĠ Ġdata Ġclass ĠError ( val Ġtype : ĠError Type ) Ġ: ĠMovie Details ViewData () Ċ } Ċ