From 6e8587875f25a51525be66946f905401f288504f Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 11 Dec 2019 12:42:03 -0600 Subject: [PATCH] Skip animations for long lists * Don't animate sort changes * Don't detect moves --- .../org/tasks/tasklist/TaskListRecyclerAdapter.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java b/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java index ab9336054..1112408ed 100644 --- a/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java +++ b/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java @@ -37,6 +37,8 @@ import org.tasks.intents.TaskIntents; public class TaskListRecyclerAdapter extends RecyclerView.Adapter implements ViewHolder.ViewHolderCallbacks, ListUpdateCallback { + private static final int LONG_LIST_SIZE = 500; + private final TaskAdapter adapter; private final TaskListFragment taskList; private final RecyclerView recyclerView; @@ -227,7 +229,9 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter assertNotMainThread(); DiffCallback cb = new DiffCallback(last.first, next, adapter); - DiffResult result = DiffUtil.calculateDiff(cb, true); + boolean shortList = next.size() < LONG_LIST_SIZE; + boolean calculateDiff = last.first.size() != next.size() || shortList; + DiffResult result = calculateDiff ? DiffUtil.calculateDiff(cb, shortList) : null; return Pair.create(next, result); } @@ -248,7 +252,11 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter Pair, DiffResult> update = updates.poll(); while (update != null) { list = update.first; - update.second.dispatchUpdatesTo((ListUpdateCallback) this); + if (update.second == null) { + notifyDataSetChanged(); + } else { + update.second.dispatchUpdatesTo((ListUpdateCallback) this); + } update = updates.poll(); } }