package Ġcom . e ak urn ik ov . auto que . domain . repository Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . e ak urn ik ov . auto que . data . db . dao . Credentials Dao Ċ import Ġcom . e ak urn ik ov . auto que . data . db . entity . Account Entity Ċ import Ġcom . e ak urn ik ov . common . data . Resource Ċ import Ġcom . e ak urn ik ov . auto que . data . db . entity . Login Entity Ċ import Ġcom . e ak urn ik ov . auto que . data . model . Credentials Ċ import Ġcom . e ak urn ik ov . auto que . data . network . api . Credentials Api Ċ import Ġcom . e ak urn ik ov . auto que . data . network . dto . Credentials Dto Ċ import Ġcom . e ak urn ik ov . auto que . data . network . dto . Response Dto Ċ import Ġcom . e ak urn ik ov . auto que . data . repository . Credentials Repo Ċ import Ġio . reactivex . Flow able Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . functions . Bi Function Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġe ak urn ik ov Ġon Ġ 2 0 1 9 - 1 0 - 0 5 Ċ Ġ*/ Ċ class ĠCredentials Repo Impl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġapi : ĠCredentials Api , ĊĠĠĠ Ġprivate Ġval Ġdao : ĠCredentials Dao Ċ ) Ġ: ĠCredentials Repo Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtag : ĠString Ġ= Ġ" Credentials Repo " ĊĊĠĠĠ Ġprivate Ġvar Ġapi Disposable : ĠDis posable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdao Disposable : ĠDis posable ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġcredentials Subject : ĠBehavior Subject < Resource < List < Credentials >>> Ġ= ĊĠĠĠĠĠĠĠ ĠBehavior Subject . create () ĊĊĠĠĠ Ġoverride Ġfun Ġget Credentials ( limit : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcredentials Subject . onNext ( Resource . Loading ()) ĊĠĠĠĠĠĠĠ Ġdispose Dao () ĊĠĠĠĠĠĠĠ Ġdao Disposable Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( limit Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdao . get Accounts () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdao . get Account sWith Limit ( limit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Publisher Ġ{ Ġaccount Entities : ĠList < Account Entity > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFlow able . from Iterable ( account Entities ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Single Ġ{ Ġaccount Entity : ĠAccount Entity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . zip ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( account Entity ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdao . getLog ins For Account ( account Entity . id !! ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBi Function Ġ{ Ġacc : ĠAccount Entity , Ġlogin Entities : ĠList < Login Entity > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Entities . map Ġ{ ĠCredentials ( acc , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ Ġe : ĠThrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( tag , Ġ" Error Ġwhile Ġgetting Ġcredentials : Ġ$ e . ĠEmit Ġempty Ġlist ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġcredentials List : ĠList < Credentials > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredentials Subject . onNext ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Success ( credentials List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror : ĠThrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredentials Subject . onNext ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Error ( error . message Ġ?: Ġ" Logical Ġerror Ġin Ġdb ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispose Dao () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Credentials () Ġ{ ĊĠĠĠĠĠĠĠ Ġcredentials Subject . onNext ( Resource . Loading ()) ĊĠĠĠĠĠĠĠ Ġdispose Api () ĊĠĠĠĠĠĠĠ Ġapi Disposable Ġ= Ġapi . get Credentials () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Publisher Ġ{ Ġresponse Dto : ĠResponse Dto Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFlow able . from Iterable ( response Dto . result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġcredentials Dto : ĠCredentials Dto Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAccount Entity ( credentials Dto ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . id Ġ= Ġdao . create Account ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠFlow able . just ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġcredentials Dto : ĠCredentials Dto , Ġaccount Entity : ĠAccount Entity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Entity ( account Entity . id !! , Ġcredentials Dto ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . id Ġ= Ġdao . add Login To Account ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠCredentials ( account Entity , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ Ġe : ĠThrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( tag , Ġ" Error Ġwhile Ġloading Ġcredentials : Ġ$ e . ĠEmit Ġempty Ġlist ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġcredentials List : ĠList < Credentials > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredentials Subject . onNext ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Success ( credentials List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror : ĠThrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredentials Subject . onNext ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Error ( error . message Ġ?: Ġ" Logical Ġerror Ġin Ġdb ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispose Api () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdispose Api () Ġ{ ĊĠĠĠĠĠĠĠ Ġapi Disposable ?. dispose () ĊĠĠĠĠĠĠĠ Ġapi Disposable Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdispose Dao () Ġ{ ĊĠĠĠĠĠĠĠ Ġdao Disposable ?. dispose () ĊĠĠĠĠĠĠĠ Ġdao Disposable Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }