Replace hack for maintaining scroll position

gtask_related_email
Alex Baker 5 years ago
parent 1ef5875003
commit 424f64e2dc

@ -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<ViewHolder>
@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<ViewHolder>
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<ViewHolder>
private void drainQueue() {
assertMainThread();
Parcelable recyclerViewState = recyclerView.getLayoutManager().onSaveInstanceState();
Pair<List<TaskContainer>, 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

Loading…
Cancel
Save