package Ġcom . the code . inf otify . core . di Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . the code . inf otify . Build Config Ċ import Ġcom . the code . inf otify . application . Inf otify Shared Pref Ċ import Ġcom . the code . inf otify . core . remote . Inf otify Remote DataSource Impl Ċ import Ġcom . the code . inf otify . framework . datasource . News Api Remote Service Ċ import Ġcom . the code . inf otify . framework . datasource . News Api Remote ServiceImpl Ċ import Ġcom . the code . inf otify . framework . datasource . network . api . News Api Ċ import Ġcom . the code . inf otify . framework . datasource . network . mapper . News Mapper Ċ import Ġcom . the code . inf otify . framework . datasource . network . mapper . Source Mapper Ċ import Ġcom . the code . inf otify . utils . App Constants Ċ import Ġcom . the code . inf otify . utils . App Constants . REQUEST _ TIMEOUT Ċ import Ġdagger . Module Ċ import Ġdagger . Provides Ċ import Ġdagger . h ilt . Install In Ċ import Ġdagger . h ilt . components . Singleton Component Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Response Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ import Ġjava . io . IOException Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Module Ċ @ Install In ( Singleton Component :: class ) Ċ object ĠNetwork Module Ġ{ ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Gson Builder (): ĠGson Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGson Builder (). create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Ret rofit ( gson : ĠGson ): ĠRet rofit . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// . baseUrl ( Build Config . BASE _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( App Constants . NE WS API _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ( gson )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( get Ok Http Service ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Who Service ( ret rofit : ĠRet rofit . Builder ): ĠNews Api Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġretrofit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( News Api :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Inf otify Remote Service ( ĊĠĠĠĠĠĠĠ Ġapi : ĠNews Api ĊĠĠĠ Ġ): ĠNews Api Remote Service Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNews Api Remote ServiceImpl ( api ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Remote DataSource ( ĊĠĠĠĠĠĠĠ Ġwho Remote Service : ĠNews Api Remote Service , ĊĠĠĠĠĠĠĠ Ġshared Pref : ĠInf otify Shared Pref , ĊĠĠĠĠĠĠĠ Ġnews Mapper : ĠNews Mapper , ĊĠĠĠĠĠĠĠ Ġsource Mapper : ĠSource Mapper , ĊĠĠĠ Ġ): ĠInf otify Remote DataSource Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠInf otify Remote DataSource Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwho Remote Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Pref , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnews Mapper , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Mapper , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Ok Http Service (): ĠOk HttpClient Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠhttpClient : ĠOk HttpClient . Builder Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect Timeout ( REQUEST _ TIMEOUT . to Long (), ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Timeout ( REQUEST _ TIMEOUT . to Long (), ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Timeout ( REQUEST _ TIMEOUT . to Long (), ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterceptor Ġ= ĠHttp Logging Interceptor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterceptor . setLevel ( Http Logging Interceptor . Level . BODY ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠhttpClient . add Interceptor ( interceptor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠhttpClient . add Interceptor ( Basic Auth Interceptor ()) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠhttpClient . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBasic Auth Interceptor Ġ: ĠInter ceptor Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Url Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . url . newBuilder (). add QueryParameter (" apiKey ", ĠBuild Config . API _ KEY ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Request Ġ= Ġrequest . newBuilder (). url ( new Url ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchain . proceed ( new Request ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊ Ċ }