diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt index 2de1d93c69..f1b5cc824c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt @@ -1084,14 +1084,25 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat values.putNull(ORIGINAL_MESSAGE_ID) } - val messageId = writableDatabase.insert(TABLE_NAME, null, values) - if (messageId < 0) { - Log.w(TAG, "Failed to insert text message (${message.sentTimestampMillis}, ${message.authorId}, ThreadId::$threadId)! Likely a duplicate.") - return Optional.empty() - } + writableDatabase.beginTransaction() + val messageId: Long + try { + messageId = writableDatabase.insert(TABLE_NAME, null, values) + if (messageId < 0) { + Log.w(TAG, "Failed to insert text message (${message.sentTimestampMillis}, ${message.authorId}, ThreadId::$threadId)! Likely a duplicate.") + return Optional.empty() + } - if (unread && editedMessage == null) { - threads.incrementUnread(threadId, 1, 0) + if (unread && editedMessage == null) { + threads.incrementUnread(threadId, 1, 0) + } + + if (message.subscriptionId != -1) { + recipients.setDefaultSubscriptionId(recipient.id, message.subscriptionId) + } + writableDatabase.setTransactionSuccessful() + } finally { + writableDatabase.endTransaction() } if (!silent) { @@ -1099,10 +1110,6 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat TrimThreadJob.enqueueAsync(threadId) } - if (message.subscriptionId != -1) { - recipients.setDefaultSubscriptionId(recipient.id, message.subscriptionId) - } - if (notifyObservers) { notifyConversationListeners(threadId) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt index 426156cd08..f7a7a735d1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt @@ -1386,8 +1386,8 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa val meaningfulMessages = messages.hasMeaningfulMessage(threadId) - val isPinned = getPinnedThreadIds().contains(threadId) - val shouldDelete = allowDeletion && !isPinned && !messages.containsStories(threadId) + val isPinned by lazy { getPinnedThreadIds().contains(threadId) } + val shouldDelete by lazy { allowDeletion && !isPinned && !messages.containsStories(threadId) } if (!meaningfulMessages) { if (shouldDelete) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java index 1dcc3edb71..a12497abf1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java @@ -888,10 +888,10 @@ public class Recipient { } public boolean isUnknownGroup() { - boolean noMetadata = (groupAvatarId.isEmpty() || groupAvatarId.get() == - 1) && (groupName == null || groupName.isEmpty()); - boolean noMembers = participantIds.isEmpty() || (participantIds.size() == 1 && participantIds.contains(Recipient.self().id)); - - return noMetadata && noMembers; + if ((groupAvatarId.isPresent() && groupAvatarId.get() != - 1) || (groupName != null && !groupName.isEmpty())) { + return false; + } + return participantIds.isEmpty() || (participantIds.size() == 1 && participantIds.contains(Recipient.self().id)); } public boolean isInactiveGroup() {