package Ġcom . github . char b gr . cl iff h anger . features . detail . arch Ċ Ċ import Ġcom . github . char b gr . arch . M vi Presenter Ċ import Ġcom . github . char b gr . arch . Scheduler Provider Ċ import Ġcom . github . char b gr . arch . UseCase Observer . Rx Observable Ċ import Ġcom . github . char b gr . cl iff h anger . di . De pp ie Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . rx kotlin . addTo Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ Ċ class ĠPres enter ( ĊĠ Ġprivate Ġval Ġmovie UseCase : ĠGet Movie UseCase Ġ= ĠGet Movie UseCase () Ċ ) Ġ: ĠM vi Presenter < View , ĠPair < Partial Change , ĠViewModel >>() Ġ{ ĊĊĠ Ġprivate Ġval Ġs chedulers : ĠScheduler Provider Ġ= ĠDe pp ie . getInstance (). scheduler Provider ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġregister ( movie UseCase ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġstate Reducer Ġ= ĠState Reducer () ĊĠ Ġprivate Ġval Ġrenders Ġ= ĠBehavior Subject . create Default ( state Reducer . initial ) ĊĊĠ Ġoverride Ġfun Ġbind Intent s () Ġ{ ĊĠĠĠ Ġval Ġget Movie Intent Ġ= Ġintent ( view W Ref . get ()?. fetch Movie Intent ()). share () ĊĊĠĠĠ Ġget Movie Intent ĊĠĠĠĠĠĠĠ Ġ. switch Map Ġ{ Ġmovie UseCase . build ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. observe On ( schedul ers . io ()) ĊĠĠĠĠĠĠĠ Ġ. scan ( renders . value , Ġstate Reducer . reduce ) ĊĠĠĠĠĠĠĠ Ġ. subscribe With ( object Ġ: ĠRx Observable < Pair < Partial Change , ĠViewModel >>() Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( value : ĠPair < Partial Change , ĠViewModel >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch View Render ( value ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ. addTo ( dis posable ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġrenders (): ĠObservable < Pair < Partial Change , ĠViewModel >> Ġ= ĊĠĠĠĠĠ Ġrenders . hide (). share (). observe On ( schedul ers . ui ()) ĊĊĠ Ġprivate Ġfun Ġdispatch View Render ( render : ĠPair < Partial Change , ĠViewModel >) Ġ{ ĊĠĠĠ Ġrenders . onNext ( render ) ĊĠĠĠ Ġ// ĠTODO ĠADD ĠTO ĠCACHE ĊĠ Ġ} Ċ } Ċ