diff --git a/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java b/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java index 5847bd9fd..9fcca1f06 100644 --- a/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java +++ b/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java @@ -8,7 +8,7 @@ import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread; import static com.todoroo.andlib.utility.AndroidUtilities.assertNotMainThread; import android.graphics.Canvas; -import android.view.View; +import android.os.Parcelable; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -17,7 +17,6 @@ import androidx.fragment.app.FragmentActivity; import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.DiffUtil.DiffResult; import androidx.recyclerview.widget.ItemTouchHelper; -import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.ListUpdateCallback; import androidx.recyclerview.widget.RecyclerView; import com.todoroo.astrid.activity.TaskListFragment; @@ -33,7 +32,6 @@ import io.reactivex.schedulers.Schedulers; import io.reactivex.subjects.PublishSubject; import java.util.LinkedList; import java.util.List; -import java.util.Objects; import java.util.Queue; import org.tasks.data.TaskContainer; import org.tasks.intents.TaskIntents; @@ -174,18 +172,7 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter @Override public void onMoved(int fromPosition, int toPosition) { - LinearLayoutManager layoutManager = - (LinearLayoutManager) Objects.requireNonNull(recyclerView.getLayoutManager()); - View firstChild = layoutManager.getChildAt(0); - int firstChildPosition = layoutManager.findFirstVisibleItemPosition(); - notifyItemMoved(fromPosition, toPosition); - - if (firstChildPosition > 0 && firstChild != null) { - layoutManager.scrollToPositionWithOffset(firstChildPosition - 1, firstChild.getTop()); - } else if (firstChildPosition >= 0) { - layoutManager.scrollToPosition(firstChildPosition); - } } @Override @@ -198,9 +185,7 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter assertNotMainThread(); DiffCallback cb = new DiffCallback(last.first, next, adapter); - boolean shortList = next.size() < LONG_LIST_SIZE; - boolean calculateDiff = last.first.size() != next.size() || shortList; - DiffResult result = calculateDiff ? DiffUtil.calculateDiff(cb, shortList) : null; + DiffResult result = DiffUtil.calculateDiff(cb, next.size() < LONG_LIST_SIZE); return Pair.create(next, result); } @@ -218,16 +203,16 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter private void drainQueue() { assertMainThread(); + Parcelable recyclerViewState = recyclerView.getLayoutManager().onSaveInstanceState(); + Pair, DiffResult> update = updates.poll(); while (update != null) { list = update.first; - if (update.second == null) { - notifyDataSetChanged(); - } else { - update.second.dispatchUpdatesTo((ListUpdateCallback) this); - } + update.second.dispatchUpdatesTo((ListUpdateCallback) this); update = updates.poll(); } + + recyclerView.getLayoutManager().onRestoreInstanceState(recyclerViewState); } @Override