package Ġcom . open md m . client . core . http Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . open md m . client . core . utils . if NotNull Ċ import Ġcom . open md m . client . core . utils . sec Ċ import Ġdagger . h ilt . android . qual ifiers . ApplicationContext Ċ import Ġokhttp 3 . Cache Ċ import Ġokhttp 3 . Connection Pool Ċ import Ġokhttp 3 . Dispatcher Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġjava . io . File Ċ import Ġjava . time . Duration Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠOk HttpClient Factory Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġ@ ApplicationContext Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġinterceptor : ĠHttp Logging Interceptor ?, Ċ ) Ġ{ ĊĠĠĠ Ġfun ĠgetClient ( ĊĠĠĠĠĠĠĠ Ġread Write Timeout : ĠDuration Ġ= ĠDEFAULT _ TIMEOUT , ĊĠĠĠĠĠĠĠ Ġconnect Timeout : ĠDuration Ġ= ĠDEFAULT _ TIMEOUT , ĊĠĠĠĠĠĠĠ Ġextra Config : ĠOk HttpClient . Builder . () Ġ-> ĠOk HttpClient . Builder Ġ= Ġ{ Ġthis Ġ}, ĊĠĠĠ Ġ): ĠOk HttpClient Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. if NotNull ( interceptor ) Ġ{ Ġadd Interceptor ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Timeout ( read Write Timeout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Timeout ( read Write Timeout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect Timeout ( connect Timeout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cache ( build Cache ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. connection Pool ( build Connection Pool ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. dispatcher ( build Dispatcher ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. extra Config () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Cache (): ĠCache Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdirectory Ġ= ĠFile ( context . cacheDir , Ġ" api _ cache ") ĊĠĠĠĠĠĠĠ Ġreturn ĠCache ( directory , ĠCACHE _ MAX _ SIZE _ BYTES ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠAdjust Ġthe ĠConnection Ġpool Ġto Ġaccount Ġfor Ġhistorical Ġuse Ġof Ġ 3 Ġseparate Ġclients Ġbut Ġreduce ĊĠĠĠĠ Ġ* Ġthe Ġkeep Alive Ġto Ġ 2 Ġminutes Ġto Ġavoid Ġkeeping Ġradio Ġopen . Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbuild Connection Pool (): ĠConnection Pool Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠConnection Pool ( MAX _ IDLE _ CONNECTION S , ĠK EE P _ AL IVE _ TIME _ MIN UTES , ĠTimeUnit . MIN UTES ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Dispatcher (): ĠDispatcher Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDispatcher (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠAllow Ġfor Ġhigh Ġnumber Ġof Ġconcurrent Ġimage Ġf etches Ġon Ġsame Ġhost . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Requests Per Host Ġ= ĠMAX _ REQUEST S _ PER _ HOST ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ TIMEOUT Ġ= Ġ 2 . sec . duration () ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCACHE _ MAX _ SIZE _ BYTES Ġ= Ġ 5 0 L Ġ* Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 Ġ// Ġ 5 0 MB ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ IDLE _ CONNECTION S Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠK EE P _ AL IVE _ TIME _ MIN UTES Ġ= Ġ 2 L ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ REQUEST S _ PER _ HOST Ġ= Ġ 1 5 ĊĠĠĠ Ġ} Ċ } Ċ