diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java index 6d8faef479..40cc00f763 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java @@ -65,10 +65,6 @@ class ConversationDataSource extends PositionalDataSource { int totalCount = db.getConversationCount(threadId); int effectiveCount = params.requestedStartPosition; - if (totalCount == 0 || params.requestedStartPosition > totalCount) { - - } - try (MmsSmsDatabase.Reader reader = db.readerFor(db.getConversation(threadId, params.requestedStartPosition, params.requestedLoadSize))) { MessageRecord record; while ((record = reader.getNext()) != null && effectiveCount < totalCount && !isInvalid()) { @@ -83,7 +79,7 @@ class ConversationDataSource extends PositionalDataSource { callback.onResult(result.getItems(), params.requestedStartPosition, result.getTotal()); } - Log.d(TAG, "[Initial Load] " + (System.currentTimeMillis() - start) + " ms" + (isInvalid() ? " -- invalidated" : "")); + Log.d(TAG, "[Initial Load] " + (System.currentTimeMillis() - start) + " ms | thread: " + threadId + ", start: " + params.requestedStartPosition + ", size: " + params.requestedLoadSize + (isInvalid() ? " -- invalidated" : "")); } @Override @@ -102,7 +98,7 @@ class ConversationDataSource extends PositionalDataSource { callback.onResult(records); - Log.d(TAG, "[Update] " + (System.currentTimeMillis() - start) + " ms" + (isInvalid() ? " -- invalidated" : "")); + Log.d(TAG, "[Update] " + (System.currentTimeMillis() - start) + " ms | thread: " + threadId + ", start: " + params.startPosition + ", size: " + params.loadSize + (isInvalid() ? " -- invalidated" : "")); } static class Factory extends DataSource.Factory { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationPagedListAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListAdapter.java similarity index 74% rename from app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationPagedListAdapter.java rename to app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListAdapter.java index 2ae421bd5f..ce0f5c6a17 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationPagedListAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListAdapter.java @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.conversationlist; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.paging.PagedListAdapter; @@ -16,7 +17,7 @@ import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.CachedInflater; -import org.thoughtcrime.securesms.util.Stopwatch; +import org.thoughtcrime.securesms.util.ViewUtil; import java.util.Collection; import java.util.Collections; @@ -28,7 +29,11 @@ import java.util.Map; import java.util.Objects; import java.util.Set; -class ConversationPagedListAdapter extends PagedListAdapter { +class ConversationListAdapter extends PagedListAdapter { + + private static final int TYPE_THREAD = 1; + private static final int TYPE_ACTION = 2; + private static final int TYPE_PLACEHOLDER = 3; private enum Payload { TYPING_INDICATOR, @@ -42,7 +47,7 @@ class ConversationPagedListAdapter extends PagedListAdapter typingSet = new HashSet<>(); private int archived; - protected ConversationPagedListAdapter(@NonNull GlideRequests glideRequests, @NonNull OnConversationClickListener onConversationClickListener) { + protected ConversationListAdapter(@NonNull GlideRequests glideRequests, @NonNull OnConversationClickListener onConversationClickListener) { super(new ConversationDiffCallback()); this.glideRequests = glideRequests; @@ -50,10 +55,10 @@ class ConversationPagedListAdapter extends PagedListAdapter { int position = holder.getAdapterPosition(); @@ -64,9 +69,9 @@ class ConversationPagedListAdapter extends PagedListAdapter { int position = holder.getAdapterPosition(); @@ -86,11 +91,17 @@ class ConversationPagedListAdapter extends PagedListAdapter payloads) { + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, @NonNull List payloads) { if (payloads.isEmpty()) { onBindViewHolder(holder, position); } else { @@ -99,9 +110,9 @@ class ConversationPagedListAdapter extends PagedListAdapter typingThreadSet) { @@ -184,9 +200,11 @@ class ConversationPagedListAdapter extends PagedListAdapter 0 && position == getItemCount() - 1) { - return R.layout.conversation_list_item_action; + return TYPE_ACTION; + } else if (getItem(position) == null) { + return TYPE_PLACEHOLDER; } else { - return R.layout.conversation_list_item_view; + return TYPE_THREAD; } } @@ -244,6 +262,12 @@ class ConversationPagedListAdapter extends PagedListAdapter(factory, config).setFetchExecutor(ConversationListDataSource.EXECUTOR)