diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java index 03bafa77eb..9e031a2fd3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java @@ -407,8 +407,8 @@ public abstract class Job { /** * Specify the maximum number of instances you'd want of this job at any given time, as - * determined by the job's queue key. If enqueueing this job would put it over that limit, - * it will be ignored. + * determined by the job's factory key and queue key. If enqueueing this job would put it over + * that limit, it will be ignored. * * This property is ignored if the job is submitted as part of a {@link JobManager.Chain}, or * if the job has no queue key. diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java index 2e0e3becf4..014cecc10d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java @@ -314,7 +314,7 @@ class JobController { boolean exceedsQueue = solo.getParameters().getQueue() != null && solo.getParameters().getMaxInstancesForQueue() != Job.Parameters.UNLIMITED && - jobStorage.getJobCountForQueue(solo.getParameters().getQueue()) >= solo.getParameters().getMaxInstancesForQueue(); + jobStorage.getJobCountForFactoryAndQueue(solo.getFactoryKey(), solo.getParameters().getQueue()) >= solo.getParameters().getMaxInstancesForQueue(); if (exceedsQueue) { return true; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/persistence/JobStorage.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/persistence/JobStorage.java index 569e870ef3..904ce853ac 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/persistence/JobStorage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/persistence/JobStorage.java @@ -30,7 +30,7 @@ public interface JobStorage { int getJobCountForFactory(@NonNull String factoryKey); @WorkerThread - int getJobCountForQueue(@NonNull String queueKey); + int getJobCountForFactoryAndQueue(@NonNull String factoryKey, @NonNull String queueKey); @WorkerThread void updateJobRunningState(@NonNull String id, boolean isRunning); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/FastJobStorage.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/FastJobStorage.java index 80bd6898e2..7c0d32b499 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/FastJobStorage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/FastJobStorage.java @@ -167,9 +167,10 @@ public class FastJobStorage implements JobStorage { } @Override - public synchronized int getJobCountForQueue(@NonNull String queueKey) { + public synchronized int getJobCountForFactoryAndQueue(@NonNull String factoryKey, @NonNull String queueKey) { return (int) Stream.of(jobs) - .filter(j -> queueKey.equals(j.getQueueKey())) + .filter(j -> factoryKey.equals(j.getFactoryKey()) && + queueKey.equals(j.getQueueKey())) .count(); } diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobs/FastJobStorageTest.java b/app/src/test/java/org/thoughtcrime/securesms/jobs/FastJobStorageTest.java index 82c2957702..6b019fa4a3 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/jobs/FastJobStorageTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/jobs/FastJobStorageTest.java @@ -547,13 +547,14 @@ public class FastJobStorageTest { } @Test - public void getJobCountForQueue_general() { + public void getJobCountForFactoryAndQueue_general() { FastJobStorage subject = new FastJobStorage(fixedDataDatabase(DataSet1.FULL_SPECS)); subject.init(); - assertEquals(1, subject.getJobCountForQueue("q1")); - assertEquals(0, subject.getJobCountForQueue("does-not-exist")); + assertEquals(1, subject.getJobCountForFactoryAndQueue("f1", "q1")); + assertEquals(0, subject.getJobCountForFactoryAndQueue("f2", "q1")); + assertEquals(0, subject.getJobCountForFactoryAndQueue("f1", "does-not-exist")); } private JobDatabase noopDatabase() {