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 d0abcc0258..f6f7d51497 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java @@ -97,6 +97,8 @@ class ConversationDataSource implements PagedDataSource { records = attachmentHelper.buildUpdatedModels(context, records); + stopwatch.split("attachment-models"); + List messages = Stream.of(records) .map(m -> ConversationMessageFactory.createWithUnresolvedData(context, m, mentionHelper.getMentions(m.getId()))) .toList(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/Database.java b/app/src/main/java/org/thoughtcrime/securesms/database/Database.java index f2ffb2ec09..10f1f20216 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/Database.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/Database.java @@ -54,6 +54,14 @@ public abstract class Database { notifyVerboseConversationListeners(threadId); } + protected void notifyVerboseConversationListeners(Set threadIds) { + ApplicationDependencies.getDatabaseObserver().notifyVerboseConversationListeners(threadIds); + + for (long threadId : threadIds) { + notifyVerboseConversationListeners(threadId); + } + } + protected void notifyVerboseConversationListeners(long threadId) { ApplicationDependencies.getDatabaseObserver().notifyVerboseConversationListeners(threadId); context.getContentResolver().notifyChange(DatabaseContentProviders.Conversation.getVerboseUriForThread(threadId), null); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseObserver.java b/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseObserver.java index 62598d68f6..f27dcd73df 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseObserver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseObserver.java @@ -112,6 +112,18 @@ public final class DatabaseObserver { application.getContentResolver().notifyChange(DatabaseContentProviders.Conversation.getVerboseUriForThread(threadId), null); } + public void notifyVerboseConversationListeners(Set threadIds) { + executor.execute(() -> { + for (long threadId : threadIds) { + notifyMapped(verboseConversationObservers, threadId); + } + }); + + for (long threadId : threadIds) { + application.getContentResolver().notifyChange(DatabaseContentProviders.Conversation.getVerboseUriForThread(threadId), null); + } + } + public void notifyVerboseConversationListeners(long threadId) { executor.execute(() -> { notifyMapped(verboseConversationObservers, threadId); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java index 5ae3603e8d..7d7624d1c4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -886,10 +886,13 @@ public class SmsDatabase extends MessageDatabase { contentValues.put(READ, 1); } - db.update(TABLE_NAME, contentValues, ID_WHERE, SqlUtil.buildArgs(record.getId())); - } + SqlUtil.Query query = SqlUtil.buildTrueUpdateQuery(ID_WHERE, SqlUtil.buildArgs(record.getId()), contentValues); + boolean updated = db.update(TABLE_NAME, contentValues, query.getWhere(), query.getWhereArgs()) > 0; - notifyConversationListeners(threadId); + if (updated) { + notifyConversationListeners(threadId); + } + } return sameEraId; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java index aff252b10a..1a1a1da4fb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java @@ -430,7 +430,7 @@ public class ThreadDatabase extends Database { db.endTransaction(); } - notifyConversationListeners(threadIdToSinceTimestamp.keySet()); + notifyVerboseConversationListeners(threadIdToSinceTimestamp.keySet()); notifyConversationListListeners(); if (needsSync) {