package Ġcom . mak z imi . fin market . stock detail . data Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġcom . mak z imi . fin market . common . Repository Result Ċ import Ġcom . mak z imi . fin market . favorites . data . F avorites Dao Ċ import Ġcom . mak z imi . fin market . model . Favorite Entity Ċ import Ġcom . mak z imi . fin market . model . News Entity Ċ import Ġcom . mak z imi . fin market . model . Stock Entity Ċ import Ġcom . mak z imi . fin market . news . data . News Dao Ċ import Ġcom . mak z imi . fin market . news . data . News Remote DataSource Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠStock Details Repository Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġstock s Details Dao : ĠStock Details Dao , ĊĠĠĠ Ġprivate Ġval Ġfavor ites Dao : ĠF avorites Dao , ĊĠĠĠ Ġprivate Ġval Ġstock Details Remote DataSource : ĠStock Details Remote DataSource , ĊĠĠĠ Ġprivate Ġval Ġnews Dao : ĠNews Dao , ĊĠĠĠ Ġprivate Ġval Ġnews Remote DataSource : ĠNews Remote DataSource Ċ ){ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNE WS _ REFRESH _ TIMEOUT Ġ= Ġ 6 0 Ġ* Ġ 6 0 Ġ// Ġarticles Ġupdate Ġtime Ġon Ġserver ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġlast Fetch Time News : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġfun Ġobserve Company Details ( symbol : ĠString ): ĠLive Data < Stock Entity > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstock s Details Dao . get Stock Details ( symbol ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġobserve F avorites ( symbol : ĠString ): ĠLive Data < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfavor ites Dao . is Favorite ( symbol ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠaddTo F avorites ( symbol : ĠString , Ġtodo Add : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= ĠComposite Disposable () ĊĠĠĠĠĠĠĠ Ġdis posable . add ( ĊĠĠĠĠĠĠĠ ĠObservable . just ( favorites Dao ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe { Ġdao Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( todo Add ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdao . insert ( listOf ( Favorite Entity ( symbol ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdao . delete List ( listOf ( Favorite Entity ( symbol ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Details ( symbol : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= ĠComposite Disposable () ĊĠĠĠĠĠĠĠ Ġdis posable . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstock Details Remote DataSource . get Company Info ( symbol ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġrepository Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( repository Result . status Ġ== ĠRepository Result . Status . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository Result . data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstock s Details Dao . insert ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġobserve News ( symbol : ĠString ): ĠLive Data < List < News Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnews Dao . get News For Symbol ( symbol ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch News ( symbol : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= ĠComposite Disposable () ĊĠĠĠĠĠĠĠ Ġdis posable . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnews Remote DataSource . get News About ( symbol ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġrepository Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( repository Result . status Ġ== ĠRepository Result . Status . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository Result . data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Fetch Time News Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnews Dao . update All News For Symbol ( symbol , Ġit . sub List ( 0 , Ġ 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }