mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-23 10:20:25 +01:00
Send read receipts per edit message revision.
This commit is contained in:
@@ -57,7 +57,7 @@ public class TurnOffContactJoinedNotificationsActivity extends AppCompatActivity
|
||||
ThreadTable threadTable = SignalDatabase.threads();
|
||||
|
||||
List<MessageTable.MarkedMessageInfo> 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);
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<ConversationMessage> {
|
||||
val context = ApplicationDependencies.getApplication()
|
||||
val records = SignalDatabase
|
||||
|
||||
@@ -36,4 +36,8 @@ class EditMessageHistoryViewModel(private val originalMessageId: Long, private v
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
}
|
||||
|
||||
fun markRevisionsRead() {
|
||||
EditMessageHistoryRepository.markRevisionsRead(originalMessageId)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1104,7 +1104,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode
|
||||
List<MarkedMessageInfo> 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<MarkedMessageInfo> messageIds = threadTable.setRead(threadId, false);
|
||||
ApplicationDependencies.getMessageNotifier().updateNotification(context);
|
||||
MarkReadReceiver.process(context, messageIds);
|
||||
MarkReadReceiver.process(messageIds);
|
||||
}
|
||||
|
||||
ConversationUtil.refreshRecipientShortcuts();
|
||||
|
||||
@@ -2241,11 +2241,32 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
|
||||
.run()
|
||||
}
|
||||
|
||||
fun setAllEditMessageRevisionsRead(messageId: Long): List<MarkedMessageInfo> {
|
||||
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<MarkedMessageInfo> {
|
||||
var query = """
|
||||
$THREAD_ID = ? AND
|
||||
$STORY_TYPE = 0 AND
|
||||
$PARENT_STORY_ID <= 0 AND
|
||||
$LATEST_REVISION_ID IS NULL AND
|
||||
(
|
||||
$READ = 0 OR
|
||||
(
|
||||
|
||||
@@ -199,7 +199,7 @@ public final class MessageRequestRepository {
|
||||
|
||||
List<MessageTable.MarkedMessageInfo> messageIds = SignalDatabase.threads().setEntireThreadRead(threadId);
|
||||
ApplicationDependencies.getMessageNotifier().updateNotification(context);
|
||||
MarkReadReceiver.process(context, messageIds);
|
||||
MarkReadReceiver.process(messageIds);
|
||||
|
||||
List<MessageTable.MarkedMessageInfo> viewedInfos = SignalDatabase.messages().getViewedIncomingMessages(threadId);
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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<MarkedMessageInfo> markedReadMessages) {
|
||||
public static void process(@NonNull List<MarkedMessageInfo> markedReadMessages) {
|
||||
if (markedReadMessages.isEmpty()) return;
|
||||
|
||||
List<SyncMessageId> syncMessageIds = Stream.of(markedReadMessages)
|
||||
|
||||
@@ -121,7 +121,7 @@ public class RemoteReplyReceiver extends BroadcastReceiver {
|
||||
List<MarkedMessageInfo> messageIds = SignalDatabase.threads().setRead(threadId, true);
|
||||
|
||||
ApplicationDependencies.getMessageNotifier().updateNotification(context);
|
||||
MarkReadReceiver.process(context, messageIds);
|
||||
MarkReadReceiver.process(messageIds);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user