From 5943b9d7d68f4cee59169c89cb3a1e589257ab04 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Tue, 15 Sep 2020 10:35:11 -0300 Subject: [PATCH] Fix sending receipts. Fixes #10016 --- .../conversation/ConversationFragment.java | 5 ++++- .../ConversationListFragment.java | 2 +- .../securesms/util/SnapToTopDataObserver.java | 19 +++++++++++++++++-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index 35f76c3684..690615fe7d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -1424,7 +1424,10 @@ public class ConversationFragment extends LoggingFragment { public ConversationSnapToTopDataObserver(@NonNull RecyclerView recyclerView, @Nullable ScrollRequestValidator scrollRequestValidator) { - super(recyclerView, scrollRequestValidator); + super(recyclerView, scrollRequestValidator, () -> { + list.scrollToPosition(0); + list.post(ConversationFragment.this::postMarkAsReadRequest); + }); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java index 288e47ee65..55eb5b1005 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -223,7 +223,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode list.setItemAnimator(new DeleteItemAnimator()); list.addOnScrollListener(new ScrollListener()); - snapToTopDataObserver = new SnapToTopDataObserver(list, null); + snapToTopDataObserver = new SnapToTopDataObserver(list); new ItemTouchHelper(new ArchiveListenerCallback()).attachToRecyclerView(list); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SnapToTopDataObserver.java b/app/src/main/java/org/thoughtcrime/securesms/util/SnapToTopDataObserver.java index 7b8039b959..b38dc9a055 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/SnapToTopDataObserver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/SnapToTopDataObserver.java @@ -24,14 +24,22 @@ public class SnapToTopDataObserver extends RecyclerView.AdapterDataObserver { private final LinearLayoutManager layoutManager; private final Deferred deferred; private final ScrollRequestValidator scrollRequestValidator; + private final ScrollToTop scrollToTop; + + public SnapToTopDataObserver(@NonNull RecyclerView recyclerView) { + this(recyclerView, null, null); + } public SnapToTopDataObserver(@NonNull RecyclerView recyclerView, - @Nullable ScrollRequestValidator scrollRequestValidator) + @Nullable ScrollRequestValidator scrollRequestValidator, + @Nullable ScrollToTop scrollToTop) { this.recyclerView = recyclerView; this.layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); this.deferred = new Deferred(); this.scrollRequestValidator = scrollRequestValidator; + this.scrollToTop = scrollToTop == null ? () -> layoutManager.scrollToPosition(0) + : scrollToTop; } /** @@ -108,7 +116,7 @@ public class SnapToTopDataObserver extends RecyclerView.AdapterDataObserver { } if (layoutManager.findFirstVisibleItemPosition() == 0) { - layoutManager.scrollToPosition(0); + scrollToTop.scrollToTop(); } } @@ -144,6 +152,13 @@ public class SnapToTopDataObserver extends RecyclerView.AdapterDataObserver { void onPerformScroll(@NonNull LinearLayoutManager layoutManager, int position); } + /** + * Method Object for scrolling to the top of a view, in case special handling is desired. + */ + public interface ScrollToTop { + void scrollToTop(); + } + public final class ScrollRequestBuilder { private final int position;