mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-24 02:39:55 +01:00
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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user