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));
} 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()) {

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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 {