Fix issue with thread summaries being updated after message deletion.

Fixes #9902
master
Greyson Parrelli 2020-08-03 10:36:02 -04:00
parent 566285ec0e
commit 1ec3a72f79
4 changed files with 9 additions and 7 deletions

View File

@ -464,6 +464,8 @@ public final class ConversationListItem extends RelativeLayout
return emphasisAdded(context.getString(R.string.ThreadRecord_you_marked_unverified)); return emphasisAdded(context.getString(R.string.ThreadRecord_you_marked_unverified));
} else if (SmsDatabase.Types.isUnsupportedMessageType(thread.getType())) { } else if (SmsDatabase.Types.isUnsupportedMessageType(thread.getType())) {
return emphasisAdded(context.getString(R.string.ThreadRecord_message_could_not_be_processed)); return emphasisAdded(context.getString(R.string.ThreadRecord_message_could_not_be_processed));
} else if (SmsDatabase.Types.isProfileChange(thread.getType())) {
return emphasisAdded("");
} else { } else {
ThreadDatabase.Extra extra = thread.getExtra(); ThreadDatabase.Extra extra = thread.getExtra();
if (extra != null && extra.isViewOnce()) { if (extra != null && extra.isViewOnce()) {

View File

@ -2282,7 +2282,7 @@ public class RecipientDatabase extends Database {
Log.w(TAG, "Had no sessions. No action necessary."); 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; return byUuid;
} }

View File

@ -890,7 +890,7 @@ public class SmsDatabase extends MessagingDatabase {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getWritableDatabase();
long threadId = getThreadIdForMessage(messageId); long threadId = getThreadIdForMessage(messageId);
db.delete(TABLE_NAME, ID_WHERE, new String[] {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); notifyConversationListeners(threadId);
return threadDeleted; return threadDeleted;
} }

View File

@ -165,7 +165,7 @@ public class ThreadDatabase extends Database {
private void updateThread(long threadId, long count, String body, @Nullable Uri attachment, private void updateThread(long threadId, long count, String body, @Nullable Uri attachment,
@Nullable String contentType, @Nullable Extra extra, @Nullable String contentType, @Nullable Extra extra,
long date, int status, int deliveryReceiptCount, long type, boolean unarchive, long date, int status, int deliveryReceiptCount, long type, boolean unarchive,
long expiresIn, int readReceiptCount) long expiresIn, int readReceiptCount, boolean causedByDeletion)
{ {
String extraSerialized = null; String extraSerialized = null;
@ -178,7 +178,7 @@ public class ThreadDatabase extends Database {
} }
ContentValues contentValues = new ContentValues(); ContentValues contentValues = new ContentValues();
if (!MmsSmsColumns.Types.isProfileChange(type)) { if (!MmsSmsColumns.Types.isProfileChange(type) || causedByDeletion) {
contentValues.put(DATE, date - date % 1000); contentValues.put(DATE, date - date % 1000);
contentValues.put(SNIPPET, body); contentValues.put(SNIPPET, body);
contentValues.put(SNIPPET_URI, attachment == null ? null : attachment.toString()); 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) { 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); MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context);
long count = mmsSmsDatabase.getConversationCount(threadId); long count = mmsSmsDatabase.getConversationCount(threadId);
@ -839,7 +839,7 @@ public class ThreadDatabase extends Database {
updateThread(threadId, count, ThreadBodyUtil.getFormattedBodyFor(context, record), getAttachmentUriFor(record), updateThread(threadId, count, ThreadBodyUtil.getFormattedBodyFor(context, record), getAttachmentUriFor(record),
getContentTypeFor(record), getExtrasFor(record), getContentTypeFor(record), getExtrasFor(record),
record.getTimestamp(), record.getDeliveryStatus(), record.getDeliveryReceiptCount(), record.getTimestamp(), record.getDeliveryStatus(), record.getDeliveryReceiptCount(),
record.getType(), unarchive, record.getExpiresIn(), record.getReadReceiptCount()); record.getType(), unarchive, record.getExpiresIn(), record.getReadReceiptCount(), causedByDeletion);
notifyConversationListListeners(); notifyConversationListListeners();
return false; return false;
} else { } else {