mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-17 15:33:30 +01:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4e15bcc5f0 | ||
|
|
b77abf6045 |
@@ -63,14 +63,14 @@ ktlint {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def canonicalVersionCode = 996
|
def canonicalVersionCode = 996
|
||||||
def canonicalVersionName = "5.30.5"
|
def canonicalVersionName = "5.30.6"
|
||||||
|
|
||||||
def postFixSize = 100
|
def postFixSize = 100
|
||||||
def abiPostFix = ['universal' : 0,
|
def abiPostFix = ['universal' : 5,
|
||||||
'armeabi-v7a' : 1,
|
'armeabi-v7a' : 6,
|
||||||
'arm64-v8a' : 2,
|
'arm64-v8a' : 7,
|
||||||
'x86' : 3,
|
'x86' : 8,
|
||||||
'x86_64' : 4]
|
'x86_64' : 9]
|
||||||
|
|
||||||
def keystores = [ 'debug' : loadKeystoreProperties('keystore.debug.properties') ]
|
def keystores = [ 'debug' : loadKeystoreProperties('keystore.debug.properties') ]
|
||||||
|
|
||||||
|
|||||||
@@ -227,10 +227,8 @@ public class PushMediaSendJob extends PushSendJob {
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
if (Util.equals(SignalStore.account().getAci(), address.getAci())) {
|
if (Util.equals(SignalStore.account().getAci(), address.getAci())) {
|
||||||
Optional<UnidentifiedAccessPair> syncAccess = UnidentifiedAccessUtil.getAccessForSync(context);
|
Optional<UnidentifiedAccessPair> syncAccess = UnidentifiedAccessUtil.getAccessForSync(context);
|
||||||
SignalServiceSyncMessage syncMessage = buildSelfSendSyncMessage(context, mediaMessage, syncAccess);
|
SendMessageResult result = messageSender.sendSyncMessage(mediaMessage);
|
||||||
|
|
||||||
SendMessageResult result = messageSender.sendSyncMessage(syncMessage, syncAccess);
|
|
||||||
SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId, true));
|
SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId, true));
|
||||||
return syncAccess.isPresent();
|
return syncAccess.isPresent();
|
||||||
} else {
|
} 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)
|
protected void handleProofRequiredException(@NonNull ProofRequiredException proofRequired, @Nullable Recipient recipient, long threadId, long messageId, boolean isMms)
|
||||||
throws ProofRequiredException, RetryLaterException
|
throws ProofRequiredException, RetryLaterException
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -190,10 +190,9 @@ public class PushTextSendJob extends PushSendJob {
|
|||||||
|
|
||||||
if (Util.equals(SignalStore.account().getAci(), address.getAci())) {
|
if (Util.equals(SignalStore.account().getAci(), address.getAci())) {
|
||||||
Optional<UnidentifiedAccessPair> syncAccess = UnidentifiedAccessUtil.getAccessForSync(context);
|
Optional<UnidentifiedAccessPair> syncAccess = UnidentifiedAccessUtil.getAccessForSync(context);
|
||||||
SignalServiceSyncMessage syncMessage = buildSelfSendSyncMessage(context, textSecureMessage, syncAccess);
|
|
||||||
|
|
||||||
SignalLocalMetrics.IndividualMessageSend.onDeliveryStarted(messageId);
|
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));
|
SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getDateSent(), result, ContentHint.RESENDABLE, new MessageId(messageId, false));
|
||||||
return syncAccess.isPresent();
|
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.MessageId;
|
||||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||||
import org.thoughtcrime.securesms.database.model.ReactionRecord;
|
import org.thoughtcrime.securesms.database.model.ReactionRecord;
|
||||||
|
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||||
import org.thoughtcrime.securesms.groups.GroupId;
|
import org.thoughtcrime.securesms.groups.GroupId;
|
||||||
import org.thoughtcrime.securesms.jobmanager.Data;
|
import org.thoughtcrime.securesms.jobmanager.Data;
|
||||||
import org.thoughtcrime.securesms.jobmanager.Job;
|
import org.thoughtcrime.securesms.jobmanager.Job;
|
||||||
@@ -227,14 +228,20 @@ public class ReactionSendJob extends BaseJob {
|
|||||||
GroupUtil.setDataMessageGroupContext(context, dataMessageBuilder, conversationRecipient.requireGroupId().requirePush());
|
GroupUtil.setDataMessageGroupContext(context, dataMessageBuilder, conversationRecipient.requireGroupId().requirePush());
|
||||||
}
|
}
|
||||||
|
|
||||||
SignalServiceDataMessage dataMessage = dataMessageBuilder.build();
|
SignalServiceDataMessage dataMessage = dataMessageBuilder.build();
|
||||||
List<SendMessageResult> results = GroupSendUtil.sendResendableDataMessage(context,
|
List<Recipient> nonSelfDestinations = destinations.stream().filter(r -> !r.isSelf()).collect(Collectors.toList());
|
||||||
conversationRecipient.getGroupId().transform(GroupId::requireV2).orNull(),
|
boolean includesSelf = nonSelfDestinations.size() != destinations.size();
|
||||||
destinations,
|
List<SendMessageResult> results = GroupSendUtil.sendResendableDataMessage(context,
|
||||||
false,
|
conversationRecipient.getGroupId().transform(GroupId::requireV2).orNull(),
|
||||||
ContentHint.RESENDABLE,
|
nonSelfDestinations,
|
||||||
messageId,
|
false,
|
||||||
dataMessage);
|
ContentHint.RESENDABLE,
|
||||||
|
messageId,
|
||||||
|
dataMessage);
|
||||||
|
|
||||||
|
if (includesSelf) {
|
||||||
|
results.add(ApplicationDependencies.getSignalServiceMessageSender().sendSyncMessage(dataMessage));
|
||||||
|
}
|
||||||
|
|
||||||
return GroupSendJobHelper.getCompletedSends(destinations, results);
|
return GroupSendJobHelper.getCompletedSends(destinations, results);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,6 +102,11 @@ public class SendDeliveryReceiptJob extends BaseJob {
|
|||||||
SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender();
|
SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender();
|
||||||
Recipient recipient = Recipient.resolved(recipientId);
|
Recipient recipient = Recipient.resolved(recipientId);
|
||||||
|
|
||||||
|
if (recipient.isSelf()) {
|
||||||
|
Log.i(TAG, "Not sending to self, abort");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (recipient.isUnregistered()) {
|
if (recipient.isUnregistered()) {
|
||||||
Log.w(TAG, recipient.getId() + " is unregistered!");
|
Log.w(TAG, recipient.getId() + " is unregistered!");
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ package org.thoughtcrime.securesms.jobs;
|
|||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
import org.signal.core.util.logging.Log;
|
import org.signal.core.util.logging.Log;
|
||||||
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
|
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
|
||||||
@@ -59,6 +60,7 @@ public class SendReadReceiptJob extends BaseJob {
|
|||||||
private final long timestamp;
|
private final long timestamp;
|
||||||
private final List<MessageId> messageIds;
|
private final List<MessageId> messageIds;
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
public SendReadReceiptJob(long threadId, @NonNull RecipientId recipientId, List<Long> messageSentTimestamps, List<MessageId> messageIds) {
|
public SendReadReceiptJob(long threadId, @NonNull RecipientId recipientId, List<Long> messageSentTimestamps, List<MessageId> messageIds) {
|
||||||
this(new Job.Parameters.Builder()
|
this(new Job.Parameters.Builder()
|
||||||
.addConstraint(NetworkConstraint.KEY)
|
.addConstraint(NetworkConstraint.KEY)
|
||||||
@@ -94,6 +96,10 @@ public class SendReadReceiptJob extends BaseJob {
|
|||||||
* maximum size.
|
* maximum size.
|
||||||
*/
|
*/
|
||||||
public static void enqueue(long threadId, @NonNull RecipientId recipientId, List<MarkedMessageInfo> markedMessageInfos) {
|
public static void enqueue(long threadId, @NonNull RecipientId recipientId, List<MarkedMessageInfo> markedMessageInfos) {
|
||||||
|
if (recipientId.equals(Recipient.self().getId())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
JobManager jobManager = ApplicationDependencies.getJobManager();
|
JobManager jobManager = ApplicationDependencies.getJobManager();
|
||||||
List<List<MarkedMessageInfo>> messageIdChunks = Util.chunk(markedMessageInfos, MAX_TIMESTAMPS);
|
List<List<MarkedMessageInfo>> messageIdChunks = Util.chunk(markedMessageInfos, MAX_TIMESTAMPS);
|
||||||
|
|
||||||
@@ -146,6 +152,10 @@ public class SendReadReceiptJob extends BaseJob {
|
|||||||
|
|
||||||
Recipient recipient = Recipient.resolved(recipientId);
|
Recipient recipient = Recipient.resolved(recipientId);
|
||||||
|
|
||||||
|
if (recipient.isSelf()) {
|
||||||
|
Log.i(TAG, "Not sending to self, aborting.");
|
||||||
|
}
|
||||||
|
|
||||||
if (recipient.isBlocked()) {
|
if (recipient.isBlocked()) {
|
||||||
Log.w(TAG, "Refusing to send receipts to blocked recipient");
|
Log.w(TAG, "Refusing to send receipts to blocked recipient");
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -150,6 +150,11 @@ public class SendViewedReceiptJob extends BaseJob {
|
|||||||
|
|
||||||
Recipient recipient = Recipient.resolved(recipientId);
|
Recipient recipient = Recipient.resolved(recipientId);
|
||||||
|
|
||||||
|
if (recipient.isSelf()) {
|
||||||
|
Log.i(TAG, "Not sending view receipt to self.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (recipient.isBlocked()) {
|
if (recipient.isBlocked()) {
|
||||||
Log.w(TAG, "Refusing to send receipts to blocked recipient");
|
Log.w(TAG, "Refusing to send receipts to blocked recipient");
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.jobmanager.Data;
|
|||||||
import org.thoughtcrime.securesms.jobmanager.Job;
|
import org.thoughtcrime.securesms.jobmanager.Job;
|
||||||
import org.thoughtcrime.securesms.jobmanager.JobManager;
|
import org.thoughtcrime.securesms.jobmanager.JobManager;
|
||||||
import org.thoughtcrime.securesms.jobs.MultiDeviceReadUpdateJob;
|
import org.thoughtcrime.securesms.jobs.MultiDeviceReadUpdateJob;
|
||||||
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||||
import org.thoughtcrime.securesms.util.Util;
|
import org.thoughtcrime.securesms.util.Util;
|
||||||
import org.whispersystems.libsignal.util.Pair;
|
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;
|
import static org.powermock.api.mockito.PowerMockito.when;
|
||||||
|
|
||||||
@RunWith(PowerMockRunner.class)
|
@RunWith(PowerMockRunner.class)
|
||||||
@PrepareForTest(ApplicationDependencies.class)
|
@PrepareForTest({ApplicationDependencies.class, Recipient.class})
|
||||||
public class MarkReadReceiverTest {
|
public class MarkReadReceiverTest {
|
||||||
|
|
||||||
private final Context mockContext = mock(Context.class);
|
private final Context mockContext = mock(Context.class);
|
||||||
private final JobManager mockJobManager = mock(JobManager.class);
|
private final JobManager mockJobManager = mock(JobManager.class);
|
||||||
|
private final Recipient mockSelf = mock(Recipient.class);
|
||||||
private final List<Job> jobs = new LinkedList<>();
|
private final List<Job> jobs = new LinkedList<>();
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
mockStatic(ApplicationDependencies.class);
|
mockStatic(ApplicationDependencies.class);
|
||||||
|
mockStatic(Recipient.class);
|
||||||
when(ApplicationDependencies.getJobManager()).thenReturn(mockJobManager);
|
when(ApplicationDependencies.getJobManager()).thenReturn(mockJobManager);
|
||||||
doAnswer((Answer<Void>) invocation -> {
|
doAnswer((Answer<Void>) invocation -> {
|
||||||
jobs.add((Job) invocation.getArguments()[0]);
|
jobs.add((Job) invocation.getArguments()[0]);
|
||||||
return null;
|
return null;
|
||||||
}).when(mockJobManager).add(any());
|
}).when(mockJobManager).add(any());
|
||||||
|
when(Recipient.self()).thenReturn(mockSelf);
|
||||||
|
when(mockSelf.getId()).thenReturn(RecipientId.from(-1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -487,6 +487,12 @@ public class SignalServiceMessageSender {
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SendMessageResult sendSyncMessage(SignalServiceDataMessage dataMessage)
|
||||||
|
throws IOException, UntrustedIdentityException
|
||||||
|
{
|
||||||
|
return sendSyncMessage(createSelfSendSyncMessage(dataMessage), Optional.absent());
|
||||||
|
}
|
||||||
|
|
||||||
public SendMessageResult sendSyncMessage(SignalServiceSyncMessage message, Optional<UnidentifiedAccessPair> unidentifiedAccess)
|
public SendMessageResult sendSyncMessage(SignalServiceSyncMessage message, Optional<UnidentifiedAccessPair> unidentifiedAccess)
|
||||||
throws IOException, UntrustedIdentityException
|
throws IOException, UntrustedIdentityException
|
||||||
{
|
{
|
||||||
@@ -1528,6 +1534,16 @@ public class SignalServiceMessageSender {
|
|||||||
return results;
|
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,
|
private List<SendMessageResult> sendMessage(List<SignalServiceAddress> recipients,
|
||||||
List<Optional<UnidentifiedAccess>> unidentifiedAccess,
|
List<Optional<UnidentifiedAccess>> unidentifiedAccess,
|
||||||
long timestamp,
|
long timestamp,
|
||||||
|
|||||||
Reference in New Issue
Block a user