From a73427d68dc01eb332498dedc645d21656e3af8c Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 13 Aug 2020 20:09:16 -0300 Subject: [PATCH] Fix issues with conversation list position. --- .../CompositeConversationListAdapter.java | 6 ++--- .../ConversationListAdapter.java | 27 ++++++++----------- .../util/adapter/FixedViewsAdapter.java | 7 ++++- .../RecyclerViewConcatenateAdapter.java | 8 ++++-- 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/CompositeConversationListAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/CompositeConversationListAdapter.java index 58c84b5aa0..db66b49f72 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/CompositeConversationListAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/CompositeConversationListAdapter.java @@ -4,13 +4,11 @@ import android.view.LayoutInflater; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.paging.PagedList; import androidx.recyclerview.widget.RecyclerView; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.conversationlist.model.Conversation; -import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.util.adapter.FixedViewsAdapter; import org.thoughtcrime.securesms.util.adapter.RecyclerViewConcatenateAdapter; @@ -38,9 +36,9 @@ class CompositeConversationListAdapter extends RecyclerViewConcatenateAdapter { unpinned.setText(rv.getContext().getString(R.string.conversation_list__chats)); this.pinnedHeaderAdapter = new FixedViewsAdapter(pinned); - this.pinnedAdapter = new ConversationListAdapter(glideRequests, onConversationClickListener); + this.pinnedAdapter = new ConversationListAdapter(this, glideRequests, onConversationClickListener); this.unpinnedHeaderAdapter = new FixedViewsAdapter(unpinned); - this.unpinnedAdapter = new ConversationListAdapter(glideRequests, onConversationClickListener); + this.unpinnedAdapter = new ConversationListAdapter(this, glideRequests, onConversationClickListener); pinnedHeaderAdapter.hide(); unpinnedHeaderAdapter.hide(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListAdapter.java index eb710a4e6d..d95b71c14b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListAdapter.java @@ -18,6 +18,7 @@ import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.CachedInflater; import org.thoughtcrime.securesms.util.ViewUtil; +import org.thoughtcrime.securesms.util.adapter.RecyclerViewConcatenateAdapter; import java.util.Collection; import java.util.Collections; @@ -47,9 +48,15 @@ class ConversationListAdapter extends PagedListAdapter typingSet = new HashSet<>(); private int archived; - protected ConversationListAdapter(@NonNull GlideRequests glideRequests, @NonNull OnConversationClickListener onConversationClickListener) { + private final RecyclerViewConcatenateAdapter parent; + + protected ConversationListAdapter(@NonNull RecyclerViewConcatenateAdapter parent, + @NonNull GlideRequests glideRequests, + @NonNull OnConversationClickListener onConversationClickListener) + { super(new ConversationDiffCallback()); + this.parent = parent; this.glideRequests = glideRequests; this.onConversationClickListener = onConversationClickListener; } @@ -61,9 +68,7 @@ class ConversationListAdapter extends PagedListAdapter { - int position = holder.getLocalAdapterPosition(); - - if (position != RecyclerView.NO_POSITION) { + if (holder.getAdapterPosition() != RecyclerView.NO_POSITION) { onConversationClickListener.onShowArchiveClick(); } }); @@ -74,7 +79,7 @@ class ConversationListAdapter extends PagedListAdapter { - int position = holder.getLocalAdapterPosition(); + int position = this.parent.getLocalPosition(holder.getAdapterPosition()).getLocalPosition(); if (position != RecyclerView.NO_POSITION) { onConversationClickListener.onConversationClick(getItem(position)); @@ -82,7 +87,7 @@ class ConversationListAdapter extends PagedListAdapter { - int position = holder.getLocalAdapterPosition(); + int position = this.parent.getLocalPosition(holder.getAdapterPosition()).getLocalPosition(); if (position != RecyclerView.NO_POSITION) { return onConversationClickListener.onConversationLongClick(getItem(position)); @@ -121,7 +126,6 @@ class ConversationListAdapter extends PagedListAdapter getAdapter() { return childAdapter.adapter; } + + public int getLocalPosition() { + return localPosition; + } } /** @@ -195,7 +199,7 @@ public class RecyclerViewConcatenateAdapter extends RecyclerView.Adapter