package Ġcom . mo bo logic plus . kotlin mvp android . ui Ċ Ċ import Ġcom . mo bo logic plus . kotlin mvp android . api . ApiService Ċ import Ġcom . mo bo logic plus . kotlin mvp android . db . Db Manager Ċ import Ġcom . mo bo logic plus . kotlin mvp android . model . Friends Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġsun il Ġon Ġ 5 / 3 0 / 2 0 1 7 . Ċ Ġ*/ Ċ class ĠF riends Presenter Ġ: ĠF riends Contract . Presenter { ĊĊĠĠĠ Ġprivate Ġval Ġsubscriptions Ġ= ĠComposite Disposable () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview : ĠF riends Contract . View ĊĊĠĠĠ Ġoverride Ġfun Ġload Friends Db () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġobservable Friends Ġ= ĠDb Manager (). load Friends (); ĊĠĠĠĠĠĠĠ Ġupdate View From Db ( observable Friends ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Friends API () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Friends ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Detail Friend ( ignore Cache : ĠBoolean ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Item ( user : ĠF riends . User ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġobservable Boolean Ġ Ġ= ĠDb Manager (). delete Friend ( user ) ĊĠĠĠĠĠĠĠ Ġvar Ġsubscribe Ġ= Ġobservable Boolean . subscribe Ġ({ t Ġ: ĠBoolean Ġ-> Ġview . deleted Item ( t !! )}, { t : ĠThrowable Ġ-> Ġview . show Load ErrorMessage ( t . message !! )}) ĊĠĠĠĠĠĠĠ Ġsubscriptions . add ( subscribe ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġattach View ( view : ĠF riends Contract . View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . view Ġ= Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsubscribe () Ġ{ ĊĠĠĠĠĠĠ Ġ// Ġget Friends ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġun Subscribe () Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscriptions . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Friends ( is Sub cri bes Ġ: ĠBoolean ){ ĊĠĠĠĠĠĠ Ġif Ġ( is Sub cri bes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġvar Ġobservable Friends Ġ= ĠApi Service (). load Friends () ĊĠĠĠĠĠĠĠĠĠĠ Ġupdate View ( observable Friends , Ġtrue ) ĊĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate View ( Ġobservable Friends : ĠObservable < Friends >, Ġis API Ġ: ĠBoolean ){ ĊĠĠĠĠĠĠ Ġvar Ġsubscribe Ġ= Ġ Ġobservable Friends . subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ friends : ĠF riends ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is API ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinsert Ġinto Ġdb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlist Users Ġ= Ġfriends !!. user ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Users ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( users Ġin Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDb Manager (). save Friends List ( users ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . on Load Friends Ok ( list Users !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Progress ( false )} }, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġt : ĠThrowable ? Ġ-> Ġview . show Empty View ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Progress ( false )}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriptions . add ( subscribe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate View From Db ( Ġobservable Friends : ĠObservable < List < Friends . User >> ){ ĊĠĠĠĠĠĠĠ Ġvar Ġsubscribe Ġ= Ġ Ġobservable Friends . subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ list Users : ĠList < Friends . User >? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . on Load Friends Ok ( list Users !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġt : ĠThrowable ? Ġ-> Ġview . show Empty View ( true )}) ĊĠĠĠĠĠĠĠ Ġsubscriptions . add ( subscribe ) ĊĠĠĠ Ġ} Ċ Ċ }