/* Ċ Copyright Ġ 2 0 1 8 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ Ċ Permission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ċ software Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ċ without Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ċ merge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ċ permit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso . Ċ Ċ THE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , Ċ INCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA Ċ P ARTIC ULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT Ċ HOLDER S ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION Ċ OF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE Ċ SOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġcom . amazonaws . mobile . samples . aws omen otes . services . mock Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . amazonaws . mobile . samples . aws omen otes . TAG Ċ import Ġcom . amazonaws . mobile . samples . aws omen otes . models . Note Ċ import Ġcom . amazonaws . mobile . samples . aws omen otes . models . Paged List Connection Response Ċ import Ġcom . amazonaws . mobile . samples . aws omen otes . services . DataService Ċ Ċ /** Ċ Ġ* ĠA Ġmock Ġdata Ġstore . Ġ ĠThis Ġwill Ġcreate Ġ 3 0 Ġnotes Ġso Ġyou Ġcan Ġsee Ġthe Ġscrolling Ġaction , Ċ Ġ* Ġbut Ġotherwise Ġacts Ġas Ġthe Ġdata Ġservice . Ġ ĠThis Ġshould Ġbe Ġeasily Ġre written Ġto Ġuse Ċ Ġ* Ġan Ġactual Ġcloud ĠAPI . Ċ Ġ* Ċ Ġ* ĠThe Ġbacking Ġstore Ġfor Ġthis Ġdata Ġservice Ġis Ġa Ġsimple Ġin - memory Ġarray Ġof Ġitems . Ċ Ġ*/ Ċ class ĠMock DataService Ġ: ĠData Service Ġ{ ĊĠĠĠ Ġprivate Ġval Ġitems Ġ= ĠArrayList < Note >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInitialize Ġitems Ġso Ġwe Ġhave Ġa Ġlist Ġthat Ġwe Ġcan Ġtest Ġscrolling Ġimmediately ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġ.. Ġ 3 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠNote (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Note Ġ$ i " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ" Content Ġfor Ġnote Ġ$ i " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġsim ulates Ġan ĠAPI Ġcall Ġto Ġa Ġnetwork Ġservice Ġthat Ġreturns Ġpage d Ġdata . Ġ ĠWe Ġwill ĊĠĠĠĠ Ġ* Ġreplace Ġthis Ġwith Ġa Ġreal Ġcall Ġlater Ġon . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġload Notes ( limit : ĠInt , Ġafter : ĠString ?, Ġcallback : Ġ( Paged List Connection Response < Note >) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" load Items ($ limit , Ġ\"$ after \") ") ĊĠĠĠĠĠĠĠ Ġcheck ( limit Ġin Ġ 1 .. 1 0 0 ) Ġ{ Ġ" Limit Ġmust Ġbe Ġa Ġreasonable Ġpositive Ġnumber " Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġfirst Item Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( after Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfind Ġthe Ġitem Ġoffset Ġfor Ġthe Ġafter Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Item Ġ= Ġitems . indexOf First Ġ{ Ġnote Ġ-> Ġnote . note Id Ġ== Ġafter Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Item Ġ< Ġ 0 ) Ġ{ Ġ// ĠWe Ġdidn 't Ġfind Ġthe Ġafter Ġitem , Ġso Ġreturn Ġempty Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( Paged List Connection Response ( emptyList (), Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Item ++ Ġ// ĠWe Ġwant Ġthe Ġitem Ġafter Ġthe Ġitem Ġrequested ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" load Items (): Ġfirst Item Ġ= Ġ$ first Item , Ġitems . size Ġ= Ġ${ items . size }") ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġfirst Item Ġis Ġbeyond Ġthe Ġend Ġof Ġthe Ġlist , Ġthen Ġreturn Ġan Ġempty Ġlist ĊĠĠĠĠĠĠĠ Ġif Ġ( first Item Ġ> Ġitems . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" load Items (): Ġasking Ġfor Ġbeyond Ġend Ġ- Ġreturn Ġempty Ġlist ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( Paged List Connection Response ( emptyList (), Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠNumber Ġof Ġitems Ġis Ġeither Ġlimit Ġor Ġfrom Ġfirst Item Ġto Ġthe Ġend Ġof Ġthe Ġlist , Ġwh iche ver Ġis Ġsmaller ĊĠĠĠĠĠĠĠ Ġval Ġn Items Ġ= Ġmin Of ( limit , Ġitems . size Ġ- Ġfirst Item ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" load Items (): Ġn Items Ġ= Ġ$ n Items ") ĊĠĠĠĠĠĠĠ Ġif Ġ( n Items Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" load Items (): Ġno Ġitems , Ġso Ġreturn Ġempty Ġlist ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( Paged List Connection Response ( emptyList (), Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsub list Ġ= Ġitems . sub List ( first Item , Ġfirst Item Ġ+ Ġn Items ). toList () ĊĠĠĠĠĠĠĠ Ġval Ġnext Token : ĠString ? Ġ= Ġif Ġ( first Item Ġ+ Ġn Items Ġ- Ġ 1 Ġ== Ġitems . size ) Ġnull Ġelse Ġsub list . last (). note Id ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" load Items (): Ġreturning Ġ${ sub list . size } Ġitems , Ġnext Token Ġ= Ġ$ nextToken ") ĊĠĠĠĠĠĠĠ Ġcallback ( Paged List Connection Response ( sub list , Ġnext Token )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoad Ġa Ġsingle Ġnote Ġfrom Ġthe Ġcurrent Ġlist Ġof Ġnotes ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnote Id Ġthe Ġrequest ĠID ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġthe Ġresponse Ġfrom Ġthe Ġserver ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Note ( note Id : ĠString , Ġcallback : Ġ( Note ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" get Note ($ note Id )") ĊĠĠĠĠĠĠĠ Ġcheck ( note Id . isNotBlank ()) ĊĠĠĠĠĠĠĠ Ġval Ġitem Index Ġ= Ġitems . indexOf First Ġ{ Ġitem Ġ-> Ġitem . note Id Ġ== Ġnote Id Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( item Index Ġ>= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( items [ item Index ]) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSave Ġa Ġnote Ġto Ġthe Ġbacking Ġstore ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnote Ġthe Ġnote Ġto Ġbe Ġsaved ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġthe Ġresponse Ġfrom Ġthe Ġserver Ġ( null Ġwould Ġindicate Ġthat Ġthe Ġoperation Ġfailed ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġsave Note ( note : ĠNote , Ġcallback : Ġ( Note ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" save Note (${ note . note Id }) ") ĊĠĠĠĠĠĠĠ Ġcheck ( note . note Id . isNotBlank ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Index Ġ= Ġitems . indexOf First Ġ{ Ġitem Ġ-> Ġitem . note Id Ġ== Ġnote . note Id Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( item Index Ġ>= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ item Index ] Ġ= Ġnote ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( note ) ĊĠĠĠĠĠĠĠ Ġcallback ( note ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDelete Ġa Ġnote Ġfrom Ġthe Ġbacking Ġstore ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnote Id Ġthe ĠID Ġof Ġthe Ġnote Ġto Ġbe Ġdeleted ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġthe Ġresponse Ġfrom Ġthe Ġserver Ġ( Boolean Ġ= Ġtrue Ġindicates Ġsuccess ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdelete Note ( note Id : ĠString , Ġcallback : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" delete Note ($ note Id )") ĊĠĠĠĠĠĠĠ Ġcheck ( note Id . isNotBlank ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Index Ġ= Ġitems . indexOf First Ġ{ Ġitem Ġ-> Ġitem . note Id Ġ== Ġnote Id Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( item Index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . remove At ( item Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ