package Ġkr . clean . dev ok s . core . di Ċ Ċ import Ġdagger . Bind s Ċ import Ġdagger . Module Ċ import Ġdagger . Provides Ċ import Ġdagger . h ilt . Install In Ċ import Ġdagger . h ilt . components . Singleton Component Ċ import Ġkr . clean . dev ok s . core . Dev OK s Application Ċ import Ġkr . clean . dev ok s . core . context . Const Data Ċ import Ġkr . clean . dev ok s . core . context . Const Data . CONNECT _ TIMEOUT Ċ import Ġkr . clean . dev ok s . core . context . Const Data . READ _ TIMEOUT Ċ import Ġkr . clean . dev ok s . core . context . Const Data . WRITE _ TIMEOUT Ċ import Ġkr . clean . dev ok s . data . source . remote . Auth Remote DataSource Ċ import Ġkr . clean . dev ok s . data . source . remote . ret rofit . Auth Remote DataSource Impl Ċ import Ġkr . clean . dev ok s . data . source . remote . ret rofit . api . Auth API Ċ 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 . util . concurrent . TimeUnit Ċ import Ġjavax . inject . Singleton Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġdev ok s Ċ Ġ*/ Ċ Ċ @ Module Ċ @ Install In ( Singleton Component :: class ) Ċ object ĠNetwork Module Ġ{ ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Ok HttpClient (): ĠOk HttpClient Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠOk HttpClient . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Timeout ( CONNECT _ TIMEOUT , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Timeout ( WRITE _ TIMEOUT , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Timeout ( READ _ TIMEOUT , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretry On Connection Failure ( false ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġadd Interceptor ( get ( named (" app Int c "))) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġadd Interceptor ( get ( named (" net Int ceptor "))) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġauth enticator ( get ( named (" token A th enticator "))) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġadd Interceptor ( Http Logging Interceptor (). apply Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= Ġif Ġ( Consts Data . is Dev Mode ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Logging Interceptor . Level . BODY Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Logging Interceptor . Level . NONE Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Ret rofit ( ok d Application : ĠDev OK s Application , Ġok httpClient : ĠOk HttpClient ): ĠRet rofit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( Const Data . API _ SERVER _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Call Adapter Factory ( Rx Java 2 Call Adapter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( ok httpClient ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Auth API ( ret rofit : ĠRet rofit ) Ġ= Ġretrofit . create ( Auth API :: class . java ) Ċ Ċ } Ċ Ċ @ Module Ċ @ Install In ( Singleton Component :: class ) Ċ abstract Ġclass ĠRemote DataSource Module Ġ{ ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Bind s ĊĠĠĠ Ġabstract Ġfun Ġbind Auth Remote DataSource ( ĊĠĠĠĠĠĠĠ Ġauth Remote DataSource : ĠAuth Remote DataSource Impl ĊĠĠĠ Ġ): ĠAuth Remote DataSource Ċ }