mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-20 16:49:40 +01:00
Improved missed call state handling.
This commit is contained in:
committed by
Greyson Parrelli
parent
95fbd7a31c
commit
e60b32202e
@@ -12,16 +12,17 @@ import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.database.CallTable;
|
||||
import org.thoughtcrime.securesms.database.MessageTable.ExpirationInfo;
|
||||
import org.thoughtcrime.securesms.database.MessageTable.MarkedMessageInfo;
|
||||
import org.thoughtcrime.securesms.database.MessageTable.SyncMessageId;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.jobs.CallLogEventSendJob;
|
||||
import org.thoughtcrime.securesms.jobs.MultiDeviceReadUpdateJob;
|
||||
import org.thoughtcrime.securesms.jobs.SendReadReceiptJob;
|
||||
import org.thoughtcrime.securesms.notifications.v2.ConversationId;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.service.ExpiringMessageManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
@@ -62,6 +63,7 @@ public class MarkReadReceiver extends BroadcastReceiver {
|
||||
}
|
||||
|
||||
process(messageIdsCollection);
|
||||
processCallEvents(threads, System.currentTimeMillis());
|
||||
|
||||
ApplicationDependencies.getMessageNotifier().updateNotification(context);
|
||||
finisher.finish();
|
||||
@@ -102,6 +104,20 @@ public class MarkReadReceiver extends BroadcastReceiver {
|
||||
});
|
||||
}
|
||||
|
||||
public static void processCallEvents(@NonNull List<ConversationId> threads, long timestamp) {
|
||||
List<RecipientId> peers = SignalDatabase.threads().getRecipientIdsForThreadIds(threads.stream()
|
||||
.filter(it -> it.getGroupStoryId() == null)
|
||||
.map(ConversationId::getThreadId)
|
||||
.collect(java.util.stream.Collectors.toList()));
|
||||
|
||||
for (RecipientId peer : peers) {
|
||||
CallTable.Call lastCallInThread = SignalDatabase.calls().markAllCallEventsWithPeerBeforeTimestampRead(peer, timestamp);
|
||||
if (lastCallInThread != null) {
|
||||
ApplicationDependencies.getJobManager().add(CallLogEventSendJob.forMarkedAsReadInConversation(lastCallInThread));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void scheduleDeletion(@NonNull List<ExpirationInfo> expirationInfo) {
|
||||
if (expirationInfo.size() > 0) {
|
||||
long now = System.currentTimeMillis();
|
||||
|
||||
@@ -138,6 +138,7 @@ object NotificationStateProvider {
|
||||
) {
|
||||
private val isGroupStoryReply: Boolean = thread.groupStoryId != null
|
||||
private val isUnreadIncoming: Boolean = isUnreadMessage && !messageRecord.isOutgoing && !isGroupStoryReply
|
||||
private val isIncomingMissedCall: Boolean = !messageRecord.isOutgoing && (messageRecord.isMissedAudioCall || messageRecord.isMissedVideoCall)
|
||||
|
||||
private val isNotifiableGroupStoryMessage: Boolean =
|
||||
isUnreadMessage &&
|
||||
@@ -146,7 +147,7 @@ object NotificationStateProvider {
|
||||
(isParentStorySentBySelf || messageRecord.hasSelfMention() || (hasSelfRepliedToStory && !messageRecord.isStoryReaction()))
|
||||
|
||||
fun includeMessage(notificationProfile: NotificationProfile?): MessageInclusion {
|
||||
return if (isUnreadIncoming || stickyThread || isNotifiableGroupStoryMessage) {
|
||||
return if (isUnreadIncoming || stickyThread || isNotifiableGroupStoryMessage || isIncomingMissedCall) {
|
||||
if (threadRecipient.isMuted && (threadRecipient.isDoNotNotifyMentions || !messageRecord.hasSelfMention())) {
|
||||
MessageInclusion.MUTE_FILTERED
|
||||
} else if (notificationProfile != null && !notificationProfile.isRecipientAllowed(threadRecipient.id) && !(notificationProfile.allowAllMentions && messageRecord.hasSelfMention())) {
|
||||
|
||||
Reference in New Issue
Block a user