Add urgency flag to message sends.

This commit is contained in:
Cody Henthorne
2022-08-01 13:06:51 -04:00
committed by Greyson Parrelli
parent c7cd261641
commit dc04c8ed98
38 changed files with 256 additions and 139 deletions

View File

@@ -88,10 +88,11 @@ public final class GroupSendUtil {
boolean isRecipientUpdate,
ContentHint contentHint,
@NonNull MessageId messageId,
@NonNull SignalServiceDataMessage message)
@NonNull SignalServiceDataMessage message,
boolean urgent)
throws IOException, UntrustedIdentityException
{
return sendMessage(context, groupId, getDistributionId(groupId), messageId, allTargets, isRecipientUpdate, DataSendOperation.resendable(message, contentHint, messageId), null);
return sendMessage(context, groupId, getDistributionId(groupId), messageId, allTargets, isRecipientUpdate, DataSendOperation.resendable(message, contentHint, messageId, urgent), null);
}
/**
@@ -109,10 +110,11 @@ public final class GroupSendUtil {
@NonNull List<Recipient> allTargets,
boolean isRecipientUpdate,
ContentHint contentHint,
@NonNull SignalServiceDataMessage message)
@NonNull SignalServiceDataMessage message,
boolean urgent)
throws IOException, UntrustedIdentityException
{
return sendMessage(context, groupId, getDistributionId(groupId), null, allTargets, isRecipientUpdate, DataSendOperation.unresendable(message, contentHint), null);
return sendMessage(context, groupId, getDistributionId(groupId), null, allTargets, isRecipientUpdate, DataSendOperation.unresendable(message, contentHint, urgent), null);
}
/**
@@ -295,7 +297,7 @@ public final class GroupSendUtil {
Log.d(TAG, "Successfully sent using sender key to " + successCount + "/" + targets.size() + " sender key targets.");
if (sendOperation.shouldIncludeInMessageLog()) {
SignalDatabase.messageLog().insertIfPossible(sendOperation.getSentTimestamp(), senderKeyTargets, results, sendOperation.getContentHint(), sendOperation.getRelatedMessageId());
SignalDatabase.messageLog().insertIfPossible(sendOperation.getSentTimestamp(), senderKeyTargets, results, sendOperation.getContentHint(), sendOperation.getRelatedMessageId(), sendOperation.isUrgent());
}
if (relatedMessageId != null) {
@@ -353,9 +355,9 @@ public final class GroupSendUtil {
synchronized (entryId) {
if (entryId.get() == -1) {
entryId.set(messageLogDatabase.insertIfPossible(recipients.requireRecipientId(result.getAddress()), sendOperation.getSentTimestamp(), result, sendOperation.getContentHint(), sendOperation.getRelatedMessageId()));
entryId.set(messageLogDatabase.insertIfPossible(recipients.requireRecipientId(result.getAddress()), sendOperation.getSentTimestamp(), result, sendOperation.getContentHint(), sendOperation.getRelatedMessageId(), sendOperation.isUrgent()));
} else {
entryId.set(messageLogDatabase.addRecipientToExistingEntryIfPossible(entryId.get(), recipients.requireRecipientId(result.getAddress()), sendOperation.getSentTimestamp(), result, sendOperation.getContentHint(), sendOperation.getRelatedMessageId()));
entryId.set(messageLogDatabase.addRecipientToExistingEntryIfPossible(entryId.get(), recipients.requireRecipientId(result.getAddress()), sendOperation.getSentTimestamp(), result, sendOperation.getContentHint(), sendOperation.getRelatedMessageId(), sendOperation.isUrgent()));
}
}
}, cancelationSignal);
@@ -424,6 +426,7 @@ public final class GroupSendUtil {
long getSentTimestamp();
boolean shouldIncludeInMessageLog();
@NonNull MessageId getRelatedMessageId();
boolean isUrgent();
}
private static class DataSendOperation implements SendOperation {
@@ -431,20 +434,22 @@ public final class GroupSendUtil {
private final ContentHint contentHint;
private final MessageId relatedMessageId;
private final boolean resendable;
private final boolean urgent;
public static DataSendOperation resendable(@NonNull SignalServiceDataMessage message, @NonNull ContentHint contentHint, @NonNull MessageId relatedMessageId) {
return new DataSendOperation(message, contentHint, true, relatedMessageId);
public static DataSendOperation resendable(@NonNull SignalServiceDataMessage message, @NonNull ContentHint contentHint, @NonNull MessageId relatedMessageId, boolean urgent) {
return new DataSendOperation(message, contentHint, true, relatedMessageId, urgent);
}
public static DataSendOperation unresendable(@NonNull SignalServiceDataMessage message, @NonNull ContentHint contentHint) {
return new DataSendOperation(message, contentHint, false, null);
public static DataSendOperation unresendable(@NonNull SignalServiceDataMessage message, @NonNull ContentHint contentHint, boolean urgent) {
return new DataSendOperation(message, contentHint, false, null, urgent);
}
private DataSendOperation(@NonNull SignalServiceDataMessage message, @NonNull ContentHint contentHint, boolean resendable, @Nullable MessageId relatedMessageId) {
this.message = message;
this.contentHint = contentHint;
this.resendable = resendable;
this.relatedMessageId = relatedMessageId;
private DataSendOperation(@NonNull SignalServiceDataMessage message, @NonNull ContentHint contentHint, boolean resendable, @Nullable MessageId relatedMessageId, boolean urgent) {
this.message = message;
this.contentHint = contentHint;
this.resendable = resendable;
this.relatedMessageId = relatedMessageId;
this.urgent = urgent;
if (resendable && relatedMessageId == null) {
throw new IllegalArgumentException("If a message is resendable, it must have a related message ID!");
@@ -460,7 +465,7 @@ public final class GroupSendUtil {
throws NoSessionException, UntrustedIdentityException, InvalidKeyException, IOException, InvalidRegistrationIdException
{
SenderKeyGroupEvents listener = relatedMessageId != null ? new SenderKeyMetricEventListener(relatedMessageId.getId()) : SenderKeyGroupEvents.EMPTY;
return messageSender.sendGroupDataMessage(distributionId, targets, access, isRecipientUpdate, contentHint, message, listener);
return messageSender.sendGroupDataMessage(distributionId, targets, access, isRecipientUpdate, contentHint, message, listener, urgent);
}
@Override
@@ -473,7 +478,7 @@ public final class GroupSendUtil {
throws IOException, UntrustedIdentityException
{
LegacyGroupEvents listener = relatedMessageId != null ? new LegacyMetricEventListener(relatedMessageId.getId()) : LegacyGroupEvents.EMPTY;
return messageSender.sendDataMessage(targets, access, isRecipientUpdate, contentHint, message, listener, partialListener, cancelationSignal);
return messageSender.sendDataMessage(targets, access, isRecipientUpdate, contentHint, message, listener, partialListener, cancelationSignal, urgent);
}
@Override
@@ -499,6 +504,11 @@ public final class GroupSendUtil {
throw new UnsupportedOperationException();
}
}
@Override
public boolean isUrgent() {
return urgent;
}
}
private static class TypingSendOperation implements SendOperation {
@@ -553,6 +563,11 @@ public final class GroupSendUtil {
public @NonNull MessageId getRelatedMessageId() {
throw new UnsupportedOperationException();
}
@Override
public boolean isUrgent() {
return false;
}
}
private static class CallSendOperation implements SendOperation {
@@ -605,6 +620,11 @@ public final class GroupSendUtil {
public @NonNull MessageId getRelatedMessageId() {
throw new UnsupportedOperationException();
}
@Override
public boolean isUrgent() {
return message.isUrgent();
}
}
public static class StorySendOperation implements SendOperation {
@@ -670,6 +690,11 @@ public final class GroupSendUtil {
public @NonNull MessageId getRelatedMessageId() {
return relatedMessageId;
}
@Override
public boolean isUrgent() {
return false;
}
}
private static final class SenderKeyMetricEventListener implements SenderKeyGroupEvents {

View File

@@ -2694,6 +2694,7 @@ public final class MessageContentProcessor {
messageLogEntry.getDateSent(),
messageLogEntry.getContent(),
messageLogEntry.getContentHint(),
messageLogEntry.isUrgent(),
groupId,
distributionId));
} else {
@@ -2735,6 +2736,7 @@ public final class MessageContentProcessor {
messageLogEntry.getDateSent(),
messageLogEntry.getContent(),
messageLogEntry.getContentHint(),
messageLogEntry.isUrgent(),
null,
null));
} else if (archivedSession) {