package Ġcom . github . md fh . f lick . ui . home Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . github . md fh . f lick . Event Ċ import Ġcom . github . md fh . f lick . data . Data Result Ċ import Ġcom . github . md fh . f lick . data . repository . Movie Repository Ċ import Ġcom . github . md fh . f lick . model . api . Movie Ċ import Ġcom . github . md fh . f lick . model . api . Movie List Ċ import Ġkotlinx . coroutines . Internal Cor outines Api Ċ import Ġkotlinx . coroutines . flow . catch Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠHome ViewModel Ġ Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġmovie Repository : ĠMovie Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ open Movie Event Ġ= ĠMutable LiveData < Event < Movie >>() ĊĠĠĠ Ġval Ġopen Movie Event : ĠLive Data < Event < Movie >> Ġ= Ġ_ open Movie Event ĊĊĠĠĠ Ġprivate Ġval Ġ_ open Movie List Event Ġ= ĠMutable LiveData < Event < Movie Type >>() ĊĠĠĠ Ġval Ġopen Movie List Event : ĠLive Data < Event < Movie Type >> Ġ= Ġ_ open Movie List Event ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġpopular Movies : ĠMutable LiveData < List < Movie >> Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable LiveData < List < Movie >>() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtop R ated Movies : ĠMutable LiveData < List < Movie >> Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable LiveData < List < Movie >>() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġupcoming Movies : ĠMutable LiveData < List < Movie >> Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable LiveData < List < Movie >>() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġnow Playing : ĠMutable LiveData < List < Movie >> Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable LiveData < List < Movie >>() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġby ĠData ĠBinding . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen Movie ( movie : ĠMovie ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ open Movie Event . value Ġ= ĠEvent ( movie ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġby ĠData ĠBinding . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen Movie List ( movie Type : ĠMovie Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ open Movie List Event . value Ġ= ĠEvent ( movie Type ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCollect Ġthe Ġflow ĊĊĠĠĠĠĠĠĠ Ġmovie Repository . get Movies List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( value . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Type . NOW _ PLAY ING Ġ-> Ġnow Playing . value Ġ= Ġvalue . second . results ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Type . POP ULAR Ġ-> Ġpopular Movies . value Ġ= Ġvalue . second . results ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Type . TOP _ R ATED Ġ-> Ġtop R ated Movies . value Ġ= Ġvalue . second . results ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Type . UP COM ING Ġ-> Ġupcoming Movies . value Ġ= Ġvalue . second . results ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ Ġthrowable Ġ-> Ġ ĠLog . e (" Error ", Ġ" Error " Ġ, Ġthrowable ) Ġ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( viewModel Scope ) ĊĊĠĠĠ Ġ} Ċ } Ċ