diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java index 7bd3e0af85..866fb27e18 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -38,7 +38,7 @@ import org.thoughtcrime.securesms.jobs.MarkerJob; import org.thoughtcrime.securesms.jobs.PreKeysSyncJob; import org.thoughtcrime.securesms.jobs.PushDecryptMessageJob; import org.thoughtcrime.securesms.jobs.PushGroupSendJob; -import org.thoughtcrime.securesms.jobs.PushMediaSendJob; +import org.thoughtcrime.securesms.jobs.IndividualSendJob; import org.thoughtcrime.securesms.jobs.PushProcessMessageJob; import org.thoughtcrime.securesms.jobs.ReactionSendJob; import org.thoughtcrime.securesms.jobs.TypingSendJob; @@ -180,7 +180,7 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr .setJobStorage(new FastJobStorage(JobDatabase.getInstance(context))) .setJobMigrator(new JobMigrator(TextSecurePreferences.getJobManagerVersion(context), JobManager.CURRENT_VERSION, JobManagerFactories.getJobMigrations(context))) .addReservedJobRunner(new FactoryJobPredicate(PushDecryptMessageJob.KEY, PushProcessMessageJob.KEY, MarkerJob.KEY)) - .addReservedJobRunner(new FactoryJobPredicate(PushMediaSendJob.KEY, PushGroupSendJob.KEY, ReactionSendJob.KEY, TypingSendJob.KEY, GroupCallUpdateSendJob.KEY)) + .addReservedJobRunner(new FactoryJobPredicate(IndividualSendJob.KEY, PushGroupSendJob.KEY, ReactionSendJob.KEY, TypingSendJob.KEY, GroupCallUpdateSendJob.KEY)) .build(); return new JobManager(context, config); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java similarity index 92% rename from app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java rename to app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java index b9492641d6..3246b92ed4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java @@ -22,6 +22,7 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; +import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.mms.MmsException; import org.thoughtcrime.securesms.mms.OutgoingMessage; @@ -56,22 +57,29 @@ import java.util.List; import java.util.Optional; import java.util.Set; import java.util.UUID; +import java.util.concurrent.TimeUnit; -public class PushMediaSendJob extends PushSendJob { +public class IndividualSendJob extends PushSendJob { public static final String KEY = "PushMediaSendJob"; - private static final String TAG = Log.tag(PushMediaSendJob.class); + private static final String TAG = Log.tag(IndividualSendJob.class); private static final String KEY_MESSAGE_ID = "message_id"; - private long messageId; + private final long messageId; - public PushMediaSendJob(long messageId, @NonNull Recipient recipient, boolean hasMedia) { - this(constructParameters(recipient, hasMedia), messageId); + public IndividualSendJob(long messageId, @NonNull Recipient recipient, boolean hasMedia) { + this(new Parameters.Builder() + .setQueue(recipient.getId().toQueueKey(hasMedia)) + .addConstraint(NetworkConstraint.KEY) + .setLifespan(TimeUnit.DAYS.toMillis(1)) + .setMaxAttempts(Parameters.UNLIMITED) + .build(), + messageId); } - private PushMediaSendJob(Job.Parameters parameters, long messageId) { + private IndividualSendJob(Job.Parameters parameters, long messageId) { super(parameters); this.messageId = messageId; } @@ -83,11 +91,10 @@ public class PushMediaSendJob extends PushSendJob { throw new AssertionError("No ServiceId!"); } - MessageTable database = SignalDatabase.messages(); - OutgoingMessage message = database.getOutgoingMessage(messageId); + OutgoingMessage message = SignalDatabase.messages().getOutgoingMessage(messageId); Set attachmentUploadIds = enqueueCompressingAndUploadAttachmentsChains(jobManager, message); - jobManager.add(new PushMediaSendJob(messageId, recipient, attachmentUploadIds.size() > 0), attachmentUploadIds, recipient.getId().toQueueKey()); + jobManager.add(new IndividualSendJob(messageId, recipient, attachmentUploadIds.size() > 0), attachmentUploadIds, recipient.getId().toQueueKey()); } catch (NoSuchMessageException | MmsException e) { Log.w(TAG, "Failed to enqueue message.", e); @@ -322,10 +329,10 @@ public class PushMediaSendJob extends PushSendJob { return data.getLong(KEY_MESSAGE_ID); } - public static final class Factory implements Job.Factory { + public static final class Factory implements Job.Factory { @Override - public @NonNull PushMediaSendJob create(@NonNull Parameters parameters, @NonNull Data data) { - return new PushMediaSendJob(parameters, data.getLong(KEY_MESSAGE_ID)); + public @NonNull IndividualSendJob create(@NonNull Parameters parameters, @NonNull Data data) { + return new IndividualSendJob(parameters, data.getLong(KEY_MESSAGE_ID)); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java index 40372a2347..753067b1b6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java @@ -108,6 +108,7 @@ public final class JobManagerFactories { put(GroupCallPeekJob.KEY, new GroupCallPeekJob.Factory()); put(GroupCallPeekWorkerJob.KEY, new GroupCallPeekWorkerJob.Factory()); put(GroupV2UpdateSelfProfileKeyJob.KEY, new GroupV2UpdateSelfProfileKeyJob.Factory()); + put(IndividualSendJob.KEY, new IndividualSendJob.Factory()); put(KbsEnclaveMigrationWorkerJob.KEY, new KbsEnclaveMigrationWorkerJob.Factory()); put(LeaveGroupV2Job.KEY, new LeaveGroupV2Job.Factory()); put(LeaveGroupV2WorkerJob.KEY, new LeaveGroupV2WorkerJob.Factory()); @@ -151,7 +152,6 @@ public final class JobManagerFactories { put(PushDistributionListSendJob.KEY, new PushDistributionListSendJob.Factory()); put(PushGroupSendJob.KEY, new PushGroupSendJob.Factory()); put(PushGroupSilentUpdateSendJob.KEY, new PushGroupSilentUpdateSendJob.Factory()); - put(PushMediaSendJob.KEY, new PushMediaSendJob.Factory()); put(PushNotificationReceiveJob.KEY, new PushNotificationReceiveJob.Factory()); put(PushProcessEarlyMessagesJob.KEY, new PushProcessEarlyMessagesJob.Factory()); put(PushProcessMessageJob.KEY, new PushProcessMessageJob.Factory()); @@ -253,7 +253,7 @@ public final class JobManagerFactories { put("CreateSignedPreKeyJob", new PreKeysSyncJob.Factory()); put("RefreshPreKeysJob", new PreKeysSyncJob.Factory()); put("RecipientChangedNumberJob", new FailingJob.Factory()); - put("PushTextSendJob", new PushMediaSendJob.Factory()); + put("PushTextSendJob", new IndividualSendJob.Factory()); }}; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJobV2.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJobV2.kt index f758a89a77..c96615ab22 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJobV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJobV2.kt @@ -15,7 +15,7 @@ import kotlin.time.Duration.Companion.seconds /** * Crafts a [OutgoingPaymentsNotificationMessage] and uses the regular media sending framework to send it * instead of attempting to send directly. The logic for actually creating over-the-wire representation is - * now in [PushMediaSendJob] which gets enqueued by [MessageSender.send]. + * now in [IndividualSendJob] which gets enqueued by [MessageSender.send]. */ class PaymentNotificationSendJobV2 private constructor( parameters: Parameters, diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java index d396a95baf..73ff34709d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java @@ -36,7 +36,6 @@ import org.thoughtcrime.securesms.events.PartProgressEvent; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.BackoffUtil; -import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.CertificateType; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.linkpreview.LinkPreview; @@ -90,15 +89,6 @@ public abstract class PushSendJob extends SendJob { super(parameters); } - protected static Job.Parameters constructParameters(@NonNull Recipient recipient, boolean hasMedia) { - return new Parameters.Builder() - .setQueue(recipient.getId().toQueueKey(hasMedia)) - .addConstraint(NetworkConstraint.KEY) - .setLifespan(TimeUnit.DAYS.toMillis(1)) - .setMaxAttempts(Parameters.UNLIMITED) - .build(); - } - @Override protected final void onSend() throws Exception { if (SignalStore.account().aciPreKeys().getSignedPreKeyFailureCount() > 5) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RateLimitUtil.java b/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RateLimitUtil.java index 025c848fd3..89258500e5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RateLimitUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RateLimitUtil.java @@ -10,7 +10,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobs.PushGroupSendJob; -import org.thoughtcrime.securesms.jobs.PushMediaSendJob; +import org.thoughtcrime.securesms.jobs.IndividualSendJob; import java.util.Set; @@ -38,7 +38,7 @@ public final class RateLimitUtil { ApplicationDependencies.getJobManager().update((job, serializer) -> { Data data = serializer.deserialize(job.getSerializedData()); - if (job.getFactoryKey().equals(PushMediaSendJob.KEY) && messageIds.contains(PushMediaSendJob.getMessageId(data))) { + if (job.getFactoryKey().equals(IndividualSendJob.KEY) && messageIds.contains(IndividualSendJob.getMessageId(data))) { return job.withNextRunAttemptTime(System.currentTimeMillis()); } else if (job.getFactoryKey().equals(PushGroupSendJob.KEY) && messageIds.contains(PushGroupSendJob.getMessageId(data))) { return job.withNextRunAttemptTime(System.currentTimeMillis()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java index da516bc518..6f2f54954d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java @@ -58,7 +58,7 @@ import org.thoughtcrime.securesms.jobs.MmsSendJob; import org.thoughtcrime.securesms.jobs.ProfileKeySendJob; import org.thoughtcrime.securesms.jobs.PushDistributionListSendJob; import org.thoughtcrime.securesms.jobs.PushGroupSendJob; -import org.thoughtcrime.securesms.jobs.PushMediaSendJob; +import org.thoughtcrime.securesms.jobs.IndividualSendJob; import org.thoughtcrime.securesms.jobs.ReactionSendJob; import org.thoughtcrime.securesms.jobs.RemoteDeleteSendJob; import org.thoughtcrime.securesms.jobs.ResumableUploadSpecJob; @@ -407,7 +407,7 @@ public class MessageSender { } else if (recipient.isDistributionList()) { jobManager.add(new PushDistributionListSendJob(messageId, recipient.getId(), true, Collections.emptySet()), messageDependsOnIds, recipient.getId().toQueueKey()); } else { - jobManager.add(new PushMediaSendJob(messageId, recipient, true), messageDependsOnIds, recipient.getId().toQueueKey()); + jobManager.add(new IndividualSendJob(messageId, recipient, true), messageDependsOnIds, recipient.getId().toQueueKey()); } } } @@ -533,10 +533,10 @@ public class MessageSender { JobManager jobManager = ApplicationDependencies.getJobManager(); if (uploadJobIds.size() > 0) { - Job mediaSend = new PushMediaSendJob(messageId, recipient, true); + Job mediaSend = new IndividualSendJob(messageId, recipient, true); jobManager.add(mediaSend, uploadJobIds); } else { - PushMediaSendJob.enqueue(context, jobManager, messageId, recipient); + IndividualSendJob.enqueue(context, jobManager, messageId, recipient); } } diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdJobMigrationTest.java b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdJobMigrationTest.java index 275fda8a82..f5b2b1930f 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdJobMigrationTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdJobMigrationTest.java @@ -19,7 +19,7 @@ import org.thoughtcrime.securesms.jobs.MultiDeviceReadUpdateJob; import org.thoughtcrime.securesms.jobs.MultiDeviceVerifiedUpdateJob; import org.thoughtcrime.securesms.jobs.MultiDeviceViewOnceOpenJob; import org.thoughtcrime.securesms.jobs.PushGroupSendJob; -import org.thoughtcrime.securesms.jobs.PushMediaSendJob; +import org.thoughtcrime.securesms.jobs.IndividualSendJob; import org.thoughtcrime.securesms.jobs.RetrieveProfileAvatarJob; import org.thoughtcrime.securesms.jobs.SendDeliveryReceiptJob; import org.thoughtcrime.securesms.jobs.SmsSendJob; @@ -258,7 +258,7 @@ public class RecipientIdJobMigrationTest { assertEquals(RecipientId.from(1).toQueueKey(), converted.getQueueKey()); assertEquals(1, converted.getData().getLong("message_id")); - new PushMediaSendJob.Factory().create(mock(Job.Parameters.class), converted.getData()); + new IndividualSendJob.Factory().create(mock(Job.Parameters.class), converted.getData()); } @Test