From 1ec3a72f79ee24e2fbd66fa08fa48ee24d2576c9 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Mon, 3 Aug 2020 10:36:02 -0400 Subject: [PATCH] Fix issue with thread summaries being updated after message deletion. Fixes #9902 --- .../conversationlist/ConversationListItem.java | 2 ++ .../securesms/database/RecipientDatabase.java | 2 +- .../thoughtcrime/securesms/database/SmsDatabase.java | 2 +- .../securesms/database/ThreadDatabase.java | 10 +++++----- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java index 22048b9ea..538f9a25a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java @@ -464,6 +464,8 @@ public final class ConversationListItem extends RelativeLayout return emphasisAdded(context.getString(R.string.ThreadRecord_you_marked_unverified)); } else if (SmsDatabase.Types.isUnsupportedMessageType(thread.getType())) { return emphasisAdded(context.getString(R.string.ThreadRecord_message_could_not_be_processed)); + } else if (SmsDatabase.Types.isProfileChange(thread.getType())) { + return emphasisAdded(""); } else { ThreadDatabase.Extra extra = thread.getExtra(); if (extra != null && extra.isViewOnce()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java index eaf0634b0..6ac1e95ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java @@ -2282,7 +2282,7 @@ public class RecipientDatabase extends Database { Log.w(TAG, "Had no sessions. No action necessary."); } - DatabaseFactory.getThreadDatabase(context).update(threadMerge.threadId, false, false); + DatabaseFactory.getThreadDatabase(context).update(threadMerge.threadId, false, false, false); return byUuid; } 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 dd0fd4327..c34c36549 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -890,7 +890,7 @@ public class SmsDatabase extends MessagingDatabase { SQLiteDatabase db = databaseHelper.getWritableDatabase(); long threadId = getThreadIdForMessage(messageId); db.delete(TABLE_NAME, ID_WHERE, new String[] {messageId+""}); - boolean threadDeleted = DatabaseFactory.getThreadDatabase(context).update(threadId, false); + boolean threadDeleted = DatabaseFactory.getThreadDatabase(context).update(threadId, false, true, true); notifyConversationListeners(threadId); return threadDeleted; } 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 a2d5cbffa..517800d76 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java @@ -165,7 +165,7 @@ public class ThreadDatabase extends Database { private void updateThread(long threadId, long count, String body, @Nullable Uri attachment, @Nullable String contentType, @Nullable Extra extra, long date, int status, int deliveryReceiptCount, long type, boolean unarchive, - long expiresIn, int readReceiptCount) + long expiresIn, int readReceiptCount, boolean causedByDeletion) { String extraSerialized = null; @@ -178,7 +178,7 @@ public class ThreadDatabase extends Database { } ContentValues contentValues = new ContentValues(); - if (!MmsSmsColumns.Types.isProfileChange(type)) { + if (!MmsSmsColumns.Types.isProfileChange(type) || causedByDeletion) { contentValues.put(DATE, date - date % 1000); contentValues.put(SNIPPET, body); contentValues.put(SNIPPET_URI, attachment == null ? null : attachment.toString()); @@ -814,10 +814,10 @@ public class ThreadDatabase extends Database { } public boolean update(long threadId, boolean unarchive) { - return update(threadId, unarchive, true); + return update(threadId, unarchive, true, false); } - public boolean update(long threadId, boolean unarchive, boolean allowDeletion) { + public boolean update(long threadId, boolean unarchive, boolean allowDeletion, boolean causedByDeletion) { MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context); long count = mmsSmsDatabase.getConversationCount(threadId); @@ -839,7 +839,7 @@ public class ThreadDatabase extends Database { updateThread(threadId, count, ThreadBodyUtil.getFormattedBodyFor(context, record), getAttachmentUriFor(record), getContentTypeFor(record), getExtrasFor(record), record.getTimestamp(), record.getDeliveryStatus(), record.getDeliveryReceiptCount(), - record.getType(), unarchive, record.getExpiresIn(), record.getReadReceiptCount()); + record.getType(), unarchive, record.getExpiresIn(), record.getReadReceiptCount(), causedByDeletion); notifyConversationListListeners(); return false; } else {