package Ġcom . example . squ ar ere pos . di . app Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . example . squ ar ere pos . App Ċ import Ġcom . example . squ ar ere pos . Build Config Ċ import Ġcom . example . squ ar ere pos . data . Repos DataSource Ċ import Ġcom . example . squ ar ere pos . data . Repos Repository Ċ import Ġcom . example . squ ar ere pos . data . local . Repos Local DataSource Ċ import Ġcom . example . squ ar ere pos . data . remote . Repos Api Ċ import Ġcom . example . squ ar ere pos . data . remote . Repos Remote DataSource Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġdagger . Module Ċ import Ġdagger . Provides Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ 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 Ġjavax . inject . Named Ċ import Ġjavax . inject . Singleton ĊĊ Ċ @ Module Ċ class ĠApplication Module Ġ{ ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Context ( application : ĠApp ): ĠContext Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapplication . application Context ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Ok HttpClient (): ĠOk HttpClient Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor ( Http Logging Interceptor (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= Ġif Ġ( Build Config . DEBUG ) ĠHttp Logging Interceptor . Level . BODY Ġelse ĠHttp Logging Interceptor . Level . NONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Gson (): ĠGson Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Ret rofit ( ĊĠĠĠĠĠĠĠ Ġok HttpClient : ĠOk HttpClient , ĊĠĠĠĠĠĠĠ Ġgson : ĠGson ĊĠĠĠ Ġ): ĠRet rofit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( BASE _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( ok HttpClient ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Call Adapter Factory ( Rx Java 2 Call Adapter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ( gson )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Repos Api ( ĊĠĠĠĠĠĠĠ Ġretrofit : ĠRet rofit ĊĠĠĠ Ġ): ĠRe pos Api Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġretrofit . create ( Repos Api :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Named ( RE POS _ REMOTE _ DATA _ SOURCE ) ĊĠĠĠ Ġfun Ġprovide Repos Remote DataSource ( ĊĠĠĠĠĠĠĠ Ġrepos Api : ĠRe pos Api ĊĠĠĠ Ġ): ĠRe pos DataSource Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRe pos Remote DataSource ( repos Api ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Named ( RE POS _ LOCAL _ DATA _ SOURCE ) ĊĠĠĠ Ġfun Ġprovide Repos Local DataSource ( ĊĊĠĠĠ Ġ): ĠRe pos DataSource Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRe pos Local DataSource () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Repos Repository ( ĊĠĠĠĠĠĠĠ Ġ@ Named ( RE POS _ REMOTE _ DATA _ SOURCE ) Ġremote DataSource : ĠRe pos DataSource , ĊĠĠĠĠĠĠĠ Ġ@ Named ( RE POS _ LOCAL _ DATA _ SOURCE ) Ġlocal DataSource : ĠRe pos DataSource ĊĠĠĠ Ġ): ĠRe pos Repository Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRe pos Repository ( remote DataSource , Ġlocal DataSource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠBASE _ URL Ġ= ĠBuild Config . BASE _ URL ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRE POS _ REMOTE _ DATA _ SOURCE Ġ= Ġ" repos Remote DataSource " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRE POS _ LOCAL _ DATA _ SOURCE Ġ= Ġ" repos Local DataSource " ĊĊĊĠĠĠ Ġ} Ċ }