package Ġcom . demo . just app . ex ch anger . di . application Ċ Ċ import Ġcom . demo . just app . ex ch anger . data . interceptor . Logging Interceptor Ċ import Ġcom . demo . just app . ex ch anger . data . api . Currency Rates Api Ċ import Ġcom . google . gson .* Ċ import Ġdagger . Module Ċ import Ġdagger . Provides Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . adapter . rx java 2 . Rx Java 2 Call Adapter Factory Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ import Ġjava . lang . reflect . Type Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . inject . Singleton Ċ Ċ private Ġconst Ġval ĠBASE _ URL Ġ= Ġ" https :// re vol ut . duck dns . org /" Ċ private Ġconst Ġval ĠTIME OUT Ġ= Ġ 2 0 L Ċ Ċ @ Module Ċ object ĠNet Module Ġ{ ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġinternal Ġfun Ġprovide Ok HttpClient (): ĠOk HttpClient Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor ( Logging Interceptor ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect Timeout ( TIMEOUT , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Timeout ( TIMEOUT , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġinternal Ġfun Ġprovide Ret rofit ( client : ĠOk HttpClient , Ġgson : ĠGson ): ĠRet rofit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( BASE _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( client ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ( gson )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Call Adapter Factory ( Rx Java 2 Call Adapter Factory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create With Scheduler ( Schedulers . io ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġinternal Ġfun Ġprovide G SON (): ĠGson Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Type Adapter ( Date :: class . java , ĠDate Deserializer ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Type Adapter ( Date :: class . java , ĠDate Serializer ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġinternal Ġfun Ġprovide RestApi ( ret rofit : ĠRet rofit ): ĠCurrency Rates Api Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġretrofit . create ( Currency Rates Api :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDate Serializer Ġ: ĠJsonSerializer < Date > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( src : ĠDate , ĠtypeOf Src : ĠType , Ġcontext : ĠJson Serialization Context ): ĠJson Primitive Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJson Primitive ( src . time . div ( 1 0 0 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDate Deserializer Ġ: ĠJson Deserializer < Date > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( json : ĠJson Element , ĠtypeOf T : ĠType , Ġcontext : ĠJson Deserialization Context ): ĠDate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDate ( json . as Long . times ( 1 0 0 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }