package Ġcom . tan f ra . shop mob . s mob . data . net Ċ Ċ import Ġandroid . app . Application Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġcom . squareup . mos hi . kotlin . reflect . Kotlin Json Adapter Factory Ċ import Ġcom . tan f ra . shop mob . Build Config Ċ import Ġcom . tan f ra . shop mob . s mob . data . net . api .* Ċ import Ġcom . tan f ra . shop mob . s mob . data . net . n to .* Ċ import Ġcom . tan f ra . shop mob . s mob . data . net . utils . ArrayList Adapter Ċ import Ġcom . tan f ra . shop mob . s mob . data . net . utils . Auth Interceptor Ċ import Ġcom . tan f ra . shop mob . s mob . data . net . utils . Network Connection Interceptor Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġorg . k oin . dsl . module Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . mos hi . M oshi Converter Factory Ċ import Ġjava . util . concurrent . TimeUnit ĊĊ Ċ // ĠK oin Ġmodule Ġfor Ġnetwork Ġservices Ċ val Ġnet Services Ġ= Ġmodule Ġ{ ĊĊĊĠĠĠ Ġ// Ġhelper Ġfunction Ġto Ġprovide Ġa Ġconfigured ĠOk HttpClient ĊĠĠĠ Ġfun Ġprovide Ok HttpClient ( app : ĠApplication , Ġauth Interceptor : ĠAuth Interceptor ): ĠOk HttpClient Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġadd Ġconnection Ġfirst , Ġthen Ġauth ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient (). newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor ( Network Connection Interceptor ( Ġapp . application Context Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor ( auth Interceptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Timeout ( 3 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect Timeout ( 6 , ĠTimeUnit . SECONDS ) ĊĊĊĠĠĠĠĠĠĠ Ġ// Ġadd Ġeventually Ġlogging Ġ( in Ġdebug Ġmode Ġonly ) ĊĠĠĠĠĠĠĠ Ġ// Ġ... Ġeven Ġduring Ġdebug Ġmode : Ġdisable Ġwhen Ġworking Ġ( by Ġadding Ġhardcoded Ġ' false Ġ&& ') ĊĠĠĠĠĠĠĠ Ġif Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Config . DEBUG ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcreate Ġand Ġconfigure Ġlogging Ġinterceptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterceptor Ġ= ĠHttp Logging Interceptor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterceptor . setLevel ( Http Logging Interceptor . Level . BODY ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġto Ġthe ĠHTTP Ġclient Ġ- Ġthis Ġshould Ġalways Ġgo Ġlast ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . add Interceptor ( interceptor ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġdone Ġ- Ġbuild Ġclient Ġand Ġreturn Ġit ĊĠĠĠĠĠĠĠ Ġreturn Ġclient . build () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġhelper Ġfunction Ġto Ġprovide Ġa Ġconfigured Ġretrofit Ġinstance ĊĠĠĠ Ġfun Ġprovide Ret rofit M oshi ( ok HttpClient : ĠOk HttpClient ): ĠRet rofit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠM oshi Ġbuilder ĊĠĠĠĠĠĠĠ Ġval Ġm oshi Ġ= ĠM oshi . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( ArrayList Adapter . Factory < S mob User N TO >()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( ArrayList Adapter . Factory < S mob Group N TO >()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( ArrayList Adapter . Factory < S mob Product N TO >()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( ArrayList Adapter . Factory < S mob Shop N TO >()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( ArrayList Adapter . Factory < S mob List N TO >()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( Kotlin Json Adapter Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( Build Config . BASE _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( ok HttpClient ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( M oshi Converter Factory . create ( mos hi )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġhelper Ġfunction Ġto Ġprovide ĠAPIs ĊĠĠĠ Ġfun Ġprovide S mob User Api ( ret rofit : ĠRet rofit ): ĠS mob User Api Ġ= Ġretrofit . create ( S mob User Api :: class . java ) ĊĠĠĠ Ġfun Ġprovide S mob Group Api ( ret rofit : ĠRet rofit ): ĠS mob Group Api Ġ= Ġretrofit . create ( S mob Group Api :: class . java ) ĊĠĠĠ Ġfun Ġprovide S mob Product Api ( ret rofit : ĠRet rofit ): ĠS mob Product Api Ġ= Ġretrofit . create ( S mob Product Api :: class . java ) ĊĠĠĠ Ġfun Ġprovide S mob Shop Api ( ret rofit : ĠRet rofit ): ĠS mob Shop Api Ġ= Ġretrofit . create ( S mob Shop Api :: class . java ) ĊĠĠĠ Ġfun Ġprovide S mob List Api ( ret rofit : ĠRet rofit ): ĠS mob List Api Ġ= Ġretrofit . create ( S mob List Api :: class . java ) ĊĊĊĠĠĠ Ġ// Ġdefine Ġinstances Ġto Ġbe Ġoffered Ġas Ġservices Ġvia Ġthe ĠK oin Ġservice Ġlocator ĊĠĠĠ Ġ// Ġdefine Ġinstances Ġto Ġbe Ġoffered Ġas Ġservices Ġvia Ġthe ĠK oin Ġservice Ġlocator ĊĠĠĠ Ġ// Ġdefine Ġinstances Ġto Ġbe Ġoffered Ġas Ġservices Ġvia Ġthe ĠK oin Ġservice Ġlocator ĊĊĠĠĠ Ġ// Ġconsistent Ġhandling Ġof Ġnetwork Ġresponses / errors ĊĠĠĠ Ġsingle Ġ{ ĠResponse Handler () Ġ} ĊĊĠĠĠ Ġ// Ġauthentication Ġmiddleware ĊĠĠĠ Ġsingle Ġ{ ĠAuth Interceptor () Ġ} ĊĊĠĠĠ Ġ// ĠHTTP Ġclient Ġ- Ġallows Ġinjection Ġof Ġlogger Ġ( for Ġdebugging ... Ġsee Ġthere ) ĊĠĠĠ Ġsingle Ġ{ Ġprovide Ok HttpClient ( app Ġ= Ġget (), Ġauth Interceptor Ġ= Ġget ()) Ġ} ĊĊĠĠĠ Ġ// Ġretrofit Ġobject ĊĠĠĠ Ġ// Ġ... Ġincl . ĠM oshi ĠJSON Ġadapters Ġfor Ġall Ġour Ġdata Ġsources Ġ( general ized ) ĊĠĠĠ Ġsingle Ġ{ Ġprovide Ret rofit M oshi ( ok HttpClient Ġ= Ġget ()) Ġ} ĊĊĊĠĠĠ Ġ// Ġindividual ĠAPIs Ġfor Ġaccess Ġto Ġnetwork Ġdata Ġ( per Ġcategory ) Ġ---------------- ------ ĊĠĠĠ Ġ// Ġindividual ĠAPIs Ġfor Ġaccess Ġto Ġnetwork Ġdata Ġ( per Ġcategory ) Ġ---------------- ------ ĊĠĠĠ Ġ// Ġindividual ĠAPIs Ġfor Ġaccess Ġto Ġnetwork Ġdata Ġ( per Ġcategory ) Ġ---------------- ------ ĊĊĠĠĠ Ġ// ĠAPIs Ġto Ġaccess Ġdata Ġfrom Ġthe Ġbackend ĊĠĠĠ Ġsingle Ġ{ Ġprovide S mob User Api ( ret rofit Ġ= Ġget ()) Ġ} ĊĠĠĠ Ġsingle Ġ{ Ġprovide S mob Group Api ( ret rofit Ġ= Ġget ()) Ġ} ĊĠĠĠ Ġsingle Ġ{ Ġprovide S mob Product Api ( ret rofit Ġ= Ġget ()) Ġ} ĊĠĠĠ Ġsingle Ġ{ Ġprovide S mob Shop Api ( ret rofit Ġ= Ġget ()) Ġ} ĊĠĠĠ Ġsingle Ġ{ Ġprovide S mob List Api ( ret rofit Ġ= Ġget ()) Ġ} Ċ Ċ } ĊĊĊ