mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 13:08:46 +00:00
Fix sending reactions to note to self.
This commit is contained in:
@@ -227,10 +227,8 @@ public class PushMediaSendJob extends PushSendJob {
|
||||
.build();
|
||||
|
||||
if (Util.equals(SignalStore.account().getAci(), address.getAci())) {
|
||||
Optional<UnidentifiedAccessPair> syncAccess = UnidentifiedAccessUtil.getAccessForSync(context);
|
||||
SignalServiceSyncMessage syncMessage = buildSelfSendSyncMessage(context, mediaMessage, syncAccess);
|
||||
|
||||
SendMessageResult result = messageSender.sendSyncMessage(syncMessage, syncAccess);
|
||||
Optional<UnidentifiedAccessPair> syncAccess = UnidentifiedAccessUtil.getAccessForSync(context);
|
||||
SendMessageResult result = messageSender.sendSyncMessage(mediaMessage);
|
||||
SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId, true));
|
||||
return syncAccess.isPresent();
|
||||
} else {
|
||||
|
||||
@@ -446,17 +446,6 @@ public abstract class PushSendJob extends SendJob {
|
||||
}
|
||||
}
|
||||
|
||||
protected SignalServiceSyncMessage buildSelfSendSyncMessage(@NonNull Context context, @NonNull SignalServiceDataMessage message, Optional<UnidentifiedAccessPair> syncAccess) {
|
||||
SignalServiceAddress localAddress = new SignalServiceAddress(Recipient.self().requireAci(), Recipient.self().requireE164());
|
||||
SentTranscriptMessage transcript = new SentTranscriptMessage(Optional.of(localAddress),
|
||||
message.getTimestamp(),
|
||||
message,
|
||||
message.getExpiresInSeconds(),
|
||||
Collections.singletonMap(localAddress, syncAccess.isPresent()),
|
||||
false);
|
||||
return SignalServiceSyncMessage.forSentTranscript(transcript);
|
||||
}
|
||||
|
||||
protected void handleProofRequiredException(@NonNull ProofRequiredException proofRequired, @Nullable Recipient recipient, long threadId, long messageId, boolean isMms)
|
||||
throws ProofRequiredException, RetryLaterException
|
||||
{
|
||||
|
||||
@@ -190,10 +190,9 @@ public class PushTextSendJob extends PushSendJob {
|
||||
|
||||
if (Util.equals(SignalStore.account().getAci(), address.getAci())) {
|
||||
Optional<UnidentifiedAccessPair> syncAccess = UnidentifiedAccessUtil.getAccessForSync(context);
|
||||
SignalServiceSyncMessage syncMessage = buildSelfSendSyncMessage(context, textSecureMessage, syncAccess);
|
||||
|
||||
SignalLocalMetrics.IndividualMessageSend.onDeliveryStarted(messageId);
|
||||
SendMessageResult result = messageSender.sendSyncMessage(syncMessage, syncAccess);
|
||||
SendMessageResult result = messageSender.sendSyncMessage(textSecureMessage);
|
||||
|
||||
SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getDateSent(), result, ContentHint.RESENDABLE, new MessageId(messageId, false));
|
||||
return syncAccess.isPresent();
|
||||
|
||||
@@ -12,6 +12,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.database.model.MessageId;
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||
import org.thoughtcrime.securesms.database.model.ReactionRecord;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.groups.GroupId;
|
||||
import org.thoughtcrime.securesms.jobmanager.Data;
|
||||
import org.thoughtcrime.securesms.jobmanager.Job;
|
||||
@@ -227,14 +228,20 @@ public class ReactionSendJob extends BaseJob {
|
||||
GroupUtil.setDataMessageGroupContext(context, dataMessageBuilder, conversationRecipient.requireGroupId().requirePush());
|
||||
}
|
||||
|
||||
SignalServiceDataMessage dataMessage = dataMessageBuilder.build();
|
||||
List<SendMessageResult> results = GroupSendUtil.sendResendableDataMessage(context,
|
||||
conversationRecipient.getGroupId().transform(GroupId::requireV2).orNull(),
|
||||
destinations,
|
||||
false,
|
||||
ContentHint.RESENDABLE,
|
||||
messageId,
|
||||
dataMessage);
|
||||
SignalServiceDataMessage dataMessage = dataMessageBuilder.build();
|
||||
List<Recipient> nonSelfDestinations = destinations.stream().filter(r -> !r.isSelf()).collect(Collectors.toList());
|
||||
boolean includesSelf = nonSelfDestinations.size() != destinations.size();
|
||||
List<SendMessageResult> results = GroupSendUtil.sendResendableDataMessage(context,
|
||||
conversationRecipient.getGroupId().transform(GroupId::requireV2).orNull(),
|
||||
nonSelfDestinations,
|
||||
false,
|
||||
ContentHint.RESENDABLE,
|
||||
messageId,
|
||||
dataMessage);
|
||||
|
||||
if (includesSelf) {
|
||||
results.add(ApplicationDependencies.getSignalServiceMessageSender().sendSyncMessage(dataMessage));
|
||||
}
|
||||
|
||||
return GroupSendJobHelper.getCompletedSends(destinations, results);
|
||||
}
|
||||
|
||||
@@ -102,6 +102,11 @@ public class SendDeliveryReceiptJob extends BaseJob {
|
||||
SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender();
|
||||
Recipient recipient = Recipient.resolved(recipientId);
|
||||
|
||||
if (recipient.isSelf()) {
|
||||
Log.i(TAG, "Not sending to self, abort");
|
||||
return;
|
||||
}
|
||||
|
||||
if (recipient.isUnregistered()) {
|
||||
Log.w(TAG, recipient.getId() + " is unregistered!");
|
||||
return;
|
||||
|
||||
@@ -4,6 +4,7 @@ package org.thoughtcrime.securesms.jobs;
|
||||
import android.app.Application;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
|
||||
@@ -59,6 +60,7 @@ public class SendReadReceiptJob extends BaseJob {
|
||||
private final long timestamp;
|
||||
private final List<MessageId> messageIds;
|
||||
|
||||
@VisibleForTesting
|
||||
public SendReadReceiptJob(long threadId, @NonNull RecipientId recipientId, List<Long> messageSentTimestamps, List<MessageId> messageIds) {
|
||||
this(new Job.Parameters.Builder()
|
||||
.addConstraint(NetworkConstraint.KEY)
|
||||
@@ -94,6 +96,10 @@ public class SendReadReceiptJob extends BaseJob {
|
||||
* maximum size.
|
||||
*/
|
||||
public static void enqueue(long threadId, @NonNull RecipientId recipientId, List<MarkedMessageInfo> markedMessageInfos) {
|
||||
if (recipientId.equals(Recipient.self().getId())) {
|
||||
return;
|
||||
}
|
||||
|
||||
JobManager jobManager = ApplicationDependencies.getJobManager();
|
||||
List<List<MarkedMessageInfo>> messageIdChunks = Util.chunk(markedMessageInfos, MAX_TIMESTAMPS);
|
||||
|
||||
@@ -146,6 +152,10 @@ public class SendReadReceiptJob extends BaseJob {
|
||||
|
||||
Recipient recipient = Recipient.resolved(recipientId);
|
||||
|
||||
if (recipient.isSelf()) {
|
||||
Log.i(TAG, "Not sending to self, aborting.");
|
||||
}
|
||||
|
||||
if (recipient.isBlocked()) {
|
||||
Log.w(TAG, "Refusing to send receipts to blocked recipient");
|
||||
return;
|
||||
|
||||
@@ -150,6 +150,11 @@ public class SendViewedReceiptJob extends BaseJob {
|
||||
|
||||
Recipient recipient = Recipient.resolved(recipientId);
|
||||
|
||||
if (recipient.isSelf()) {
|
||||
Log.i(TAG, "Not sending view receipt to self.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (recipient.isBlocked()) {
|
||||
Log.w(TAG, "Refusing to send receipts to blocked recipient");
|
||||
return;
|
||||
|
||||
@@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.jobmanager.Data;
|
||||
import org.thoughtcrime.securesms.jobmanager.Job;
|
||||
import org.thoughtcrime.securesms.jobmanager.JobManager;
|
||||
import org.thoughtcrime.securesms.jobs.MultiDeviceReadUpdateJob;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
import org.whispersystems.libsignal.util.Pair;
|
||||
@@ -37,21 +38,25 @@ import static org.powermock.api.mockito.PowerMockito.mockStatic;
|
||||
import static org.powermock.api.mockito.PowerMockito.when;
|
||||
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PrepareForTest(ApplicationDependencies.class)
|
||||
@PrepareForTest({ApplicationDependencies.class, Recipient.class})
|
||||
public class MarkReadReceiverTest {
|
||||
|
||||
private final Context mockContext = mock(Context.class);
|
||||
private final JobManager mockJobManager = mock(JobManager.class);
|
||||
private final Recipient mockSelf = mock(Recipient.class);
|
||||
private final List<Job> jobs = new LinkedList<>();
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mockStatic(ApplicationDependencies.class);
|
||||
mockStatic(Recipient.class);
|
||||
when(ApplicationDependencies.getJobManager()).thenReturn(mockJobManager);
|
||||
doAnswer((Answer<Void>) invocation -> {
|
||||
jobs.add((Job) invocation.getArguments()[0]);
|
||||
return null;
|
||||
}).when(mockJobManager).add(any());
|
||||
when(Recipient.self()).thenReturn(mockSelf);
|
||||
when(mockSelf.getId()).thenReturn(RecipientId.from(-1));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -487,6 +487,12 @@ public class SignalServiceMessageSender {
|
||||
return results;
|
||||
}
|
||||
|
||||
public SendMessageResult sendSyncMessage(SignalServiceDataMessage dataMessage)
|
||||
throws IOException, UntrustedIdentityException
|
||||
{
|
||||
return sendSyncMessage(createSelfSendSyncMessage(dataMessage), Optional.absent());
|
||||
}
|
||||
|
||||
public SendMessageResult sendSyncMessage(SignalServiceSyncMessage message, Optional<UnidentifiedAccessPair> unidentifiedAccess)
|
||||
throws IOException, UntrustedIdentityException
|
||||
{
|
||||
@@ -1537,6 +1543,16 @@ public class SignalServiceMessageSender {
|
||||
return results;
|
||||
}
|
||||
|
||||
private SignalServiceSyncMessage createSelfSendSyncMessage(SignalServiceDataMessage message) {
|
||||
SentTranscriptMessage transcript = new SentTranscriptMessage(Optional.of(localAddress),
|
||||
message.getTimestamp(),
|
||||
message,
|
||||
message.getExpiresInSeconds(),
|
||||
Collections.singletonMap(localAddress, false),
|
||||
false);
|
||||
return SignalServiceSyncMessage.forSentTranscript(transcript);
|
||||
}
|
||||
|
||||
private List<SendMessageResult> sendMessage(List<SignalServiceAddress> recipients,
|
||||
List<Optional<UnidentifiedAccess>> unidentifiedAccess,
|
||||
long timestamp,
|
||||
|
||||
Reference in New Issue
Block a user