package Ġcom . u oooo . simple . example . ui . view model Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġandroidx . paging . Paging Data Ċ import Ġandroidx . paging . rx java 3 . cached In Ċ import Ġcom . jak ew h art on . rx relay 3 . Behavior Relay Ċ import Ġcom . jak ew h art on . rx relay 3 . Publish Relay Ċ import Ġcom . u oooo . simple . example . domain . model . Movie Ċ import Ġcom . u oooo . simple . example . ui . common . Base ViewModel Ċ import Ġcom . u oooo . simple . example . ui . paging . Pop ular Movie Repository Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġdagger . h ilt . android . qual ifiers . ApplicationContext Ċ import Ġio . reactivex . rx java 3 . core . Back pressure Strategy Ċ import Ġio . reactivex . rx java 3 . core . Observable Ċ import Ġio . sell ma ir . dis poser . dispose By Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠPop ular Movie ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġ@ ApplicationContext Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠPop ular Movie Repository Ċ ) Ġ: ĠBase ViewModel ( context Ġas ĠApplication ) Ġ{ ĊĠĠĠ Ġval Ġpopular Movie List : ĠObservable < Paging Data < Movie >> Ġ= ĊĠĠĠĠĠĠĠ ĠBehavior Relay . create < Paging Data < Movie >> (). to Serialized (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġload Pop ular Movie Ġ= ĠBehavior Relay . create < Pair < Int , ĠInt >> (). to Serialized () ĊĠĠĠ Ġprivate Ġval Ġinvalidate Ġ= ĠPublish Relay . create < Unit >(). to Serialized () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" EXPERIMENT AL _ API _ USAGE ") ĊĠĠĠĠĠĠĠ Ġload Pop ular Movie . to Flow able ( Back pressure Strategy . LATE ST ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch Map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" EXPERIMENT AL _ API _ USAGE ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Pop ular Movie ( it . first , Ġit . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cached In ( viewModel Scope ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( popular Movie List . as Serialized Relay ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. dispose By ( dis poser ) ĊĊĠĠĠĠĠĠĠ Ġinvalidate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġrepository . invalidate () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. dispose By ( dis poser ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Pop ular Movie ( start Page : ĠInt , Ġend Page : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġload Pop ular Movie . accept ( Pair ( start Page , Ġend Page )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinvalidate Pop ular Movie () Ġ{ ĊĠĠĠĠĠĠĠ Ġinvalidate . accept ( Unit ) ĊĠĠĠ Ġ} Ċ } Ċ