/** Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠSub ink r ish na ĠG opi Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . sub ink r ish na . f px . service . impl Ċ Ċ import Ġcom . sub ink r ish na . f px . service . Build Config Ċ import Ġcom . sub ink r ish na . f px . service . Photo Api Ċ import Ġcom . sub ink r ish na . f px . service . model . Photo Ċ import Ġcom . sub ink r ish na . f px . service . model . Photo Stream Ċ import Ġio . reactivex . Single Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . adapter . rx java 2 . Rx Java 2 Call Adapter Factory Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ Ċ /** Ċ Ġ* ĠRet rofit Ġbased Ġimplementation Ġof ĠPhoto ĠAPI Ċ Ġ*/ Ċ class ĠNetwork Photo Api Ġ: ĠPhoto Api Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠBase ĠURL ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBASE _ URL Ġ= Ġ" https :// api . 5 0 0 px . com / v 1 /" ĊĊĠĠĠĠĠĠĠ Ġ// ĠDefaults ĊĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġmay Ġneed Ġto Ġpick Ġthe Ġimage Ġsizes Ġbased Ġon Ġdevice 's Ġdisplay ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠIMAGE _ SIZ ES Ġ= Ġ" 2 1 , 1 0 8 0 " ĊĊĠĠĠĠĠĠĠ Ġ// ĠParams ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠQUERY _ API _ KEY Ġ= Ġ" consumer _ key " ĊĊĠĠĠĠĠĠĠ Ġ// ĠClient Ġbuilder ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠhttpClient Builder Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogging Interceptor Ġ= ĠHttp Logging Interceptor (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= ĠHttp Logging Interceptor . Level . BASIC ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ lazy ĠOk HttpClient . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLog Ġinterceptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Interceptor ( logging Interceptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠApi Ġkey Ġinterceptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Interceptor Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġrequest . url (). newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add QueryParameter ( QUERY _ API _ KEY , ĠBuild Config . API _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdated Request Ġ= Ġrequest . newBuilder (). url ( url ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchain . proceed ( updated Request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġadd Ġn / w Ġcaching ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Interceptor () Ġ// Ġcache Ġinterceptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcache () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġretrofit Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( BASE _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Call Adapter Factory ( Rx Java 2 Call Adapter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( httpClient Builder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġservice Ġby Ġlazy Ġ{ Ġretrofit . create ( Photo Service :: class . java ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġphotos ( feature : ĠString , Ġpage : ĠInt , Ġresults PerPage : ĠInt ): ĠSingle < Photo Stream > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġservice . photos ( feature , Ġpage , Ġresults PerPage , ĠIMAGE _ SIZ ES ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġphoto ById ( id : ĠString ): ĠSingle < Photo > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġservice . photo ById ( id , ĠIMAGE _ SIZ ES ) ĊĠĠĠ Ġ} Ċ } ĊĊ