From 8de4290c5b5f5821af94f3a39da979484cea4294 Mon Sep 17 00:00:00 2001 From: Alan Evans Date: Tue, 29 Sep 2020 11:00:46 -0300 Subject: [PATCH] Fix can create backups when timed backup is waiting for charging constraint. --- .../securesms/backup/BackupDialog.java | 1 + .../securesms/jobmanager/JobController.java | 7 ++--- .../securesms/jobs/LocalBackupJob.java | 28 ++++++++++--------- .../preferences/ChatsPreferenceFragment.java | 5 ++-- .../service/LocalBackupListener.java | 3 +- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/BackupDialog.java b/app/src/main/java/org/thoughtcrime/securesms/backup/BackupDialog.java index eed9e945b..9d69056a8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/BackupDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/BackupDialog.java @@ -41,6 +41,7 @@ public class BackupDialog { CheckBox confirmationCheckBox = dialog.findViewById(R.id.confirmation_check); if (confirmationCheckBox.isChecked()) { BackupPassphrase.set(context, Util.join(password, " ")); + TextSecurePreferences.setNextBackupTime(context, 0); TextSecurePreferences.setBackupEnabled(context, true); LocalBackupListener.schedule(context); 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 ee82e524c..54a4c7a08 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobmanager; import android.app.Application; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; @@ -23,7 +24,6 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Set; /** @@ -158,9 +158,8 @@ class JobController { @WorkerThread synchronized void cancelAllInQueue(@NonNull String queue) { - Stream.of(runningJobs.values()) - .filter(j -> Objects.equals(j.getParameters().getQueue(), queue)) - .map(Job::getId) + Stream.of(jobStorage.getJobsInQueue(queue)) + .map(JobSpec::getId) .forEach(this::cancelJob); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/LocalBackupJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/LocalBackupJob.java index 22f35f625..c55de2c2e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/LocalBackupJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/LocalBackupJob.java @@ -11,8 +11,10 @@ import org.thoughtcrime.securesms.backup.FullBackupExporter; import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.NoExternalStorageException; +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.ChargingConstraint; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.notifications.NotificationChannels; @@ -34,24 +36,24 @@ public final class LocalBackupJob extends BaseJob { private static final String TAG = Log.tag(LocalBackupJob.class); + private static final String QUEUE = "__LOCAL_BACKUP__"; + public static final String TEMP_BACKUP_FILE_PREFIX = ".backup"; public static final String TEMP_BACKUP_FILE_SUFFIX = ".tmp"; - public LocalBackupJob(boolean forceNow) { - this(buildParameters(forceNow)); - } - - private static @NonNull Job.Parameters buildParameters(boolean forceNow) { - Job.Parameters.Builder builder = new Job.Parameters.Builder() - .setQueue("__LOCAL_BACKUP__") - .setMaxInstances(1) - .setMaxAttempts(3); - - if (!forceNow) { - builder.addConstraint(ChargingConstraint.KEY); + public static void enqueue(boolean force) { + JobManager jobManager = ApplicationDependencies.getJobManager(); + Parameters.Builder parameters = new Parameters.Builder() + .setQueue(QUEUE) + .setMaxInstances(1) + .setMaxAttempts(3); + if (force) { + jobManager.cancelAllInQueue(QUEUE); + } else { + parameters.addConstraint(ChargingConstraint.KEY); } - return builder.build(); + jobManager.add(new LocalBackupJob(parameters.build())); } private LocalBackupJob(@NonNull Job.Parameters parameters) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java b/app/src/main/java/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java index 8a69538e7..dced0337e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java @@ -18,7 +18,6 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.backup.BackupDialog; import org.thoughtcrime.securesms.backup.FullBackupBase.BackupEvent; import org.thoughtcrime.securesms.components.SwitchPreferenceCompat; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobs.LocalBackupJob; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.permissions.Permissions; @@ -152,8 +151,8 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment { .request(Manifest.permission.WRITE_EXTERNAL_STORAGE) .ifNecessary() .onAllGranted(() -> { - Log.i(TAG, "Queing backup..."); - ApplicationDependencies.getJobManager().add(new LocalBackupJob(true)); + Log.i(TAG, "Starting backup from user"); + LocalBackupJob.enqueue(true); }) .withPermanentDenialDialog(getString(R.string.ChatsPreferenceFragment_signal_requires_external_storage_permission_in_order_to_create_backups)) .execute(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/LocalBackupListener.java b/app/src/main/java/org/thoughtcrime/securesms/service/LocalBackupListener.java index e52f95b3c..a7587c7df 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/LocalBackupListener.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/LocalBackupListener.java @@ -6,7 +6,6 @@ import android.content.Intent; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobs.LocalBackupJob; import org.thoughtcrime.securesms.util.TextSecurePreferences; @@ -24,7 +23,7 @@ public class LocalBackupListener extends PersistentAlarmManagerListener { @Override protected long onAlarm(Context context, long scheduledTime) { if (TextSecurePreferences.isBackupEnabled(context)) { - ApplicationDependencies.getJobManager().add(new LocalBackupJob(false)); + LocalBackupJob.enqueue(false); } return setNextBackupTimeToIntervalFromNow(context);