package Ġcom . x inh . travel . di Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . x inh . data . rx . Network Handler Ċ import Ġcom . x inh . data . rx . Network Handler Impl Ċ import Ġcom . x inh . data . rx . Rx Adapter Factory Ċ import Ġcom . x inh . domain . manager . User Manager Ċ import Ġcom . x inh . travel . Build Config Ċ import Ġcom . x inh . travel . config . API _ URL Ċ import Ġcom . x inh . travel . config . APP _ NAME Ċ import Ġcom . x inh . travel . config . CLIENT _ ID Ċ import Ġcom . x inh . travel . di . Name Injection . NAME _ HEADER _ INTER CEPT OR Ċ import Ġcom . x inh . travel . di . Name Injection . NAME _ LOG GING _ INTER CEPT OR Ċ import Ġcom . x inh . travel . di . Properties . CLIENT Ċ import Ġcom . x inh . travel . di . Properties . DEVICE _ OS Ċ import Ġcom . x inh . travel . di . Properties . DEVICE _ TYPE Ċ import Ġcom . x inh . travel . di . Properties . LANG Ċ import Ġcom . x inh . travel . di . Properties . TIME _ OUT Ċ import Ġcom . x inh . travel . di . Properties . TOKEN Ċ import Ġcom . x inh . travel . di . Properties . USER _ AGENT Ċ import Ġokhttp 3 . Cache Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġorg . k oin . android . ext . k oin . android Application Ċ import Ġorg . k oin . core . qual ifier . named Ċ import Ġorg . k oin . dsl . module Ċ import Ġretrofit 2 . Call Adapter Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ val Ġnetwork Module Ġ= Ġmodule Ġ{ ĊĊĠĠĠ Ġsingle Ġ{ ĠGson () Ġ} ĊĊĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠ Ġget Ret rofit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient Ġ= Ġget (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgson Factory Ġ= Ġget (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrx Java Factory Ġ= Ġget () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsingle Ġ{ Ġget Ok Http Cache ( context Ġ= Ġandroid Application ()) Ġ} ĊĊĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠ Ġget Ok HttpClient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Ġ= Ġget (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogging Ġ= Ġget ( named ( NAME _ LOG GING _ INTER CEPT OR )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġget ( named ( NAME _ HEADER _ INTER CEPT OR )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsingle ( named ( NAME _ LOG GING _ INTER CEPT OR )) Ġ{ Ġget Logging Interceptor () Ġ} ĊĊĠĠĠ Ġsingle ( named ( NAME _ HEADER _ INTER CEPT OR )) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Header Interceptor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Manager Ġ= Ġget () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsingle Ġ{ Ġget Gson Converter Factory ( gson Ġ= Ġget ()) Ġ} ĊĊĠĠĠ Ġsingle < Network Handler > Ġ{ ĠNetwork Handler Impl ( context Ġ= Ġget ()) Ġ} ĊĊĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠ Ġget Rx Adapter Factory ( network Handler Ġ= Ġget ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠName Injection Ġ{ ĊĠĠĠ Ġconst Ġval ĠNAME _ LOG GING _ INTER CEPT OR Ġ= Ġ" logging " ĊĠĠĠ Ġconst Ġval ĠNAME _ HEADER _ INTER CEPT OR Ġ= Ġ" header " Ċ } Ċ Ċ object ĠProperties Ġ{ ĊĠĠĠ Ġconst Ġval ĠTIME _ OUT Ġ= Ġ 6 0 L Ġ// Ġseconds ĊĠĠĠ Ġconst Ġval ĠLANG Ġ= Ġ" Lang " ĊĠĠĠ Ġconst Ġval ĠCLIENT Ġ= Ġ" Client " ĊĠĠĠ Ġconst Ġval ĠTOKEN Ġ= Ġ" x - token " ĊĠĠĠ Ġconst Ġval ĠUSER _ AGENT Ġ= Ġ" User - Agent " ĊĠĠĠ Ġconst Ġval ĠDEVICE _ OS Ġ= Ġ" device - os " ĊĠĠĠ Ġconst Ġval ĠDEVICE _ TYPE Ġ= Ġ" device - type " Ċ } Ċ Ċ fun Ġget Ret rofit ( ĊĠĠĠĠĠĠĠ Ġok HttpClient : ĠOk HttpClient , ĊĠĠĠĠĠĠĠ Ġgson Factory : ĠGson Converter Factory , ĊĠĠĠĠĠĠĠ Ġrx Java Factory : ĠCall Adapter . Factory Ċ ): ĠRet rofit Ġ{ ĊĠĠĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( API _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( gson Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Call Adapter Factory ( rx Java Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( ok HttpClient ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () Ċ } Ċ Ċ fun Ġget Ok Http Cache ( context : ĠContext ): ĠCache Ġ{ ĊĠĠĠ Ġval Ġsize Ġ= Ġ( 1 0 Ġ* Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 ). to Long () Ġ// Ġ 1 0 ĠM b ĊĠĠĠ Ġreturn ĠCache ( context . cacheDir , Ġsize ) Ċ } Ċ Ċ fun Ġget Logging Interceptor (): ĠInter ceptor Ġ{ ĊĠĠĠ Ġval Ġlogging Ġ= ĠHttp Logging Interceptor () ĊĠĠĠ ĠHttp Logging Interceptor . Level . BODY ĊĠĠĠ Ġreturn Ġlogging Ċ } Ċ Ċ fun Ġget Header Interceptor ( user Manager : ĠUser Manager ): ĠInter ceptor Ġ{ ĊĠĠĠ Ġreturn ĠInter ceptor Ġ{ Ġchain Ġ-> ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Builder Ġ= Ġchain . request (). newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header ( CLIENT , ĠCLIENT _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header ( LANG , Ġ" en ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header ( USER _ AGENT , ĠgetUser Agent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header ( DEVICE _ OS , Ġ" Android ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header ( DEVICE _ TYPE , Ġ" Android ") ĊĊĠĠĠĠĠĠĠ Ġuser Manager . getToken ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Builder . add Header ( TOKEN , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġchain . proceed ( request Builder . build ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠgetUser Agent (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġ"$ APP _ NAME /${ Build Config . VERSION _ NAME } Ġ${ System . getProperty ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" http . agent " ĊĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ" N / A "} " Ċ } Ċ Ċ fun Ġget Ok HttpClient ( ĊĠĠĠĠĠĠĠ Ġcache : ĠCache , ĊĠĠĠĠĠĠĠ Ġlogging : ĠInter ceptor , ĊĠĠĠĠĠĠĠ Ġheader : ĠInter ceptor Ċ ): ĠOk HttpClient Ġ{ ĊĊĠĠĠ Ġval Ġok HttpClient Builder Ġ= ĠOk HttpClient . Builder () ĊĠĠĠ Ġok HttpClient Builder . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Interceptor ( header ) ĊĠĠĠĠĠĠĠ Ġadd Interceptor ( logging ) ĊĠĠĠĠĠĠĠ Ġconnect Timeout ( TIME _ OUT , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġread Timeout ( TIME _ OUT , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġcache ( cache ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġok HttpClient Builder . build () Ċ } ĊĊ Ċ fun Ġget Gson Converter Factory ( gson : ĠGson ): ĠGson Converter Factory Ġ{ ĊĠĠĠ Ġreturn ĠGson Converter Factory . create ( gson ) Ċ } Ċ Ċ fun Ġget Rx Adapter Factory ( network Handler : ĠNetwork Handler ): ĠCall Adapter . Factory Ġ{ ĊĠĠĠ Ġreturn ĠRx Adapter Factory ( network Handler ) Ċ } Ċ