package Ġcom . example . myapp . util Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . paging . DataSource Ċ import Ġandroidx . paging . Live Paged List Builder Ċ import Ġandroidx . paging . Paged List Ċ import Ġdagger . Provides Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . inject . Singleton Ċ Ċ /** Ċ Ġ* Ġa Ġsingleton Ġclass Ġthat Ġprovide Ġweb service Ġand Ġpaging Ġconfig ĊĠ Ġ*/ Ċ @ Singleton Ċ class ĠWeb ServiceProvider Ġ{ ĊĠĠĠ Ġprivate Ġval ĠapiKey Ġ= Ġ" 0 6 2 a 6 c 0 c 4 9 e 4 de 1 d 7 8 4 9 7 d 1 3 a 7 dbb 3 6 0 " ĊĠĠĠ Ġprivate Ġval ĠbaseUrl Ġ= Ġ" https :// www . flickr . com / services /" ĊĊĠĠĠ Ġ@ Suppress Lint (" New Api ") ĊĠĠĠ Ġprivate Ġfun Ġget Ok HttpClient (): ĠOk HttpClient Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect Timeout ( 3 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Timeout ( 3 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Timeout ( 3 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( Thread . currentThread (). toString (), Ġ" api Ġcalled Ġ- Ġ${ chain . request (). url ()} Ġ${ chain . request (). body (). toString () }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġrequest Ġheaders ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġoriginal . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" user - key ", ĠapiKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. method ( original . method (), Ġoriginal . body ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchain . proceed ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Ret rofit (): ĠRet rofit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġok HttpClient : ĠOk HttpClient Ġ= Ġget Ok HttpClient () ĊĠĠĠĠĠĠĠ Ġok HttpClient . ssl Socket Factory () ĊĠĠĠĠĠĠĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( baseUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( ok HttpClient ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Call Adapter Factory ( LiveData Call Adapter Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget WebService (): ĠWeb Service Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( web service Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb service !! ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrest Adapter : ĠRet rofit Ġ= Ġget Ret rofit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġws Ġ= Ġrest Adapter . create ( WebService :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset API Service ( ws ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġws ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Paged Config (): ĠP aged List . Config Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( page d Config Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage d Config !! ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠP aged List . Config . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set PageSize ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setInitial Load Size Hint ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Pref etch Distance ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Enable Place holders ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . page d Config Ġ= Ġconfig ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġweb service : ĠWeb Service ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpage d Config : ĠP aged List . Config ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġset API Service ( web service : ĠWeb Service ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . web service Ġ= Ġweb service ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġweb ServiceProvider : ĠWeb ServiceProvider ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġinstance : ĠWeb ServiceProvider ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( web ServiceProvider Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb ServiceProvider Ġ= ĠWeb ServiceProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġweb ServiceProvider !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }