package Ġcom . dan hd ue exo ict if . android generic adapter . di Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Network Capabilities Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Base 6 4 Ċ import Ġcom . dan hd ue exo ict if . android generic adapter . Build Config Ċ import Ġcom . dan hd ue exo ict if . android generic adapter . data . remote .* Ċ import Ġcom . dan hd ue exo ict if . android generic adapter . di . Network Module . create ApiService Ċ import Ġcom . dan hd ue exo ict if . android generic adapter . di . Network Module . create App Ret rofit Ċ import Ġcom . dan hd ue exo ict if . android generic adapter . di . Network Module . create Base Auth Interceptor Ċ import Ġcom . dan hd ue exo ict if . android generic adapter . di . Network Module . create Logging Interceptor Ċ import Ġcom . dan hd ue exo ict if . android generic adapter . di . Network Module . create Ok Http Cache Ċ import Ġcom . dan hd ue exo ict if . android generic adapter . di . Network Module . create Ok HttpClient Ċ import Ġcom . dan hd ue exo ict if . android generic adapter . utils . Constants Ċ import Ġcom . dan hd ue exo ict if . android generic adapter . utils . network detection . No Internet Utils . is Network Available Ċ import Ġokhttp 3 . Cache Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġorg . k oin . core . K oin Component Ċ import Ġorg . k oin . core . qual ifier . named Ċ import Ġorg . k oin . dsl . module Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ import Ġretrofit 2 . converter . scal ars . Scalars Converter Factory Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ val Ġnetwork Module Ġ= Ġmodule Ġ{ ĊĠĠĠ Ġsingle Ġ{ Ġcreate Ok Http Cache ( get ()) Ġ} ĊĠĠĠ Ġsingle ( named (" logging ")) Ġ{ Ġcreate Logging Interceptor () Ġ} ĊĠĠĠ Ġsingle ( named (" basic Auth ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Base Auth Interceptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Config . BASE _ AUTH _ USER _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Config . BASE _ AUTH _ PASSWORD ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġsingle < Interceptor >( named (" mock Interceptor ")) Ġ{ ĠMock Interceptor ( get ()) Ġ} ĊĠĠĠ Ġsingle Ġ{ ĠChange able BaseUrl Interceptor () Ġ} ĊĠĠĠ Ġsingle Ġ{ ĠNetwork Adapter Factory () Ġ} ĊĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Ok HttpClient ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget (), Ġget ( named (" logging ")), Ġget ( named (" basic Auth ")), Ġget (), Ġget ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamed (" mock Interceptor ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġsingle Ġ{ Ġcreate App Ret rofit ( get (), Ġget (), Ġtrue ) Ġ} ĊĠĠĠ Ġsingle Ġ{ Ġcreate ApiService ( get ()) Ġ} Ċ } Ċ Ċ object ĠNetwork Module Ġ: ĠK oin Component Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠTIME OUT Ġ= Ġ 1 0 ĊĊĠĠĠ Ġfun Ġcreate Ok Http Cache ( context : ĠContext ): ĠCache Ġ= ĊĠĠĠĠĠĠĠ ĠCache ( context . cacheDir , Ġ( 1 0 Ġ* Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 ). to Long ()) ĊĊĠĠĠ Ġfun Ġcreate Logging Interceptor (): ĠInter ceptor Ġ= ĠHttp Logging Interceptor (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġlevel Ġ= Ġif Ġ( Build Config . DEBUG ) ĠHttp Logging Interceptor . Level . BODY ĊĠĠĠĠĠĠĠ Ġelse ĠHttp Logging Interceptor . Level . NONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Base Auth Interceptor ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ ĠuserName : ĠString , ĊĠĠĠĠĠĠĠ Ġpassword : ĠString ĊĠĠĠ Ġ): ĠInter ceptor Ġ= ĊĠĠĠĠĠĠĠ ĠInter ceptor Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredentials Ġ= Ġ"$ userName :$ password " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbasic Auth Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Basic Ġ${ Base 6 4 . encode ToString ( credentials . toByteArray (), ĠBase 6 4 . NO _ WRAP )}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Request Ġ= Ġrequest . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl ( request . url . newBuilder (). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader ( Constants . Network RequestParam . AUTHORIZATION , Ġbasic Auth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Network RequestParam . CONTENT _ TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Network Request Value . CONTENT _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod ( request . method , Ġrequest . body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Network Available ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNo Connectivity Exception () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchain . proceed ( new Request ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Ok HttpClient ( ĊĠĠĠĠĠĠĠ Ġcache : ĠCache ?, ĊĠĠĠĠĠĠĠ Ġlogging : ĠInter ceptor , ĊĠĠĠĠĠĠĠ Ġbasic Auth Interceptor : ĠInter ceptor , ĊĠĠĠĠĠĠĠ Ġchange able BaseUrl Interceptor : ĠChange able BaseUrl Interceptor , ĊĠĠĠĠĠĠĠ Ġmock Interceptor : ĠInter ceptor ĊĠĠĠ Ġ): ĠOk HttpClient Ġ= ĠOk HttpClient . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġconnect Timeout ( TIMEOUT . to Long (), ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġread Timeout ( TIMEOUT . to Long (), ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġadd Interceptor ( basic Auth Interceptor ) ĊĠĠĠĠĠĠĠ Ġadd Interceptor ( logging ) ĊĠĠĠĠĠĠĠ Ġadd Interceptor ( change able BaseUrl Interceptor ) ĊĠĠĠĠĠĠĠ Ġ// Ġmock Ġdata Ġfor Ġthe ĠAPIs Ġwhile Ġa Ġparticular ĠAPI Ġis Ġnot Ġimplemented Ġyet Ġon ĠBackend Ġside . ĊĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġadd Interceptor ( mock Interceptor ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cache Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache ( cache ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate App Ret rofit ( ĊĠĠĠĠĠĠĠ Ġok HttpClient : ĠOk HttpClient , ĊĠĠĠĠĠĠĠ Ġnetwork Adapter Factory : ĠNetwork Adapter Factory , ĊĠĠĠĠĠĠĠ Ġis Error Handling : ĠBoolean ĊĠĠĠ Ġ): ĠRet rofit Ġ= ĠRet rofit . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isError Handling ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Call Adapter Factory ( network Adapter Factory ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Converter Factory ( Scalars Converter Factory . create ()) ĊĠĠĠĠĠĠĠ Ġadd Converter Factory ( Gson Converter Factory . create ()) ĊĠĠĠĠĠĠĠ ĠbaseUrl ( Build Config . CONFIGURATION _ DOMAIN ) ĊĠĠĠĠĠĠĠ Ġclient ( ok HttpClient ) ĊĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate ApiService ( ret rofit : ĠRet rofit ): ĠApi Service Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġretrofit . create ( ApiService :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ