From 93f37ad70f81a95b771d38b9fce2059eb89d9e63 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 17 Jun 2021 10:51:09 -0400 Subject: [PATCH] Reduce fetches when you open a conversation. --- .../conversation/ConversationDataSource.java | 2 ++ .../thoughtcrime/securesms/database/Database.java | 8 ++++++++ .../securesms/database/DatabaseObserver.java | 12 ++++++++++++ .../thoughtcrime/securesms/database/SmsDatabase.java | 9 ++++++--- .../securesms/database/ThreadDatabase.java | 2 +- 5 files changed, 29 insertions(+), 4 deletions(-) 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 d0abcc025..f6f7d5149 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 f2ffb2ec0..10f1f2021 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 62598d68f..f27dcd73d 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 5ae3603e8..7d7624d1c 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 aff252b10..1a1a1da4f 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) {