From 3850c9c89d3d3df95aaea0f5e5d521224e9d823f Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 14 Dec 2022 21:45:52 -0500 Subject: [PATCH] Remove isMms from MessageId. --- .../securesms/backup/FullBackupExporter.java | 2 +- .../gifts/viewgift/ViewGiftRepository.kt | 2 +- .../voice/VoiceNotePlaybackService.java | 2 +- .../conversation/ConversationDataSource.java | 24 ++++------- .../conversation/ConversationFragment.java | 2 +- .../ConversationParentFragment.java | 6 +-- .../quotes/MessageQuotesBottomSheet.kt | 2 +- .../quotes/MessageQuotesRepository.kt | 6 +-- .../database/MessageSendLogTables.kt | 5 +-- .../securesms/database/MessageTable.java | 41 +++++++++---------- .../securesms/database/MmsSmsTable.java | 16 ++------ .../securesms/database/ReactionTable.kt | 31 ++++++-------- .../securesms/database/StorySendTable.kt | 2 +- .../securesms/database/model/MessageId.kt | 29 +++---------- .../securesms/database/model/ParentStoryId.kt | 2 +- .../exporter/SignalSmsExportReader.kt | 4 +- .../jobs/PushDistributionListSendJob.java | 2 +- .../securesms/jobs/PushGroupSendJob.java | 6 +-- .../securesms/jobs/PushMediaSendJob.java | 4 +- .../securesms/jobs/ReactionSendJob.java | 17 ++------ .../securesms/jobs/RemoteDeleteSendJob.java | 2 +- .../MessageDetailsRepository.java | 6 +-- .../messagedetails/MessageRecordLiveData.java | 7 +--- .../messages/MessageContentProcessor.java | 31 ++++++-------- .../v2/NotificationStateProvider.kt | 2 +- .../v2/NotificationThumbnails.kt | 4 +- .../ReactionsBottomSheetDialogFragment.java | 2 +- .../any/ReactWithAnyEmojiViewModel.java | 4 +- .../safety/SafetyNumberBottomSheet.kt | 2 +- .../stories/viewer/info/StoryInfoViewModel.kt | 2 +- .../viewer/page/StoryViewerPageRepository.kt | 4 +- .../stories/viewer/reply/group/ReplyBody.kt | 2 +- .../notifications/MarkReadReceiverTest.java | 2 +- 33 files changed, 103 insertions(+), 172 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java index 3830b3c90..292555ae3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java @@ -173,7 +173,7 @@ public class FullBackupExporter extends FullBackupBase { if (table.equals(MessageTable.TABLE_NAME)) { count = exportTable(table, input, outputStream, FullBackupExporter::isNonExpiringMmsMessage, null, count, estimatedCount, cancellationSignal); } else if (table.equals(ReactionTable.TABLE_NAME)) { - count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMessage(input, new MessageId(CursorUtil.requireLong(cursor, ReactionTable.MESSAGE_ID), CursorUtil.requireBoolean(cursor, ReactionTable.IS_MMS))), null, count, estimatedCount, cancellationSignal); + count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMessage(input, new MessageId(CursorUtil.requireLong(cursor, ReactionTable.MESSAGE_ID))), null, count, estimatedCount, cancellationSignal); } else if (table.equals(MentionTable.TABLE_NAME)) { count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMmsMessage(input, CursorUtil.requireLong(cursor, MentionTable.MESSAGE_ID)), null, count, estimatedCount, cancellationSignal); } else if (table.equals(GroupReceiptTable.TABLE_NAME)) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/viewgift/ViewGiftRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/viewgift/ViewGiftRepository.kt index 9a3260952..06c423816 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/viewgift/ViewGiftRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/viewgift/ViewGiftRepository.kt @@ -40,7 +40,7 @@ class ViewGiftRepository { } val messageObserver = DatabaseObserver.MessageObserver { - if (it.mms && messageId == it.id) { + if (messageId == it.id) { refresh() } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService.java b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService.java index 1a97839a6..b9a17ec69 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService.java @@ -264,7 +264,7 @@ public class VoiceNotePlaybackService extends MediaBrowserServiceCompat { ApplicationDependencies.getJobManager().add(new SendViewedReceiptJob(markedMessageInfo.getThreadId(), recipientId, markedMessageInfo.getSyncMessageId().getTimetamp(), - new MessageId(messageId, true))); + new MessageId(messageId))); MultiDeviceViewedUpdateJob.enqueue(Collections.singletonList(markedMessageInfo.getSyncMessageId())); } }); 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 23f1512fd..f5de0d0f1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java @@ -167,8 +167,7 @@ public class ConversationDataSource implements PagedDataSource mentions; - if (messageId.isMms()) { - mentions = SignalDatabase.mentions().getMentionsForMessage(messageId.getId()); - } else { - mentions = Collections.emptyList(); - } + List mentions = SignalDatabase.mentions().getMentionsForMessage(messageId.getId()); stopwatch.split("mentions"); @@ -194,11 +188,9 @@ public class ConversationDataSource implements PagedDataSource attachments = SignalDatabase.attachments().getAttachmentsForMessage(messageId.getId()); - if (attachments.size() > 0) { - record = ((MediaMmsMessageRecord) record).withAttachments(context, attachments); - } + List attachments = SignalDatabase.attachments().getAttachmentsForMessage(messageId.getId()); + if (attachments.size() > 0) { + record = ((MediaMmsMessageRecord) record).withAttachments(context, attachments); } stopwatch.split("attachments"); @@ -220,7 +212,7 @@ public class ConversationDataSource implements PagedDataSource> messageIdToReactions = new HashMap<>(); public void add(MessageRecord record) { - messageIds.add(new MessageId(record.getId(), record.isMms())); + messageIds.add(new MessageId(record.getId())); } public void addAll(List records) { @@ -297,7 +289,7 @@ public class ConversationDataSource implements PagedDataSource buildUpdatedModels(@NonNull List records) { return records.stream() .map(record -> { - MessageId messageId = new MessageId(record.getId(), record.isMms()); + MessageId messageId = new MessageId(record.getId()); List reactions = messageIdToReactions.get(messageId); return recordWithReactions(record, reactions); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index 324265571..9e70c0212 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -1758,7 +1758,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect if (getContext() != null && getActivity() != null) { MessageQuotesBottomSheet.show( getChildFragmentManager(), - new MessageId(messageRecord.getId(), messageRecord.isMms()), + new MessageId(messageRecord.getId()), recipient.getId() ); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java index 599765bf9..bb3045ad6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java @@ -2502,9 +2502,9 @@ public class ConversationParentFragment extends Fragment .orElse(null); if (oldRecord != null && oldRecord.getEmoji().equals(emoji)) { - MessageSender.sendReactionRemoval(context, new MessageId(messageRecord.getId(), messageRecord.isMms()), oldRecord); + MessageSender.sendReactionRemoval(context, new MessageId(messageRecord.getId()), oldRecord); } else { - MessageSender.sendNewReaction(context, new MessageId(messageRecord.getId(), messageRecord.isMms()), emoji); + MessageSender.sendNewReaction(context, new MessageId(messageRecord.getId()), emoji); } }); } @@ -2522,7 +2522,7 @@ public class ConversationParentFragment extends Fragment reactionDelegate.hide(); SignalExecutors.BOUNDED.execute(() -> MessageSender.sendReactionRemoval(context, - new MessageId(messageRecord.getId(), messageRecord.isMms()), + new MessageId(messageRecord.getId()), oldRecord)); } else { reactionDelegate.hideForReactWithAny(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/quotes/MessageQuotesBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/quotes/MessageQuotesBottomSheet.kt index 51e2253ad..efac5aa80 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/quotes/MessageQuotesBottomSheet.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/quotes/MessageQuotesBottomSheet.kt @@ -96,7 +96,7 @@ class MessageQuotesBottomSheet : FixedRoundedCornerBottomSheetDialogFragment() { messageAdapter.submitList(messages) { if (firstRender) { val targetMessageId = MessageId.deserialize(arguments?.getString(KEY_MESSAGE_ID, null) ?: throw IllegalArgumentException()) - val targetMessagePosition = messages.indexOfFirst { it.messageRecord.id == targetMessageId.id && it.messageRecord.isMms == targetMessageId.mms } + val targetMessagePosition = messages.indexOfFirst { it.messageRecord.id == targetMessageId.id } (list.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(targetMessagePosition, 100) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/quotes/MessageQuotesRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/quotes/MessageQuotesRepository.kt index fb1894a96..fe84fe79b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/quotes/MessageQuotesRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/quotes/MessageQuotesRepository.kt @@ -48,11 +48,7 @@ class MessageQuotesRepository { private fun getMessagesInQuoteChainSync(application: Application, messageId: MessageId): List { val rootMessageId: MessageId = SignalDatabase.mmsSms.getRootOfQuoteChain(messageId) - var originalRecord: MessageRecord? = if (rootMessageId.mms) { - SignalDatabase.messages.getMessageRecordOrNull(rootMessageId.id) - } else { - SignalDatabase.messages.getMessageRecordOrNull(rootMessageId.id) - } + var originalRecord: MessageRecord? = SignalDatabase.messages.getMessageRecordOrNull(rootMessageId.id) if (originalRecord == null) { return emptyList() diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageSendLogTables.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MessageSendLogTables.kt index 3df4d934b..8d91a46f9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageSendLogTables.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageSendLogTables.kt @@ -259,7 +259,7 @@ class MessageSendLogTables constructor(context: Context?, databaseHelper: Signal messageValues += ContentValues().apply { put(MessageTable.PAYLOAD_ID, payloadId) put(MessageTable.MESSAGE_ID, messageId.id) - put(MessageTable.IS_MMS, if (messageId.mms) 1 else 0) + put(MessageTable.IS_MMS, 0) } } SqlUtil.buildBulkInsert(MessageTable.TABLE_NAME, arrayOf(MessageTable.PAYLOAD_ID, MessageTable.MESSAGE_ID, MessageTable.IS_MMS), messageValues) @@ -292,8 +292,7 @@ class MessageSendLogTables constructor(context: Context?, databaseHelper: Signal while (messageCursor.moveToNext()) { messageIds.add( MessageId( - id = CursorUtil.requireLong(messageCursor, MessageTable.MESSAGE_ID), - mms = CursorUtil.requireBoolean(messageCursor, MessageTable.IS_MMS) + id = CursorUtil.requireLong(messageCursor, MessageTable.MESSAGE_ID) ) ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java index a4d841a46..2e957be8b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java @@ -454,7 +454,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi db.endTransaction(); } - ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(id, false)); + ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(id)); ApplicationDependencies.getDatabaseObserver().notifyConversationListListeners(); } @@ -498,7 +498,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi SyncMessageId syncMessageId = new SyncMessageId(recipientId, dateSent); StoryType storyType = StoryType.fromCode(CursorUtil.requireInt(cursor, STORY_TYPE)); - results.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId, true), null)); + results.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId), null)); } return results; @@ -536,7 +536,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi long dateSent = CursorUtil.requireLong(cursor, DATE_SENT); SyncMessageId syncMessageId = new SyncMessageId(recipientId, dateSent); - results.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId, true), null)); + results.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId), null)); ContentValues contentValues = new ContentValues(); contentValues.put(VIEWED_RECEIPT_COUNT, 1); @@ -575,7 +575,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi SyncMessageId syncMessageId = new SyncMessageId(recipientId, dateSent); StoryType storyType = StoryType.fromCode(CursorUtil.requireInt(cursor, STORY_TYPE)); - results.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId, true), null)); + results.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId), null)); ContentValues contentValues = new ContentValues(); contentValues.put(VIEWED_RECEIPT_COUNT, 1); @@ -1327,7 +1327,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi RecipientId rowRecipientId = RecipientId.from(cursor.getLong(cursor.getColumnIndexOrThrow(RECIPIENT_ID))); if (Recipient.self().getId().equals(authorId) || rowRecipientId.equals(authorId)) { - return new MessageId(CursorUtil.requireLong(cursor, ID), true); + return new MessageId(CursorUtil.requireLong(cursor, ID)); } } } @@ -1700,7 +1700,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi SignalDatabase.groupReceipts().update(ourRecipientId, id, status, timestamp); - messageUpdates.add(new MessageUpdate(threadId, new MessageId(id, true))); + messageUpdates.add(new MessageUpdate(threadId, new MessageId(id))); } } } @@ -1855,13 +1855,13 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi public void markAsForcedSms(long messageId) { long threadId = getThreadIdForMessage(messageId); updateMailboxBitmask(messageId, Types.PUSH_MESSAGE_BIT, Types.MESSAGE_FORCE_SMS_BIT, Optional.of(threadId)); - ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true)); + ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId)); } public void markAsRateLimited(long messageId) { long threadId = getThreadIdForMessage(messageId); updateMailboxBitmask(messageId, 0, Types.MESSAGE_RATE_LIMITED_BIT, Optional.of(threadId)); - ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true)); + ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId)); } public void clearRateLimitStatus(@NonNull Collection ids) { @@ -1883,27 +1883,27 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi public void markAsPendingInsecureSmsFallback(long messageId) { long threadId = getThreadIdForMessage(messageId); updateMailboxBitmask(messageId, Types.BASE_TYPE_MASK, Types.BASE_PENDING_INSECURE_SMS_FALLBACK, Optional.of(threadId)); - ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true)); + ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId)); } public void markAsSending(long messageId) { long threadId = getThreadIdForMessage(messageId); updateMailboxBitmask(messageId, Types.BASE_TYPE_MASK, Types.BASE_SENDING_TYPE, Optional.of(threadId)); - ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true)); + ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId)); ApplicationDependencies.getDatabaseObserver().notifyConversationListListeners(); } public void markAsSentFailed(long messageId) { long threadId = getThreadIdForMessage(messageId); updateMailboxBitmask(messageId, Types.BASE_TYPE_MASK, Types.BASE_SENT_FAILED_TYPE, Optional.of(threadId)); - ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true)); + ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId)); ApplicationDependencies.getDatabaseObserver().notifyConversationListListeners(); } public void markAsSent(long messageId, boolean secure) { long threadId = getThreadIdForMessage(messageId); updateMailboxBitmask(messageId, Types.BASE_TYPE_MASK, Types.BASE_SENT_TYPE | (secure ? Types.PUSH_MESSAGE_BIT | Types.SECURE_MESSAGE_BIT : 0), Optional.of(threadId)); - ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true)); + ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId)); ApplicationDependencies.getDatabaseObserver().notifyConversationListListeners(); } @@ -1930,7 +1930,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi deletedAttachments = SignalDatabase.attachments().deleteAttachmentsForMessage(messageId); SignalDatabase.mentions().deleteMentionsForMessage(messageId); SignalDatabase.messageLog().deleteAllRelatedToMessage(messageId, true); - SignalDatabase.reactions().deleteReactions(new MessageId(messageId, true)); + SignalDatabase.reactions().deleteReactions(new MessageId(messageId)); deleteGroupStoryReplies(messageId); disassociateStoryQuotes(messageId); @@ -1942,7 +1942,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi db.endTransaction(); } - ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true)); + ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId)); ApplicationDependencies.getDatabaseObserver().notifyConversationListListeners(); if (deletedAttachments) { @@ -1956,7 +1956,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi contentValues.put(MMS_STATUS, state); database.update(TABLE_NAME, contentValues, ID_WHERE, new String[] {messageId + ""}); - ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true)); + ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId)); } public void markAsInsecure(long messageId) { @@ -2035,7 +2035,6 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi public @NonNull List getStoryTypes(@NonNull List messageIds) { List mmsMessages = messageIds.stream() - .filter(MessageId::isMms) .map(MessageId::getId) .collect(java.util.stream.Collectors.toList()); @@ -2056,7 +2055,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi } return messageIds.stream().map(id -> { - if (id.isMms() && storyTypes.containsKey(id.getId())) { + if (storyTypes.containsKey(id.getId())) { return storyTypes.get(id.getId()); } else { return StoryType.NONE; @@ -2096,7 +2095,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi StoryType storyType = StoryType.fromCode(CursorUtil.requireInt(cursor, STORY_TYPE)); if (!recipientId.equals(releaseChannelId)) { - result.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId, true), expirationInfo)); + result.add(new MarkedMessageInfo(threadId, syncMessageId, new MessageId(messageId), expirationInfo)); } } } @@ -2698,7 +2697,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi } if (updated) { - ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId, true)); + ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(new MessageId(messageId)); notifyConversationListeners(threadId); } } @@ -2863,7 +2862,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi if (!message.getStoryType().isStory()) { if (message.getOutgoingQuote() == null) { - ApplicationDependencies.getDatabaseObserver().notifyMessageInsertObservers(threadId, new MessageId(messageId, true)); + ApplicationDependencies.getDatabaseObserver().notifyMessageInsertObservers(threadId, new MessageId(messageId)); } else { ApplicationDependencies.getDatabaseObserver().notifyConversationListeners(threadId); } @@ -3702,7 +3701,7 @@ public class MessageTable extends DatabaseTable implements MmsSmsColumns, Recipi long id = CursorExtensionsKt.readToSingleLong(cursor, -1); if (id != -1) { - return new MessageId(id, TABLE_NAME.equals(MessageTable.TABLE_NAME)); + return new MessageId(id); } else { return null; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsTable.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsTable.java index 2d9cce15f..469991a10 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsTable.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsTable.java @@ -277,10 +277,6 @@ public class MmsSmsTable extends DatabaseTable { } public MessageId getRootOfQuoteChain(@NonNull MessageId id) { - if (!id.isMms()) { - return id; - } - MmsMessageRecord targetMessage; try { targetMessage = (MmsMessageRecord) SignalDatabase.messages().getMessageRecord(id.getId()); @@ -302,7 +298,7 @@ public class MmsSmsTable extends DatabaseTable { try (Reader reader = new Reader(queryTables(PROJECTION, query, null, "1", false))) { MessageRecord record; if ((record = reader.getNext()) != null) { - return getRootOfQuoteChain(new MessageId(record.getId(), record.isMms())); + return getRootOfQuoteChain(new MessageId(record.getId())); } } @@ -312,7 +308,7 @@ public class MmsSmsTable extends DatabaseTable { public List getAllMessagesThatQuote(@NonNull MessageId id) { MessageRecord targetMessage; try { - targetMessage = id.isMms() ? SignalDatabase.messages().getMessageRecord(id.getId()) : SignalDatabase.messages().getMessageRecord(id.getId()); + targetMessage = SignalDatabase.messages().getMessageRecord(id.getId()); } catch (NoSuchMessageException e) { throw new IllegalArgumentException("Invalid message ID!"); } @@ -327,7 +323,7 @@ public class MmsSmsTable extends DatabaseTable { MessageRecord record; while ((record = reader.getNext()) != null) { records.add(record); - records.addAll(getAllMessagesThatQuote(new MessageId(record.getId(), record.isMms()))); + records.addAll(getAllMessagesThatQuote(new MessageId(record.getId()))); } } @@ -442,11 +438,7 @@ public class MmsSmsTable extends DatabaseTable { } public long getThreadId(MessageId messageId) { - if (messageId.isMms()) { - return SignalDatabase.messages().getThreadIdForMessage(messageId.getId()); - } else { - return SignalDatabase.messages().getThreadIdForMessage(messageId.getId()); - } + return SignalDatabase.messages().getThreadIdForMessage(messageId.getId()); } /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ReactionTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/ReactionTable.kt index 26707bb71..4aeb3c82e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ReactionTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ReactionTable.kt @@ -90,8 +90,7 @@ class ReactionTable(context: Context, databaseHelper: SignalDatabase) : Database while (cursor.moveToNext()) { val reaction: ReactionRecord = readReaction(cursor) val messageId = MessageId( - id = CursorUtil.requireLong(cursor, MESSAGE_ID), - mms = CursorUtil.requireBoolean(cursor, IS_MMS) + id = CursorUtil.requireLong(cursor, MESSAGE_ID) ) var reactionsList: MutableList? = messageIdToReactions[messageId] @@ -114,7 +113,7 @@ class ReactionTable(context: Context, databaseHelper: SignalDatabase) : Database try { val values = ContentValues().apply { put(MESSAGE_ID, messageId.id) - put(IS_MMS, if (messageId.mms) 1 else 0) + put(IS_MMS, 0) put(EMOJI, reaction.emoji) put(AUTHOR_ID, reaction.author.serialize()) put(DATE_SENT, reaction.dateSent) @@ -122,12 +121,7 @@ class ReactionTable(context: Context, databaseHelper: SignalDatabase) : Database } writableDatabase.insert(TABLE_NAME, null, values) - - if (messageId.mms) { - SignalDatabase.messages.updateReactionsUnread(writableDatabase, messageId.id, hasReactions(messageId), false) - } else { - SignalDatabase.messages.updateReactionsUnread(writableDatabase, messageId.id, hasReactions(messageId), false) - } + SignalDatabase.messages.updateReactionsUnread(writableDatabase, messageId.id, hasReactions(messageId), false) writableDatabase.setTransactionSuccessful() } finally { @@ -140,16 +134,12 @@ class ReactionTable(context: Context, databaseHelper: SignalDatabase) : Database fun deleteReaction(messageId: MessageId, recipientId: RecipientId) { writableDatabase.beginTransaction() try { - val query = "$MESSAGE_ID = ? AND $IS_MMS = ? AND $AUTHOR_ID = ?" - val args = SqlUtil.buildArgs(messageId.id, if (messageId.mms) 1 else 0, recipientId) + writableDatabase + .delete(TABLE_NAME) + .where("$MESSAGE_ID = ? AND $AUTHOR_ID = ?", messageId.id, recipientId) + .run() - writableDatabase.delete(TABLE_NAME, query, args) - - if (messageId.mms) { - SignalDatabase.messages.updateReactionsUnread(writableDatabase, messageId.id, hasReactions(messageId), true) - } else { - SignalDatabase.messages.updateReactionsUnread(writableDatabase, messageId.id, hasReactions(messageId), true) - } + SignalDatabase.messages.updateReactionsUnread(writableDatabase, messageId.id, hasReactions(messageId), true) writableDatabase.setTransactionSuccessful() } finally { @@ -160,7 +150,10 @@ class ReactionTable(context: Context, databaseHelper: SignalDatabase) : Database } fun deleteReactions(messageId: MessageId) { - writableDatabase.delete(TABLE_NAME, "$MESSAGE_ID = ? AND $IS_MMS = ?", SqlUtil.buildArgs(messageId.id, if (messageId.mms) 1 else 0)) + writableDatabase + .delete(TABLE_NAME) + .where("$MESSAGE_ID = ?", messageId.id) + .run() } fun hasReaction(messageId: MessageId, reaction: ReactionRecord): Boolean { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/StorySendTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/StorySendTable.kt index 262530663..fd2ae0a26 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/StorySendTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/StorySendTable.kt @@ -184,7 +184,7 @@ class StorySendTable(context: Context, databaseHelper: SignalDatabase) : Databas null ).use { cursor -> while (cursor.moveToNext()) { - messageIds += MessageId(cursor.requireLong(MESSAGE_ID), true) + messageIds += MessageId(cursor.requireLong(MESSAGE_ID)) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageId.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageId.kt index 222d7b0f1..b31ecbdff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageId.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageId.kt @@ -4,31 +4,14 @@ import android.os.Parcelable import kotlinx.parcelize.Parcelize /** - * Represents a pair of values that can be used to find a message. Because we have two tables, - * that means this has both the primary key and a boolean indicating which table it's in. + * Represents the primary key in a [MessageId]. */ @Parcelize data class MessageId( - val id: Long, - @get:JvmName("isMms") val mms: Boolean + val id: Long ) : Parcelable { fun serialize(): String { - return "$id|$mms" - } - - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (javaClass != other?.javaClass) return false - - other as MessageId - - if (id != other.id) return false - - return true - } - - override fun hashCode(): Int { - return id.hashCode() + return "$id|true" } companion object { @@ -36,9 +19,9 @@ data class MessageId( * Returns null for invalid IDs. Useful when pulling a possibly-unset ID from a database, or something like that. */ @JvmStatic - fun fromNullable(id: Long, mms: Boolean): MessageId? { + fun fromNullable(id: Long): MessageId? { return if (id > 0) { - MessageId(id, mms) + MessageId(id) } else { null } @@ -47,7 +30,7 @@ data class MessageId( @JvmStatic fun deserialize(serialized: String): MessageId { val parts: List = serialized.split("|") - return MessageId(parts[0].toLong(), parts[1].toBoolean()) + return MessageId(parts[0].toLong()) } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/ParentStoryId.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/ParentStoryId.kt index cc8ef6d87..7abc30a5c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/ParentStoryId.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/ParentStoryId.kt @@ -12,7 +12,7 @@ import kotlin.math.abs sealed class ParentStoryId(protected val id: Long) { abstract fun serialize(): Long - fun asMessageId(): MessageId = MessageId(abs(id), true) + fun asMessageId(): MessageId = MessageId(abs(id)) fun isGroupReply() = serialize() > 0 fun isDirectReply() = !isGroupReply() diff --git a/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportReader.kt b/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportReader.kt index 4e263510e..763fe8f50 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportReader.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportReader.kt @@ -167,7 +167,7 @@ class SignalSmsExportReader( val sender: String = if (record.isOutgoing) Recipient.self().smsExportAddress() else record.individualRecipient.smsExportAddress() return ExportableMessage.Mms( - id = MessageId(record.id, record.isMms), + id = MessageId(record.id), exportState = mapExportState(exportState), addresses = addresses, dateReceived = record.dateReceived.milliseconds, @@ -186,7 +186,7 @@ class SignalSmsExportReader( readExportableMmsMessageFromRecord(record, exportState) } else { ExportableMessage.Sms( - id = MessageId(record.id, record.isMms), + id = MessageId(record.id), exportState = mapExportState(exportState), address = record.recipient.smsExportAddress(), dateReceived = record.dateReceived.milliseconds, diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java index b067e630a..83db83ffd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java @@ -215,7 +215,7 @@ public final class PushDistributionListSendJob extends PushSendJob { Log.d(TAG, "[" + messageId + "] Sending a story message with a manifest of size " + manifestCollection.size()); - return GroupSendUtil.sendStoryMessage(context, message.getRecipient().requireDistributionListId(), destinations, isRecipientUpdate, new MessageId(messageId, true), message.getSentTimeMillis(), storyMessage, manifestCollection); + return GroupSendUtil.sendStoryMessage(context, message.getRecipient().requireDistributionListId(), destinations, isRecipientUpdate, new MessageId(messageId), message.getSentTimeMillis(), storyMessage, manifestCollection); } catch (ServerRejectedException e) { throw new UndeliverableMessageException(e); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java index 8881e224b..d67a614ec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -274,7 +274,7 @@ public final class PushGroupSendJob extends PushSendJob { throw new UndeliverableMessageException("No attachment on non-text story."); } - return GroupSendUtil.sendGroupStoryMessage(context, groupId.requireV2(), destinations, isRecipientUpdate, new MessageId(messageId, true), message.getSentTimeMillis(), storyMessage); + return GroupSendUtil.sendGroupStoryMessage(context, groupId.requireV2(), destinations, isRecipientUpdate, new MessageId(messageId), message.getSentTimeMillis(), storyMessage); } else { throw new UndeliverableMessageException("No group found! " + groupId); } @@ -296,7 +296,7 @@ public final class PushGroupSendJob extends PushSendJob { .withExpiration(groupRecipient.getExpiresInSeconds()) .asGroupMessage(group) .build(); - return GroupSendUtil.sendResendableDataMessage(context, groupRecipient.requireGroupId().requireV2(), null, destinations, isRecipientUpdate, ContentHint.IMPLICIT, new MessageId(messageId, true), groupDataMessage, message.isUrgent(), false); + return GroupSendUtil.sendResendableDataMessage(context, groupRecipient.requireGroupId().requireV2(), null, destinations, isRecipientUpdate, ContentHint.IMPLICIT, new MessageId(messageId), groupDataMessage, message.isUrgent(), false); } else { throw new UndeliverableMessageException("Messages can no longer be sent to V1 groups!"); } @@ -355,7 +355,7 @@ public final class PushGroupSendJob extends PushSendJob { destinations, isRecipientUpdate, ContentHint.RESENDABLE, - new MessageId(messageId, true), + new MessageId(messageId), groupMessageBuilder.build(), message.isUrgent(), message.getStoryType().isStory() || message.getParentStoryId() != null); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java index bb65d7b76..b9492641d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java @@ -261,12 +261,12 @@ public class PushMediaSendJob extends PushSendJob { if (Util.equals(SignalStore.account().getAci(), address.getServiceId())) { Optional syncAccess = UnidentifiedAccessUtil.getAccessForSync(context); SendMessageResult result = messageSender.sendSyncMessage(mediaMessage); - SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId, true), false); + SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId), false); return syncAccess.isPresent(); } else { SendMessageResult result = messageSender.sendDataMessage(address, UnidentifiedAccessUtil.getAccessFor(context, messageRecipient), ContentHint.RESENDABLE, mediaMessage, IndividualSendEvents.EMPTY, message.isUrgent(), messageRecipient.needsPniSignature()); - SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId, true), message.isUrgent()); + SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId), message.isUrgent()); if (messageRecipient.needsPniSignature()) { SignalDatabase.pendingPniSignatureMessages().insertIfNecessary(messageRecipient.getId(), message.getSentTimeMillis(), result); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java index c72f40df1..65289ed72 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java @@ -44,7 +44,6 @@ public class ReactionSendJob extends BaseJob { private static final String TAG = Log.tag(ReactionSendJob.class); private static final String KEY_MESSAGE_ID = "message_id"; - private static final String KEY_IS_MMS = "is_mms"; private static final String KEY_REACTION_EMOJI = "reaction_emoji"; private static final String KEY_REACTION_AUTHOR = "reaction_author"; private static final String KEY_REACTION_DATE_SENT = "reaction_date_sent"; @@ -67,8 +66,7 @@ public class ReactionSendJob extends BaseJob { boolean remove) throws NoSuchMessageException { - MessageRecord message = messageId.isMms() ? SignalDatabase.messages().getMessageRecord(messageId.getId()) - : SignalDatabase.messages().getSmsMessage(messageId.getId()); + MessageRecord message = SignalDatabase.messages().getMessageRecord(messageId.getId()); Recipient conversationRecipient = SignalDatabase.threads().getRecipientForThreadId(message.getThreadId()); @@ -116,7 +114,6 @@ public class ReactionSendJob extends BaseJob { @Override public @NonNull Data serialize() { return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId.getId()) - .putBoolean(KEY_IS_MMS, messageId.isMms()) .putString(KEY_REACTION_EMOJI, reaction.getEmoji()) .putString(KEY_REACTION_AUTHOR, reaction.getAuthor().serialize()) .putLong(KEY_REACTION_DATE_SENT, reaction.getDateSent()) @@ -139,14 +136,7 @@ public class ReactionSendJob extends BaseJob { } ReactionTable reactionTable = SignalDatabase.reactions(); - - MessageRecord message; - - if (messageId.isMms()) { - message = SignalDatabase.messages().getMessageRecord(messageId.getId()); - } else { - message = SignalDatabase.messages().getSmsMessage(messageId.getId()); - } + MessageRecord message = SignalDatabase.messages().getMessageRecord(messageId.getId()); Recipient targetAuthor = message.isOutgoing() ? Recipient.self() : message.getIndividualRecipient(); long targetSentTimestamp = message.getDateSent(); @@ -273,7 +263,6 @@ public class ReactionSendJob extends BaseJob { public @NonNull ReactionSendJob create(@NonNull Parameters parameters, @NonNull Data data) { long messageId = data.getLong(KEY_MESSAGE_ID); - boolean isMms = data.getBoolean(KEY_IS_MMS); List recipients = RecipientId.fromSerializedList(data.getString(KEY_RECIPIENTS)); int initialRecipientCount = data.getInt(KEY_INITIAL_RECIPIENT_COUNT); ReactionRecord reaction = new ReactionRecord(data.getString(KEY_REACTION_EMOJI), @@ -282,7 +271,7 @@ public class ReactionSendJob extends BaseJob { data.getLong(KEY_REACTION_DATE_RECEIVED)); boolean remove = data.getBoolean(KEY_REMOVE); - return new ReactionSendJob(new MessageId(messageId, isMms), recipients, initialRecipientCount, reaction, remove, parameters); + return new ReactionSendJob(new MessageId(messageId), recipients, initialRecipientCount, reaction, remove, parameters); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java index fcd611ed4..e0a4e3f8e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java @@ -229,7 +229,7 @@ public class RemoteDeleteSendJob extends BaseJob { destinations, false, ContentHint.RESENDABLE, - new MessageId(messageId, isMms), + new MessageId(messageId), dataMessage, true, isForStory); diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java index d9ad16423..0687d9f2e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java @@ -37,7 +37,7 @@ public final class MessageDetailsRepository { private final Context context = ApplicationDependencies.getApplication(); @NonNull LiveData getMessageRecord(Long messageId) { - return new MessageRecordLiveData(new MessageId(messageId, true)); + return new MessageRecordLiveData(new MessageId(messageId)); } @NonNull LiveData getMessageDetails(@Nullable MessageRecord messageRecord) { @@ -56,9 +56,7 @@ public final class MessageDetailsRepository { return Observable.create(emitter -> { DatabaseObserver.MessageObserver messageObserver = mId -> { try { - MessageRecord messageRecord = messageId.isMms() ? SignalDatabase.messages().getMessageRecord(messageId.getId()) - : SignalDatabase.messages().getMessageRecord(messageId.getId()); - + MessageRecord messageRecord = SignalDatabase.messages().getMessageRecord(messageId.getId()); MessageDetails messageDetails = getRecipientDeliveryStatusesInternal(messageRecord); emitter.onNext(messageDetails); diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageRecordLiveData.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageRecordLiveData.java index 12dc19ef1..7370e9c9f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageRecordLiveData.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageRecordLiveData.java @@ -34,13 +34,8 @@ final class MessageRecordLiveData extends LiveData { @WorkerThread private synchronized void retrieveMessageRecordActual() { - retrieve(messageId.isMms() ? SignalDatabase.messages() : SignalDatabase.messages()); - } - - @WorkerThread - private synchronized void retrieve(MessageTable messageDatabase) { try { - MessageRecord record = messageDatabase.getMessageRecord(messageId.getId()); + MessageRecord record = SignalDatabase.messages().getMessageRecord(messageId.getId()); if (record.isPaymentNotification()) { record = SignalDatabase.payments().updateMessageWithPayment(record); diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java index 8d181f12e..4440ef8bb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java @@ -471,7 +471,7 @@ public final class MessageContentProcessor { Optional insertResult = SignalDatabase.messages().insertSecureDecryptedMessageInbox(mediaMessage, -1); smsMessageId.ifPresent(smsId -> SignalDatabase.messages().deleteMessage(smsId)); if (insertResult.isPresent()) { - messageId = new MessageId(insertResult.get().getMessageId(), true); + messageId = new MessageId(insertResult.get().getMessageId()); ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(insertResult.get().getThreadId())); } } catch (PaymentTable.PublicKeyConflictException e) { @@ -762,7 +762,7 @@ public final class MessageContentProcessor { SecurityEvent.broadcastSecurityUpdateEvent(context); ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(insertResult.get().getThreadId())); - return new MessageId(insertResult.get().getMessageId(), true); + return new MessageId(insertResult.get().getMessageId()); } else { return null; } @@ -875,7 +875,7 @@ public final class MessageContentProcessor { } if (insertResult.isPresent()) { - return new MessageId(insertResult.get().getMessageId(), true); + return new MessageId(insertResult.get().getMessageId()); } } catch (MmsException e) { throw new StorageFailedException(e, content.getSender().getIdentifier(), content.getSenderDevice()); @@ -948,7 +948,7 @@ public final class MessageContentProcessor { } if (insertResult.isPresent()) { - return new MessageId(insertResult.get().getMessageId(), true); + return new MessageId(insertResult.get().getMessageId()); } } catch (MmsException e) { throw new StorageFailedException(e, content.getSender().getIdentifier(), content.getSenderDevice()); @@ -1003,7 +1003,7 @@ public final class MessageContentProcessor { return null; } - MessageId targetMessageId = new MessageId(targetMessage.getId(), targetMessage.isMms()); + MessageId targetMessageId = new MessageId(targetMessage.getId()); if (reaction.isRemove()) { SignalDatabase.reactions().deleteReaction(targetMessageId, senderRecipient.getId()); @@ -1014,7 +1014,7 @@ public final class MessageContentProcessor { ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.fromMessageRecord(targetMessage), false); } - return new MessageId(targetMessage.getId(), targetMessage.isMms()); + return new MessageId(targetMessage.getId()); } private @Nullable MessageId handleRemoteDelete(@NonNull SignalServiceContent content, @NonNull SignalServiceDataMessage message, @NonNull Recipient senderRecipient) { @@ -1031,7 +1031,7 @@ public final class MessageContentProcessor { db.deleteRemotelyDeletedStory(targetMessage.getId()); } ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.fromMessageRecord(targetMessage), false); - return new MessageId(targetMessage.getId(), targetMessage.isMms()); + return new MessageId(targetMessage.getId()); } else if (targetMessage == null) { warn(String.valueOf(content.getTimestamp()), "[handleRemoteDelete] Could not find matching message! timestamp: " + delete.getTargetSentTimestamp() + " author: " + senderRecipient.getId()); if (!processingEarlyContent) { @@ -1684,7 +1684,7 @@ public final class MessageContentProcessor { } if (parentStoryId.isDirectReply()) { - return MessageId.fromNullable(insertResult.get().getMessageId(), true); + return MessageId.fromNullable(insertResult.get().getMessageId()); } else { return null; } @@ -1784,7 +1784,7 @@ public final class MessageContentProcessor { } if (parentStoryId.isDirectReply()) { - return MessageId.fromNullable(insertResult.get().getMessageId(), true); + return MessageId.fromNullable(insertResult.get().getMessageId()); } else { return null; } @@ -1855,7 +1855,7 @@ public final class MessageContentProcessor { ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(insertResult.get().getThreadId())); TrimThreadJob.enqueueAsync(insertResult.get().getThreadId()); - return new MessageId(insertResult.get().getMessageId(), true); + return new MessageId(insertResult.get().getMessageId()); } else { return null; } @@ -1945,7 +1945,7 @@ public final class MessageContentProcessor { ApplicationDependencies.getViewOnceMessageManager().scheduleIfNecessary(); } - return new MessageId(insertResult.get().getMessageId(), true); + return new MessageId(insertResult.get().getMessageId()); } else { return null; } @@ -2400,7 +2400,7 @@ public final class MessageContentProcessor { if (insertResult.isPresent()) { ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(insertResult.get().getThreadId())); - return new MessageId(insertResult.get().getMessageId(), false); + return new MessageId(insertResult.get().getMessageId()); } else { return null; } @@ -2867,12 +2867,7 @@ public final class MessageContentProcessor { private @Nullable MessageRecord findRetryReceiptRelatedMessage(@NonNull Context context, @Nullable MessageLogEntry messageLogEntry, long sentTimestamp) { if (messageLogEntry != null && messageLogEntry.hasRelatedMessage()) { MessageId relatedMessage = messageLogEntry.getRelatedMessages().get(0); - - if (relatedMessage.isMms()) { - return SignalDatabase.messages().getMessageRecordOrNull(relatedMessage.getId()); - } else { - return SignalDatabase.messages().getMessageRecordOrNull(relatedMessage.getId()); - } + return SignalDatabase.messages().getMessageRecordOrNull(relatedMessage.getId()); } else { return SignalDatabase.mmsSms().getMessageFor(sentTimestamp, Recipient.self().getId()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationStateProvider.kt b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationStateProvider.kt index 0476bbb4c..22bc1e58a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationStateProvider.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationStateProvider.kt @@ -53,7 +53,7 @@ object NotificationStateProvider { messages += NotificationMessage( messageRecord = record, - reactions = if (hasUnreadReactions) SignalDatabase.reactions.getReactions(MessageId(record.id, record.isMms)) else emptyList(), + reactions = if (hasUnreadReactions) SignalDatabase.reactions.getReactions(MessageId(record.id)) else emptyList(), threadRecipient = threadRecipient, thread = conversationId, stickyThread = stickyThreads.containsKey(conversationId), diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationThumbnails.kt b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationThumbnails.kt index 2695ae099..12745702d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationThumbnails.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationThumbnails.kt @@ -49,7 +49,7 @@ object NotificationThumbnails { return NotificationItem.ThumbnailInfo(thumbnailSlide.publicUri, thumbnailSlide.contentType) } - val messageId = MessageId(notificationItem.id, notificationItem.isMms) + val messageId = MessageId(notificationItem.id) val thumbnail: CachedThumbnail? = synchronized(thumbnailCache) { thumbnailCache[messageId] } if (thumbnail != null) { @@ -110,7 +110,7 @@ object NotificationThumbnails { } fun removeAllExcept(notificationItems: List) { - val currentMessages = notificationItems.map { MessageId(it.id, it.isMms) } + val currentMessages = notificationItems.map { MessageId(it.id) } synchronized(thumbnailCache) { thumbnailCache.keys.removeIf { !currentMessages.contains(it) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsBottomSheetDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsBottomSheetDialogFragment.java index c48af8bdd..b1aad7e32 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsBottomSheetDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsBottomSheetDialogFragment.java @@ -101,7 +101,7 @@ public final class ReactionsBottomSheetDialogFragment extends BottomSheetDialogF setUpRecipientsRecyclerView(); setUpTabMediator(view, savedInstanceState); - MessageId messageId = new MessageId(requireArguments().getLong(ARGS_MESSAGE_ID), requireArguments().getBoolean(ARGS_IS_MMS)); + MessageId messageId = new MessageId(requireArguments().getLong(ARGS_MESSAGE_ID)); setUpViewModel(messageId); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiViewModel.java index 46d75336e..441afa5b7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiViewModel.java @@ -54,7 +54,7 @@ public final class ReactWithAnyEmojiViewModel extends ViewModel { this.searchResults = BehaviorSubject.createDefault(new EmojiSearchResult()); this.selectedKey = BehaviorSubject.createDefault(getStartingKey()); - Observable> emojiPages = new ReactionsRepository().getReactions(new MessageId(messageId, isMms)) + Observable> emojiPages = new ReactionsRepository().getReactions(new MessageId(messageId)) .map(repository::getEmojiPageModels); Observable emojiList = emojiPages.map(pages -> { @@ -111,7 +111,7 @@ public final class ReactWithAnyEmojiViewModel extends ViewModel { void onEmojiSelected(@NonNull String emoji) { if (messageId > 0) { SignalStore.emojiValues().setPreferredVariation(emoji); - repository.addEmojiToMessage(emoji, new MessageId(messageId, isMms)); + repository.addEmojiToMessage(emoji, new MessageId(messageId)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/safety/SafetyNumberBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/safety/SafetyNumberBottomSheet.kt index f55525155..e2ad384e4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/safety/SafetyNumberBottomSheet.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/safety/SafetyNumberBottomSheet.kt @@ -83,7 +83,7 @@ object SafetyNumberBottomSheet { val args = SafetyNumberBottomSheetArgs( untrustedRecipients = messageRecord.identityKeyMismatches.map { it.getRecipientId(context) }, destinations = getDestinationFromRecord(messageRecord), - messageId = MessageId(messageRecord.id, messageRecord.isMms) + messageId = MessageId(messageRecord.id) ) return SheetFactory(args) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoViewModel.kt index 22ccc80a1..706c793b9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/info/StoryInfoViewModel.kt @@ -22,7 +22,7 @@ class StoryInfoViewModel(storyId: Long, repository: MessageDetailsRepository = M val state: Flowable = store.stateFlowable.observeOn(AndroidSchedulers.mainThread()) init { - disposables += store.update(repository.getMessageDetails(MessageId(storyId, true)).toFlowable(BackpressureStrategy.LATEST)) { messageDetails, storyInfoState -> + disposables += store.update(repository.getMessageDetails(MessageId(storyId)).toFlowable(BackpressureStrategy.LATEST)) { messageDetails, storyInfoState -> storyInfoState.copy( messageDetails = messageDetails ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageRepository.kt index dd110875a..43735c0d2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageRepository.kt @@ -99,7 +99,7 @@ open class StoryViewerPageRepository(context: Context, private val storyViewStat val recipient = Recipient.resolved(recipientId) val messageUpdateObserver = DatabaseObserver.MessageObserver { - if (it.mms && it.id == recordId) { + if (it.id == recordId) { try { val messageRecord = SignalDatabase.messages.getMessageRecord(recordId) if (messageRecord.isRemoteDelete) { @@ -185,7 +185,7 @@ open class StoryViewerPageRepository(context: Context, private val storyViewStat markedMessageInfo.threadId, storyPost.sender.id, markedMessageInfo.syncMessageId.timetamp, - MessageId(storyPost.id, true) + MessageId(storyPost.id) ) ) MultiDeviceViewedUpdateJob.enqueue(listOf(markedMessageInfo.syncMessageId)) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/ReplyBody.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/ReplyBody.kt index 04255ca22..10ca4b50c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/ReplyBody.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/ReplyBody.kt @@ -7,7 +7,7 @@ import org.thoughtcrime.securesms.recipients.Recipient sealed class ReplyBody(val messageRecord: MessageRecord) { - val key: MessageId = MessageId(messageRecord.id, true) + val key: MessageId = MessageId(messageRecord.id) val sender: Recipient = if (messageRecord.isOutgoing) Recipient.self() else messageRecord.individualRecipient.resolve() val sentAtMillis: Long = messageRecord.dateSent diff --git a/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java b/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java index 03dd5f726..9f0966f2b 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java @@ -107,7 +107,7 @@ public class MarkReadReceiverTest { private MessageTable.MarkedMessageInfo createMarkedMessageInfo(long threadId, @NonNull RecipientId recipientId) { return new MessageTable.MarkedMessageInfo(threadId, new MessageTable.SyncMessageId(recipientId, 0), - new MessageId(1, true), + new MessageId(1), new MessageTable.ExpirationInfo(0, 0, 0, false)); } } \ No newline at end of file