@@ -250,15 +250,16 @@ public Task<List<T>> loadNextPage(CancellationToken ct) {
250
250
final int page = getCurrentPage () + 1 ;
251
251
252
252
// 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 >>>() {
254
255
@ Override
255
256
public Task <List <T >> then (Task <List <T >> task ) throws Exception {
256
257
if (task .isCancelled () || task .isFaulted ()) {
257
258
return task ;
258
259
}
259
260
260
261
List <T > results = task .getResult ();
261
- onPage (page , results );
262
+ onPage (query , page , results );
262
263
263
264
return task ;
264
265
}
@@ -296,15 +297,16 @@ public void loadNextPage(final FindCallback<T> callback, final CancellationToken
296
297
final int page = getCurrentPage () + 1 ;
297
298
298
299
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 >() {
300
302
301
303
AtomicInteger callbacks = new AtomicInteger ();
302
304
303
305
@ Override
304
306
public void done (List <T > results , ParseException e ) {
305
307
boolean isCancelled = ct != null && ct .isCancellationRequested ();
306
308
if (!isCancelled && e == null ) {
307
- onPage (page , results );
309
+ onPage (query , page , results );
308
310
}
309
311
310
312
boolean isCacheThenNetwork = false ;
@@ -329,16 +331,21 @@ public void done(List<T> results, ParseException e) {
329
331
setLoadNextPageTask (tcs .getTask ());
330
332
}
331
333
332
- private void onPage (int page , List <T > results ) {
334
+ private void onPage (ParseQuery < T > query , int page , List <T > results ) {
333
335
synchronized (lock ) {
334
336
int itemCount = results .size ();
335
337
336
338
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
+ }
342
349
}
343
350
int objectsSize = objects .size ();
344
351
boolean inserted = true ;
0 commit comments