@@ -250,15 +250,16 @@ public Task<List<T>> loadNextPage(CancellationToken ct) {
250250 final int page = getCurrentPage () + 1 ;
251251
252252 // TODO(grantland): Utilize query.findInBackground(CancellationToken)
253- Task <List <T >> task = findAsync (createQuery (page ), ct ).continueWithTask (new Continuation <List <T >, Task <List <T >>>() {
253+ final ParseQuery <T > query = createQuery (page );
254+ Task <List <T >> task = findAsync (query , ct ).continueWithTask (new Continuation <List <T >, Task <List <T >>>() {
254255 @ Override
255256 public Task <List <T >> then (Task <List <T >> task ) throws Exception {
256257 if (task .isCancelled () || task .isFaulted ()) {
257258 return task ;
258259 }
259260
260261 List <T > results = task .getResult ();
261- onPage (page , results );
262+ onPage (query , page , results );
262263
263264 return task ;
264265 }
@@ -296,15 +297,16 @@ public void loadNextPage(final FindCallback<T> callback, final CancellationToken
296297 final int page = getCurrentPage () + 1 ;
297298
298299 final TaskCompletionSource <List <T >> tcs = new TaskCompletionSource <>();
299- createQuery (page ).findInBackground (new FindCallback <T >() {
300+ final ParseQuery <T > query = createQuery (page );
301+ query .findInBackground (new FindCallback <T >() {
300302
301303 AtomicInteger callbacks = new AtomicInteger ();
302304
303305 @ Override
304306 public void done (List <T > results , ParseException e ) {
305307 boolean isCancelled = ct != null && ct .isCancellationRequested ();
306308 if (!isCancelled && e == null ) {
307- onPage (page , results );
309+ onPage (query , page , results );
308310 }
309311
310312 boolean isCacheThenNetwork = false ;
@@ -329,16 +331,21 @@ public void done(List<T> results, ParseException e) {
329331 setLoadNextPageTask (tcs .getTask ());
330332 }
331333
332- private void onPage (int page , List <T > results ) {
334+ private void onPage (ParseQuery < T > query , int page , List <T > results ) {
333335 synchronized (lock ) {
334336 int itemCount = results .size ();
335337
336338 currentPage = page ;
337- // We detect if there are more pages by setting the limit pageSize + 1 and we remove the extra
338- // if there are more pages.
339- hasNextPage = itemCount >= pageSize + 1 ;
340- if (itemCount > pageSize ) {
341- results .remove (pageSize );
339+ if (query .getLimit () == pageSize ) {
340+ // Backwards compatibility hack to support ParseQueryAdapter#setPaginationEnabled(false)
341+ hasNextPage = false ;
342+ } else {
343+ // We detect if there are more pages by setting the limit pageSize + 1 and we remove the extra
344+ // if there are more pages.
345+ hasNextPage = itemCount >= pageSize + 1 ;
346+ if (itemCount > pageSize ) {
347+ results .remove (pageSize );
348+ }
342349 }
343350 int objectsSize = objects .size ();
344351 boolean inserted = true ;
0 commit comments