package Ġorg . step ik . android . presentation . profile _ certificates Ċ Ċ import Ġio . reactivex . Maybe Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . rx kotlin . plus Assign Ċ import Ġio . reactivex . rx kotlin . subscribe By Ċ import Ġorg . step ic . d roid . di . qual ifiers . Background Scheduler Ċ import Ġorg . step ic . d roid . di . qual ifiers . Main Scheduler Ċ import Ġorg . step ik . android . domain . base . DataSource Type Ċ import Ġorg . step ik . android . domain . certificate . inter actor . Certificates Interactor Ċ import Ġorg . step ik . android . domain . profile . model . Profile Data Ċ import Ġorg . step ik . android . presentation . base . Presenter Base Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠProfile Certificates Presenter Ċ @ Inject Ċ constructor ( ĊĠĠĠ Ġprivate Ġval Ġprofile Data Observable : ĠObservable < Profile Data >, ĊĠĠĠ Ġprivate Ġval Ġcertificates Interactor : ĠC ertificates Interactor , ĊĊĠĠĠ Ġ@ Background Scheduler ĊĠĠĠ Ġprivate Ġval Ġbackground Scheduler : ĠScheduler , ĊĠĠĠ Ġ@ Main Scheduler ĊĠĠĠ Ġprivate Ġval Ġmain Scheduler : ĠScheduler Ċ ) Ġ: ĠPres enter Base < Profile Certificates View >() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġstate : ĠProfile Certificates View . State Ġ= ĠProfile Certificates View . State . Idle ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. setState ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġattach View ( view : ĠProfile Certificates View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . attach View ( view ) ĊĠĠĠĠĠĠĠ Ġview . setState ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Certificates ForUser ( force Update : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠProfile Certificates View . State . Idle Ġ|| Ġ( force Update Ġ&& Ġstate Ġ== ĠProfile Certificates View . State . Error )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠProfile Certificates View . State . Sil ent Loading ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomposite Disposable Ġ+= Ġprofile Data Observable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Element () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . user . is Organization Ġ&& Ġ! it . user . is Private Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġprofile Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠProfile Certificates View . State . Loading ( profile Data . user . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ// Ġpost Ġpublic Ġloading Ġto Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( background Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Single Element Ġ{ Ġprofile Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġprofile Data . user . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Certificates From Cache ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch If Empty ( fetch Certificates From Remote ( userId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( background Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete Ġ= Ġ{ Ġstate Ġ= ĠProfile Certificates View . State . No Certificates Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ Ġstate Ġ= ĠProfile Certificates View . State . Error Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Certificates From Cache ( userId : ĠLong ): ĠMaybe < Profile Certificates View . State > Ġ= ĊĠĠĠĠĠĠĠ Ġcertificates Interactor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getC ertificates ( userId , Ġpage Ġ= Ġ 1 , Ġsource Type Ġ= ĠDataSource Type . CACHE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠProfile Certificates View . State . Certificates Cache ( it , ĠuserId ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Certificates From Remote ( userId : ĠLong ): ĠSingle < Profile Certificates View . State > Ġ= ĊĠĠĠĠĠĠĠ Ġcertificates Interactor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getC ertificates ( userId , Ġpage Ġ= Ġ 1 , Ġsource Type Ġ= ĠDataSource Type . REMOTE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġcertificates Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( certificates . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Certificates View . State . No Certificates ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Certificates View . State . Certificates Remote ( certificates , ĠuserId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ }