package Ġcom . dat an apps . di . modules Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Network Capabilities Ċ import Ġcom . dat an apps . network . UserData API Ċ import Ġdagger . Module Ċ import Ġdagger . Provides Ċ import Ġokhttp 3 . Cache Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Response Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton ĊĊ Ċ @ Module Ċ class ĠNetwork Module Ġ@ Inject Ġconstructor ( var Ġapplication : ĠApplication ) Ġ{ ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġthe ĠPost Ġservice Ġimplementation . ĊĠĠĠĠ Ġ* Ġ@ param Ġretrofit Ġthe ĠRet rofit Ġobject Ġused Ġto Ġinstantiate Ġthe Ġservice ĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠPost Ġservice Ġimplementation . ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġapplication (): ĠApplication Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapplication ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġval Ġis Connected Ġ: ĠBoolean ĠĠĠ Ġget (){ ĊĠĠĠĠĠĠĠ Ġval Ġconnectivity Manager Ġ= Ġapplication . getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= Ġconnectivity Manager . active Network ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcapabilities Ġ= Ġconnectivity Manager . get Network Capabilities ( network ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapabilities Ġ!= Ġnull Ġ&& Ġcapabilities . has Transport ( Network Capabilities . TRANSPORT _ WIFI ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnectivity Manager . active Network Info . type Ġ== ĠConnect ivity Manager . TYPE _ WIFI ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide UserData Api ( ret rofit : ĠRet rofit ): ĠUser Data API Ġ= ĊĠĠĠĠĠĠĠ Ġretrofit . create ( UserData API :: class . java ) ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġthe ĠRet rofit Ġobject . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠRet rofit Ġobject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Ret rofit Interface (): ĠRet rofit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcache Size Ġ= Ġ( 5 Ġ* Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 ). to Long () ĊĠĠĠĠĠĠĠ Ġval Ġmy Cache Ġ= ĠCache ( application . cacheDir , Ġcache Size ) ĊĊĊĠĠĠĠĠĠĠ Ġ// Ġfor Ġcaching ĊĊĠĠĠĠĠĠĠ Ġval Ġok HttpClient Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cache ( my Cache ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġoff Ġline Ġinterceptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrequest Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġif Ġ( isConnected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . newBuilder (). header (" Cache - Control ", Ġ" public , Ġmax - age =" Ġ+ Ġ 5 ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . newBuilder (). header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cache - Control ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" public , Ġonly - if - cached , Ġmax - st ale =" Ġ+ Ġ 6 0 Ġ* Ġ 6 0 Ġ* Ġ 2 4 Ġ* Ġ 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchain . proceed ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġon Ġline Ġinterceptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Network Interceptor Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠResponse Ġ= Ġit . proceed ( it . request ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Age Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 0 Ġ// Ġread Ġfrom Ġcache Ġfor Ġ 6 0 Ġseconds Ġeven Ġif Ġthere Ġis Ġinternet Ġconnection ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Cache - Control ", Ġ" public , Ġmax - age =$ max Age ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Header (" Pr agma ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġretrofit ĊĠĠĠĠĠĠĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl (" https :// dat an apps . com ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( ok HttpClient ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊ Ċ }