diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/TurnOffContactJoinedNotificationsActivity.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/TurnOffContactJoinedNotificationsActivity.java index 4367966386..adb6ae567f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/TurnOffContactJoinedNotificationsActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/TurnOffContactJoinedNotificationsActivity.java @@ -57,7 +57,7 @@ public class TurnOffContactJoinedNotificationsActivity extends AppCompatActivity ThreadTable threadTable = SignalDatabase.threads(); List marked = threadTable.setRead(getIntent().getLongExtra(EXTRA_THREAD_ID, -1), false); - MarkReadReceiver.process(this, marked); + MarkReadReceiver.process(marked); SignalStore.settings().setNotifyWhenContactJoinsSignal(false); ApplicationDependencies.getMessageNotifier().updateNotification(this); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java index d7bd3b3e4d..a9a85ba131 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java @@ -66,7 +66,7 @@ public class MarkReadHelper { Log.d(TAG, "Marking " + infos.size() + " messages as read."); ApplicationDependencies.getMessageNotifier().updateNotification(context); - MarkReadReceiver.process(context, infos); + MarkReadReceiver.process(infos); }); }); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/edit/EditMessageHistoryDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/edit/EditMessageHistoryDialog.kt index 1de30f1a54..a6607c95bd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/edit/EditMessageHistoryDialog.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/edit/EditMessageHistoryDialog.kt @@ -57,6 +57,12 @@ class EditMessageHistoryDialog : FixedRoundedCornerBottomSheetDialogFragment() { private val disposables: LifecycleDisposable = LifecycleDisposable() + override fun onResume() { + super.onResume() + + viewModel.markRevisionsRead() + } + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog dialog.behavior.skipCollapsed = true diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/edit/EditMessageHistoryRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/edit/EditMessageHistoryRepository.kt index 8bca75f5f4..661542fca8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/edit/EditMessageHistoryRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/edit/EditMessageHistoryRepository.kt @@ -2,11 +2,13 @@ package org.thoughtcrime.securesms.conversation.ui.edit import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.schedulers.Schedulers +import org.signal.core.util.concurrent.SignalExecutors import org.thoughtcrime.securesms.conversation.ConversationMessage import org.thoughtcrime.securesms.conversation.v2.data.AttachmentHelper import org.thoughtcrime.securesms.database.DatabaseObserver import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies +import org.thoughtcrime.securesms.notifications.MarkReadReceiver import org.thoughtcrime.securesms.recipients.Recipient object EditMessageHistoryRepository { @@ -29,6 +31,12 @@ object EditMessageHistoryRepository { }.subscribeOn(Schedulers.io()) } + fun markRevisionsRead(messageId: Long) { + SignalExecutors.BOUNDED.execute { + MarkReadReceiver.process(SignalDatabase.messages.setAllEditMessageRevisionsRead(messageId)) + } + } + private fun getEditHistorySync(messageId: Long): List { val context = ApplicationDependencies.getApplication() val records = SignalDatabase diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/edit/EditMessageHistoryViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/edit/EditMessageHistoryViewModel.kt index 878ce34993..8e131c11fc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/edit/EditMessageHistoryViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/edit/EditMessageHistoryViewModel.kt @@ -36,4 +36,8 @@ class EditMessageHistoryViewModel(private val originalMessageId: Long, private v .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) } + + fun markRevisionsRead() { + EditMessageHistoryRepository.markRevisionsRead(originalMessageId) + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java index d9bb8d6059..a90c62a594 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -1104,7 +1104,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode List messageIds = SignalDatabase.threads().setAllThreadsRead(); ApplicationDependencies.getMessageNotifier().updateNotification(context); - MarkReadReceiver.process(context, messageIds); + MarkReadReceiver.process(messageIds); }); } @@ -1121,7 +1121,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode ApplicationDependencies.getMessageNotifier().updateNotification(context); stopwatch.split("notification"); - MarkReadReceiver.process(context, messageIds); + MarkReadReceiver.process(messageIds); stopwatch.split("process"); return null; @@ -1624,7 +1624,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode if (unreadCount > 0) { List messageIds = threadTable.setRead(threadId, false); ApplicationDependencies.getMessageNotifier().updateNotification(context); - MarkReadReceiver.process(context, messageIds); + MarkReadReceiver.process(messageIds); } ConversationUtil.refreshRecipientShortcuts(); 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 90eff676aa..7bed188ce5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt @@ -2241,11 +2241,32 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat .run() } + fun setAllEditMessageRevisionsRead(messageId: Long): List { + var query = """ + ( + $ORIGINAL_MESSAGE_ID = ? OR + $ID = ? + ) AND + ( + $READ = 0 OR + ( + $REACTIONS_UNREAD = 1 AND + ($outgoingTypeClause) + ) + ) + """ + + val args = mutableListOf(messageId.toString(), messageId.toString()) + + return setMessagesRead(query, args.toTypedArray()) + } + fun setMessagesReadSince(threadId: Long, sinceTimestamp: Long): List { var query = """ $THREAD_ID = ? AND $STORY_TYPE = 0 AND $PARENT_STORY_ID <= 0 AND + $LATEST_REVISION_ID IS NULL AND ( $READ = 0 OR ( diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java index 59b19c489c..e18d2b6504 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java @@ -199,7 +199,7 @@ public final class MessageRequestRepository { List messageIds = SignalDatabase.threads().setEntireThreadRead(threadId); ApplicationDependencies.getMessageNotifier().updateNotification(context); - MarkReadReceiver.process(context, messageIds); + MarkReadReceiver.process(messageIds); List viewedInfos = SignalDatabase.messages().getViewedIncomingMessages(threadId); 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 53524b5ac7..bd717fcccf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java @@ -1538,7 +1538,7 @@ public class MessageContentProcessor { if (Util.hasItems(markedMessages)) { Log.i(TAG, "Updating past messages: " + markedMessages.size()); - MarkReadReceiver.process(context, markedMessages); + MarkReadReceiver.process(markedMessages); } for (SyncMessageId id : unhandled) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt index 8ae07c9458..21fb02da1d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt @@ -898,7 +898,7 @@ object SyncMessageProcessor { if (Util.hasItems(markedMessages)) { log("Updating past SignalDatabase.messages: " + markedMessages.size) - MarkReadReceiver.process(context, markedMessages) + MarkReadReceiver.process(markedMessages) } for (id in unhandled) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java index 87298f51e1..288fecddb5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java @@ -62,7 +62,7 @@ public class MarkReadReceiver extends BroadcastReceiver { messageIdsCollection.addAll(messageIds); } - process(context, messageIdsCollection); + process(messageIdsCollection); ApplicationDependencies.getMessageNotifier().updateNotification(context); finisher.finish(); @@ -70,7 +70,7 @@ public class MarkReadReceiver extends BroadcastReceiver { } } - public static void process(@NonNull Context context, @NonNull List markedReadMessages) { + public static void process(@NonNull List markedReadMessages) { if (markedReadMessages.isEmpty()) return; List syncMessageIds = Stream.of(markedReadMessages) diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java index cdf5022d9a..1bc78e3a3e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java @@ -121,7 +121,7 @@ public class RemoteReplyReceiver extends BroadcastReceiver { List messageIds = SignalDatabase.threads().setRead(threadId, true); ApplicationDependencies.getMessageNotifier().updateNotification(context); - MarkReadReceiver.process(context, messageIds); + MarkReadReceiver.process(messageIds); }); } } 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 8eba87925f..2e9ce8ad29 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java @@ -81,7 +81,7 @@ public class MarkReadReceiverTest { List duplicatedList = Util.concatenatedList(infoList, infoList); // WHEN - MarkReadReceiver.process(mockContext, duplicatedList); + MarkReadReceiver.process(duplicatedList); // THEN assertEquals("Should have 10 total jobs, including MultiDeviceReadUpdateJob", expected, jobs.size());