Use our own homemade paging library for conversation paging.

I made the lib, and Alan made the build actually work.

Co-authored-by: Alan Evans <alan@signal.org>
This commit is contained in:
Greyson Parrelli
2020-12-03 13:19:03 -05:00
parent ac41f3d662
commit 31960b53a0
49 changed files with 1596 additions and 243 deletions

View File

@@ -6,6 +6,8 @@ import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import org.thoughtcrime.securesms.logging.Log;
import java.util.Objects;
/**
@@ -20,6 +22,8 @@ import java.util.Objects;
*/
public class SnapToTopDataObserver extends RecyclerView.AdapterDataObserver {
private static final String TAG = Log.tag(SnapToTopDataObserver.class);
private final RecyclerView recyclerView;
private final LinearLayoutManager layoutManager;
private final Deferred deferred;
@@ -83,13 +87,19 @@ public class SnapToTopDataObserver extends RecyclerView.AdapterDataObserver {
Objects.requireNonNull(scrollRequestValidator, "Cannot request positions when SnapToTopObserver was initialized without a validator.");
if (!scrollRequestValidator.isPositionStillValid(position)) {
Log.d(TAG, "requestScrollPositionInternal(" + position + ") Invalid");
onInvalidPosition.run();
} else if (scrollRequestValidator.isItemAtPositionLoaded(position)) {
onPerformScroll.onPerformScroll(layoutManager, position);
onScrollRequestComplete.run();
Log.d(TAG, "requestScrollPositionInternal(" + position + ") Scrolling");
onPerformScroll.onPerformScroll(layoutManager, position);
onScrollRequestComplete.run();
} else {
Log.d(TAG, "requestScrollPositionInternal(" + position + ") Deferring");
deferred.setDeferred(true);
deferred.defer(() -> requestScrollPositionInternal(position, onPerformScroll, onScrollRequestComplete, onInvalidPosition));
deferred.defer(() -> {
Log.d(TAG, "requestScrollPositionInternal(" + position + ") Executing deferred");
requestScrollPositionInternal(position, onPerformScroll, onScrollRequestComplete, onInvalidPosition);
});
}
}
@@ -111,7 +121,8 @@ public class SnapToTopDataObserver extends RecyclerView.AdapterDataObserver {
if (newItemPosition != 0 ||
recyclerView.getScrollState() != RecyclerView.SCROLL_STATE_IDLE ||
recyclerView.canScrollVertically(layoutManager.getReverseLayout() ? 1 : -1)) {
recyclerView.canScrollVertically(layoutManager.getReverseLayout() ? 1 : -1))
{
return;
}