diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobSchedulerScheduler.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobSchedulerScheduler.java index 16bd4d024..ad1a8eac9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobSchedulerScheduler.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobSchedulerScheduler.java @@ -11,7 +11,6 @@ import android.content.SharedPreferences; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; -import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.logging.Log; @@ -36,7 +35,15 @@ public class JobSchedulerScheduler implements Scheduler { @RequiresApi(26) @Override public void schedule(long delay, @NonNull List constraints) { - JobInfo.Builder jobInfoBuilder = new JobInfo.Builder(getNextId(), new ComponentName(application, SystemService.class)) + JobScheduler jobScheduler = application.getSystemService(JobScheduler.class); + int currentId = getCurrentId(); + + if (constraints.isEmpty() && jobScheduler.getPendingJob(currentId) != null) { + Log.d(TAG, "Skipping JobScheduler enqueue because we have no constraints and there's already one pending."); + return; + } + + JobInfo.Builder jobInfoBuilder = new JobInfo.Builder(getAndUpdateNextId(), new ComponentName(application, SystemService.class)) .setMinimumLatency(delay) .setPersisted(true); @@ -44,11 +51,15 @@ public class JobSchedulerScheduler implements Scheduler { constraint.applyToJobInfo(jobInfoBuilder); } - JobScheduler jobScheduler = application.getSystemService(JobScheduler.class); jobScheduler.schedule(jobInfoBuilder.build()); } - private int getNextId() { + private int getCurrentId() { + SharedPreferences prefs = application.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); + return prefs.getInt(PREF_NEXT_ID, 0); + } + + private int getAndUpdateNextId() { SharedPreferences prefs = application.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); int returnedId = prefs.getInt(PREF_NEXT_ID, 0); int nextId = returnedId + 1 > MAX_ID ? 0 : returnedId + 1;