mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 18:59:06 +01:00
Remove auto-deleted messages immediately from conversation
This commit is contained in:
@@ -63,6 +63,7 @@ import org.briarproject.briar.android.view.TextSendController;
|
||||
import org.briarproject.briar.android.view.TextSendController.SendState;
|
||||
import org.briarproject.briar.api.android.AndroidNotificationManager;
|
||||
import org.briarproject.briar.api.attachment.AttachmentHeader;
|
||||
import org.briarproject.briar.api.autodelete.event.ConversationMessagesDeletedEvent;
|
||||
import org.briarproject.briar.api.blog.BlogSharingManager;
|
||||
import org.briarproject.briar.api.client.ProtocolStateException;
|
||||
import org.briarproject.briar.api.client.SessionId;
|
||||
@@ -671,6 +672,13 @@ public class ConversationActivity extends BriarActivity
|
||||
LOG.info("Messages acked");
|
||||
markMessages(m.getMessageIds(), true, true);
|
||||
}
|
||||
} else if (e instanceof ConversationMessagesDeletedEvent) {
|
||||
ConversationMessagesDeletedEvent m =
|
||||
(ConversationMessagesDeletedEvent) e;
|
||||
if (m.getContactId().equals(contactId)) {
|
||||
LOG.info("Messages auto-deleted");
|
||||
onConversationMessagesDeleted(m.getMessageIds());
|
||||
}
|
||||
} else if (e instanceof ContactConnectedEvent) {
|
||||
ContactConnectedEvent c = (ContactConnectedEvent) e;
|
||||
if (c.getContactId().equals(contactId)) {
|
||||
@@ -718,6 +726,13 @@ public class ConversationActivity extends BriarActivity
|
||||
}
|
||||
}
|
||||
|
||||
@UiThread
|
||||
private void onConversationMessagesDeleted(
|
||||
Collection<MessageId> messageIds) {
|
||||
adapter.incrementRevision();
|
||||
adapter.removeItems(messageIds);
|
||||
}
|
||||
|
||||
@UiThread
|
||||
private void markMessages(Collection<MessageId> messageIds, boolean sent,
|
||||
boolean seen) {
|
||||
|
||||
@@ -13,10 +13,13 @@ import org.briarproject.briar.R;
|
||||
import org.briarproject.briar.android.util.BriarAdapter;
|
||||
import org.briarproject.briar.android.util.ItemReturningAdapter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import androidx.annotation.LayoutRes;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.UiThread;
|
||||
import androidx.recyclerview.selection.SelectionTracker;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView.RecycledViewPool;
|
||||
@@ -126,6 +129,22 @@ class ConversationAdapter
|
||||
items.endBatchedUpdates();
|
||||
}
|
||||
|
||||
@UiThread
|
||||
void removeItems(Collection<MessageId> messageIds) {
|
||||
// Collect all items to be deleted first
|
||||
// and then delete them in one batched update.
|
||||
// Deleting them right away would cause issues
|
||||
// due to changing list positions.
|
||||
List<ConversationItem> toRemove = new ArrayList<>(messageIds.size());
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
ConversationItem item = items.get(i);
|
||||
if (messageIds.contains(item.getId())) toRemove.add(item);
|
||||
}
|
||||
items.beginBatchedUpdates();
|
||||
for (ConversationItem item : toRemove) items.remove(item);
|
||||
items.endBatchedUpdates();
|
||||
}
|
||||
|
||||
private void updateTimersInBatch() {
|
||||
long lastTimerIncoming = NO_AUTO_DELETE_TIMER;
|
||||
long lastTimerOutgoing = NO_AUTO_DELETE_TIMER;
|
||||
|
||||
Reference in New Issue
Block a user