package Ġcom . ew ings a . o hy eah . set reminder Ċ Ċ import Ġcom . ew ings a . o hy eah . app injection . qual ifiers . Io Thread Scheduler Ċ import Ġcom . ew ings a . o hy eah . app injection . qual ifiers . MainThread Scheduler Ċ import Ġcom . ew ings a . o hy eah . database . Message Ċ import Ġcom . ew ings a . o hy eah . database . Message Dao Ċ import Ġcom . ew ings a . o hy eah . database . Sender Ċ import Ġcom . ew ings a . o hy eah . viper . Vi per Contract Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . rx kotlin . addTo Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠSet Reminder Repository Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġmessage Dao : ĠMessage Dao , ĊĠĠĠ Ġ@ MainThread Scheduler Ġprivate Ġval Ġmain Thread Scheduler : ĠScheduler , ĊĠĠĠ Ġ@ Io Thread Scheduler Ġprivate Ġval Ġio Thread Scheduler : ĠScheduler Ċ ) Ġ: ĠSet Reminder Contract . Repository Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġinter actor : ĠSet Reminder Contract . Interactor ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġcomposite Disposable Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġoverride Ġfun Ġset Interactor ( inter actor : ĠV iper Contract . Interactor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . inter actor Ġ= Ġinter actor Ġas ? ĠSet Reminder Contract . Interactor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Existing Reminder ( message Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage Dao . find Message ( message Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( io Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġmessage Ġ-> Ġget Existing Reminder Sender ( message ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Existing Reminder Sender ( message : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage Dao . get Existing Conversation ( message . sender Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( io Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġsender Ġ-> Ġinter actor ?. on Reminder Loaded ( message , Ġsender ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Existing Sender ( sender Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage Dao . get Existing Conversation ( sender Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( io Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġsender Ġ-> Ġinter actor ?. on Sender Loaded ( sender ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Existing Conversation ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage Dao . get Existing Conversation ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( io Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. default If Empty ( Sender (- 1 L , Ġ"", Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġsender Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sender . sender Id Ġ== Ġ- 1 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinter actor ?. on New Sender () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinter actor ?. on Sender Saved ( sender . sender Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave New Sender ( sender : ĠSender ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSingle . from Callable Ġ{ Ġmessage Dao . insert Conversation ( sender ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( io Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġsender Id Ġ-> Ġinter actor ?. on Sender Saved ( sender Id ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave New Message ( message : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSingle . from Callable Ġ{ Ġmessage Dao . insert Message ( message ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( io Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠmessageId Ġ-> Ġinter actor ?. on Message Saved ( message Id ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Message ( message : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage Dao . update Message ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( io Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġinter actor ?. on Message Updated () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Sender Name ( sender Id : ĠLong , Ġname : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage Dao . update Conversation Name ( sender Id , Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( io Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Sender Picture ( sender Id : ĠLong , Ġphoto Uri : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage Dao . update Conversation Photo ( sender Id , Ġphoto Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( io Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Reminder ( message Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage Dao . delete Message ( message Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( io Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġinter actor ?. on Reminder Deleted () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Sender Or phan ed ( sender Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage Dao . is Conversation Empty ( sender Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( io Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġis Or phan ed Ġ-> Ġinter actor ?. on Sender Or phan ed ( is Or phan ed ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Sender ( sender Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage Dao . delete Sender ( sender Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( io Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Thread Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġinter actor ?. on Sender Deleted () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . clear () ĊĠĠĠ Ġ} Ċ } Ċ