Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions app/src/main/java/org/thunderdog/challegram/data/TGChat.java
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@
import tgx.td.TdExt;

public class TGChat implements TdlibStatusManager.HelperTarget, ContentPreview.RefreshCallback, Counter.Callback, ReactionLoadListener, Destroyable, TdlibUi.MessageProvider {
private static final int ARCHIVE_PREVIEW_CHAT_LIMIT = 3;

private static final int FLAG_HAS_PREFIX = 1;
private static final int FLAG_TEXT_DRAFT = 1 << 4;
private static final int FLAG_SHOW_VERIFY = 1 << 5;
Expand Down Expand Up @@ -1308,7 +1310,11 @@ public void setText () {
if (isArchive()) {
List<TextEntity> entities = new ArrayList<>();
StringBuilder b = new StringBuilder();
final int[] addedChatCount = new int[1];
archive.iterate(chat -> {
if (addedChatCount[0] >= ARCHIVE_PREVIEW_CHAT_LIMIT) {
return;
}
if (b.length() > 0) {
b.append(Lang.getConcatSeparator());
}
Expand All @@ -1319,6 +1325,7 @@ public void setText () {
.setCustomColorSet(TextColorSets.Regular.NORMAL)
);
}
addedChatCount[0]++;
});
if (b.length() == 0) {
b.append(Lang.pluralBold(R.string.xChats, archive.totalCount()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -687,7 +687,7 @@ public void onChatListChanged (TdlibChatList chatList, @ChangeFlags int changeFl
if (BitwiseUtils.setFlag(changeFlags, ChangeFlags.ITEM_METADATA_CHANGED, false) != 0) {
runOnUiThreadOptional(() -> {
adapter.setNeedArchive(chatList.totalCount() > 0);
adapter.updateArchive(ChatsAdapter.ARCHIVE_UPDATE_ALL);
scheduleArchiveUpdate(ChatsAdapter.ARCHIVE_UPDATE_ALL);
});
}
}
Expand All @@ -710,9 +710,7 @@ public void onChatListItemChanged (TdlibChatList chatList, TdApi.Chat chat, @Ite
default:
return;
}
runOnUiThreadOptional(() ->
adapter.updateArchive(reason)
);
scheduleArchiveUpdate(reason);
}
};
adapter.setNeedArchive(archiveList.totalCount() > 0);
Expand Down Expand Up @@ -778,9 +776,37 @@ private void displayChats (List<TdlibChatListSlice.Entry> entries) {
private boolean hideArchive, archiveCollapsed;
private TdlibChatList archiveList;
private ChatListListener archiveListListener;
private int pendingArchiveUpdateReason = -1;
private boolean archiveUpdateScheduled;

private int chatScrollState = RecyclerView.SCROLL_STATE_IDLE;

private int mergeArchiveUpdateReason (int currentReason, int newReason) {
if (currentReason == -1) {
return newReason;
}
if (currentReason == newReason) {
return currentReason;
}
return ChatsAdapter.ARCHIVE_UPDATE_ALL;
}

private void scheduleArchiveUpdate (int reason) {
pendingArchiveUpdateReason = mergeArchiveUpdateReason(pendingArchiveUpdateReason, reason);
if (archiveUpdateScheduled) {
return;
}
archiveUpdateScheduled = true;
runOnUiThreadOptional(() -> {
archiveUpdateScheduled = false;
int pendingReason = pendingArchiveUpdateReason;
pendingArchiveUpdateReason = -1;
if (pendingReason != -1 && adapter != null) {
adapter.updateArchive(pendingReason);
}
});
}

public boolean isPullingArchive () {
if (!hideArchive || adapter == null || !adapter.hasArchive())
return false;
Expand Down