Skip to content

Commit

Permalink
Fix issues with conversation list position.
Browse files Browse the repository at this point in the history
  • Loading branch information
alex-signal authored and greyson-signal committed Aug 14, 2020
1 parent e4456bb commit a73427d
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@
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;
Expand Down Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
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;
Expand Down Expand Up @@ -47,9 +48,15 @@ private enum Payload {
private final Set<Long> 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;
}
Expand All @@ -61,9 +68,7 @@ protected ConversationListAdapter(@NonNull GlideRequests glideRequests, @NonNull
.inflate(R.layout.conversation_list_item_action, parent, false), viewType);

holder.itemView.setOnClickListener(v -> {
int position = holder.getLocalAdapterPosition();

if (position != RecyclerView.NO_POSITION) {
if (holder.getAdapterPosition() != RecyclerView.NO_POSITION) {
onConversationClickListener.onShowArchiveClick();
}
});
Expand All @@ -74,15 +79,15 @@ protected ConversationListAdapter(@NonNull GlideRequests glideRequests, @NonNull
.inflate(R.layout.conversation_list_item_view, parent, false), viewType);

holder.itemView.setOnClickListener(v -> {
int position = holder.getLocalAdapterPosition();
int position = this.parent.getLocalPosition(holder.getAdapterPosition()).getLocalPosition();

if (position != RecyclerView.NO_POSITION) {
onConversationClickListener.onConversationClick(getItem(position));
}
});

holder.itemView.setOnLongClickListener(v -> {
int position = holder.getLocalAdapterPosition();
int position = this.parent.getLocalPosition(holder.getAdapterPosition()).getLocalPosition();

if (position != RecyclerView.NO_POSITION) {
return onConversationClickListener.onConversationLongClick(getItem(position));
Expand Down Expand Up @@ -121,7 +126,6 @@ public void onBindViewHolder(@NonNull BaseViewHolder holder, int position, @NonN

@Override
public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) {
holder.setLocalAdapterPosition(position);
if (holder.getLocalViewType() == TYPE_ACTION) {
ConversationViewHolder casted = (ConversationViewHolder) holder;

Expand Down Expand Up @@ -238,7 +242,6 @@ private void unselectAllThreads() {
static class BaseViewHolder extends RecyclerView.ViewHolder {

private final int viewType;
private int adapterPosition = RecyclerView.NO_POSITION;

public BaseViewHolder(@NonNull View itemView, int viewType) {
super(itemView);
Expand All @@ -248,14 +251,6 @@ public BaseViewHolder(@NonNull View itemView, int viewType) {
public int getLocalViewType() {
return viewType;
}

public int getLocalAdapterPosition() {
return getAdapterPosition() == RecyclerView.NO_POSITION ? RecyclerView.NO_POSITION : adapterPosition;
}

public void setLocalAdapterPosition(int adapterPosition) {
this.adapterPosition = adapterPosition;
}
}

static final class ConversationViewHolder extends BaseViewHolder {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,12 @@ public void show() {
private void setHidden(boolean hidden) {
if (this.hidden != hidden) {
this.hidden = hidden;
notifyDataSetChanged();

if (hidden) {
notifyItemRangeRemoved(0, viewList.size());
} else {
notifyItemRangeInserted(0, viewList.size());
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int glo
}
}

static class ChildAdapterPositionPair {
public static class ChildAdapterPositionPair {

final ChildAdapter childAdapter;
final int localPosition;
Expand All @@ -156,6 +156,10 @@ static class ChildAdapterPositionPair {
RecyclerView.Adapter<? extends RecyclerView.ViewHolder> getAdapter() {
return childAdapter.adapter;
}

public int getLocalPosition() {
return localPosition;
}
}

/**
Expand Down Expand Up @@ -195,7 +199,7 @@ public void clearAdapters() {
* position in that adapter that corresponds to the given global position.
*/
@NonNull
ChildAdapterPositionPair getLocalPosition(final int globalPosition) {
public ChildAdapterPositionPair getLocalPosition(final int globalPosition) {
int count = 0;

for (ChildAdapter childAdapter : adapters) {
Expand Down

0 comments on commit a73427d

Please sign in to comment.