package Ġcom . example . movie app . ViewModel Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġandroidx . paging . Pager Ċ import Ġandroidx . paging . Paging Config Ċ import Ġandroidx . paging . Paging Data Ċ import Ġandroidx . paging . cached In Ċ import Ġcom . example . movie app . api . ApiService Ċ import Ġcom . example . movie app . data . datasource . Api Helper Ċ import Ġcom . example . movie app . data . datasource . Resource Ċ import Ġcom . example . movie app . model . Movies Response Ċ import Ġcom . example . movie app . data . repository . Movie Repository Ċ import Ġcom . example . movie app . data . repository . Movies Repository Ċ import Ġcom . example . movie app . model . Movie Gen res Ċ import Ġcom . example . movie app . model . Result Ċ import Ġcom . example . movie app . paging . Movie Paging Source Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠMovie ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠMovie Repository , ĊĠĠĠ Ġprivate Ġval Ġapi Service : ĠApi Service Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġ_ my Movie Response : ĠMutable LiveData < Resource < Movies Response >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġval Ġ_ my Movie Genre Response : ĠMutable LiveData < Resource < Movie Gen res >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġval Ġmovie Response : ĠLive Data < Resource < Movies Response >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ my Movie Response ĊĊĠĠĠ Ġval Ġmovie Genre Response : ĠLive Data < Resource < Movie Gen res >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ my Movie Genre Response ĊĊĊĠĠĠ Ġfun Ġget Movie ( apiKey : ĠString ): ĠFlow < Paging Data < Result >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠP ager ( config Ġ= ĠP aging Config ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpageSize Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Place holders Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefetch Distance Ġ= Ġ 2 0 ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaging Source Factory Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Movie Paging Source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠapiKey Ġ= ĠapiKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). flow . cached In ( viewModel Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Movies Genre () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ my Movie Genre Response . value Ġ= ĠResource . Loading ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ my Movie Genre Response . value Ġ= Ġrepository . get Movie Genre (" en - US ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Movies () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ my Movie Response . value Ġ= ĠResource . Loading ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ my Movie Response . value Ġ= Ġrepository . get Movies ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }