/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠN ECT EC Ċ Ġ* ĠĠ ĠNational ĠElectron ics Ġand ĠComputer ĠTechnology ĠCenter , ĠTh ail and Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġf fc . api Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġcom . google . gson . Gson Ċ import Ġf fc . android . put Ċ import Ġf fc . app . Build Config Ċ import Ġf fc . app . dev Ċ import Ġf fc . entity . gson . ffc Gson Ċ import Ġokhttp 3 . Cache Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġorg . jetbrains . ank o . default SharedPreferences Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ import Ġretrofit 2 . converter . scal ars . Scalars Converter Factory Ċ import Ġretrofit 2 . dsl . Ret rofit Dsl Config Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util . concurrent . TimeUnit . SECONDS Ċ Ċ private Ġvar Ġurl _ staging Ġ= Ġ" https :// api - staging . ffc . in . th / v 1 /" Ċ private Ġvar Ġurl _ beta Ġ= Ġ" https :// api - beta . ffc . in . th / v 1 /" Ċ private Ġvar Ġurl _ production Ġ= Ġ" https :// api . ffc . in . th / v 1 /" Ċ private Ġvar Ġurl _ debug Ġ= Ġ" https :// api - test . ffc . in . th / v 1 /" Ċ Ċ class ĠF fc Central ( url : ĠString Ġ= ĠF fc Central . url , Ġval Ġgson : ĠGson Ġ= Ġf fc Gson ) Ġ{ ĊĊĠĠĠ Ġval Ġretrofit Builder Ġ= ĠRet rofit . Builder (). baseUrl ( url ) ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > Ġservice (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhttp Builder Ġ= ĠOk HttpClient . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Timeout ( 3 0 , ĠSE CON DS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Timeout ( 3 0 , ĠSE CON DS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Timeout ( 1 5 , ĠSE CON DS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Interceptor ( Default Interceptor ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdev Ġ{ Ġadd Interceptor ( Http Logging Interceptor (). apply Ġ{ Ġlevel Ġ= ĠHttp Logging Interceptor . Level . BODY Ġ}) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache ?. let Ġ{ Ġcache ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken ?. let Ġ{ Ġadd Interceptor ( AuthToken Interceptor ( it )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġretrofit Ġ= Ġretrofit Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient ( http Builder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Converter Factory ( Scalars Converter Factory . create ()) Ġ// For Ġplain - text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Converter Factory ( Gson Converter Factory . create ( gson )) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠĠĠĠĠ ĠRet rofit Dsl Config . ret rofit Ġ= Ġretrofit ĊĠĠĠĠĠĠĠ Ġreturn Ġretrofit . create ( T :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdefault Url : ĠString Ġ= Ġif Ġ( Build Config . BUILD _ TYPE Ġ== Ġ" release ") Ġurl _ production Ġelse Ġurl _ debug ĊĊĠĠĠĠĠĠĠ Ġvar Ġtoken : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġcache : ĠCache ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġurl : ĠString Ġ= Ġdefault Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠĠĠĠĠ Ġfun Ġload Url ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" NULL ABILITY _ MIS MATCH _ BASE D _ ON _ JAVA _ AN NOT ATIONS ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġcontext . default SharedPreferences . getString (" url ", Ġdefault Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" url =$ url ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġsave Url ( context : ĠContext , Ġurl : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( Build Config . DEBUG ) Ġ{ Ġ" Can 't Ġedit Ġurl Ġon Ġnot Ġdebug gable Ġapp " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( url . scheme Ġ== Ġ" https ") Ġ{ Ġ" url Ġmust Ġbe Ġhttp " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( url . path . endsWith ("/ ")) Ġ{ Ġ" url Ġmust Ġend Ġwith Ġ/ " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . default SharedPreferences . edit (). put (" url ", Ġurl . toString ()). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF fc Central . url Ġ= Ġurl . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ