package Ġcom . mu vi . feed Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . mu vi . base _ domain . Film Summary Ċ import Ġcom . mu vi . feed _ domain . Get Fil ms UseCase Ċ import Ġcom . mu vi . navigation . Event Wrapper Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjavax . inject . Inject Ċ Ċ internal Ġclass ĠFeed ViewModel Ġ@ Inject Ġconstructor ( private Ġval Ġget Fil ms : ĠGet Fil ms UseCase ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ fil ms Ġ= ĠMutable LiveData < List < Ui Model >>() ĊĠĠĠ Ġval Ġfil ms : ĠLive Data < List < Ui Model >> Ġ= Ġ_ fil ms ĊĊĠĠĠ Ġprivate Ġval Ġ_ events Ġ= ĠMutable LiveData < Event Wrapper < Event >>() ĊĠĠĠ Ġval Ġevents : ĠLive Data < Event Wrapper < Event >> Ġ= Ġ_ events ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġui Models Ġ= Ġget Fil ms (). map Ġ{ Ġit . to Ui Model () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ fil ms . value Ġ= Ġui Models ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFil m Summary . to Ui Model () Ġ= ĠUi Model ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġyear ?. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirect ors Ġ= Ġdirect ors , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠT AL K : ĠSimpl ification Ġfor Ġdemo . ĠWe Ġshould Ġmap Ġthis Ġso Ġit Ġcan Ġgo Ġto Ġthe ĠView Ġso Ġit Ġcan Ġchoose Ġthe Ġcorrect Ġwidth / height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposter Ġ= Ġposter ?. sizes ?. first ()?. url , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġ_ events . value Ġ= ĠEvent Wrapper ( Event . Navigate To Film Detail ( id )) Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġsealed Ġclass ĠEvent Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠNavigate To Film Detail ( val Ġfilm Id : ĠString ) Ġ: ĠEvent () ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠFeed ViewModel Factory Ġ@ Inject Ġconstructor ( private Ġval Ġget Fil ms UseCase : ĠGet Fil ms UseCase ) Ġ: ĠViewModel Provider . Factory Ġ{ ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >) Ġ= ĠFeed ViewModel ( get Fil ms UseCase ) Ġas ĠT Ċ } Ċ Ċ internal Ġdata Ġclass ĠUi Model ( ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġtitle : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġyear : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġdirect ors : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġval Ġposter : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval ĠonClick : Ġ() Ġ-> ĠUnit Ċ ) Ċ