/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġ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 . android . example . paging . paging with network . repository Ċ Ċ import Ġcom . android . example . paging . paging with network . reddit . Person Ċ import Ġcom . android . example . paging . paging with network . reddit . api . Red dit Api Ċ import Ġcom . android . example . paging . paging with network . reddit . vo . Red dit Post Ċ import Ġio . reactivex . Observable Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . mock . Calls Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* Ġimplements Ġthe ĠRed dit Api Ġwith Ġcont rollable Ġrequests Ċ Ġ*/ Ċ class ĠFake Red dit Api Ġ: ĠRed dit Api Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Top Test (): ĠObservable < Person > Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") Ġ// To Ġchange Ġbody Ġof Ġcreated Ġfunctions Ġuse ĠFile Ġ| ĠSettings Ġ| ĠFile ĠTemplates . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġsub redd its Ġkey ed Ġby Ġname ĊĠĠĠ Ġprivate Ġval Ġmodel Ġ= Ġmutable Map Of < String , ĠSub Red dit >() ĊĠĠĠ Ġvar Ġfailure Msg : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġadd Post ( post : ĠRed dit Post ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsub reddit Ġ= Ġmodel . get Or Put ( post . sub reddit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSub Red dit ( items Ġ= Ġarray ListOf ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsub reddit . items . add ( post ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Posts ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub reddit : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlimit : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter : ĠString ? Ġ= Ġnull ): ĠList < Red dit Api . Red dit Children Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsub Red dit Ġ= Ġfind Sub Red dit ( sub reddit ) ĊĠĠĠĠĠĠĠ Ġval Ġposts Ġ= Ġsub Red dit . find Posts ( limit , Ġafter ) ĊĠĠĠĠĠĠĠ Ġreturn Ġposts . map Ġ{ ĠRed dit Api . Red dit Children Response ( it . copy ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Sub Red dit ( sub reddit : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . get OrDefault ( sub reddit , ĠSub Red dit ()) ĊĊĠĠĠ Ġoverride Ġfun Ġget Top ( sub reddit : ĠString , Ġlimit : ĠInt ): ĠCall < Red dit Api . Listing Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġfailure Msg ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCalls . failure ( IOException ( it )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġfind Posts ( sub reddit , Ġlimit ) ĊĠĠĠĠĠĠĠ Ġval Ġafter Ġ= Ġitems . last OrNull ()?. data ?. name ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠRed dit Api . Listing Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRed dit Api . Listing Data ( children Ġ= Ġitems , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġafter Ġ= Ġafter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠCalls . response ( response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Top After ( sub reddit : ĠString , Ġafter : ĠString , Ġlimit : ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠCall < Red dit Api . Listing Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġfailure Msg ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCalls . failure ( IOException ( it )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġfind Posts ( sub reddit Ġ= Ġsub reddit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Ġ= Ġlimit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġafter Ġ= Ġafter ) ĊĠĠĠĠĠĠĠ Ġval Ġresponse After Ġ= Ġitems . last OrNull ()?. data ?. name ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠRed dit Api . Listing Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRed dit Api . Listing Data ( children Ġ= Ġitems , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġafter Ġ= Ġresponse After , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠCalls . response ( response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Top Before ( sub reddit : ĠString , Ġbefore : ĠString , Ġlimit : ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠCall < Red dit Api . Listing Response > Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" the Ġapp Ġnever Ġuses Ġthis Ġso Ġno Ġreason Ġto Ġimplement ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠSub Red dit ( val Ġitems : ĠMutable List < Red dit Post > Ġ= Ġarray ListOf ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfind Posts ( limit : ĠInt , Ġafter : ĠString ?): ĠList < Red dit Post > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( after Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġitems . sub List ( 0 , ĠMath . min ( items . size , Ġlimit )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġitems . indexOf First Ġ{ Ġit . name Ġ== Ġafter Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Pos Ġ= Ġindex Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġitems . sub List ( start Pos , ĠMath . min ( items . size , Ġstart Pos Ġ+ Ġlimit )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }