From 0db73e71a05a28912777ff6382013002b1b0ae2d Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 31 Jul 2020 14:26:31 -0300 Subject: [PATCH] Remove sticky header on list reinitailization. When we forward a message or share into the app, it is possible that we are going to reuse the same activity. In this case, when the adapter was reinitialized, we were just adding a new ItemDecoration every time. This fix checks if we've already added one and removes it if necessary, just like the last seen decorator. --- .../securesms/conversation/ConversationFragment.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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 088dd913d7..10c6b61b79 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -153,6 +153,7 @@ public class ConversationFragment extends LoggingFragment { private Locale locale; private RecyclerView list; private RecyclerView.ItemDecoration lastSeenDecoration; + private RecyclerView.ItemDecoration stickyHeaderDecoration; private ViewSwitcher topLoadMoreView; private ViewSwitcher bottomLoadMoreView; private ConversationTypingView typingView; @@ -435,7 +436,7 @@ public class ConversationFragment extends LoggingFragment { Log.d(TAG, "Initializing adapter for " + recipient.getId()); ConversationAdapter adapter = new ConversationAdapter(GlideApp.with(this), locale, selectionClickListener, this.recipient.get()); list.setAdapter(adapter); - list.addItemDecoration(new StickyHeaderDecoration(adapter, false, false)); + setStickyHeaderDecoration(adapter); ConversationAdapter.initializePool(list.getRecycledViewPool()); adapter.registerAdapterDataObserver(snapToTopDataObserver); @@ -573,6 +574,15 @@ public class ConversationFragment extends LoggingFragment { } } + public void setStickyHeaderDecoration(@NonNull ConversationAdapter adapter) { + if (stickyHeaderDecoration != null) { + list.removeItemDecoration(stickyHeaderDecoration); + } + + stickyHeaderDecoration = new StickyHeaderDecoration(adapter, false, false); + list.addItemDecoration(stickyHeaderDecoration); + } + public void setLastSeen(long lastSeen) { if (lastSeenDecoration != null) { list.removeItemDecoration(lastSeenDecoration);