/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 . tcs . e com . ui . main . home Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . paging . Paging Source Ċ import Ġandroidx . paging . Paging State Ċ import Ġcom . tcs . e com . api . Product Api Ċ import Ġcom . tcs . e com . models . Product Ċ import Ġretrofit 2 . HttpException Ċ import Ġjava . io . IOException Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ @ author ĠB h uv an esh var Ċ Date ĠĠĠĠ 7 / 1 8 / 2 0 2 1 Ċ Time ĠĠĠĠ 8 : 1 7 ĠPM Ċ Project ĠE com Ċ Ġ*/ Ċ private Ġconst Ġval ĠPAGE _ ONE Ġ= Ġ 1 Ċ Ċ class ĠProduct Paging Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġproduct Repository : ĠProduct Api , ĊĠĠĠ Ġprivate Ġval Ġsearch Query : ĠString Ċ ) Ġ: ĊĠĠĠ ĠP aging Source < Int , ĠProduct >() Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠLoad Params < Int >): ĠLoad Result < Int , ĠProduct > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġparams . key Ġ?: ĠPAGE _ ONE ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" load : Ġin Ġload Ġ${ params . load Size } Ġkey Ġ$ params ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdelay ( 2 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġproduct Repository . get Product ( search Query , Ġposition , Ġparams . load Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful Ġ&& Ġresponse . body () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġresponse . body () !!. products , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġif Ġ( position Ġ== ĠPAGE _ ONE ) Ġnull Ġelse Ġposition Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġif Ġ( response . body () !!. is Last ) Ġnull Ġelse Ġposition Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Error ( RuntimeException (" Error ĠGetting Ġproducts Ġ${ response . code ()} ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Error ( ex ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠHttp Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Error ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Product Paging " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Refresh Key ( state : ĠP aging State < Int , ĠProduct >): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstate . anchor Position ĊĠĠĠ Ġ} Ċ } Ċ