diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java index 8930c066c0..11dd8c2479 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java @@ -21,6 +21,7 @@ import org.thoughtcrime.securesms.jobmanager.persistence.FullSpec; import org.thoughtcrime.securesms.jobmanager.persistence.JobSpec; import org.signal.core.util.CursorUtil; +import java.nio.charset.StandardCharsets; import java.util.LinkedList; import java.util.List; @@ -193,7 +194,7 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabaseOpenH getWritableDatabase().update(Jobs.TABLE_NAME, contentValues, query, args); } - public synchronized void updateJobAfterRetry(@NonNull String id, boolean isRunning, int runAttempt, long nextRunAttemptTime, @NonNull String serializedData) { + public synchronized void updateJobAfterRetry(@NonNull String id, boolean isRunning, int runAttempt, long nextRunAttemptTime, @NonNull byte[] serializedData) { ContentValues contentValues = new ContentValues(); contentValues.put(Jobs.IS_RUNNING, isRunning ? 1 : 0); contentValues.put(Jobs.RUN_ATTEMPT, runAttempt); @@ -348,8 +349,8 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabaseOpenH cursor.getInt(cursor.getColumnIndexOrThrow(Jobs.RUN_ATTEMPT)), cursor.getInt(cursor.getColumnIndexOrThrow(Jobs.MAX_ATTEMPTS)), cursor.getLong(cursor.getColumnIndexOrThrow(Jobs.LIFESPAN)), - cursor.getString(cursor.getColumnIndexOrThrow(Jobs.SERIALIZED_DATA)), - cursor.getString(cursor.getColumnIndexOrThrow(Jobs.SERIALIZED_INPUT_DATA)), + cursor.getBlob(cursor.getColumnIndexOrThrow(Jobs.SERIALIZED_DATA)), + cursor.getBlob(cursor.getColumnIndexOrThrow(Jobs.SERIALIZED_INPUT_DATA)), cursor.getInt(cursor.getColumnIndexOrThrow(Jobs.IS_RUNNING)) == 1, false); } 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 b8bf9e6333..2158b938c0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -32,7 +32,6 @@ import org.thoughtcrime.securesms.database.PendingRetryReceiptCache; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.JobMigrator; import org.thoughtcrime.securesms.jobmanager.impl.FactoryJobPredicate; -import org.thoughtcrime.securesms.jobmanager.impl.JsonDataSerializer; import org.thoughtcrime.securesms.jobs.FastJobStorage; import org.thoughtcrime.securesms.jobs.GroupCallUpdateSendJob; import org.thoughtcrime.securesms.jobs.JobManagerFactories; @@ -170,7 +169,6 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr @Override public @NonNull JobManager provideJobManager() { JobManager.Configuration config = new JobManager.Configuration.Builder() - .setDataSerializer(new JsonDataSerializer()) .setJobFactories(JobManagerFactories.getJobFactories(context)) .setConstraintFactories(JobManagerFactories.getConstraintFactories(context)) .setConstraintObservers(JobManagerFactories.getConstraintObservers(context)) 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 2c2ce59f45..15e5f89fa0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java @@ -24,10 +24,10 @@ import static androidx.annotation.VisibleForTesting.PACKAGE_PRIVATE; * often they should be retried, and how long they should be retried for. * * Never rely on a specific instance of this class being run. It can be created and destroyed as the - * job is retried. State that you want to save is persisted to a {@link Data} object in + * job is retried. State that you want to save is persisted to a {@link JsonJobData} object in * {@link #serialize()}. Your job is then recreated using a {@link Factory} that you register in * {@link JobManager.Configuration.Builder#setJobFactories(Map)}, which is given the saved - * {@link Data} bundle. + * {@link JsonJobData} bundle. */ public abstract class Job { @@ -62,11 +62,11 @@ public abstract class Job { return nextRunAttemptTime; } - public final @Nullable Data getInputData() { + public final @Nullable byte[] getInputData() { return parameters.getInputData(); } - public final @NonNull Data requireInputData() { + public final @NonNull byte[] requireInputData() { return Objects.requireNonNull(parameters.getInputData()); } @@ -126,7 +126,7 @@ public abstract class Job { /** * Serialize your job state so that it can be recreated in the future. */ - public abstract @NonNull Data serialize(); + public abstract @Nullable byte[] serialize(); /** * Returns the key that can be used to find the relevant factory needed to create your job. @@ -146,7 +146,7 @@ public abstract class Job { public abstract void onFailure(); public interface Factory { - @NonNull T create(@NonNull Parameters parameters, @NonNull Data data); + @NonNull T create(@NonNull Parameters parameters, @Nullable byte[] serializedData); } public static final class Result { @@ -158,10 +158,10 @@ public abstract class Job { private final ResultType resultType; private final RuntimeException runtimeException; - private final Data outputData; + private final byte[] outputData; private final long backoffInterval; - private Result(@NonNull ResultType resultType, @Nullable RuntimeException runtimeException, @Nullable Data outputData, long backoffInterval) { + private Result(@NonNull ResultType resultType, @Nullable RuntimeException runtimeException, @Nullable byte[] outputData, long backoffInterval) { this.resultType = resultType; this.runtimeException = runtimeException; this.outputData = outputData; @@ -174,7 +174,7 @@ public abstract class Job { } /** Job completed successfully and wants to provide some output data. */ - public static Result success(@Nullable Data outputData) { + public static Result success(@Nullable byte[] outputData) { return new Result(ResultType.SUCCESS, null, outputData, INVALID_BACKOFF); } @@ -215,7 +215,7 @@ public abstract class Job { return runtimeException; } - @Nullable Data getOutputData() { + @Nullable byte[] getOutputData() { return outputData; } @@ -259,7 +259,7 @@ public abstract class Job { private final int maxInstancesForQueue; private final String queue; private final List constraintKeys; - private final Data inputData; + private final byte[] inputData; private final boolean memoryOnly; private Parameters(@NonNull String id, @@ -270,7 +270,7 @@ public abstract class Job { int maxInstancesForQueue, @Nullable String queue, @NonNull List constraintKeys, - @Nullable Data inputData, + @Nullable byte[] inputData, boolean memoryOnly) { this.id = id; @@ -317,7 +317,7 @@ public abstract class Job { return constraintKeys; } - @Nullable Data getInputData() { + @Nullable byte[] getInputData() { return inputData; } @@ -339,7 +339,7 @@ public abstract class Job { private int maxInstancesForQueue; private String queue; private List constraintKeys; - private Data inputData; + private byte[] inputData; private boolean memoryOnly; public Builder() { @@ -358,7 +358,7 @@ public abstract class Job { int maxInstancesForQueue, @Nullable String queue, @NonNull List constraintKeys, - @Nullable Data inputData, + @Nullable byte[] inputData, boolean memoryOnly) { this.id = id; @@ -465,10 +465,10 @@ public abstract class Job { } /** - * Sets the input data that will be made availabe to the job when it is run. + * Sets the input data that will be made available to the job when it is run. * Should only be set by {@link JobController}. */ - @NonNull Builder setInputData(@Nullable Data inputData) { + @NonNull Builder setInputData(@Nullable byte[] inputData) { this.inputData = inputData; return this; } 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 cd925967c1..968fc60dcf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java @@ -40,7 +40,6 @@ class JobController { private final JobStorage jobStorage; private final JobInstantiator jobInstantiator; private final ConstraintInstantiator constraintInstantiator; - private final Data.Serializer dataSerializer; private final JobTracker jobTracker; private final Scheduler scheduler; private final Debouncer debouncer; @@ -51,7 +50,6 @@ class JobController { @NonNull JobStorage jobStorage, @NonNull JobInstantiator jobInstantiator, @NonNull ConstraintInstantiator constraintInstantiator, - @NonNull Data.Serializer dataSerializer, @NonNull JobTracker jobTracker, @NonNull Scheduler scheduler, @NonNull Debouncer debouncer, @@ -61,7 +59,6 @@ class JobController { this.jobStorage = jobStorage; this.jobInstantiator = jobInstantiator; this.constraintInstantiator = constraintInstantiator; - this.dataSerializer = dataSerializer; this.jobTracker = jobTracker; this.scheduler = scheduler; this.debouncer = debouncer; @@ -229,7 +226,7 @@ class JobController { List updatedJobs = new LinkedList<>(); for (JobSpec job : allJobs) { - JobSpec updated = updater.update(job, dataSerializer); + JobSpec updated = updater.update(job); if (updated != job) { updatedJobs.add(updated); } @@ -255,7 +252,7 @@ class JobController { int nextRunAttempt = job.getRunAttempt() + 1; long nextRunAttemptTime = System.currentTimeMillis() + backoffInterval; - String serializedData = dataSerializer.serialize(job.serialize()); + byte[] serializedData = job.serialize(); jobStorage.updateJobAfterRetry(job.getId(), false, nextRunAttempt, nextRunAttemptTime, serializedData); jobTracker.onStateChange(job, JobTracker.JobState.PENDING); @@ -279,7 +276,7 @@ class JobController { } @WorkerThread - synchronized void onSuccess(@NonNull Job job, @Nullable Data outputData) { + synchronized void onSuccess(@NonNull Job job, @Nullable byte[] outputData) { if (outputData != null) { List updates = Stream.of(jobStorage.getDependencySpecsThatDependOnJob(job.getId())) .map(DependencySpec::getJobId) @@ -452,7 +449,7 @@ class JobController { job.getRunAttempt(), job.getParameters().getMaxAttempts(), job.getParameters().getLifespan(), - dataSerializer.serialize(job.serialize()), + job.serialize(), null, false, job.getParameters().isMemoryOnly()); @@ -511,8 +508,7 @@ class JobController { Job.Parameters parameters = buildJobParameters(jobSpec, constraintSpecs); try { - Data data = dataSerializer.deserialize(jobSpec.getSerializedData()); - Job job = jobInstantiator.instantiate(jobSpec.getFactoryKey(), parameters, data); + Job job = jobInstantiator.instantiate(jobSpec.getFactoryKey(), parameters, jobSpec.getSerializedData()); job.setRunAttempt(jobSpec.getRunAttempt()); job.setNextRunAttemptTime(jobSpec.getNextRunAttemptTime()); @@ -542,11 +538,11 @@ class JobController { .setMaxAttempts(jobSpec.getMaxAttempts()) .setQueue(jobSpec.getQueueKey()) .setConstraints(Stream.of(constraintSpecs).map(ConstraintSpec::getFactoryKey).toList()) - .setInputData(jobSpec.getSerializedInputData() != null ? dataSerializer.deserialize(jobSpec.getSerializedInputData()) : null) + .setInputData(jobSpec.getSerializedInputData()) .build(); } - private @NonNull JobSpec mapToJobWithInputData(@NonNull JobSpec jobSpec, @NonNull Data inputData) { + private @NonNull JobSpec mapToJobWithInputData(@NonNull JobSpec jobSpec, @NonNull byte[] inputData) { return new JobSpec(jobSpec.getId(), jobSpec.getFactoryKey(), jobSpec.getQueueKey(), @@ -556,7 +552,7 @@ class JobController { jobSpec.getMaxAttempts(), jobSpec.getLifespan(), jobSpec.getSerializedData(), - dataSerializer.serialize(inputData), + inputData, jobSpec.isRunning(), jobSpec.isMemoryOnly()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobInstantiator.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobInstantiator.java index 7fecdb4f45..8f58b0ba58 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobInstantiator.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobInstantiator.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobmanager; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import java.util.HashMap; import java.util.Map; @@ -13,7 +14,7 @@ class JobInstantiator { this.jobFactories = new HashMap<>(jobFactories); } - public @NonNull Job instantiate(@NonNull String jobFactoryKey, @NonNull Job.Parameters parameters, @NonNull Data data) { + public @NonNull Job instantiate(@NonNull String jobFactoryKey, @NonNull Job.Parameters parameters, @Nullable byte[] data) { Job.Factory factory = jobFactories.get(jobFactoryKey); if (factory != null) { Job job = factory.create(parameters, data); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobManager.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobManager.java index dc3a9d68c0..e00566d371 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobManager.java @@ -13,7 +13,6 @@ import androidx.annotation.WorkerThread; import org.signal.core.util.ThreadUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.jobmanager.impl.DefaultExecutorFactory; -import org.thoughtcrime.securesms.jobmanager.impl.JsonDataSerializer; import org.thoughtcrime.securesms.jobmanager.persistence.JobSpec; import org.thoughtcrime.securesms.jobmanager.persistence.JobStorage; import org.thoughtcrime.securesms.util.Debouncer; @@ -66,7 +65,6 @@ public class JobManager implements ConstraintObserver.Notifier { configuration.getJobStorage(), configuration.getJobInstantiator(), configuration.getConstraintFactories(), - configuration.getDataSerializer(), configuration.getJobTracker(), Build.VERSION.SDK_INT < 26 ? new AlarmManagerScheduler(application) : new CompositeScheduler(new InAppScheduler(this), new JobSchedulerScheduler(application)), @@ -78,7 +76,7 @@ public class JobManager implements ConstraintObserver.Notifier { JobStorage jobStorage = configuration.getJobStorage(); jobStorage.init(); - int latestVersion = configuration.getJobMigrator().migrate(jobStorage, configuration.getDataSerializer()); + int latestVersion = configuration.getJobMigrator().migrate(jobStorage); TextSecurePreferences.setJobManagerVersion(application, latestVersion); jobController.init(); @@ -544,7 +542,6 @@ public class JobManager implements ConstraintObserver.Notifier { private final JobInstantiator jobInstantiator; private final ConstraintInstantiator constraintInstantiator; private final List constraintObservers; - private final Data.Serializer dataSerializer; private final JobStorage jobStorage; private final JobMigrator jobMigrator; private final JobTracker jobTracker; @@ -555,7 +552,6 @@ public class JobManager implements ConstraintObserver.Notifier { @NonNull JobInstantiator jobInstantiator, @NonNull ConstraintInstantiator constraintInstantiator, @NonNull List constraintObservers, - @NonNull Data.Serializer dataSerializer, @NonNull JobStorage jobStorage, @NonNull JobMigrator jobMigrator, @NonNull JobTracker jobTracker, @@ -566,7 +562,6 @@ public class JobManager implements ConstraintObserver.Notifier { this.jobInstantiator = jobInstantiator; this.constraintInstantiator = constraintInstantiator; this.constraintObservers = new ArrayList<>(constraintObservers); - this.dataSerializer = dataSerializer; this.jobStorage = jobStorage; this.jobMigrator = jobMigrator; this.jobTracker = jobTracker; @@ -594,10 +589,6 @@ public class JobManager implements ConstraintObserver.Notifier { return constraintObservers; } - @NonNull Data.Serializer getDataSerializer() { - return dataSerializer; - } - @NonNull JobStorage getJobStorage() { return jobStorage; } @@ -621,7 +612,6 @@ public class JobManager implements ConstraintObserver.Notifier { private Map jobFactories = new HashMap<>(); private Map constraintFactories = new HashMap<>(); private List constraintObservers = new ArrayList<>(); - private Data.Serializer dataSerializer = new JsonDataSerializer(); private JobStorage jobStorage = null; private JobMigrator jobMigrator = null; private JobTracker jobTracker = new JobTracker(); @@ -657,11 +647,6 @@ public class JobManager implements ConstraintObserver.Notifier { return this; } - public @NonNull Builder setDataSerializer(@NonNull Data.Serializer dataSerializer) { - this.dataSerializer = dataSerializer; - return this; - } - public @NonNull Builder setJobStorage(@NonNull JobStorage jobStorage) { this.jobStorage = jobStorage; return this; @@ -678,7 +663,6 @@ public class JobManager implements ConstraintObserver.Notifier { new JobInstantiator(jobFactories), new ConstraintInstantiator(constraintFactories), new ArrayList<>(constraintObservers), - dataSerializer, jobStorage, jobMigrator, jobTracker, diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobMigration.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobMigration.java index 216d2eb0e8..bad18c7140 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobMigration.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobMigration.java @@ -31,9 +31,9 @@ public abstract class JobMigration { private final String factoryKey; private final String queueKey; - private final Data data; + private final byte[] data; - public JobData(@NonNull String factoryKey, @Nullable String queueKey, @NonNull Data data) { + public JobData(@NonNull String factoryKey, @Nullable String queueKey, @Nullable byte[] data) { this.factoryKey = factoryKey; this.queueKey = queueKey; this.data = data; @@ -47,7 +47,7 @@ public abstract class JobMigration { return new JobData(factoryKey, newQueueKey, data); } - public @NonNull JobData withData(@NonNull Data newData) { + public @NonNull JobData withData(@Nullable byte[] newData) { return new JobData(factoryKey, queueKey, newData); } @@ -59,7 +59,7 @@ public abstract class JobMigration { return queueKey; } - public @NonNull Data getData() { + public @NonNull byte[] getData() { return data; } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobMigrator.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobMigrator.java index 6f1a7f6c75..dc1f82ac8a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobMigrator.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobMigrator.java @@ -46,7 +46,7 @@ public class JobMigrator { /** * @return The version that has been migrated to. */ - int migrate(@NonNull JobStorage jobStorage, @NonNull Data.Serializer dataSerializer) { + int migrate(@NonNull JobStorage jobStorage) { List jobSpecs = jobStorage.getAllJobSpecs(); for (int i = lastSeenVersion; i < currentVersion; i++) { @@ -58,22 +58,21 @@ public class JobMigrator { assert migration != null; while (iter.hasNext()) { - JobSpec jobSpec = iter.next(); - Data data = dataSerializer.deserialize(jobSpec.getSerializedData()); - JobData originalJobData = new JobData(jobSpec.getFactoryKey(), jobSpec.getQueueKey(), data); - JobData updatedJobData = migration.migrate(originalJobData); - JobSpec updatedJobSpec = new JobSpec(jobSpec.getId(), - updatedJobData.getFactoryKey(), - updatedJobData.getQueueKey(), - jobSpec.getCreateTime(), - jobSpec.getNextRunAttemptTime(), - jobSpec.getRunAttempt(), - jobSpec.getMaxAttempts(), - jobSpec.getLifespan(), - dataSerializer.serialize(updatedJobData.getData()), - jobSpec.getSerializedInputData(), - jobSpec.isRunning(), - jobSpec.isMemoryOnly()); + JobSpec jobSpec = iter.next(); + JobData originalJobData = new JobData(jobSpec.getFactoryKey(), jobSpec.getQueueKey(), jobSpec.getSerializedData()); + JobData updatedJobData = migration.migrate(originalJobData); + JobSpec updatedJobSpec = new JobSpec(jobSpec.getId(), + updatedJobData.getFactoryKey(), + updatedJobData.getQueueKey(), + jobSpec.getCreateTime(), + jobSpec.getNextRunAttemptTime(), + jobSpec.getRunAttempt(), + jobSpec.getMaxAttempts(), + jobSpec.getLifespan(), + updatedJobData.getData(), + jobSpec.getSerializedInputData(), + jobSpec.isRunning(), + jobSpec.isMemoryOnly()); iter.set(updatedJobSpec); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobUpdater.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobUpdater.java index 6a4ca51b1a..0e96e829e2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobUpdater.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobUpdater.java @@ -9,11 +9,8 @@ public interface JobUpdater { * Called for each enqueued job, giving you an opportunity to update each one. * * @param jobSpec An object representing data about an enqueued job. - * @param serializer An object that can be used to serialize/deserialize data if necessary for - * your update. - * * @return The updated JobSpec you want persisted. If you do not wish to make an update, return - * the literal same JobSpec instance you were provided. + * the literal same JobSpec instance you were provided. */ - @NonNull JobSpec update(@NonNull JobSpec jobSpec, @NonNull Data.Serializer serializer); + @NonNull JobSpec update(@NonNull JobSpec jobSpec); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Data.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JsonJobData.java similarity index 76% rename from app/src/main/java/org/thoughtcrime/securesms/jobmanager/Data.java rename to app/src/main/java/org/thoughtcrime/securesms/jobmanager/JsonJobData.java index b272808352..1a5dd4ad09 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Data.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JsonJobData.java @@ -5,8 +5,12 @@ import androidx.annotation.Nullable; import com.fasterxml.jackson.annotation.JsonProperty; +import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.util.Base64; +import org.thoughtcrime.securesms.util.JsonUtils; +import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -14,9 +18,11 @@ import java.util.List; import java.util.Map; import java.util.Objects; -public class Data { +public class JsonJobData { - public static final Data EMPTY = new Data.Builder().build(); + public static final String TAG = Log.tag(JsonJobData.class); + + public static final JsonJobData EMPTY = new JsonJobData.Builder().build(); @JsonProperty private final Map strings; @JsonProperty private final Map stringArrays; @@ -31,18 +37,31 @@ public class Data { @JsonProperty private final Map booleans; @JsonProperty private final Map booleanArrays; - public Data(@JsonProperty("strings") @NonNull Map strings, - @JsonProperty("stringArrays") @NonNull Map stringArrays, - @JsonProperty("integers") @NonNull Map integers, - @JsonProperty("integerArrays") @NonNull Map integerArrays, - @JsonProperty("longs") @NonNull Map longs, - @JsonProperty("longArrays") @NonNull Map longArrays, - @JsonProperty("floats") @NonNull Map floats, - @JsonProperty("floatArrays") @NonNull Map floatArrays, - @JsonProperty("doubles") @NonNull Map doubles, - @JsonProperty("doubleArrays") @NonNull Map doubleArrays, - @JsonProperty("booleans") @NonNull Map booleans, - @JsonProperty("booleanArrays") @NonNull Map booleanArrays) + public static @NonNull JsonJobData deserialize(@Nullable byte[] data) { + if (data == null) { + return EMPTY; + } + + try { + return JsonUtils.fromJson(data, JsonJobData.class); + } catch (IOException e) { + Log.e(TAG, "Failed to deserialize JSON.", e); + throw new AssertionError(e); + } + } + + private JsonJobData(@JsonProperty("strings") @NonNull Map strings, + @JsonProperty("stringArrays") @NonNull Map stringArrays, + @JsonProperty("integers") @NonNull Map integers, + @JsonProperty("integerArrays") @NonNull Map integerArrays, + @JsonProperty("longs") @NonNull Map longs, + @JsonProperty("longArrays") @NonNull Map longArrays, + @JsonProperty("floats") @NonNull Map floats, + @JsonProperty("floatArrays") @NonNull Map floatArrays, + @JsonProperty("doubles") @NonNull Map doubles, + @JsonProperty("doubleArrays") @NonNull Map doubleArrays, + @JsonProperty("booleans") @NonNull Map booleans, + @JsonProperty("booleanArrays") @NonNull Map booleanArrays) { this.strings = strings; this.stringArrays = stringArrays; @@ -256,6 +275,34 @@ public class Data { return new Builder(this); } + public boolean isEmpty() { + return strings.isEmpty() && + stringArrays.isEmpty() && + integers.isEmpty() && + integerArrays.isEmpty() && + longs.isEmpty() && + longArrays.isEmpty() && + floats.isEmpty() && + floatArrays.isEmpty() && + doubles.isEmpty() && + doubleArrays.isEmpty() && + booleans.isEmpty() && + booleanArrays.isEmpty(); + } + + public @Nullable byte[] serialize() { + if (isEmpty()) { + return null; + } else { + try { + return JsonUtils.toJson(this).getBytes(StandardCharsets.UTF_8); + } catch (IOException e) { + Log.e(TAG, "Failed to serialize to JSON.", e); + throw new AssertionError(e); + } + } + } + public static class Builder { @@ -274,7 +321,7 @@ public class Data { public Builder() { } - private Builder(@NonNull Data oldData) { + private Builder(@NonNull JsonJobData oldData) { strings.putAll(oldData.strings); stringArrays.putAll(oldData.stringArrays); integers.putAll(oldData.integers); @@ -385,24 +432,28 @@ public class Data { return this; } - public Data build() { - return new Data(strings, - stringArrays, - integers, - integerArrays, - longs, - longArrays, - floats, - floatArrays, - doubles, - doubleArrays, - booleans, - booleanArrays); + public JsonJobData build() { + return new JsonJobData(strings, + stringArrays, + integers, + integerArrays, + longs, + longArrays, + floats, + floatArrays, + doubles, + doubleArrays, + booleans, + booleanArrays); + } + + public @Nullable byte[] serialize() { + return build().serialize(); } } public interface Serializer { - @NonNull String serialize(@NonNull Data data); - @NonNull Data deserialize(@NonNull String serialized); + @NonNull String serialize(@NonNull JsonJobData data); + @NonNull JsonJobData deserialize(@NonNull String serialized); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/JsonDataSerializer.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/JsonDataSerializer.java deleted file mode 100644 index 73aacdd6b4..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/JsonDataSerializer.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.thoughtcrime.securesms.jobmanager.impl; - -import androidx.annotation.NonNull; - -import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.jobmanager.Data; -import org.thoughtcrime.securesms.util.JsonUtils; - -import java.io.IOException; - -public class JsonDataSerializer implements Data.Serializer { - - private static final String TAG = Log.tag(JsonDataSerializer.class); - - @Override - public @NonNull String serialize(@NonNull Data data) { - try { - return JsonUtils.toJson(data); - } catch (IOException e) { - Log.e(TAG, "Failed to serialize to JSON.", e); - throw new AssertionError(e); - } - } - - @Override - public @NonNull Data deserialize(@NonNull String serialized) { - try { - return JsonUtils.fromJson(serialized, Data.class); - } catch (IOException e) { - Log.e(TAG, "Failed to deserialize JSON.", e); - throw new AssertionError(e); - } - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushDecryptMessageJobEnvelopeMigration.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushDecryptMessageJobEnvelopeMigration.java index 804116ff53..59a0980c17 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushDecryptMessageJobEnvelopeMigration.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushDecryptMessageJobEnvelopeMigration.java @@ -8,7 +8,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.PushTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.JobMigration; import org.thoughtcrime.securesms.jobs.FailingJob; import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope; @@ -39,16 +39,15 @@ public class PushDecryptMessageJobEnvelopeMigration extends JobMigration { } private static @NonNull JobData migratePushDecryptMessageJob(@NonNull PushTable pushDatabase, @NonNull JobData jobData) { - Data data = jobData.getData(); + JsonJobData data = JsonJobData.deserialize(jobData.getData()); if (data.hasLong("message_id")) { long messageId = data.getLong("message_id"); try { SignalServiceEnvelope envelope = pushDatabase.get(messageId); - return jobData.withData(jobData.getData() - .buildUpon() - .putBlobAsString("envelope", envelope.serialize()) - .build()); + return jobData.withData(data.buildUpon() + .putBlobAsString("envelope", envelope.serialize()) + .serialize()); } catch (NoSuchMessageException e) { Log.w(TAG, "Failed to find envelope in DB! Failing."); return jobData.withFactoryKey(FailingJob.KEY); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushProcessMessageQueueJobMigration.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushProcessMessageQueueJobMigration.java index 2c5cc3c271..b7e7f361d8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushProcessMessageQueueJobMigration.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushProcessMessageQueueJobMigration.java @@ -5,14 +5,12 @@ import android.content.Context; import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.groups.BadGroupIdException; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.JobMigration; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.Base64; -import org.thoughtcrime.securesms.util.GroupUtil; import org.whispersystems.signalservice.api.messages.SignalServiceContent; import java.io.IOException; @@ -47,7 +45,7 @@ public class PushProcessMessageQueueJobMigration extends JobMigration { } private static @NonNull JobData migratePushProcessMessageJob(@NonNull Context context, @NonNull JobData jobData) throws IOException { - Data data = jobData.getData(); + JsonJobData data = JsonJobData.deserialize(jobData.getData()); String suffix = ""; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdFollowUpJobMigration.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdFollowUpJobMigration.java index 948517cec1..b18591b848 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdFollowUpJobMigration.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdFollowUpJobMigration.java @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.jobmanager.migrations; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.JobMigration; /** @@ -31,7 +31,9 @@ public class RecipientIdFollowUpJobMigration extends JobMigration { } private static @NonNull JobData migrateRequestGroupInfoJob(@NonNull JobData jobData) { - if (!jobData.getData().hasString("source") || !jobData.getData().hasString("group_id")) { + JsonJobData data = JsonJobData.deserialize(jobData.getData()); + + if (!data.hasString("source") || !data.hasString("group_id")) { return failingJobData(); } else { return jobData; @@ -39,9 +41,11 @@ public class RecipientIdFollowUpJobMigration extends JobMigration { } private static @NonNull JobData migrateSendDeliveryReceiptJob(@NonNull JobData jobData) { - if (!jobData.getData().hasString("recipient") || - !jobData.getData().hasLong("message_id") || - !jobData.getData().hasLong("timestamp")) + JsonJobData data = JsonJobData.deserialize(jobData.getData()); + + if (!data.hasString("recipient") || + !data.hasLong("message_id") || + !data.hasLong("timestamp")) { return failingJobData(); } else { @@ -50,6 +54,6 @@ public class RecipientIdFollowUpJobMigration extends JobMigration { } private static JobData failingJobData() { - return new JobData("FailingJob", null, new Data.Builder().build()); + return new JobData("FailingJob", null, null); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdJobMigration.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdJobMigration.java index a596b0a909..1ede2e2b3b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdJobMigration.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdJobMigration.java @@ -7,7 +7,7 @@ import androidx.annotation.VisibleForTesting; import com.fasterxml.jackson.annotation.JsonProperty; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.JobMigration; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -47,120 +47,142 @@ public class RecipientIdJobMigration extends JobMigration { } private @NonNull JobData migrateMultiDeviceContactUpdateJob(@NonNull JobData jobData) { - String address = jobData.getData().hasString("address") ? jobData.getData().getString("address") : null; - Data updatedData = new Data.Builder().putString("recipient", address != null ? Recipient.external(application, address).getId().serialize() : null) - .putBoolean("force_sync", jobData.getData().getBoolean("force_sync")) - .build(); + JsonJobData data = JsonJobData.deserialize(jobData.getData()); - return jobData.withData(updatedData); + String address = data.hasString("address") ? data.getString("address") : null; + JsonJobData updatedData = new JsonJobData.Builder().putString("recipient", address != null ? Recipient.external(application, address).getId().serialize() : null) + .putBoolean("force_sync", data.getBoolean("force_sync")) + .build(); + + return jobData.withData(updatedData.serialize()); } private @NonNull JobData migrateMultiDeviceViewOnceOpenJob(@NonNull JobData jobData) { + JsonJobData data = JsonJobData.deserialize(jobData.getData()); + try { - String rawOld = jobData.getData().getString("message_id"); + String rawOld = data.getString("message_id"); OldSerializableSyncMessageId old = JsonUtils.fromJson(rawOld, OldSerializableSyncMessageId.class); Recipient recipient = Recipient.external(application, old.sender); NewSerializableSyncMessageId updated = new NewSerializableSyncMessageId(recipient.getId().serialize(), old.timestamp); - String rawUpdated = JsonUtils.toJson(updated); - Data updatedData = new Data.Builder().putString("message_id", rawUpdated).build(); + String rawUpdated = JsonUtils.toJson(updated); + JsonJobData updatedData = new JsonJobData.Builder().putString("message_id", rawUpdated).build(); - return jobData.withData(updatedData); + return jobData.withData(updatedData.serialize()); } catch (IOException e) { throw new AssertionError(e); } } private @NonNull JobData migrateRequestGroupInfoJob(@NonNull JobData jobData) { - String address = jobData.getData().getString("source"); - Recipient recipient = Recipient.external(application, address); - Data updatedData = new Data.Builder().putString("source", recipient.getId().serialize()) - .putString("group_id", jobData.getData().getString("group_id")) - .build(); + JsonJobData data = JsonJobData.deserialize(jobData.getData()); - return jobData.withData(updatedData); + String address = data.getString("source"); + Recipient recipient = Recipient.external(application, address); + JsonJobData updatedData = new JsonJobData.Builder().putString("source", recipient.getId().serialize()) + .putString("group_id", data.getString("group_id")) + .build(); + + return jobData.withData(updatedData.serialize()); } private @NonNull JobData migrateSendDeliveryReceiptJob(@NonNull JobData jobData) { - String address = jobData.getData().getString("address"); - Recipient recipient = Recipient.external(application, address); - Data updatedData = new Data.Builder().putString("recipient", recipient.getId().serialize()) - .putLong("message_id", jobData.getData().getLong("message_id")) - .putLong("timestamp", jobData.getData().getLong("timestamp")) - .build(); + JsonJobData data = JsonJobData.deserialize(jobData.getData()); - return jobData.withData(updatedData); + String address = data.getString("address"); + Recipient recipient = Recipient.external(application, address); + JsonJobData updatedData = new JsonJobData.Builder().putString("recipient", recipient.getId().serialize()) + .putLong("message_id", data.getLong("message_id")) + .putLong("timestamp", data.getLong("timestamp")) + .build(); + + return jobData.withData(updatedData.serialize()); } private @NonNull JobData migrateMultiDeviceVerifiedUpdateJob(@NonNull JobData jobData) { - String address = jobData.getData().getString("destination"); - Recipient recipient = Recipient.external(application, address); - Data updatedData = new Data.Builder().putString("destination", recipient.getId().serialize()) - .putString("identity_key", jobData.getData().getString("identity_key")) - .putInt("verified_status", jobData.getData().getInt("verified_status")) - .putLong("timestamp", jobData.getData().getLong("timestamp")) - .build(); + JsonJobData data = JsonJobData.deserialize(jobData.getData()); - return jobData.withData(updatedData); + String address = data.getString("destination"); + Recipient recipient = Recipient.external(application, address); + JsonJobData updatedData = new JsonJobData.Builder().putString("destination", recipient.getId().serialize()) + .putString("identity_key", data.getString("identity_key")) + .putInt("verified_status", data.getInt("verified_status")) + .putLong("timestamp", data.getLong("timestamp")) + .build(); + + return jobData.withData(updatedData.serialize()); } private @NonNull JobData migrateRetrieveProfileJob(@NonNull JobData jobData) { - String address = jobData.getData().getString("address"); - Recipient recipient = Recipient.external(application, address); - Data updatedData = new Data.Builder().putString("recipient", recipient.getId().serialize()).build(); + JsonJobData data = JsonJobData.deserialize(jobData.getData()); - return jobData.withData(updatedData); + String address = data.getString("address"); + Recipient recipient = Recipient.external(application, address); + JsonJobData updatedData = new JsonJobData.Builder().putString("recipient", recipient.getId().serialize()).build(); + + return jobData.withData(updatedData.serialize()); } private @NonNull JobData migratePushGroupSendJob(@NonNull JobData jobData) { + JsonJobData data = JsonJobData.deserialize(jobData.getData()); + // noinspection ConstantConditions Recipient queueRecipient = Recipient.external(application, jobData.getQueueKey()); - String address = jobData.getData().hasString("filter_address") ? jobData.getData().getString("filter_address") : null; + String address = data.hasString("filter_address") ? data.getString("filter_address") : null; RecipientId recipientId = address != null ? Recipient.external(application, address).getId() : null; - Data updatedData = new Data.Builder().putString("filter_recipient", recipientId != null ? recipientId.serialize() : null) - .putLong("message_id", jobData.getData().getLong("message_id")) - .build(); + JsonJobData updatedData = new JsonJobData.Builder().putString("filter_recipient", recipientId != null ? recipientId.serialize() : null) + .putLong("message_id", data.getLong("message_id")) + .build(); return jobData.withQueueKey(queueRecipient.getId().toQueueKey()) - .withData(updatedData); + .withData(updatedData.serialize()); } private @NonNull JobData migratePushGroupUpdateJob(@NonNull JobData jobData) { - String address = jobData.getData().getString("source"); - Recipient recipient = Recipient.external(application, address); - Data updatedData = new Data.Builder().putString("source", recipient.getId().serialize()) - .putString("group_id", jobData.getData().getString("group_id")) - .build(); + JsonJobData data = JsonJobData.deserialize(jobData.getData()); - return jobData.withData(updatedData); + String address = data.getString("source"); + Recipient recipient = Recipient.external(application, address); + JsonJobData updatedData = new JsonJobData.Builder().putString("source", recipient.getId().serialize()) + .putString("group_id", data.getString("group_id")) + .build(); + + return jobData.withData(updatedData.serialize()); } private @NonNull JobData migrateDirectoryRefreshJob(@NonNull JobData jobData) { - String address = jobData.getData().hasString("address") ? jobData.getData().getString("address") : null; - Recipient recipient = address != null ? Recipient.external(application, address) : null; - Data updatedData = new Data.Builder().putString("recipient", recipient != null ? recipient.getId().serialize() : null) - .putBoolean("notify_of_new_users", jobData.getData().getBoolean("notify_of_new_users")) - .build(); + JsonJobData data = JsonJobData.deserialize(jobData.getData()); - return jobData.withData(updatedData); + String address = data.hasString("address") ? data.getString("address") : null; + Recipient recipient = address != null ? Recipient.external(application, address) : null; + JsonJobData updatedData = new JsonJobData.Builder().putString("recipient", recipient != null ? recipient.getId().serialize() : null) + .putBoolean("notify_of_new_users", data.getBoolean("notify_of_new_users")) + .build(); + + return jobData.withData(updatedData.serialize()); } private @NonNull JobData migrateRetrieveProfileAvatarJob(@NonNull JobData jobData) { + JsonJobData data = JsonJobData.deserialize(jobData.getData()); + //noinspection ConstantConditions String queueAddress = jobData.getQueueKey().substring("RetrieveProfileAvatarJob".length()); Recipient queueRecipient = Recipient.external(application, queueAddress); - String address = jobData.getData().getString("address"); + String address = data.getString("address"); Recipient recipient = Recipient.external(application, address); - Data updatedData = new Data.Builder().putString("recipient", recipient.getId().serialize()) - .putString("profile_avatar", jobData.getData().getString("profile_avatar")) - .build(); + JsonJobData updatedData = new JsonJobData.Builder().putString("recipient", recipient.getId().serialize()) + .putString("profile_avatar", data.getString("profile_avatar")) + .build(); return jobData.withQueueKey("RetrieveProfileAvatarJob::" + queueRecipient.getId().toQueueKey()) - .withData(updatedData); + .withData(updatedData.serialize()); } private @NonNull JobData migrateMultiDeviceReadUpdateJob(@NonNull JobData jobData) { + JsonJobData data = JsonJobData.deserialize(jobData.getData()); + try { - String[] rawOld = jobData.getData().getStringArray("message_ids"); + String[] rawOld = data.getStringArray("message_ids"); String[] rawUpdated = new String[rawOld.length]; for (int i = 0; i < rawOld.length; i++) { @@ -171,27 +193,33 @@ public class RecipientIdJobMigration extends JobMigration { rawUpdated[i] = JsonUtils.toJson(updated); } - Data updatedData = new Data.Builder().putStringArray("message_ids", rawUpdated).build(); + JsonJobData updatedData = new JsonJobData.Builder().putStringArray("message_ids", rawUpdated).build(); - return jobData.withData(updatedData); + return jobData.withData(updatedData.serialize()); } catch (IOException e) { throw new AssertionError(e); } } private @NonNull JobData migratePushTextSendJob(@NonNull JobData jobData) { + JsonJobData data = JsonJobData.deserialize(jobData.getData()); + //noinspection ConstantConditions Recipient recipient = Recipient.external(application, jobData.getQueueKey()); return jobData.withQueueKey(recipient.getId().toQueueKey()); } private @NonNull JobData migratePushMediaSendJob(@NonNull JobData jobData) { + JsonJobData data = JsonJobData.deserialize(jobData.getData()); + //noinspection ConstantConditions Recipient recipient = Recipient.external(application, jobData.getQueueKey()); return jobData.withQueueKey(recipient.getId().toQueueKey()); } private @NonNull JobData migrateSmsSendJob(@NonNull JobData jobData) { + JsonJobData data = JsonJobData.deserialize(jobData.getData()); + //noinspection ConstantConditions if (jobData.getQueueKey() != null) { Recipient recipient = Recipient.external(application, jobData.getQueueKey()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/RetrieveProfileJobMigration.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/RetrieveProfileJobMigration.java index aa86e4d6f0..a56880dc6d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/RetrieveProfileJobMigration.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/RetrieveProfileJobMigration.java @@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.jobmanager.migrations; import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.JobMigration; public class RetrieveProfileJobMigration extends JobMigration { @@ -25,15 +25,15 @@ public class RetrieveProfileJobMigration extends JobMigration { } private static @NonNull JobData migrateRetrieveProfileJob(@NonNull JobData jobData) { - Data data = jobData.getData(); + JsonJobData data = JsonJobData.deserialize(jobData.getData()); if (data.hasString("recipient")) { Log.i(TAG, "Migrating job."); String recipient = data.getString("recipient"); - return jobData.withData(new Data.Builder() + return jobData.withData(new JsonJobData.Builder() .putStringArray("recipients", new String[] { recipient }) - .build()); + .serialize()); } else { return jobData; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigration.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigration.java index 373775db0d..b6432708e7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigration.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigration.java @@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.jobmanager.migrations; import androidx.annotation.NonNull; import org.thoughtcrime.securesms.database.MessageTable; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.JobMigration; import java.util.SortedSet; @@ -27,10 +27,10 @@ public class SendReadReceiptsJobMigration extends JobMigration { } private static @NonNull JobData migrateSendReadReceiptJob(@NonNull MessageTable messageTable, @NonNull JobData jobData) { - Data data = jobData.getData(); + JsonJobData data = JsonJobData.deserialize(jobData.getData()); if (!data.hasLong("thread")) { - long[] messageIds = jobData.getData().getLongArray("message_ids"); + long[] messageIds = data.getLongArray("message_ids"); SortedSet threadIds = new TreeSet<>(); for (long id : messageIds) { @@ -41,9 +41,9 @@ public class SendReadReceiptsJobMigration extends JobMigration { } if (threadIds.size() != 1) { - return new JobData("FailingJob", null, new Data.Builder().build()); + return new JobData("FailingJob", null, null); } else { - return jobData.withData(data.buildUpon().putLong("thread", threadIds.first()).build()); + return jobData.withData(data.buildUpon().putLong("thread", threadIds.first()).serialize()); } } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigration.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigration.java index e8c59ef25e..4abb48fbb7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigration.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigration.java @@ -8,7 +8,7 @@ import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.model.GroupRecord; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.JobMigration; import org.thoughtcrime.securesms.jobs.FailingJob; @@ -44,7 +44,7 @@ public class SenderKeyDistributionSendJobRecipientMigration extends JobMigration } private static @NonNull JobData migrateJob(@NonNull JobData jobData, @NonNull GroupTable groupDatabase) { - Data data = jobData.getData(); + JsonJobData data = JsonJobData.deserialize(jobData.getData()); if (data.hasString("group_id")) { GroupId groupId = GroupId.pushOrThrow(data.getStringAsBlob("group_id")); @@ -53,7 +53,7 @@ public class SenderKeyDistributionSendJobRecipientMigration extends JobMigration if (group.isPresent()) { return jobData.withData(data.buildUpon() .putString("thread_recipient_id", group.get().getRecipientId().serialize()) - .build()); + .serialize()); } else { return jobData.withFactoryKey(FailingJob.KEY); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/persistence/JobSpec.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/persistence/JobSpec.java deleted file mode 100644 index 2d4c65955d..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/persistence/JobSpec.java +++ /dev/null @@ -1,139 +0,0 @@ -package org.thoughtcrime.securesms.jobmanager.persistence; - -import android.annotation.SuppressLint; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import java.util.Locale; -import java.util.Objects; - -public final class JobSpec { - - private final String id; - private final String factoryKey; - private final String queueKey; - private final long createTime; - private final long nextRunAttemptTime; - private final int runAttempt; - private final int maxAttempts; - private final long lifespan; - private final String serializedData; - private final String serializedInputData; - private final boolean isRunning; - private final boolean memoryOnly; - - public JobSpec(@NonNull String id, - @NonNull String factoryKey, - @Nullable String queueKey, - long createTime, - long nextRunAttemptTime, - int runAttempt, - int maxAttempts, - long lifespan, - @NonNull String serializedData, - @Nullable String serializedInputData, - boolean isRunning, - boolean memoryOnly) - { - this.id = id; - this.factoryKey = factoryKey; - this.queueKey = queueKey; - this.createTime = createTime; - this.nextRunAttemptTime = nextRunAttemptTime; - this.runAttempt = runAttempt; - this.maxAttempts = maxAttempts; - this.lifespan = lifespan; - this.serializedData = serializedData; - this.serializedInputData = serializedInputData; - this.isRunning = isRunning; - this.memoryOnly = memoryOnly; - } - - public @NonNull JobSpec withNextRunAttemptTime(long updated) { - return new JobSpec(id, factoryKey, queueKey, createTime, updated, runAttempt, maxAttempts, lifespan, serializedData, serializedInputData, isRunning, memoryOnly); - } - - public @NonNull JobSpec withData(String updatedSerializedData) { - return new JobSpec(id, factoryKey, queueKey, createTime, nextRunAttemptTime, runAttempt, maxAttempts, lifespan, updatedSerializedData, serializedInputData, isRunning, memoryOnly); - } - - public @NonNull String getId() { - return id; - } - - public @NonNull String getFactoryKey() { - return factoryKey; - } - - public @Nullable String getQueueKey() { - return queueKey; - } - - public long getCreateTime() { - return createTime; - } - - public long getNextRunAttemptTime() { - return nextRunAttemptTime; - } - - public int getRunAttempt() { - return runAttempt; - } - - public int getMaxAttempts() { - return maxAttempts; - } - - public long getLifespan() { - return lifespan; - } - - public @NonNull String getSerializedData() { - return serializedData; - } - - public @Nullable String getSerializedInputData() { - return serializedInputData; - } - - public boolean isRunning() { - return isRunning; - } - - public boolean isMemoryOnly() { - return memoryOnly; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - JobSpec jobSpec = (JobSpec) o; - return createTime == jobSpec.createTime && - nextRunAttemptTime == jobSpec.nextRunAttemptTime && - runAttempt == jobSpec.runAttempt && - maxAttempts == jobSpec.maxAttempts && - lifespan == jobSpec.lifespan && - isRunning == jobSpec.isRunning && - memoryOnly == jobSpec.memoryOnly && - Objects.equals(id, jobSpec.id) && - Objects.equals(factoryKey, jobSpec.factoryKey) && - Objects.equals(queueKey, jobSpec.queueKey) && - Objects.equals(serializedData, jobSpec.serializedData) && - Objects.equals(serializedInputData, jobSpec.serializedInputData); - } - - @Override - public int hashCode() { - return Objects.hash(id, factoryKey, queueKey, createTime, nextRunAttemptTime, runAttempt, maxAttempts, lifespan, serializedData, serializedInputData, isRunning, memoryOnly); - } - - @SuppressLint("DefaultLocale") - @Override - public @NonNull String toString() { - return String.format(Locale.US, "id: JOB::%s | factoryKey: %s | queueKey: %s | createTime: %d | nextRunAttemptTime: %d | runAttempt: %d | maxAttempts: %d | lifespan: %d | isRunning: %b | memoryOnly: %b", - id, factoryKey, queueKey, createTime, nextRunAttemptTime, runAttempt, maxAttempts, lifespan, isRunning, memoryOnly); - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/persistence/JobSpec.kt b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/persistence/JobSpec.kt new file mode 100644 index 0000000000..68fc43111d --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/persistence/JobSpec.kt @@ -0,0 +1,73 @@ +package org.thoughtcrime.securesms.jobmanager.persistence + +data class JobSpec( + val id: String, + val factoryKey: String, + val queueKey: String?, + val createTime: Long, + val nextRunAttemptTime: Long, + val runAttempt: Int, + val maxAttempts: Int, + val lifespan: Long, + val serializedData: ByteArray?, + val serializedInputData: ByteArray?, + val isRunning: Boolean, + val isMemoryOnly: Boolean +) { + + fun withNextRunAttemptTime(updated: Long): JobSpec { + return copy(nextRunAttemptTime = updated) + } + + fun withData(updatedSerializedData: ByteArray?): JobSpec { + return copy(serializedData = updatedSerializedData) + } + + override fun toString(): String { + return "id: JOB::$id | factoryKey: $factoryKey | queueKey: $queueKey | createTime: $createTime | nextRunAttemptTime: $nextRunAttemptTime | runAttempt: $runAttempt | maxAttempts: $maxAttempts | lifespan: $lifespan | isRunning: $isRunning | memoryOnly: $isMemoryOnly" + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as JobSpec + + if (id != other.id) return false + if (factoryKey != other.factoryKey) return false + if (queueKey != other.queueKey) return false + if (createTime != other.createTime) return false + if (nextRunAttemptTime != other.nextRunAttemptTime) return false + if (runAttempt != other.runAttempt) return false + if (maxAttempts != other.maxAttempts) return false + if (lifespan != other.lifespan) return false + if (serializedData != null) { + if (other.serializedData == null) return false + if (!serializedData.contentEquals(other.serializedData)) return false + } else if (other.serializedData != null) return false + if (serializedInputData != null) { + if (other.serializedInputData == null) return false + if (!serializedInputData.contentEquals(other.serializedInputData)) return false + } else if (other.serializedInputData != null) return false + if (isRunning != other.isRunning) return false + if (isMemoryOnly != other.isMemoryOnly) return false + + return true + } + + override fun hashCode(): Int { + var result = id.hashCode() + result = 31 * result + factoryKey.hashCode() + result = 31 * result + (queueKey?.hashCode() ?: 0) + result = 31 * result + createTime.hashCode() + result = 31 * result + nextRunAttemptTime.hashCode() + result = 31 * result + runAttempt + result = 31 * result + maxAttempts + result = 31 * result + lifespan.hashCode() + result = 31 * result + (serializedData?.contentHashCode() ?: 0) + result = 31 * result + (serializedInputData?.contentHashCode() ?: 0) + result = 31 * result + isRunning.hashCode() + result = 31 * result + isMemoryOnly.hashCode() + return result + } +} 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 9565bd5413..f8092d5d00 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 @@ -40,7 +40,7 @@ public interface JobStorage { void updateJobRunningState(@NonNull String id, boolean isRunning); @WorkerThread - void updateJobAfterRetry(@NonNull String id, boolean isRunning, int runAttempt, long nextRunAttemptTime, @NonNull String serializedData); + void updateJobAfterRetry(@NonNull String id, boolean isRunning, int runAttempt, long nextRunAttemptTime, @Nullable byte[] serializedData); @WorkerThread void updateAllJobsToBePending(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java index a785db2dd9..5a0cf473b2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java @@ -5,6 +5,7 @@ import android.media.MediaDataSource; import android.net.Uri; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import com.google.android.exoplayer2.util.MimeTypes; @@ -22,7 +23,7 @@ import org.thoughtcrime.securesms.crypto.ModernEncryptingPartOutputStream; import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.events.PartProgressEvent; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader; @@ -106,12 +107,12 @@ public final class AttachmentCompressionJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_ROW_ID, attachmentId.getRowId()) - .putLong(KEY_UNIQUE_ID, attachmentId.getUniqueId()) - .putBoolean(KEY_MMS, mms) - .putInt(KEY_MMS_SUBSCRIPTION_ID, mmsSubscriptionId) - .build(); + public @Nullable byte [] serialize() { + return new JsonJobData.Builder().putLong(KEY_ROW_ID, attachmentId.getRowId()) + .putLong(KEY_UNIQUE_ID, attachmentId.getUniqueId()) + .putBoolean(KEY_MMS, mms) + .putInt(KEY_MMS_SUBSCRIPTION_ID, mmsSubscriptionId) + .serialize(); } @Override @@ -341,7 +342,9 @@ public final class AttachmentCompressionJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull AttachmentCompressionJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull AttachmentCompressionJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new AttachmentCompressionJob(parameters, new AttachmentId(data.getLong(KEY_ROW_ID), data.getLong(KEY_UNIQUE_ID)), data.getBoolean(KEY_MMS), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCopyJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCopyJob.java index 917d985493..07dd55dc8c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCopyJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCopyJob.java @@ -1,11 +1,12 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.util.JsonUtils; @@ -46,7 +47,7 @@ public class AttachmentCopyJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @Nullable byte[] serialize() { try { String sourceIdString = JsonUtils.toJson(sourceId); String[] destinationIdStrings = new String[destinationIds.size()]; @@ -55,9 +56,9 @@ public class AttachmentCopyJob extends BaseJob { destinationIdStrings[i] = JsonUtils.toJson(destinationIds.get(i)); } - return new Data.Builder().putString(KEY_SOURCE_ID, sourceIdString) - .putStringArray(KEY_DESTINATION_IDS, destinationIdStrings) - .build(); + return new JsonJobData.Builder().putString(KEY_SOURCE_ID, sourceIdString) + .putStringArray(KEY_DESTINATION_IDS, destinationIdStrings) + .serialize(); } catch (IOException e) { throw new AssertionError(e); } @@ -92,7 +93,9 @@ public class AttachmentCopyJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull AttachmentCopyJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull AttachmentCopyJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + try { String sourceIdStrings = data.getString(KEY_SOURCE_ID); String[] destinationIdStrings = data.getStringArray(KEY_DESTINATION_IDS); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java index 4d2ebcb4cd..6838965e18 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.jobs; import android.text.TextUtils; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import org.greenrobot.eventbus.EventBus; @@ -18,7 +19,7 @@ import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.events.PartProgressEvent; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobLogger; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -88,12 +89,12 @@ public final class AttachmentDownloadJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId) - .putLong(KEY_PART_ROW_ID, partRowId) - .putLong(KEY_PAR_UNIQUE_ID, partUniqueId) - .putBoolean(KEY_MANUAL, manual) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_MESSAGE_ID, messageId) + .putLong(KEY_PART_ROW_ID, partRowId) + .putLong(KEY_PAR_UNIQUE_ID, partUniqueId) + .putBoolean(KEY_MANUAL, manual) + .serialize(); } @Override @@ -293,7 +294,9 @@ public final class AttachmentDownloadJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull AttachmentDownloadJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull AttachmentDownloadJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new AttachmentDownloadJob(parameters, data.getLong(KEY_MESSAGE_ID), new AttachmentId(data.getLong(KEY_PART_ROW_ID), data.getLong(KEY_PAR_UNIQUE_ID)), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentMarkUploadedJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentMarkUploadedJob.java index 330ed94eab..6e22100931 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentMarkUploadedJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentMarkUploadedJob.java @@ -1,13 +1,14 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import java.io.IOException; @@ -46,11 +47,11 @@ public final class AttachmentMarkUploadedJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_ROW_ID, attachmentId.getRowId()) - .putLong(KEY_UNIQUE_ID, attachmentId.getUniqueId()) - .putLong(KEY_MESSAGE_ID, messageId) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_ROW_ID, attachmentId.getRowId()) + .putLong(KEY_UNIQUE_ID, attachmentId.getUniqueId()) + .putLong(KEY_MESSAGE_ID, messageId) + .serialize(); } @Override @@ -87,7 +88,9 @@ public final class AttachmentMarkUploadedJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull AttachmentMarkUploadedJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull AttachmentMarkUploadedJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new AttachmentMarkUploadedJob(parameters, data.getLong(KEY_MESSAGE_ID), new AttachmentId(data.getLong(KEY_ROW_ID), data.getLong(KEY_UNIQUE_ID))); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java index 88543f4f57..6a5f0c1b22 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java @@ -19,7 +19,7 @@ import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.events.PartProgressEvent; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.mms.PartAuthority; @@ -85,11 +85,11 @@ public final class AttachmentUploadJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_ROW_ID, attachmentId.getRowId()) - .putLong(KEY_UNIQUE_ID, attachmentId.getUniqueId()) - .putBoolean(KEY_FORCE_V2, forceV2) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_ROW_ID, attachmentId.getRowId()) + .putLong(KEY_UNIQUE_ID, attachmentId.getUniqueId()) + .putBoolean(KEY_FORCE_V2, forceV2) + .serialize(); } @Override @@ -108,14 +108,14 @@ public final class AttachmentUploadJob extends BaseJob { throw new NotPushRegisteredException(); } - Data inputData = getInputData(); + JsonJobData inputData = JsonJobData.deserialize(getInputData()); ResumableUploadSpec resumableUploadSpec; if (forceV2) { Log.d(TAG, "Forcing utilization of V2"); resumableUploadSpec = null; - } else if (inputData != null && inputData.hasString(ResumableUploadSpecJob.KEY_RESUME_SPEC)) { + } else if (inputData.hasString(ResumableUploadSpecJob.KEY_RESUME_SPEC)) { Log.d(TAG, "Using attachments V3"); resumableUploadSpec = ResumableUploadSpec.deserialize(inputData.getString(ResumableUploadSpecJob.KEY_RESUME_SPEC)); } else { @@ -269,7 +269,9 @@ public final class AttachmentUploadJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull AttachmentUploadJob create(@NonNull Parameters parameters, @NonNull org.thoughtcrime.securesms.jobmanager.Data data) { + public @NonNull AttachmentUploadJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new AttachmentUploadJob(parameters, new AttachmentId(data.getLong(KEY_ROW_ID), data.getLong(KEY_UNIQUE_ID)), data.getBooleanOrDefault(KEY_FORCE_V2, false)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AutomaticSessionResetJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AutomaticSessionResetJob.java index 9dc759843b..27209a55f1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AutomaticSessionResetJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AutomaticSessionResetJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; @@ -8,7 +9,7 @@ import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.databaseprotos.DeviceLastResetTime; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint; import org.thoughtcrime.securesms.notifications.v2.ConversationId; @@ -70,11 +71,11 @@ public class AutomaticSessionResetJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_RECIPIENT_ID, recipientId.serialize()) - .putInt(KEY_DEVICE_ID, deviceId) - .putLong(KEY_SENT_TIMESTAMP, sentTimestamp) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_RECIPIENT_ID, recipientId.serialize()) + .putInt(KEY_DEVICE_ID, deviceId) + .putLong(KEY_SENT_TIMESTAMP, sentTimestamp) + .serialize(); } @Override @@ -169,7 +170,9 @@ public class AutomaticSessionResetJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull AutomaticSessionResetJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull AutomaticSessionResetJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new AutomaticSessionResetJob(parameters, RecipientId.from(data.getString(KEY_RECIPIENT_ID)), data.getInt(KEY_DEVICE_ID), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV1DownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV1DownloadJob.java index 025d8cc91e..a4f6fba533 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV1DownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV1DownloadJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidMessageException; @@ -9,7 +10,7 @@ import org.thoughtcrime.securesms.database.model.GroupRecord; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.profiles.AvatarHelper; @@ -49,8 +50,8 @@ public final class AvatarGroupsV1DownloadJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_GROUP_ID, groupId.toString()).build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_GROUP_ID, groupId.toString()).serialize(); } @Override @@ -112,7 +113,8 @@ public final class AvatarGroupsV1DownloadJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull AvatarGroupsV1DownloadJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull AvatarGroupsV1DownloadJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new AvatarGroupsV1DownloadJob(parameters, GroupId.parseOrThrow(data.getString(KEY_GROUP_ID)).requireV1()); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV2DownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV2DownloadJob.java index 7f46ce2cbd..36621c3962 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV2DownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV2DownloadJob.java @@ -14,7 +14,7 @@ import org.thoughtcrime.securesms.database.model.GroupRecord; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.profiles.AvatarHelper; @@ -60,11 +60,11 @@ public final class AvatarGroupsV2DownloadJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder() + public @Nullable byte[] serialize() { + return new JsonJobData.Builder() .putString(KEY_GROUP_ID, groupId.toString()) .putString(CDN_KEY, cdnKey) - .build(); + .serialize(); } @Override @@ -145,7 +145,9 @@ public final class AvatarGroupsV2DownloadJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull AvatarGroupsV2DownloadJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull AvatarGroupsV2DownloadJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new AvatarGroupsV2DownloadJob(parameters, GroupId.parseOrThrow(data.getString(KEY_GROUP_ID)).requireV2(), data.getString(CDN_KEY)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/BaseJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/BaseJob.java index bab642ae98..c05043744d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/BaseJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/BaseJob.java @@ -5,7 +5,6 @@ import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.signal.core.util.tracing.Tracer; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobLogger; import org.thoughtcrime.securesms.jobmanager.JobManager.Chain; @@ -16,7 +15,7 @@ public abstract class BaseJob extends Job { private static final String TAG = Log.tag(BaseJob.class); - private Data outputData; + private byte[] outputData; public BaseJob(@NonNull Parameters parameters) { super(parameters); @@ -76,7 +75,7 @@ public abstract class BaseJob extends Job { * If this job is part of a {@link Chain}, data set here will be passed as input data to the next * job(s) in the chain. */ - protected void setOutputData(@Nullable Data outputData) { + protected void setOutputData(@Nullable byte[] outputData) { this.outputData = outputData; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/BoostReceiptRequestResponseJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/BoostReceiptRequestResponseJob.java index 8b8dd67c03..c50273a7d0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/BoostReceiptRequestResponseJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/BoostReceiptRequestResponseJob.java @@ -7,7 +7,6 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import org.signal.core.util.logging.Log; -import org.signal.donations.StripeIntentAccessor; import org.signal.libsignal.zkgroup.InvalidInputException; import org.signal.libsignal.zkgroup.VerificationFailedException; import org.signal.libsignal.zkgroup.receipts.ClientZkReceiptOperations; @@ -19,7 +18,7 @@ import org.signal.libsignal.zkgroup.receipts.ReceiptSerial; import org.thoughtcrime.securesms.components.settings.app.subscription.errors.DonationError; import org.thoughtcrime.securesms.components.settings.app.subscription.errors.DonationErrorSource; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -119,17 +118,17 @@ public class BoostReceiptRequestResponseJob extends BaseJob { } @Override - public @NonNull Data serialize() { - Data.Builder builder = new Data.Builder().putString(DATA_PAYMENT_INTENT_ID, paymentIntentId) - .putString(DATA_ERROR_SOURCE, donationErrorSource.serialize()) - .putLong(DATA_BADGE_LEVEL, badgeLevel) - .putString(DATA_DONATION_PROCESSOR, donationProcessor.getCode()); + public @Nullable byte[] serialize() { + JsonJobData.Builder builder = new JsonJobData.Builder().putString(DATA_PAYMENT_INTENT_ID, paymentIntentId) + .putString(DATA_ERROR_SOURCE, donationErrorSource.serialize()) + .putLong(DATA_BADGE_LEVEL, badgeLevel) + .putString(DATA_DONATION_PROCESSOR, donationProcessor.getCode()); if (requestContext != null) { builder.putBlobAsString(DATA_REQUEST_BYTES, requestContext.serialize()); } - return builder.build(); + return builder.serialize(); } @Override @@ -175,9 +174,9 @@ public class BoostReceiptRequestResponseJob extends BaseJob { Log.d(TAG, "Validated credential. Handing off to next job.", true); ReceiptCredentialPresentation receiptCredentialPresentation = getReceiptCredentialPresentation(receiptCredential); - setOutputData(new Data.Builder().putBlobAsString(DonationReceiptRedemptionJob.INPUT_RECEIPT_CREDENTIAL_PRESENTATION, - receiptCredentialPresentation.serialize()) - .build()); + setOutputData(new JsonJobData.Builder().putBlobAsString(DonationReceiptRedemptionJob.INPUT_RECEIPT_CREDENTIAL_PRESENTATION, + receiptCredentialPresentation.serialize()) + .serialize()); } else { Log.w(TAG, "Encountered a retryable exception: " + response.getStatus(), response.getExecutionError().orElse(null), true); throw new RetryableException(); @@ -265,7 +264,9 @@ public class BoostReceiptRequestResponseJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull BoostReceiptRequestResponseJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull BoostReceiptRequestResponseJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + String paymentIntentId = data.getString(DATA_PAYMENT_INTENT_ID); DonationErrorSource donationErrorSource = DonationErrorSource.deserialize(data.getStringOrDefault(DATA_ERROR_SOURCE, DonationErrorSource.BOOST.serialize())); long badgeLevel = data.getLongOrDefault(DATA_BADGE_LEVEL, Long.parseLong(SubscriptionLevels.BOOST_LEVEL)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/CheckServiceReachabilityJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/CheckServiceReachabilityJob.kt index eef5f39fd8..81a1701d94 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/CheckServiceReachabilityJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/CheckServiceReachabilityJob.kt @@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.jobs import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.BuildConfig import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -42,8 +41,8 @@ class CheckServiceReachabilityJob private constructor(params: Parameters) : Base } } - override fun serialize(): Data { - return Data.EMPTY + override fun serialize(): ByteArray? { + return null } override fun getFactoryKey(): String { @@ -114,7 +113,7 @@ class CheckServiceReachabilityJob private constructor(params: Parameters) : Base } class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): CheckServiceReachabilityJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): CheckServiceReachabilityJob { return CheckServiceReachabilityJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/CleanPreKeysJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/CleanPreKeysJob.java index 177008d562..61c6c1be93 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/CleanPreKeysJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/CleanPreKeysJob.java @@ -1,13 +1,14 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.state.SignalProtocolStore; import org.thoughtcrime.securesms.crypto.PreKeyUtil; import org.thoughtcrime.securesms.crypto.storage.PreKeyMetadataStore; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -27,8 +28,8 @@ public class CleanPreKeysJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -54,7 +55,7 @@ public class CleanPreKeysJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull CleanPreKeysJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull CleanPreKeysJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new CleanPreKeysJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ClearFallbackKbsEnclaveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ClearFallbackKbsEnclaveJob.java index 645c208a75..f1ce609baa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ClearFallbackKbsEnclaveJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ClearFallbackKbsEnclaveJob.java @@ -1,11 +1,12 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.KbsEnclave; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -65,11 +66,11 @@ public class ClearFallbackKbsEnclaveJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_ENCLAVE_NAME, enclave.getEnclaveName()) - .putString(KEY_SERVICE_ID, enclave.getServiceId()) - .putString(KEY_MR_ENCLAVE, enclave.getMrEnclave()) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_ENCLAVE_NAME, enclave.getEnclaveName()) + .putString(KEY_SERVICE_ID, enclave.getServiceId()) + .putString(KEY_MR_ENCLAVE, enclave.getMrEnclave()) + .serialize(); } @Override @@ -109,7 +110,9 @@ public class ClearFallbackKbsEnclaveJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull ClearFallbackKbsEnclaveJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull ClearFallbackKbsEnclaveJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + KbsEnclave enclave = new KbsEnclave(data.getString(KEY_ENCLAVE_NAME), data.getString(KEY_SERVICE_ID), data.getString(KEY_MR_ENCLAVE)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ConversationShortcutUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ConversationShortcutUpdateJob.java index c734403a34..afd1391f97 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ConversationShortcutUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ConversationShortcutUpdateJob.java @@ -1,13 +1,14 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.transport.RetryLaterException; @@ -47,8 +48,8 @@ public class ConversationShortcutUpdateJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -95,7 +96,7 @@ public class ConversationShortcutUpdateJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull ConversationShortcutUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull ConversationShortcutUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new ConversationShortcutUpdateJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/CreateReleaseChannelJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/CreateReleaseChannelJob.kt index b3bfd51946..9ee9f79e59 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/CreateReleaseChannelJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/CreateReleaseChannelJob.kt @@ -7,7 +7,6 @@ import org.thoughtcrime.securesms.avatar.Avatar import org.thoughtcrime.securesms.avatar.AvatarRenderer import org.thoughtcrime.securesms.avatar.Avatars import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.profiles.AvatarHelper @@ -39,7 +38,7 @@ class CreateReleaseChannelJob private constructor(parameters: Parameters) : Base } } - override fun serialize(): Data = Data.EMPTY + override fun serialize(): ByteArray? = null override fun getFactoryKey(): String = KEY @@ -102,7 +101,7 @@ class CreateReleaseChannelJob private constructor(parameters: Parameters) : Base override fun onShouldRetry(e: Exception): Boolean = e is RetryLaterException class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): CreateReleaseChannelJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): CreateReleaseChannelJob { return CreateReleaseChannelJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/DirectoryRefreshJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/DirectoryRefreshJob.java index a642e17237..781e61c3cb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/DirectoryRefreshJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/DirectoryRefreshJob.java @@ -5,7 +5,7 @@ import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.recipients.Recipient; @@ -50,10 +50,10 @@ public class DirectoryRefreshJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_RECIPIENT, recipient != null ? recipient.getId().serialize() : null) - .putBoolean(KEY_NOTIFY_OF_NEW_USERS, notifyOfNewUsers) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_RECIPIENT, recipient != null ? recipient.getId().serialize() : null) + .putBoolean(KEY_NOTIFY_OF_NEW_USERS, notifyOfNewUsers) + .serialize(); } @Override @@ -89,7 +89,9 @@ public class DirectoryRefreshJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull DirectoryRefreshJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull DirectoryRefreshJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + String serialized = data.hasString(KEY_RECIPIENT) ? data.getString(KEY_RECIPIENT) : null; Recipient recipient = serialized != null ? Recipient.resolved(RecipientId.from(serialized)) : null; boolean notifyOfNewUsers = data.getBoolean(KEY_NOTIFY_OF_NEW_USERS); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/DonationReceiptRedemptionJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/DonationReceiptRedemptionJob.java index b2633fefe1..29f47fd092 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/DonationReceiptRedemptionJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/DonationReceiptRedemptionJob.java @@ -14,7 +14,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -118,12 +118,12 @@ public class DonationReceiptRedemptionJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder() + public @Nullable byte[] serialize() { + return new JsonJobData.Builder() .putString(DATA_ERROR_SOURCE, errorSource.serialize()) .putLong(DATA_GIFT_MESSAGE_ID, giftMessageId) .putBoolean(DATA_PRIMARY, makePrimary) - .build(); + .serialize(); } @Override @@ -161,7 +161,7 @@ public class DonationReceiptRedemptionJob extends BaseJob { } private void doRun() throws Exception { - boolean isKeepAlive409 = getInputData() != null && getInputData().getBooleanOrDefault(INPUT_KEEP_ALIVE_409, false); + boolean isKeepAlive409 = getInputData() != null && JsonJobData.deserialize(getInputData()).getBooleanOrDefault(INPUT_KEEP_ALIVE_409, false); if (isKeepAlive409) { Log.d(TAG, "Keep-Alive redemption job hit a 409. Exiting.", true); return; @@ -233,9 +233,9 @@ public class DonationReceiptRedemptionJob extends BaseJob { } private @Nullable ReceiptCredentialPresentation getPresentationFromInputData() throws InvalidInputException { - Data inputData = getInputData(); + JsonJobData inputData = JsonJobData.deserialize(getInputData()); - if (inputData == null) { + if (inputData.isEmpty()) { Log.w(TAG, "No input data. Exiting.", true); return null; } @@ -281,7 +281,9 @@ public class DonationReceiptRedemptionJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull DonationReceiptRedemptionJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull DonationReceiptRedemptionJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + String serializedErrorSource = data.getStringOrDefault(DATA_ERROR_SOURCE, DonationErrorSource.UNKNOWN.serialize()); long messageId = data.getLongOrDefault(DATA_GIFT_MESSAGE_ID, NO_ID); boolean primary = data.getBooleanOrDefault(DATA_PRIMARY, false); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/DownloadLatestEmojiDataJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/DownloadLatestEmojiDataJob.java index fc377e2375..dcaf8de96e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/DownloadLatestEmojiDataJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/DownloadLatestEmojiDataJob.java @@ -21,7 +21,7 @@ import org.thoughtcrime.securesms.emoji.EmojiPageCache; import org.thoughtcrime.securesms.emoji.EmojiRemote; import org.thoughtcrime.securesms.emoji.EmojiSource; import org.thoughtcrime.securesms.emoji.JumboEmoji; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.AutoDownloadEmojiConstraint; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -161,15 +161,15 @@ public class DownloadLatestEmojiDataJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @Nullable byte[] serialize() { if (targetVersion == null) { - return Data.EMPTY; + return null; } else { - return new Data.Builder() + return new JsonJobData.Builder() .putInt(VERSION_INT, targetVersion.getVersion()) .putString(VERSION_UUID, targetVersion.getUuid().toString()) .putString(VERSION_DENSITY, targetVersion.getDensity()) - .build(); + .serialize(); } } @@ -359,9 +359,11 @@ public class DownloadLatestEmojiDataJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull DownloadLatestEmojiDataJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull DownloadLatestEmojiDataJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { final EmojiFiles.Version version; + JsonJobData data = JsonJobData.deserialize(serializedData); + if (data.hasInt(VERSION_INT) && data.hasString(VERSION_UUID) && data.hasString(VERSION_DENSITY)) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/EmojiSearchIndexDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/EmojiSearchIndexDownloadJob.java index 0bd49ccca4..df4cc13cf8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/EmojiSearchIndexDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/EmojiSearchIndexDownloadJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fasterxml.jackson.annotation.JsonProperty; @@ -8,7 +9,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.EmojiSearchData; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.EmojiValues; @@ -74,8 +75,8 @@ public final class EmojiSearchIndexDownloadJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -181,7 +182,7 @@ public final class EmojiSearchIndexDownloadJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull EmojiSearchIndexDownloadJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull EmojiSearchIndexDownloadJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new EmojiSearchIndexDownloadJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/FailingJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/FailingJob.java index d75ceabaf9..4ef2be94bd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/FailingJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/FailingJob.java @@ -1,8 +1,9 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; /** @@ -18,8 +19,8 @@ public final class FailingJob extends Job { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @NonNull @@ -39,7 +40,7 @@ public final class FailingJob extends Job { public static final class Factory implements Job.Factory { @Override - public @NonNull FailingJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull FailingJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new FailingJob(parameters); } } 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 080f84d67e..f8190f9411 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/FastJobStorage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/FastJobStorage.java @@ -210,7 +210,7 @@ public class FastJobStorage implements JobStorage { } @Override - public synchronized void updateJobAfterRetry(@NonNull String id, boolean isRunning, int runAttempt, long nextRunAttemptTime, @NonNull String serializedData) { + public synchronized void updateJobAfterRetry(@NonNull String id, boolean isRunning, int runAttempt, long nextRunAttemptTime, @NonNull byte[] serializedData) { JobSpec job = getJobById(id); if (job == null || !job.isMemoryOnly()) { jobDatabase.updateJobAfterRetry(id, isRunning, runAttempt, nextRunAttemptTime, serializedData); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java index f076e113a5..65204bb2ec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java @@ -23,6 +23,7 @@ import android.content.Intent; import android.graphics.BitmapFactory; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; import com.google.android.gms.common.ConnectionResult; @@ -34,7 +35,7 @@ import org.thoughtcrime.securesms.PlayServicesProblemActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.gcm.FcmUtil; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -68,8 +69,8 @@ public class FcmRefreshJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -139,7 +140,7 @@ public class FcmRefreshJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull FcmRefreshJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull FcmRefreshJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new FcmRefreshJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/FetchRemoteMegaphoneImageJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/FetchRemoteMegaphoneImageJob.kt index d34ea9c49d..7e8e23660c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/FetchRemoteMegaphoneImageJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/FetchRemoteMegaphoneImageJob.kt @@ -3,8 +3,8 @@ package org.thoughtcrime.securesms.jobs import okhttp3.ResponseBody import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.jobmanager.JsonJobData import org.thoughtcrime.securesms.jobmanager.impl.AutoDownloadEmojiConstraint import org.thoughtcrime.securesms.providers.BlobProvider import org.thoughtcrime.securesms.s3.S3 @@ -28,11 +28,11 @@ class FetchRemoteMegaphoneImageJob(parameters: Parameters, private val uuid: Str imageUrl = imageUrl ) - override fun serialize(): Data { - return Data.Builder() + override fun serialize(): ByteArray? { + return JsonJobData.Builder() .putString(KEY_UUID, uuid) .putString(KEY_IMAGE_URL, imageUrl) - .build() + .serialize() } override fun getFactoryKey(): String { @@ -65,7 +65,8 @@ class FetchRemoteMegaphoneImageJob(parameters: Parameters, private val uuid: Str } class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): FetchRemoteMegaphoneImageJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): FetchRemoteMegaphoneImageJob { + val data = JsonJobData.deserialize(serializedData) return FetchRemoteMegaphoneImageJob(parameters, data.getString(KEY_UUID), data.getString(KEY_IMAGE_URL)) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/FontDownloaderJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/FontDownloaderJob.kt index 0175d27b69..6b24ddf6c4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/FontDownloaderJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/FontDownloaderJob.kt @@ -5,7 +5,6 @@ import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.fonts.Fonts import org.thoughtcrime.securesms.fonts.SupportedScript import org.thoughtcrime.securesms.fonts.TextFont -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.util.FutureTaskListener @@ -35,7 +34,7 @@ class FontDownloaderJob private constructor(parameters: Parameters) : BaseJob(pa .build() ) - override fun serialize(): Data = Data.EMPTY + override fun serialize(): ByteArray? = null override fun getFactoryKey(): String = KEY @@ -79,7 +78,7 @@ class FontDownloaderJob private constructor(parameters: Parameters) : BaseJob(pa override fun onShouldRetry(e: Exception): Boolean = true class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): FontDownloaderJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): FontDownloaderJob { return FontDownloaderJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2Job.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2Job.java index 9d4db0dc13..12117f855f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2Job.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2Job.java @@ -1,13 +1,14 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.GroupRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint; @@ -53,8 +54,8 @@ public final class ForceUpdateGroupV2Job extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_GROUP_ID, groupId.toString()).build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_GROUP_ID, groupId.toString()).serialize(); } @Override @@ -79,7 +80,8 @@ public final class ForceUpdateGroupV2Job extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull ForceUpdateGroupV2Job create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull ForceUpdateGroupV2Job create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new ForceUpdateGroupV2Job(parameters, GroupId.parseOrThrow(data.getString(KEY_GROUP_ID)).requireV2()); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2WorkerJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2WorkerJob.java index 297e74724b..872ae332db 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2WorkerJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2WorkerJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; @@ -9,7 +10,7 @@ import org.thoughtcrime.securesms.groups.GroupChangeBusyException; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.GroupManager; import org.thoughtcrime.securesms.groups.GroupNotAMemberException; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.recipients.Recipient; @@ -49,9 +50,9 @@ final class ForceUpdateGroupV2WorkerJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_GROUP_ID, groupId.toString()) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_GROUP_ID, groupId.toString()) + .serialize(); } @Override @@ -92,7 +93,9 @@ final class ForceUpdateGroupV2WorkerJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull ForceUpdateGroupV2WorkerJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull ForceUpdateGroupV2WorkerJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new ForceUpdateGroupV2WorkerJob(parameters, GroupId.parseOrThrow(data.getString(KEY_GROUP_ID)).requireV2()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GenerateAudioWaveFormJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/GenerateAudioWaveFormJob.kt index 76b160c3f2..41a1e3b5ca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GenerateAudioWaveFormJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GenerateAudioWaveFormJob.kt @@ -9,8 +9,8 @@ import org.thoughtcrime.securesms.attachments.DatabaseAttachment import org.thoughtcrime.securesms.audio.AudioWaveForms import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.jobmanager.JsonJobData import org.thoughtcrime.securesms.util.MediaUtil import kotlin.time.Duration.Companion.days @@ -46,11 +46,11 @@ class GenerateAudioWaveFormJob private constructor(private val attachmentId: Att .build() ) - override fun serialize(): Data { - return Data.Builder() + override fun serialize(): ByteArray? { + return JsonJobData.Builder() .putLong(KEY_PART_ROW_ID, attachmentId.rowId) .putLong(KEY_PAR_UNIQUE_ID, attachmentId.uniqueId) - .build() + .serialize() } override fun getFactoryKey(): String = KEY @@ -87,7 +87,8 @@ class GenerateAudioWaveFormJob private constructor(private val attachmentId: Att override fun onFailure() = Unit class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): GenerateAudioWaveFormJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): GenerateAudioWaveFormJob { + val data = JsonJobData.deserialize(serializedData) return GenerateAudioWaveFormJob(AttachmentId(data.getLong(KEY_PART_ROW_ID), data.getLong(KEY_PAR_UNIQUE_ID)), parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GiftSendJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/GiftSendJob.kt index f6b42118f0..42a9a2e5a6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GiftSendJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GiftSendJob.kt @@ -7,8 +7,8 @@ import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.jobmanager.JsonJobData import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.sharing.MultiShareArgs @@ -38,17 +38,17 @@ class GiftSendJob private constructor(parameters: Parameters, private val recipi additionalMessage = additionalMessage ) - override fun serialize(): Data = Data.Builder() + override fun serialize(): ByteArray? = JsonJobData.Builder() .putLong(DATA_RECIPIENT_ID, recipientId.toLong()) .putString(DATA_ADDITIONAL_MESSAGE, additionalMessage) - .build() + .serialize() override fun getFactoryKey(): String = KEY override fun run(): Result { Log.i(TAG, "Getting data and generating message for gift send to $recipientId") - val token = this.inputData?.getStringAsBlob(DonationReceiptRedemptionJob.INPUT_RECEIPT_CREDENTIAL_PRESENTATION) ?: return Result.failure() + val token = JsonJobData.deserialize(this.inputData).getStringAsBlob(DonationReceiptRedemptionJob.INPUT_RECEIPT_CREDENTIAL_PRESENTATION) ?: return Result.failure() val recipient = Recipient.resolved(recipientId) @@ -104,7 +104,8 @@ class GiftSendJob private constructor(parameters: Parameters, private val recipi } class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): GiftSendJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): GiftSendJob { + val data = JsonJobData.deserialize(serializedData) val recipientId = RecipientId.from(data.getLong(DATA_RECIPIENT_ID)) val additionalMessage = data.getStringOrDefault(DATA_ADDITIONAL_MESSAGE, null) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallPeekJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallPeekJob.java index 7c436962f0..bb723cac02 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallPeekJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallPeekJob.java @@ -1,9 +1,10 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint; @@ -52,10 +53,10 @@ public final class GroupCallPeekJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder() + public @Nullable byte[] serialize() { + return new JsonJobData.Builder() .putString(KEY_GROUP_RECIPIENT_ID, groupRecipientId.serialize()) - .build(); + .serialize(); } @Override @@ -70,7 +71,8 @@ public final class GroupCallPeekJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull GroupCallPeekJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull GroupCallPeekJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new GroupCallPeekJob(parameters, RecipientId.from(data.getString(KEY_GROUP_RECIPIENT_ID))); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallPeekWorkerJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallPeekWorkerJob.java index 4b221bd01e..226687a5b0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallPeekWorkerJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallPeekWorkerJob.java @@ -1,9 +1,10 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -42,10 +43,10 @@ final class GroupCallPeekWorkerJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder() + public @Nullable byte[] serialize() { + return new JsonJobData.Builder() .putString(KEY_GROUP_RECIPIENT_ID, groupRecipientId.serialize()) - .build(); + .serialize(); } @Override @@ -60,7 +61,8 @@ final class GroupCallPeekWorkerJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull GroupCallPeekWorkerJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull GroupCallPeekWorkerJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new GroupCallPeekWorkerJob(parameters, RecipientId.from(data.getString(KEY_GROUP_RECIPIENT_ID))); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallUpdateSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallUpdateSendJob.java index 446a19c10d..43d5178e16 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallUpdateSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallUpdateSendJob.java @@ -8,7 +8,7 @@ import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.messages.GroupSendUtil; import org.thoughtcrime.securesms.net.NotPushRegisteredException; @@ -87,12 +87,12 @@ public class GroupCallUpdateSendJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_RECIPIENT_ID, recipientId.serialize()) - .putString(KEY_ERA_ID, eraId) - .putString(KEY_RECIPIENTS, RecipientId.toSerializedList(recipients)) - .putInt(KEY_INITIAL_RECIPIENT_COUNT, initialRecipientCount) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_RECIPIENT_ID, recipientId.serialize()) + .putString(KEY_ERA_ID, eraId) + .putString(KEY_RECIPIENTS, RecipientId.toSerializedList(recipients)) + .putInt(KEY_INITIAL_RECIPIENT_COUNT, initialRecipientCount) + .serialize(); } @Override @@ -175,7 +175,9 @@ public class GroupCallUpdateSendJob extends BaseJob { @Override public @NonNull - GroupCallUpdateSendJob create(@NonNull Parameters parameters, @NonNull Data data) { + GroupCallUpdateSendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + RecipientId recipientId = RecipientId.from(data.getString(KEY_RECIPIENT_ID)); String eraId = data.getString(KEY_ERA_ID); List recipients = RecipientId.fromSerializedList(data.getString(KEY_RECIPIENTS)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV1MigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV1MigrationJob.java index 36e423e441..d86e6fb5fb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV1MigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV1MigrationJob.java @@ -1,23 +1,16 @@ package org.thoughtcrime.securesms.jobs; -import android.app.Application; - import androidx.annotation.NonNull; - -import com.annimon.stream.Stream; +import androidx.annotation.Nullable; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupChangeBusyException; import org.thoughtcrime.securesms.groups.GroupsV1MigrationUtil; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; 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.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.transport.RetryLaterException; @@ -25,9 +18,6 @@ import org.whispersystems.signalservice.api.groupsv2.NoCredentialForRedemptionTi import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; import java.io.IOException; -import java.util.HashSet; -import java.util.List; -import java.util.Set; import java.util.concurrent.TimeUnit; public class GroupV1MigrationJob extends BaseJob { @@ -67,9 +57,9 @@ public class GroupV1MigrationJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_RECIPIENT_ID, recipientId.serialize()) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_RECIPIENT_ID, recipientId.serialize()) + .serialize(); } @Override @@ -105,7 +95,8 @@ public class GroupV1MigrationJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull GroupV1MigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull GroupV1MigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new GroupV1MigrationJob(parameters, RecipientId.from(data.getString(KEY_RECIPIENT_ID))); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV2UpdateSelfProfileKeyJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV2UpdateSelfProfileKeyJob.java index eb58c8d45d..37eac65d31 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV2UpdateSelfProfileKeyJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV2UpdateSelfProfileKeyJob.java @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.AnyThread; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.google.protobuf.ByteString; @@ -17,7 +18,7 @@ import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.GroupInsufficientRightsException; import org.thoughtcrime.securesms.groups.GroupManager; import org.thoughtcrime.securesms.groups.GroupNotAMemberException; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -145,9 +146,9 @@ public final class GroupV2UpdateSelfProfileKeyJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_GROUP_ID, groupId.toString()) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_GROUP_ID, groupId.toString()) + .serialize(); } @Override @@ -177,7 +178,9 @@ public final class GroupV2UpdateSelfProfileKeyJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull GroupV2UpdateSelfProfileKeyJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull GroupV2UpdateSelfProfileKeyJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new GroupV2UpdateSelfProfileKeyJob(parameters, GroupId.parseOrThrow(data.getString(KEY_GROUP_ID)).requireV2()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java index 7d1875d945..86ab3cd00f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.jobs; import android.content.Context; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import com.annimon.stream.Stream; @@ -19,7 +20,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -116,8 +117,8 @@ public class IndividualSendJob extends PushSendJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId).build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_MESSAGE_ID, messageId).serialize(); } @Override @@ -339,13 +340,15 @@ public class IndividualSendJob extends PushSendJob { } } - public static long getMessageId(@NonNull Data data) { + public static long getMessageId(@Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return data.getLong(KEY_MESSAGE_ID); } public static final class Factory implements Job.Factory { @Override - public @NonNull IndividualSendJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull IndividualSendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new IndividualSendJob(parameters, data.getLong(KEY_MESSAGE_ID)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/KbsEnclaveMigrationWorkerJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/KbsEnclaveMigrationWorkerJob.java index cb132c72ca..21bef909e2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/KbsEnclaveMigrationWorkerJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/KbsEnclaveMigrationWorkerJob.java @@ -1,9 +1,10 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.BackoffUtil; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -46,8 +47,8 @@ public class KbsEnclaveMigrationWorkerJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -92,7 +93,7 @@ public class KbsEnclaveMigrationWorkerJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull KbsEnclaveMigrationWorkerJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull KbsEnclaveMigrationWorkerJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new KbsEnclaveMigrationWorkerJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/LeaveGroupV2Job.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/LeaveGroupV2Job.kt index 7679cab9c3..fd469d6a6c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/LeaveGroupV2Job.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/LeaveGroupV2Job.kt @@ -2,8 +2,8 @@ package org.thoughtcrime.securesms.jobs import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.groups.GroupId -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.jobmanager.JsonJobData import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint /** @@ -23,10 +23,10 @@ class LeaveGroupV2Job(parameters: Parameters, private val groupId: GroupId.V2) : groupId = groupId ) - override fun serialize(): Data { - return Data.Builder() + override fun serialize(): ByteArray? { + return JsonJobData.Builder() .putString(KEY_GROUP_ID, groupId.toString()) - .build() + .serialize() } override fun getFactoryKey(): String { @@ -42,7 +42,8 @@ class LeaveGroupV2Job(parameters: Parameters, private val groupId: GroupId.V2) : override fun onFailure() = Unit class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): LeaveGroupV2Job { + override fun create(parameters: Parameters, serializedData: ByteArray?): LeaveGroupV2Job { + val data = JsonJobData.deserialize(serializedData) return LeaveGroupV2Job(parameters, GroupId.parseOrThrow(data.getString(KEY_GROUP_ID)).requireV2()) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/LeaveGroupV2WorkerJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/LeaveGroupV2WorkerJob.kt index 7c63d8b0e6..e54c7a1a1c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/LeaveGroupV2WorkerJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/LeaveGroupV2WorkerJob.kt @@ -7,8 +7,8 @@ import org.thoughtcrime.securesms.groups.GroupChangeBusyException import org.thoughtcrime.securesms.groups.GroupChangeFailedException import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.groups.GroupManager -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.jobmanager.JsonJobData import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.recipients.Recipient import java.io.IOException @@ -28,10 +28,10 @@ class LeaveGroupV2WorkerJob(parameters: Parameters, private val groupId: GroupId groupId = groupId ) - override fun serialize(): Data { - return Data.Builder() + override fun serialize(): ByteArray? { + return JsonJobData.Builder() .putString(KEY_GROUP_ID, groupId.toString()) - .build() + .serialize() } override fun getFactoryKey(): String { @@ -61,7 +61,8 @@ class LeaveGroupV2WorkerJob(parameters: Parameters, private val groupId: GroupId override fun onFailure() = Unit class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): LeaveGroupV2WorkerJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): LeaveGroupV2WorkerJob { + val data = JsonJobData.deserialize(serializedData) return LeaveGroupV2WorkerJob(parameters, GroupId.parseOrThrow(data.getString(KEY_GROUP_ID)).requireV2()) } } 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 2c1e3dfd16..7405c2043b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/LocalBackupJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/LocalBackupJob.java @@ -5,6 +5,7 @@ import android.Manifest; import android.os.Build; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -21,7 +22,7 @@ import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider; import org.thoughtcrime.securesms.database.NoExternalStorageException; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.ChargingConstraint; @@ -74,8 +75,8 @@ public final class LocalBackupJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -233,7 +234,7 @@ public final class LocalBackupJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull LocalBackupJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull LocalBackupJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new LocalBackupJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/LocalBackupJobApi29.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/LocalBackupJobApi29.java index 61fdd24ca7..344b0d9546 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/LocalBackupJobApi29.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/LocalBackupJobApi29.java @@ -23,7 +23,7 @@ import org.thoughtcrime.securesms.backup.BackupVerifier; import org.thoughtcrime.securesms.backup.FullBackupExporter; import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.notifications.NotificationChannels; @@ -68,8 +68,8 @@ public final class LocalBackupJobApi29 extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -294,7 +294,7 @@ public final class LocalBackupJobApi29 extends BaseJob { public static class Factory implements Job.Factory { @Override public @NonNull - LocalBackupJobApi29 create(@NonNull Parameters parameters, @NonNull Data data) { + LocalBackupJobApi29 create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new LocalBackupJobApi29(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MarkerJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MarkerJob.java index cefe4ed74e..5199174bf1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MarkerJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MarkerJob.java @@ -4,7 +4,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; /** @@ -39,8 +39,8 @@ public final class MarkerJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -54,7 +54,7 @@ public final class MarkerJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MarkerJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MarkerJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new MarkerJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java index b5c4a8b3ad..d1ab286f7f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java @@ -22,7 +22,7 @@ import org.thoughtcrime.securesms.database.MessageTable.InsertResult; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.mms.ApnUnavailableException; @@ -41,7 +41,6 @@ import org.thoughtcrime.securesms.util.Util; import java.io.IOException; import java.io.UnsupportedEncodingException; -import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedList; import java.util.List; @@ -83,11 +82,11 @@ public class MmsDownloadJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId) - .putLong(KEY_THREAD_ID, threadId) - .putBoolean(KEY_AUTOMATIC, automatic) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_MESSAGE_ID, messageId) + .putLong(KEY_THREAD_ID, threadId) + .putBoolean(KEY_AUTOMATIC, automatic) + .serialize(); } @Override @@ -271,7 +270,9 @@ public class MmsDownloadJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MmsDownloadJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MmsDownloadJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new MmsDownloadJob(parameters, data.getLong(KEY_MESSAGE_ID), data.getLong(KEY_THREAD_ID), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java index 5b203f4c5a..96de6a8759 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.google.android.mms.pdu_alt.GenericPdu; import com.google.android.mms.pdu_alt.NotificationInd; @@ -12,7 +13,7 @@ import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.Base64; @@ -44,10 +45,10 @@ public class MmsReceiveJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_DATA, Base64.encodeBytes(data)) - .putInt(KEY_SUBSCRIPTION_ID, subscriptionId) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_DATA, Base64.encodeBytes(data)) + .putInt(KEY_SUBSCRIPTION_ID, subscriptionId) + .serialize(); } @Override @@ -123,8 +124,9 @@ public class MmsReceiveJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MmsReceiveJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MmsReceiveJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { try { + JsonJobData data = JsonJobData.deserialize(serializedData); return new MmsReceiveJob(parameters, Base64.decode(data.getString(KEY_DATA)), data.getInt(KEY_SUBSCRIPTION_ID)); } catch (IOException e) { throw new AssertionError(e); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java index 668c9e7bb3..92602e87cc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java @@ -5,6 +5,7 @@ import android.text.TextUtils; import android.webkit.MimeTypeMap; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import com.android.mms.dom.smil.parser.SmilXmlSerializer; @@ -33,7 +34,7 @@ import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobLogger; import org.thoughtcrime.securesms.jobmanager.JobManager; @@ -106,8 +107,8 @@ public final class MmsSendJob extends SendJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId).build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_MESSAGE_ID, messageId).serialize(); } @Override @@ -362,7 +363,8 @@ public final class MmsSendJob extends SendJob { public static class Factory implements Job.Factory { @Override - public @NonNull MmsSendJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MmsSendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new MmsSendJob(parameters, data.getLong(KEY_MESSAGE_ID)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceBlockedUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceBlockedUpdateJob.java index 07afb1770b..9b46aba06e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceBlockedUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceBlockedUpdateJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; @@ -8,7 +9,7 @@ import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.RecipientTable.RecipientReader; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.net.NotPushRegisteredException; @@ -49,8 +50,8 @@ public class MultiDeviceBlockedUpdateJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -106,7 +107,7 @@ public class MultiDeviceBlockedUpdateJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MultiDeviceBlockedUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDeviceBlockedUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new MultiDeviceBlockedUpdateJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceConfigurationUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceConfigurationUpdateJob.java index 8a20656e30..ec93751ce1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceConfigurationUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceConfigurationUpdateJob.java @@ -2,11 +2,12 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -71,12 +72,12 @@ public class MultiDeviceConfigurationUpdateJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putBoolean(KEY_READ_RECEIPTS_ENABLED, readReceiptsEnabled) - .putBoolean(KEY_TYPING_INDICATORS_ENABLED, typingIndicatorsEnabled) - .putBoolean(KEY_UNIDENTIFIED_DELIVERY_INDICATORS_ENABLED, unidentifiedDeliveryIndicatorsEnabled) - .putBoolean(KEY_LINK_PREVIEWS_ENABLED, linkPreviewsEnabled) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putBoolean(KEY_READ_RECEIPTS_ENABLED, readReceiptsEnabled) + .putBoolean(KEY_TYPING_INDICATORS_ENABLED, typingIndicatorsEnabled) + .putBoolean(KEY_UNIDENTIFIED_DELIVERY_INDICATORS_ENABLED, unidentifiedDeliveryIndicatorsEnabled) + .putBoolean(KEY_LINK_PREVIEWS_ENABLED, linkPreviewsEnabled) + .serialize(); } @Override @@ -121,7 +122,9 @@ public class MultiDeviceConfigurationUpdateJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MultiDeviceConfigurationUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDeviceConfigurationUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new MultiDeviceConfigurationUpdateJob(parameters, data.getBooleanOrDefault(KEY_READ_RECEIPTS_ENABLED, false), data.getBooleanOrDefault(KEY_TYPING_INDICATORS_ENABLED, false), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactSyncJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactSyncJob.kt index 75f477353f..a5a2832ac2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactSyncJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactSyncJob.kt @@ -5,8 +5,8 @@ import org.signal.libsignal.protocol.InvalidMessageException import org.thoughtcrime.securesms.database.IdentityTable.VerifiedStatus import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.jobmanager.JsonJobData import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.net.NotPushRegisteredException import org.thoughtcrime.securesms.profiles.AvatarHelper @@ -35,10 +35,10 @@ class MultiDeviceContactSyncJob(parameters: Parameters, private val attachmentPo AttachmentPointerUtil.createAttachmentPointer(contactsAttachment).toByteArray() ) - override fun serialize(): Data { - return Data.Builder() + override fun serialize(): ByteArray? { + return JsonJobData.Builder() .putBlobAsString(KEY_ATTACHMENT_POINTER, attachmentPointer) - .build() + .serialize() } override fun getFactoryKey(): String { @@ -141,7 +141,8 @@ class MultiDeviceContactSyncJob(parameters: Parameters, private val attachmentPo override fun onFailure() = Unit class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): MultiDeviceContactSyncJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): MultiDeviceContactSyncJob { + val data = JsonJobData.deserialize(serializedData) return MultiDeviceContactSyncJob(parameters, data.getStringAsBlob(KEY_ATTACHMENT_POINTER)) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java index 2025e68d1a..95d155fdf5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java @@ -20,7 +20,7 @@ import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -101,10 +101,10 @@ public class MultiDeviceContactUpdateJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_RECIPIENT, recipientId != null ? recipientId.serialize() : null) - .putBoolean(KEY_FORCE_SYNC, forceSync) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_RECIPIENT, recipientId != null ? recipientId.serialize() : null) + .putBoolean(KEY_FORCE_SYNC, forceSync) + .serialize(); } @Override @@ -404,7 +404,9 @@ public class MultiDeviceContactUpdateJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MultiDeviceContactUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDeviceContactUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + String serialized = data.getString(KEY_RECIPIENT); RecipientId address = serialized != null ? RecipientId.from(serialized) : null; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java index ef28214c73..bd42f6d567 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java @@ -4,6 +4,7 @@ import android.net.Uri; import android.os.ParcelFileDescriptor; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.conversation.colors.ChatColorsMapper; @@ -12,7 +13,7 @@ import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.GroupRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -69,8 +70,8 @@ public class MultiDeviceGroupUpdateJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -205,7 +206,7 @@ public class MultiDeviceGroupUpdateJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MultiDeviceGroupUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDeviceGroupUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new MultiDeviceGroupUpdateJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.java index 7a985079a9..b6cb4832f1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.java @@ -2,11 +2,12 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -45,8 +46,8 @@ public class MultiDeviceKeysUpdateJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -89,7 +90,7 @@ public class MultiDeviceKeysUpdateJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MultiDeviceKeysUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDeviceKeysUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new MultiDeviceKeysUpdateJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceMessageRequestResponseJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceMessageRequestResponseJob.java index 0a206fc0bc..f2fcd40b4f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceMessageRequestResponseJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceMessageRequestResponseJob.java @@ -2,11 +2,12 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.net.NotPushRegisteredException; @@ -76,10 +77,10 @@ public class MultiDeviceMessageRequestResponseJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_THREAD_RECIPIENT, threadRecipient.serialize()) - .putInt(KEY_TYPE, type.serialize()) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_THREAD_RECIPIENT, threadRecipient.serialize()) + .putInt(KEY_TYPE, type.serialize()) + .serialize(); } @Override @@ -174,8 +175,9 @@ public class MultiDeviceMessageRequestResponseJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull - MultiDeviceMessageRequestResponseJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDeviceMessageRequestResponseJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + RecipientId threadRecipient = RecipientId.from(data.getString(KEY_THREAD_RECIPIENT)); Type type = Type.deserialize(data.getInt(KEY_TYPE)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java index 20fe1eb272..d19be0fd2d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.google.protobuf.ByteString; @@ -9,7 +10,7 @@ import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.net.NotPushRegisteredException; @@ -57,10 +58,10 @@ public final class MultiDeviceOutgoingPaymentSyncJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder() + public @Nullable byte[] serialize() { + return new JsonJobData.Builder() .putString(KEY_UUID, uuid.toString()) - .build(); + .serialize(); } @Override @@ -134,7 +135,9 @@ public final class MultiDeviceOutgoingPaymentSyncJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull MultiDeviceOutgoingPaymentSyncJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDeviceOutgoingPaymentSyncJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new MultiDeviceOutgoingPaymentSyncJob(parameters, UUID.fromString(data.getString(KEY_UUID))); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDevicePniIdentityUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDevicePniIdentityUpdateJob.java index 1ceae16b64..4d9f24b7d2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDevicePniIdentityUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDevicePniIdentityUpdateJob.java @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.google.protobuf.ByteString; @@ -9,7 +10,7 @@ import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.IdentityKeyPair; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -50,8 +51,8 @@ public class MultiDevicePniIdentityUpdateJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -96,7 +97,7 @@ public class MultiDevicePniIdentityUpdateJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MultiDevicePniIdentityUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDevicePniIdentityUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new MultiDevicePniIdentityUpdateJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceProfileContentUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceProfileContentUpdateJob.java index 5141a86096..8d73a55b72 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceProfileContentUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceProfileContentUpdateJob.java @@ -1,11 +1,12 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.net.NotPushRegisteredException; @@ -36,8 +37,8 @@ public class MultiDeviceProfileContentUpdateJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -75,7 +76,7 @@ public class MultiDeviceProfileContentUpdateJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MultiDeviceProfileContentUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDeviceProfileContentUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new MultiDeviceProfileContentUpdateJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceProfileKeyUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceProfileKeyUpdateJob.java index a4cd18ec64..d799dd75ec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceProfileKeyUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceProfileKeyUpdateJob.java @@ -2,13 +2,14 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.net.NotPushRegisteredException; @@ -52,8 +53,8 @@ public class MultiDeviceProfileKeyUpdateJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -115,7 +116,7 @@ public class MultiDeviceProfileKeyUpdateJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MultiDeviceProfileKeyUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDeviceProfileKeyUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new MultiDeviceProfileKeyUpdateJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java index 895e9035ef..83409b1007 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.annimon.stream.Stream; import com.fasterxml.jackson.annotation.JsonProperty; @@ -10,7 +11,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.database.MessageTable.SyncMessageId; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -80,7 +81,7 @@ public class MultiDeviceReadUpdateJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @Nullable byte[] serialize() { String[] ids = new String[messageIds.size()]; for (int i = 0; i < ids.length; i++) { @@ -91,7 +92,7 @@ public class MultiDeviceReadUpdateJob extends BaseJob { } } - return new Data.Builder().putStringArray(KEY_MESSAGE_IDS, ids).build(); + return new JsonJobData.Builder().putStringArray(KEY_MESSAGE_IDS, ids).serialize(); } @Override @@ -152,7 +153,9 @@ public class MultiDeviceReadUpdateJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MultiDeviceReadUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDeviceReadUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + List ids = Stream.of(data.getStringArray(KEY_MESSAGE_IDS)) .map(id -> { try { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStickerPackOperationJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStickerPackOperationJob.java index d03be65355..1cab0aea43 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStickerPackOperationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStickerPackOperationJob.java @@ -1,11 +1,12 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.signal.core.util.Hex; @@ -59,11 +60,11 @@ public class MultiDeviceStickerPackOperationJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_PACK_ID, packId) - .putString(KEY_PACK_KEY, packKey) - .putString(KEY_TYPE, type.name()) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_PACK_ID, packId) + .putString(KEY_PACK_KEY, packKey) + .putString(KEY_TYPE, type.name()) + .serialize(); } @Override @@ -115,7 +116,9 @@ public class MultiDeviceStickerPackOperationJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull MultiDeviceStickerPackOperationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDeviceStickerPackOperationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new MultiDeviceStickerPackOperationJob(parameters, data.getString(KEY_PACK_ID), data.getString(KEY_PACK_KEY), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStickerPackSyncJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStickerPackSyncJob.java index cff064fd69..f8ae8395a6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStickerPackSyncJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStickerPackSyncJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; @@ -8,7 +9,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.StickerTable.StickerPackRecordReader; import org.thoughtcrime.securesms.database.model.StickerPackRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.net.NotPushRegisteredException; @@ -47,8 +48,8 @@ public class MultiDeviceStickerPackSyncJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -99,7 +100,7 @@ public class MultiDeviceStickerPackSyncJob extends BaseJob { @Override public @NonNull - MultiDeviceStickerPackSyncJob create(@NonNull Parameters parameters, @NonNull Data data) { + MultiDeviceStickerPackSyncJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new MultiDeviceStickerPackSyncJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStorageSyncRequestJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStorageSyncRequestJob.java index e236362c19..8689dc9e96 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStorageSyncRequestJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStorageSyncRequestJob.java @@ -1,11 +1,12 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.net.NotPushRegisteredException; @@ -36,8 +37,8 @@ public class MultiDeviceStorageSyncRequestJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -75,7 +76,7 @@ public class MultiDeviceStorageSyncRequestJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MultiDeviceStorageSyncRequestJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDeviceStorageSyncRequestJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new MultiDeviceStorageSyncRequestJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStorySendSyncJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStorySendSyncJob.kt index 622310f600..93ca4b5674 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStorySendSyncJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStorySendSyncJob.kt @@ -3,8 +3,8 @@ package org.thoughtcrime.securesms.jobs import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.jobmanager.JsonJobData import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.recipients.Recipient import org.whispersystems.signalservice.api.messages.SignalServiceStoryMessageRecipient @@ -44,11 +44,11 @@ class MultiDeviceStorySendSyncJob private constructor(parameters: Parameters, pr } } - override fun serialize(): Data { - return Data.Builder() + override fun serialize(): ByteArray? { + return JsonJobData.Builder() .putLong(DATA_SENT_TIMESTAMP, sentTimestamp) .putLong(DATA_DELETED_MESSAGE_ID, deletedMessageId) - .build() + .serialize() } override fun getFactoryKey(): String = KEY @@ -90,7 +90,8 @@ class MultiDeviceStorySendSyncJob private constructor(parameters: Parameters, pr class RetryableException : Exception() class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): MultiDeviceStorySendSyncJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): MultiDeviceStorySendSyncJob { + val data = JsonJobData.deserialize(serializedData) return MultiDeviceStorySendSyncJob( parameters = parameters, sentTimestamp = data.getLong(DATA_SENT_TIMESTAMP), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceSubscriptionSyncRequestJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceSubscriptionSyncRequestJob.kt index c081dcba38..4d329bf8fa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceSubscriptionSyncRequestJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceSubscriptionSyncRequestJob.kt @@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.jobs import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.net.NotPushRegisteredException @@ -38,7 +37,7 @@ class MultiDeviceSubscriptionSyncRequestJob private constructor(parameters: Para } } - override fun serialize(): Data = Data.EMPTY + override fun serialize(): ByteArray? = null override fun getFactoryKey(): String = KEY @@ -69,7 +68,7 @@ class MultiDeviceSubscriptionSyncRequestJob private constructor(parameters: Para } class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): MultiDeviceSubscriptionSyncRequestJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): MultiDeviceSubscriptionSyncRequestJob { return MultiDeviceSubscriptionSyncRequestJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceVerifiedUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceVerifiedUpdateJob.java index efcb066d4c..181ad3195b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceVerifiedUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceVerifiedUpdateJob.java @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.IdentityKey; @@ -9,7 +10,7 @@ import org.signal.libsignal.protocol.InvalidKeyException; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.database.IdentityTable.VerifiedStatus; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.net.NotPushRegisteredException; @@ -73,12 +74,12 @@ public class MultiDeviceVerifiedUpdateJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_DESTINATION, destination.serialize()) - .putString(KEY_IDENTITY_KEY, Base64.encodeBytes(identityKey)) - .putInt(KEY_VERIFIED_STATUS, verifiedStatus.toInt()) - .putLong(KEY_TIMESTAMP, timestamp) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_DESTINATION, destination.serialize()) + .putString(KEY_IDENTITY_KEY, Base64.encodeBytes(identityKey)) + .putInt(KEY_VERIFIED_STATUS, verifiedStatus.toInt()) + .putLong(KEY_TIMESTAMP, timestamp) + .serialize(); } @Override @@ -148,7 +149,9 @@ public class MultiDeviceVerifiedUpdateJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MultiDeviceVerifiedUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDeviceVerifiedUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + try { RecipientId destination = RecipientId.from(data.getString(KEY_DESTINATION)); VerifiedStatus verifiedStatus = VerifiedStatus.forState(data.getInt(KEY_VERIFIED_STATUS)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewOnceOpenJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewOnceOpenJob.java index 80acd787a7..52570ea04e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewOnceOpenJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewOnceOpenJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fasterxml.jackson.annotation.JsonProperty; @@ -8,7 +9,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.database.MessageTable.SyncMessageId; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.net.NotPushRegisteredException; @@ -53,7 +54,7 @@ public class MultiDeviceViewOnceOpenJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @Nullable byte[] serialize() { String serialized; try { @@ -62,7 +63,7 @@ public class MultiDeviceViewOnceOpenJob extends BaseJob { throw new AssertionError(e); } - return new Data.Builder().putString(KEY_MESSAGE_ID, serialized).build(); + return new JsonJobData.Builder().putString(KEY_MESSAGE_ID, serialized).serialize(); } @Override @@ -123,9 +124,10 @@ public class MultiDeviceViewOnceOpenJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MultiDeviceViewOnceOpenJob create(@NonNull Parameters parameters, @NonNull Data data) { - SerializableSyncMessageId messageId; + public @NonNull MultiDeviceViewOnceOpenJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + SerializableSyncMessageId messageId; try { messageId = JsonUtils.fromJson(data.getString(KEY_MESSAGE_ID), SerializableSyncMessageId.class); } catch (IOException e) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java index 9302dafce6..788ee76db2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.annimon.stream.Stream; import com.fasterxml.jackson.annotation.JsonProperty; @@ -10,7 +11,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.database.MessageTable.SyncMessageId; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -80,7 +81,7 @@ public class MultiDeviceViewedUpdateJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @Nullable byte[] serialize() { String[] ids = new String[messageIds.size()]; for (int i = 0; i < ids.length; i++) { @@ -91,7 +92,7 @@ public class MultiDeviceViewedUpdateJob extends BaseJob { } } - return new Data.Builder().putStringArray(KEY_MESSAGE_IDS, ids).build(); + return new JsonJobData.Builder().putStringArray(KEY_MESSAGE_IDS, ids).serialize(); } @Override @@ -152,7 +153,9 @@ public class MultiDeviceViewedUpdateJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull MultiDeviceViewedUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MultiDeviceViewedUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + List ids = Stream.of(data.getStringArray(KEY_MESSAGE_IDS)) .map(id -> { try { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/NewRegistrationUsernameSyncJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/NewRegistrationUsernameSyncJob.kt index c4a3348fa3..bdc280e68b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/NewRegistrationUsernameSyncJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/NewRegistrationUsernameSyncJob.kt @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.jobs import org.signal.core.util.logging.Log -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import java.io.IOException @@ -26,7 +25,7 @@ class NewRegistrationUsernameSyncJob private constructor(parameters: Parameters) .build() ) - override fun serialize(): Data = Data.EMPTY + override fun serialize(): ByteArray? = null override fun getFactoryKey(): String = KEY @@ -41,7 +40,7 @@ class NewRegistrationUsernameSyncJob private constructor(parameters: Parameters) } class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): NewRegistrationUsernameSyncJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): NewRegistrationUsernameSyncJob { return NewRegistrationUsernameSyncJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/NullMessageSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/NullMessageSendJob.java index 5435682534..c1deb83d50 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/NullMessageSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/NullMessageSendJob.java @@ -1,11 +1,12 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.recipients.Recipient; @@ -49,8 +50,8 @@ public class NullMessageSendJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_RECIPIENT_ID, recipientId.serialize()).build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_RECIPIENT_ID, recipientId.serialize()).serialize(); } @Override @@ -94,7 +95,9 @@ public class NullMessageSendJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull NullMessageSendJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull NullMessageSendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new NullMessageSendJob(RecipientId.from(data.getString(KEY_RECIPIENT_ID)), parameters); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/OptimizeMessageSearchIndexJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/OptimizeMessageSearchIndexJob.kt index e3050dfba2..427bcfe311 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/OptimizeMessageSearchIndexJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/OptimizeMessageSearchIndexJob.kt @@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.jobs import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.transport.RetryLaterException @@ -34,7 +33,7 @@ class OptimizeMessageSearchIndexJob private constructor(parameters: Parameters) .build() ) - override fun serialize(): Data = Data.EMPTY + override fun serialize(): ByteArray? = null override fun getFactoryKey() = KEY override fun onFailure() = Unit override fun onShouldRetry(e: Exception) = e is RetryLaterException @@ -54,6 +53,6 @@ class OptimizeMessageSearchIndexJob private constructor(parameters: Parameters) } class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data) = OptimizeMessageSearchIndexJob(parameters) + override fun create(parameters: Parameters, serializedData: ByteArray?) = OptimizeMessageSearchIndexJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentLedgerUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentLedgerUpdateJob.java index 9f1d389d1c..df9dd46b0c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentLedgerUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentLedgerUpdateJob.java @@ -9,7 +9,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.payments.MobileCoinLedgerWrapper; @@ -96,10 +96,10 @@ public final class PaymentLedgerUpdateJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder() + public @Nullable byte[] serialize() { + return new JsonJobData.Builder() .putString(KEY_PAYMENT_UUID, paymentUuid != null ? paymentUuid.toString() : null) - .build(); + .serialize(); } @NonNull @Override @@ -114,7 +114,9 @@ public final class PaymentLedgerUpdateJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull PaymentLedgerUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull PaymentLedgerUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + String paymentUuid = data.getString(KEY_PAYMENT_UUID); return new PaymentLedgerUpdateJob(parameters, paymentUuid != null ? UUID.fromString(paymentUuid) : null); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJob.java index 39b7d68f96..e0dd1fc9ff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJob.java @@ -1,20 +1,20 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.net.NotPushRegisteredException; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.transport.RetryLaterException; -import org.thoughtcrime.securesms.util.FeatureFlags; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.SignalServiceMessageSender.IndividualSendEvents; import org.whispersystems.signalservice.api.crypto.ContentHint; @@ -27,7 +27,6 @@ import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedExcept import java.io.IOException; import java.util.Optional; import java.util.UUID; -import java.util.concurrent.TimeUnit; public final class PaymentNotificationSendJob extends BaseJob { @@ -56,11 +55,11 @@ public final class PaymentNotificationSendJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder() + public @Nullable byte[] serialize() { + return new JsonJobData.Builder() .putString(KEY_RECIPIENT, recipientId.serialize()) .putString(KEY_UUID, uuid.toString()) - .build(); + .serialize(); } @Override @@ -134,7 +133,9 @@ public final class PaymentNotificationSendJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull PaymentNotificationSendJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull PaymentNotificationSendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new PaymentNotificationSendJob(parameters, RecipientId.from(data.getString(KEY_RECIPIENT)), UUID.fromString(data.getString(KEY_UUID))); 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 5452977508..07f5822e1c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJobV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJobV2.kt @@ -2,8 +2,8 @@ package org.thoughtcrime.securesms.jobs import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.jobmanager.JsonJobData import org.thoughtcrime.securesms.mms.OutgoingMessage import org.thoughtcrime.securesms.net.NotPushRegisteredException import org.thoughtcrime.securesms.recipients.Recipient @@ -32,11 +32,11 @@ class PaymentNotificationSendJobV2 private constructor( constructor(recipientId: RecipientId, uuid: UUID) : this(Parameters.Builder().build(), recipientId, uuid) - override fun serialize(): Data { - return Data.Builder() + override fun serialize(): ByteArray? { + return JsonJobData.Builder() .putString(KEY_RECIPIENT, recipientId.serialize()) .putString(KEY_UUID, uuid.toString()) - .build() + .serialize() } override fun getFactoryKey(): String { @@ -80,7 +80,8 @@ class PaymentNotificationSendJobV2 private constructor( override fun onFailure() = Unit class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): PaymentNotificationSendJobV2 { + override fun create(parameters: Parameters, serializedData: ByteArray?): PaymentNotificationSendJobV2 { + val data = JsonJobData.deserialize(serializedData) return PaymentNotificationSendJobV2( parameters, RecipientId.from(data.getString(KEY_RECIPIENT)), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentSendJob.java index 94f5075f10..4922ea507b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentSendJob.java @@ -8,7 +8,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -211,9 +211,9 @@ public final class PaymentSendJob extends BaseJob { return false; } - @NonNull @Override - public Data serialize() { - return new Data.Builder() + @Override + public @Nullable byte[] serialize() { + return new JsonJobData.Builder() .putString(KEY_UUID, uuid.toString()) .putLong(KEY_TIMESTAMP, timestamp) .putString(KEY_RECIPIENT, recipientId != null ? recipientId.serialize() : null) @@ -221,7 +221,7 @@ public final class PaymentSendJob extends BaseJob { .putString(KEY_NOTE, note) .putString(KEY_AMOUNT, amount.serialize()) .putString(KEY_FEE, totalFee.serialize()) - .build(); + .serialize(); } @NonNull @Override @@ -242,7 +242,9 @@ public final class PaymentSendJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull PaymentSendJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull PaymentSendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new PaymentSendJob(parameters, UUID.fromString(data.getString(KEY_UUID)), data.getLong(KEY_TIMESTAMP), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentTransactionCheckJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentTransactionCheckJob.java index a93657ab1b..aee9be4f9f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentTransactionCheckJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentTransactionCheckJob.java @@ -1,12 +1,13 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.BackoffUtil; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -134,12 +135,11 @@ public final class PaymentTransactionCheckJob extends BaseJob { e instanceof IOException; } - @NonNull @Override - public Data serialize() { - return new Data.Builder() + public @Nullable byte[] serialize() { + return new JsonJobData.Builder() .putString(KEY_UUID, uuid.toString()) - .build(); + .serialize(); } @NonNull @@ -158,7 +158,9 @@ public final class PaymentTransactionCheckJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull PaymentTransactionCheckJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull PaymentTransactionCheckJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new PaymentTransactionCheckJob(parameters, UUID.fromString(data.getString(KEY_UUID))); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PnpInitializeDevicesJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/PnpInitializeDevicesJob.kt index b986343117..dcf9a358e4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PnpInitializeDevicesJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PnpInitializeDevicesJob.kt @@ -4,7 +4,6 @@ import org.signal.core.util.concurrent.safeBlockingGet import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.components.settings.app.changenumber.ChangeNumberRepository import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -38,8 +37,8 @@ class PnpInitializeDevicesJob private constructor(parameters: Parameters) : Base constructor() : this(Parameters.Builder().addConstraint(NetworkConstraint.KEY).build()) - override fun serialize(): Data { - return Data.EMPTY + override fun serialize(): ByteArray? { + return null } override fun getFactoryKey(): String { @@ -110,7 +109,7 @@ class PnpInitializeDevicesJob private constructor(parameters: Parameters) : Base } class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): PnpInitializeDevicesJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): PnpInitializeDevicesJob { return PnpInitializeDevicesJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt index 90c350905e..da0bcd8d60 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt @@ -6,8 +6,8 @@ import org.signal.libsignal.protocol.state.SignalProtocolStore import org.thoughtcrime.securesms.crypto.PreKeyUtil import org.thoughtcrime.securesms.crypto.storage.PreKeyMetadataStore import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.jobmanager.JsonJobData import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.util.TextSecurePreferences @@ -78,10 +78,10 @@ class PreKeysSyncJob private constructor(private val forceRotate: Boolean = fals override fun getFactoryKey(): String = KEY - override fun serialize(): Data { - return Data.Builder() + override fun serialize(): ByteArray? { + return JsonJobData.Builder() .putBoolean(KEY_FORCE_ROTATE, forceRotate) - .build() + .serialize() } override fun onRun() { @@ -175,7 +175,8 @@ class PreKeysSyncJob private constructor(private val forceRotate: Boolean = fals } class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): PreKeysSyncJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): PreKeysSyncJob { + val data = JsonJobData.deserialize(serializedData) return PreKeysSyncJob(data.getBooleanOrDefault(KEY_FORCE_ROTATE, false), parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ProfileKeySendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ProfileKeySendJob.java index 9ccc708f81..359960282a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ProfileKeySendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ProfileKeySendJob.java @@ -8,7 +8,7 @@ import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -130,11 +130,11 @@ public class ProfileKeySendJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder() + public @Nullable byte[] serialize() { + return new JsonJobData.Builder() .putLong(KEY_THREAD, threadId) .putString(KEY_RECIPIENTS, RecipientId.toSerializedList(recipients)) - .build(); + .serialize(); } @Override @@ -161,7 +161,9 @@ public class ProfileKeySendJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull ProfileKeySendJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull ProfileKeySendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + long threadId = data.getLong(KEY_THREAD); List recipients = RecipientId.fromSerializedList(data.getString(KEY_RECIPIENTS)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ProfileUploadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ProfileUploadJob.java index b96f3f74e1..e45e67469c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ProfileUploadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ProfileUploadJob.java @@ -2,9 +2,10 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -51,8 +52,8 @@ public final class ProfileUploadJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -67,7 +68,7 @@ public final class ProfileUploadJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull ProfileUploadJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull ProfileUploadJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new ProfileUploadJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptDrainedJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptDrainedJob.java index 61d69b4106..b0e345ee99 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptDrainedJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptDrainedJob.java @@ -1,10 +1,11 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; /** @@ -29,8 +30,8 @@ public class PushDecryptDrainedJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -55,7 +56,7 @@ public class PushDecryptDrainedJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull PushDecryptDrainedJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull PushDecryptDrainedJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new PushDecryptDrainedJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.kt index ebc77e6dd9..a949d86e07 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.kt @@ -8,8 +8,8 @@ import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.MainActivity import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.jobmanager.JsonJobData import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.messages.MessageContentProcessor.ExceptionMetadata import org.thoughtcrime.securesms.messages.MessageContentProcessor.MessageState @@ -61,11 +61,11 @@ class PushDecryptMessageJob private constructor( override fun shouldTrace() = true - override fun serialize(): Data { - return Data.Builder() + override fun serialize(): ByteArray? { + return JsonJobData.Builder() .putBlobAsString(KEY_ENVELOPE, envelope.serialize()) .putLong(KEY_SMS_MESSAGE_ID, smsMessageId) - .build() + .serialize() } override fun getFactoryKey() = KEY @@ -186,7 +186,8 @@ class PushDecryptMessageJob private constructor( } class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): PushDecryptMessageJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): PushDecryptMessageJob { + val data = JsonJobData.deserialize(serializedData) return PushDecryptMessageJob( parameters, SignalServiceEnvelope.deserialize(data.getStringAsBlob(KEY_ENVELOPE)), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java index 1e630fa008..368cac3b5e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.jobs; import android.content.Context; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import com.annimon.stream.Stream; @@ -18,7 +19,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; import org.thoughtcrime.securesms.database.documents.NetworkFailure; import org.thoughtcrime.securesms.database.model.MessageId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobLogger; import org.thoughtcrime.securesms.jobmanager.JobManager; @@ -119,10 +120,10 @@ public final class PushDistributionListSendJob extends PushSendJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId) - .putString(KEY_FILTERED_RECIPIENT_IDS, RecipientId.toSerializedList(filterRecipientIds)) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_MESSAGE_ID, messageId) + .putString(KEY_FILTERED_RECIPIENT_IDS, RecipientId.toSerializedList(filterRecipientIds)) + .serialize(); } @Override @@ -225,7 +226,9 @@ public final class PushDistributionListSendJob extends PushSendJob { public static class Factory implements Job.Factory { @Override - public @NonNull PushDistributionListSendJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull PushDistributionListSendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + Set recipientIds = new HashSet<>(RecipientId.fromSerializedList(data.getStringOrDefault(KEY_FILTERED_RECIPIENT_IDS, ""))); return new PushDistributionListSendJob(parameters, data.getLong(KEY_MESSAGE_ID), recipientIds); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java index 9bb6751ed2..72635027a9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -28,7 +28,7 @@ import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobLogger; import org.thoughtcrime.securesms.jobmanager.JobManager; @@ -146,10 +146,10 @@ public final class PushGroupSendJob extends PushSendJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId) - .putString(KEY_FILTER_RECIPIENTS, RecipientId.toSerializedList(filterRecipients)) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_MESSAGE_ID, messageId) + .putString(KEY_FILTER_RECIPIENTS, RecipientId.toSerializedList(filterRecipients)) + .serialize(); } private static boolean isGv2UpdateMessage(@NonNull OutgoingMessage message) { @@ -382,7 +382,8 @@ public final class PushGroupSendJob extends PushSendJob { } } - public static long getMessageId(@NonNull Data data) { + public static long getMessageId(@Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return data.getLong(KEY_MESSAGE_ID); } @@ -520,7 +521,9 @@ public final class PushGroupSendJob extends PushSendJob { public static class Factory implements Job.Factory { @Override - public @NonNull PushGroupSendJob create(@NonNull Parameters parameters, @NonNull org.thoughtcrime.securesms.jobmanager.Data data) { + public @NonNull PushGroupSendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + String raw = data.getStringOrDefault(KEY_FILTER_RECIPIENTS, ""); Set filters = raw != null ? new HashSet<>(RecipientId.fromSerializedList(raw)) : Collections.emptySet(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java index 7c23dc0817..84204fb6c8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.jobs; import android.content.Context; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import com.annimon.stream.Collectors; @@ -13,7 +14,7 @@ import org.signal.core.util.logging.Log; import org.signal.storageservice.protos.groups.local.DecryptedGroup; import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.messages.GroupSendUtil; @@ -112,12 +113,12 @@ public final class PushGroupSilentUpdateSendJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_RECIPIENTS, RecipientId.toSerializedList(recipients)) - .putInt(KEY_INITIAL_RECIPIENT_COUNT, initialRecipientCount) - .putLong(KEY_TIMESTAMP, timestamp) - .putString(KEY_GROUP_CONTEXT_V2, Base64.encodeBytes(groupContextV2.toByteArray())) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_RECIPIENTS, RecipientId.toSerializedList(recipients)) + .putInt(KEY_INITIAL_RECIPIENT_COUNT, initialRecipientCount) + .putLong(KEY_TIMESTAMP, timestamp) + .putString(KEY_GROUP_CONTEXT_V2, Base64.encodeBytes(groupContextV2.toByteArray())) + .serialize(); } @Override @@ -182,7 +183,9 @@ public final class PushGroupSilentUpdateSendJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull PushGroupSilentUpdateSendJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull PushGroupSilentUpdateSendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + List recipients = RecipientId.fromSerializedList(data.getString(KEY_RECIPIENTS)); int initialRecipientCount = data.getInt(KEY_INITIAL_RECIPIENT_COUNT); long timestamp = data.getLong(KEY_TIMESTAMP); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushNotificationReceiveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushNotificationReceiveJob.java index cd7b9a3315..8e06c13f70 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushNotificationReceiveJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushNotificationReceiveJob.java @@ -1,10 +1,11 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.messages.BackgroundMessageRetriever; @@ -47,9 +48,9 @@ public final class PushNotificationReceiveJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_FOREGROUND_SERVICE_DELAY, foregroundServiceDelayMs) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_FOREGROUND_SERVICE_DELAY, foregroundServiceDelayMs) + .serialize(); } @Override @@ -83,7 +84,9 @@ public final class PushNotificationReceiveJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull PushNotificationReceiveJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull PushNotificationReceiveJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new PushNotificationReceiveJob(parameters, data.getLongOrDefault(KEY_FOREGROUND_SERVICE_DELAY, BackgroundMessageRetriever.DO_NOT_SHOW_IN_FOREGROUND)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessEarlyMessagesJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessEarlyMessagesJob.kt index 8decf6a735..3d8d87a192 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessEarlyMessagesJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessEarlyMessagesJob.kt @@ -4,7 +4,6 @@ import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.ServiceMessageId import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.messages.MessageContentProcessor import org.whispersystems.signalservice.api.messages.SignalServiceContent @@ -30,8 +29,8 @@ class PushProcessEarlyMessagesJob private constructor(parameters: Parameters) : return KEY } - override fun serialize(): Data { - return Data.EMPTY + override fun serialize(): ByteArray? { + return null } override fun onRun() { @@ -67,7 +66,7 @@ class PushProcessEarlyMessagesJob private constructor(parameters: Parameters) : } class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): PushProcessEarlyMessagesJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): PushProcessEarlyMessagesJob { return PushProcessEarlyMessagesJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessMessageJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessMessageJob.java index 73dbe71d86..5514f633ce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessMessageJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessMessageJob.java @@ -11,7 +11,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupChangeBusyException; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.messages.MessageContentProcessor; @@ -134,8 +134,8 @@ public final class PushProcessMessageJob extends BaseJob { } @Override - public @NonNull Data serialize() { - Data.Builder dataBuilder = new Data.Builder() + public @Nullable byte[] serialize() { + JsonJobData.Builder dataBuilder = new JsonJobData.Builder() .putInt(KEY_MESSAGE_STATE, messageState.ordinal()) .putLong(KEY_SMS_MESSAGE_ID, smsMessageId) .putLong(KEY_TIMESTAMP, timestamp); @@ -149,7 +149,7 @@ public final class PushProcessMessageJob extends BaseJob { .putString(KEY_EXCEPTION_GROUP_ID, exceptionMetadata.getGroupId() == null ? null : exceptionMetadata.getGroupId().toString()); } - return dataBuilder.build(); + return dataBuilder.serialize(); } @Override @@ -176,7 +176,9 @@ public final class PushProcessMessageJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull PushProcessMessageJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull PushProcessMessageJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + try { MessageState state = MessageState.values()[data.getInt(KEY_MESSAGE_STATE)]; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java index 65289ed722..4436121495 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.jobs; import android.content.Context; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import org.signal.core.util.logging.Log; @@ -14,7 +15,7 @@ import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.ReactionRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -112,16 +113,16 @@ public class ReactionSendJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId.getId()) - .putString(KEY_REACTION_EMOJI, reaction.getEmoji()) - .putString(KEY_REACTION_AUTHOR, reaction.getAuthor().serialize()) - .putLong(KEY_REACTION_DATE_SENT, reaction.getDateSent()) - .putLong(KEY_REACTION_DATE_RECEIVED, reaction.getDateReceived()) - .putBoolean(KEY_REMOVE, remove) - .putString(KEY_RECIPIENTS, RecipientId.toSerializedList(recipients)) - .putInt(KEY_INITIAL_RECIPIENT_COUNT, initialRecipientCount) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_MESSAGE_ID, messageId.getId()) + .putString(KEY_REACTION_EMOJI, reaction.getEmoji()) + .putString(KEY_REACTION_AUTHOR, reaction.getAuthor().serialize()) + .putLong(KEY_REACTION_DATE_SENT, reaction.getDateSent()) + .putLong(KEY_REACTION_DATE_RECEIVED, reaction.getDateReceived()) + .putBoolean(KEY_REMOVE, remove) + .putString(KEY_RECIPIENTS, RecipientId.toSerializedList(recipients)) + .putInt(KEY_INITIAL_RECIPIENT_COUNT, initialRecipientCount) + .serialize(); } @Override @@ -261,7 +262,9 @@ public class ReactionSendJob extends BaseJob { @Override public @NonNull - ReactionSendJob create(@NonNull Parameters parameters, @NonNull Data data) { + ReactionSendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + long messageId = data.getLong(KEY_MESSAGE_ID); List recipients = RecipientId.fromSerializedList(data.getString(KEY_RECIPIENTS)); int initialRecipientCount = data.getInt(KEY_INITIAL_RECIPIENT_COUNT); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java index 99cb09584d..12e69c60fe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java @@ -3,12 +3,13 @@ package org.thoughtcrime.securesms.jobs; import android.text.TextUtils; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.AppCapabilities; import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.KbsValues; @@ -16,7 +17,6 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.registration.RegistrationRepository; import org.thoughtcrime.securesms.registration.secondary.DeviceNameCipher; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.signalservice.api.SignalServiceAccountManager; import org.whispersystems.signalservice.api.account.AccountAttributes; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess; import org.whispersystems.signalservice.api.push.exceptions.NetworkFailureException; @@ -63,8 +63,8 @@ public class RefreshAttributesJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putBoolean(KEY_FORCED, forced).build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putBoolean(KEY_FORCED, forced).serialize(); } @Override @@ -145,7 +145,8 @@ public class RefreshAttributesJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull RefreshAttributesJob create(@NonNull Parameters parameters, @NonNull org.thoughtcrime.securesms.jobmanager.Data data) { + public @NonNull RefreshAttributesJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new RefreshAttributesJob(parameters, data.getBooleanOrDefault(KEY_FORCED, true)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshKbsCredentialsJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshKbsCredentialsJob.kt index 04265b3e55..224fd8f465 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshKbsCredentialsJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshKbsCredentialsJob.kt @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.jobs import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -45,7 +44,7 @@ class RefreshKbsCredentialsJob private constructor(parameters: Parameters) : Bas .build() ) - override fun serialize(): Data = Data.Builder().build() + override fun serialize(): ByteArray? = null override fun getFactoryKey(): String = KEY @@ -60,7 +59,7 @@ class RefreshKbsCredentialsJob private constructor(parameters: Parameters) : Bas override fun onFailure() = Unit class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): RefreshKbsCredentialsJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): RefreshKbsCredentialsJob { return RefreshKbsCredentialsJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java index c7e46ac09e..3fdb5f78ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java @@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -91,8 +91,8 @@ public class RefreshOwnProfileJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -444,7 +444,7 @@ public class RefreshOwnProfileJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull RefreshOwnProfileJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull RefreshOwnProfileJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new RefreshOwnProfileJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteConfigRefreshJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteConfigRefreshJob.java index 5128fdceba..cbb3e0da3d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteConfigRefreshJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteConfigRefreshJob.java @@ -1,10 +1,11 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -35,8 +36,8 @@ public class RemoteConfigRefreshJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -66,7 +67,7 @@ public class RemoteConfigRefreshJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull RemoteConfigRefreshJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull RemoteConfigRefreshJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new RemoteConfigRefreshJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java index ec11cc2ce7..b649cf6dbb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java @@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.messages.GroupSendUtil; @@ -109,11 +109,11 @@ public class RemoteDeleteSendJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId) - .putString(KEY_RECIPIENTS, RecipientId.toSerializedList(recipients)) - .putInt(KEY_INITIAL_RECIPIENT_COUNT, initialRecipientCount) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_MESSAGE_ID, messageId) + .putString(KEY_RECIPIENTS, RecipientId.toSerializedList(recipients)) + .putInt(KEY_INITIAL_RECIPIENT_COUNT, initialRecipientCount) + .serialize(); } @Override @@ -225,7 +225,9 @@ public class RemoteDeleteSendJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull RemoteDeleteSendJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull RemoteDeleteSendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + long messageId = data.getLong(KEY_MESSAGE_ID); List recipients = RecipientId.fromSerializedList(data.getString(KEY_RECIPIENTS)); int initialRecipientCount = data.getInt(KEY_INITIAL_RECIPIENT_COUNT); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java index df83d0f7a1..35a6372e31 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java @@ -1,12 +1,13 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.MessageTable.ReportSpamData; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -19,9 +20,7 @@ import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulRespons import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; import java.io.IOException; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.concurrent.TimeUnit; @@ -56,10 +55,10 @@ public class ReportSpamJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_THREAD_ID, threadId) - .putLong(KEY_TIMESTAMP, timestamp) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_THREAD_ID, threadId) + .putLong(KEY_TIMESTAMP, timestamp) + .serialize(); } @Override @@ -117,7 +116,8 @@ public class ReportSpamJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull ReportSpamJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull ReportSpamJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new ReportSpamJob(parameters, data.getLong(KEY_THREAD_ID), data.getLong(KEY_TIMESTAMP)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoJob.java index 00ee2a691c..48a3038e30 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoJob.java @@ -1,12 +1,13 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.v2.processing.GroupsV2StateProcessor; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint; @@ -54,10 +55,10 @@ public final class RequestGroupV2InfoJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_GROUP_ID, groupId.toString()) - .putInt(KEY_TO_REVISION, toRevision) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_GROUP_ID, groupId.toString()) + .putInt(KEY_TO_REVISION, toRevision) + .serialize(); } @Override @@ -82,7 +83,8 @@ public final class RequestGroupV2InfoJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull RequestGroupV2InfoJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull RequestGroupV2InfoJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new RequestGroupV2InfoJob(parameters, GroupId.parseOrThrow(data.getString(KEY_GROUP_ID)).requireV2(), data.getInt(KEY_TO_REVISION)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoWorkerJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoWorkerJob.java index 1c8a8f85b9..7b85123901 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoWorkerJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoWorkerJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import org.signal.core.util.logging.Log; @@ -11,7 +12,7 @@ import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.GroupManager; import org.thoughtcrime.securesms.groups.GroupNotAMemberException; import org.thoughtcrime.securesms.groups.v2.processing.GroupsV2StateProcessor; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.recipients.Recipient; @@ -57,10 +58,10 @@ final class RequestGroupV2InfoWorkerJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_GROUP_ID, groupId.toString()) - .putInt(KEY_TO_REVISION, toRevision) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_GROUP_ID, groupId.toString()) + .putInt(KEY_TO_REVISION, toRevision) + .serialize(); } @Override @@ -105,7 +106,9 @@ final class RequestGroupV2InfoWorkerJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull RequestGroupV2InfoWorkerJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull RequestGroupV2InfoWorkerJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new RequestGroupV2InfoWorkerJob(parameters, GroupId.parseOrThrow(data.getString(KEY_GROUP_ID)).requireV2(), data.getInt(KEY_TO_REVISION)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java index 000d20f116..301a7ad8c4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java @@ -16,7 +16,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.DistributionListRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -107,8 +107,8 @@ public class ResendMessageJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder() + public @Nullable byte[] serialize() { + return new JsonJobData.Builder() .putString(KEY_RECIPIENT_ID, recipientId.serialize()) .putLong(KEY_SENT_TIMESTAMP, sentTimestamp) .putBlobAsString(KEY_CONTENT, content.toByteArray()) @@ -116,7 +116,7 @@ public class ResendMessageJob extends BaseJob { .putBoolean(KEY_URGENT, urgent) .putBlobAsString(KEY_GROUP_ID, groupId != null ? groupId.getDecodedId() : null) .putString(KEY_DISTRIBUTION_ID, distributionId != null ? distributionId.toString() : null) - .build(); + .serialize(); } @Override @@ -199,7 +199,9 @@ public class ResendMessageJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull ResendMessageJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull ResendMessageJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + Content content; try { content = Content.parseFrom(data.getStringAsBlob(KEY_CONTENT)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ResumableUploadSpecJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ResumableUploadSpecJob.java index 8fa9862164..b73b2b8a0c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ResumableUploadSpecJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ResumableUploadSpecJob.java @@ -1,10 +1,11 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.whispersystems.signalservice.internal.push.http.ResumableUploadSpec; @@ -37,9 +38,9 @@ public class ResumableUploadSpecJob extends BaseJob { ResumableUploadSpec resumableUploadSpec = ApplicationDependencies.getSignalServiceMessageSender() .getResumableUploadSpec(); - setOutputData(new Data.Builder() + setOutputData(new JsonJobData.Builder() .putString(KEY_RESUME_SPEC, resumableUploadSpec.serialize()) - .build()); + .serialize()); } @Override @@ -48,8 +49,8 @@ public class ResumableUploadSpecJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -65,7 +66,7 @@ public class ResumableUploadSpecJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull ResumableUploadSpecJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull ResumableUploadSpecJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new ResumableUploadSpecJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java index 1078c7a34c..c2943cd67a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java @@ -4,6 +4,7 @@ package org.thoughtcrime.securesms.jobs; import android.text.TextUtils; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.signal.libsignal.zkgroup.profiles.ProfileKey; @@ -11,7 +12,7 @@ import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -59,10 +60,10 @@ public class RetrieveProfileAvatarJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_PROFILE_AVATAR, profileAvatar) - .putString(KEY_RECIPIENT, recipient.getId().serialize()) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_PROFILE_AVATAR, profileAvatar) + .putString(KEY_RECIPIENT, recipient.getId().serialize()) + .serialize(); } @Override @@ -136,7 +137,9 @@ public class RetrieveProfileAvatarJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull RetrieveProfileAvatarJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull RetrieveProfileAvatarJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new RetrieveProfileAvatarJob(parameters, Recipient.resolved(RecipientId.from(data.getString(KEY_RECIPIENT))), data.getString(KEY_PROFILE_AVATAR)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java index bcc232d0e8..96c626d2a4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java @@ -29,7 +29,7 @@ import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.RecipientTable.UnidentifiedAccessMode; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -219,11 +219,11 @@ public class RetrieveProfileJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putStringListAsArray(KEY_RECIPIENTS, Stream.of(recipientIds) - .map(RecipientId::serialize) - .toList()) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putStringListAsArray(KEY_RECIPIENTS, Stream.of(recipientIds) + .map(RecipientId::serialize) + .toList()) + .serialize(); } @Override @@ -535,7 +535,9 @@ public class RetrieveProfileJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull RetrieveProfileJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull RetrieveProfileJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + String[] ids = data.getStringArray(KEY_RECIPIENTS); Set recipientIds = Stream.of(ids).map(RecipientId::from).collect(Collectors.toSet()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt index 32b9fa0c17..1eae6ee9ed 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt @@ -19,8 +19,8 @@ import org.thoughtcrime.securesms.database.model.addLink import org.thoughtcrime.securesms.database.model.addStyle import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.jobmanager.JsonJobData import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.notifications.v2.ConversationId @@ -81,7 +81,7 @@ class RetrieveRemoteAnnouncementsJob private constructor(private val force: Bool } } - override fun serialize(): Data = Data.Builder().putBoolean(KEY_FORCE, force).build() + override fun serialize(): ByteArray? = JsonJobData.Builder().putBoolean(KEY_FORCE, force).serialize() override fun getFactoryKey(): String = KEY @@ -418,7 +418,8 @@ class RetrieveRemoteAnnouncementsJob private constructor(private val force: Bool ) class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): RetrieveRemoteAnnouncementsJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): RetrieveRemoteAnnouncementsJob { + val data = JsonJobData.deserialize(serializedData) return RetrieveRemoteAnnouncementsJob(data.getBoolean(KEY_FORCE), parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateCertificateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateCertificateJob.java index 33f86f89c5..b135e8395c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateCertificateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateCertificateJob.java @@ -1,10 +1,11 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.CertificateType; @@ -36,8 +37,8 @@ public final class RotateCertificateJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -90,7 +91,7 @@ public final class RotateCertificateJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull RotateCertificateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull RotateCertificateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new RotateCertificateJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateProfileKeyJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateProfileKeyJob.java index 68f4d2d4cc..99e2182448 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateProfileKeyJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateProfileKeyJob.java @@ -1,11 +1,12 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.recipients.Recipient; @@ -25,8 +26,8 @@ public class RotateProfileKeyJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -53,7 +54,7 @@ public class RotateProfileKeyJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull RotateProfileKeyJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull RotateProfileKeyJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new RotateProfileKeyJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java index a55be8f388..0797465aaa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java @@ -9,9 +9,8 @@ import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; -import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.net.NotPushRegisteredException; import org.thoughtcrime.securesms.recipients.Recipient; @@ -77,16 +76,16 @@ public class SendDeliveryReceiptJob extends BaseJob { } @Override - public @NonNull Data serialize() { - Data.Builder builder = new Data.Builder().putString(KEY_RECIPIENT, recipientId.serialize()) - .putLong(KEY_MESSAGE_SENT_TIMESTAMP, messageSentTimestamp) - .putLong(KEY_TIMESTAMP, timestamp); + public @Nullable byte[] serialize() { + JsonJobData.Builder builder = new JsonJobData.Builder().putString(KEY_RECIPIENT, recipientId.serialize()) + .putLong(KEY_MESSAGE_SENT_TIMESTAMP, messageSentTimestamp) + .putLong(KEY_TIMESTAMP, timestamp); if (messageId != null) { builder.putString(KEY_MESSAGE_ID, messageId.serialize()); } - return builder.build(); + return builder.serialize(); } @Override @@ -142,7 +141,9 @@ public class SendDeliveryReceiptJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull SendDeliveryReceiptJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull SendDeliveryReceiptJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + MessageId messageId = null; if (data.hasString(KEY_MESSAGE_ID)) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendPaymentsActivatedJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendPaymentsActivatedJob.kt index 6dc31832ff..207ba1e19b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendPaymentsActivatedJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendPaymentsActivatedJob.kt @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.jobs import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.mms.OutgoingMessage @@ -23,7 +22,7 @@ class SendPaymentsActivatedJob(parameters: Parameters) : BaseJob(parameters) { constructor() : this(parameters = Parameters.Builder().build()) - override fun serialize(): Data = Data.Builder().build() + override fun serialize(): ByteArray? = null override fun getFactoryKey(): String = KEY @@ -66,7 +65,7 @@ class SendPaymentsActivatedJob(parameters: Parameters) : BaseJob(parameters) { } class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): SendPaymentsActivatedJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): SendPaymentsActivatedJob { return SendPaymentsActivatedJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java index c70ba173ae..815709ec9d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java @@ -4,6 +4,7 @@ package org.thoughtcrime.securesms.jobs; import android.app.Application; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import org.signal.core.util.ListUtil; @@ -13,10 +14,9 @@ import org.thoughtcrime.securesms.database.MessageTable.MarkedMessageInfo; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; -import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.net.NotPushRegisteredException; import org.thoughtcrime.securesms.recipients.Recipient; @@ -118,7 +118,7 @@ public class SendReadReceiptJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @Nullable byte[] serialize() { long[] sentTimestamps = new long[messageSentTimestamps.size()]; for (int i = 0; i < sentTimestamps.length; i++) { sentTimestamps[i] = messageSentTimestamps.get(i); @@ -126,12 +126,12 @@ public class SendReadReceiptJob extends BaseJob { List serializedMessageIds = messageIds.stream().map(MessageId::serialize).collect(Collectors.toList()); - return new Data.Builder().putString(KEY_RECIPIENT, recipientId.serialize()) - .putLongArray(KEY_MESSAGE_SENT_TIMESTAMPS, sentTimestamps) - .putStringListAsArray(KEY_MESSAGE_IDS, serializedMessageIds) - .putLong(KEY_TIMESTAMP, timestamp) - .putLong(KEY_THREAD, threadId) - .build(); + return new JsonJobData.Builder().putString(KEY_RECIPIENT, recipientId.serialize()) + .putLongArray(KEY_MESSAGE_SENT_TIMESTAMPS, sentTimestamps) + .putStringListAsArray(KEY_MESSAGE_IDS, serializedMessageIds) + .putLong(KEY_TIMESTAMP, timestamp) + .putLong(KEY_THREAD, threadId) + .serialize(); } @Override @@ -220,7 +220,9 @@ public class SendReadReceiptJob extends BaseJob { } @Override - public @NonNull SendReadReceiptJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull SendReadReceiptJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + long timestamp = data.getLong(KEY_TIMESTAMP); long[] ids = data.hasLongArray(KEY_MESSAGE_SENT_TIMESTAMPS) ? data.getLongArray(KEY_MESSAGE_SENT_TIMESTAMPS) : new long[0]; List sentTimestamps = new ArrayList<>(ids.length); @@ -228,7 +230,7 @@ public class SendReadReceiptJob extends BaseJob { List messageIds = rawMessageIds.stream().map(MessageId::deserialize).collect(Collectors.toList()); long threadId = data.getLong(KEY_THREAD); RecipientId recipientId = data.hasString(KEY_RECIPIENT) ? RecipientId.from(data.getString(KEY_RECIPIENT)) - : Recipient.external(application, data.getString(KEY_ADDRESS)).getId(); + : Recipient.external(application, data.getString(KEY_ADDRESS)).getId(); for (long id : ids) { sentTimestamps.add(id); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendRetryReceiptJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendRetryReceiptJob.java index 53cc5b3855..371fe44d88 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendRetryReceiptJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendRetryReceiptJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidMessageException; @@ -8,7 +9,7 @@ import org.signal.libsignal.protocol.message.DecryptionErrorMessage; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.recipients.Recipient; @@ -59,8 +60,8 @@ public final class SendRetryReceiptJob extends BaseJob { } @Override - public @NonNull Data serialize() { - Data.Builder builder = new Data.Builder() + public @Nullable byte[] serialize() { + JsonJobData.Builder builder = new JsonJobData.Builder() .putString(KEY_RECIPIENT_ID, recipientId.serialize()) .putBlobAsString(KEY_ERROR_MESSAGE, errorMessage.serialize()); @@ -68,7 +69,7 @@ public final class SendRetryReceiptJob extends BaseJob { builder.putBlobAsString(KEY_GROUP_ID, groupId.get().getDecodedId()); } - return builder.build(); + return builder.serialize(); } @Override @@ -104,7 +105,9 @@ public final class SendRetryReceiptJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull SendRetryReceiptJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull SendRetryReceiptJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + try { RecipientId recipientId = RecipientId.from(data.getString(KEY_RECIPIENT_ID)); DecryptionErrorMessage errorMessage = new DecryptionErrorMessage(data.getStringAsBlob(KEY_ERROR_MESSAGE)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendViewedReceiptJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendViewedReceiptJob.java index cdd2bdab50..8e882f7dee 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendViewedReceiptJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendViewedReceiptJob.java @@ -4,6 +4,7 @@ package org.thoughtcrime.securesms.jobs; import android.app.Application; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.ListUtil; import org.signal.core.util.logging.Log; @@ -13,7 +14,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.database.model.StoryType; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -115,15 +116,15 @@ public class SendViewedReceiptJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @Nullable byte[] serialize() { List serializedMessageIds = messageIds.stream().map(MessageId::serialize).collect(Collectors.toList()); - return new Data.Builder().putString(KEY_RECIPIENT, recipientId.serialize()) - .putLongListAsArray(KEY_MESSAGE_SENT_TIMESTAMPS, messageSentTimestamps) - .putStringListAsArray(KEY_MESSAGE_IDS, serializedMessageIds) - .putLong(KEY_TIMESTAMP, timestamp) - .putLong(KEY_THREAD, threadId) - .build(); + return new JsonJobData.Builder().putString(KEY_RECIPIENT, recipientId.serialize()) + .putLongListAsArray(KEY_MESSAGE_SENT_TIMESTAMPS, messageSentTimestamps) + .putStringListAsArray(KEY_MESSAGE_IDS, serializedMessageIds) + .putLong(KEY_TIMESTAMP, timestamp) + .putLong(KEY_THREAD, threadId) + .serialize(); } @Override @@ -233,14 +234,16 @@ public class SendViewedReceiptJob extends BaseJob { @Override public @NonNull - SendViewedReceiptJob create(@NonNull Parameters parameters, @NonNull Data data) { + SendViewedReceiptJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + long timestamp = data.getLong(KEY_TIMESTAMP); List syncTimestamps = data.getLongArrayAsList(KEY_MESSAGE_SENT_TIMESTAMPS); List rawMessageIds = data.hasStringArray(KEY_MESSAGE_IDS) ? data.getStringArrayAsList(KEY_MESSAGE_IDS) : Collections.emptyList(); List messageIds = rawMessageIds.stream().map(MessageId::deserialize).collect(Collectors.toList()); long threadId = data.getLong(KEY_THREAD); RecipientId recipientId = data.hasString(KEY_RECIPIENT) ? RecipientId.from(data.getString(KEY_RECIPIENT)) - : Recipient.external(application, data.getString(KEY_ADDRESS)).getId(); + : Recipient.external(application, data.getString(KEY_ADDRESS)).getId(); return new SendViewedReceiptJob(parameters, threadId, recipientId, syncTimestamps, messageIds, timestamp); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SenderKeyDistributionSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SenderKeyDistributionSendJob.java index c0fcaa03f9..e6e59a54a9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SenderKeyDistributionSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SenderKeyDistributionSendJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.SignalProtocolAddress; @@ -10,7 +11,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.DistributionListRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.recipients.Recipient; @@ -63,10 +64,10 @@ public final class SenderKeyDistributionSendJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_TARGET_RECIPIENT_ID, targetRecipientId.serialize()) - .putString(KEY_THREAD_RECIPIENT_ID, threadRecipientId.serialize()) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_TARGET_RECIPIENT_ID, targetRecipientId.serialize()) + .putString(KEY_THREAD_RECIPIENT_ID, threadRecipientId.serialize()) + .serialize(); } @Override @@ -146,7 +147,9 @@ public final class SenderKeyDistributionSendJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull SenderKeyDistributionSendJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull SenderKeyDistributionSendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new SenderKeyDistributionSendJob(RecipientId.from(data.getString(KEY_TARGET_RECIPIENT_ID)), RecipientId.from(data.getString(KEY_THREAD_RECIPIENT_ID)), parameters); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ServiceOutageDetectionJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ServiceOutageDetectionJob.java index b47d620cb8..81405cf6c6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ServiceOutageDetectionJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ServiceOutageDetectionJob.java @@ -1,12 +1,13 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.greenrobot.eventbus.EventBus; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.BuildConfig; import org.thoughtcrime.securesms.events.ReminderUpdateEvent; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.transport.RetryLaterException; @@ -39,8 +40,8 @@ public class ServiceOutageDetectionJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -95,7 +96,7 @@ public class ServiceOutageDetectionJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull ServiceOutageDetectionJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull ServiceOutageDetectionJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new ServiceOutageDetectionJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java index af1c68234a..da37ebf933 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java @@ -20,7 +20,7 @@ import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.MessageTable.InsertResult; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.SqlCipherMigrationConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -71,15 +71,15 @@ public class SmsReceiveJob extends BaseJob { } @Override - public @NonNull Data serialize() { + public @Nullable byte[] serialize() { String[] encoded = new String[pdus.length]; for (int i = 0; i < pdus.length; i++) { encoded[i] = Base64.encodeBytes((byte[]) pdus[i]); } - return new Data.Builder().putStringArray(KEY_PDUS, encoded) - .putInt(KEY_SUBSCRIPTION_ID, subscriptionId) - .build(); + return new JsonJobData.Builder().putStringArray(KEY_PDUS, encoded) + .putInt(KEY_SUBSCRIPTION_ID, subscriptionId) + .serialize(); } @Override @@ -219,7 +219,9 @@ public class SmsReceiveJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull SmsReceiveJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull SmsReceiveJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + try { int subscriptionId = data.getInt(KEY_SUBSCRIPTION_ID); String[] encoded = data.getStringArray(KEY_PDUS); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java index f32b5bc396..a1b261b485 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java @@ -9,6 +9,7 @@ import android.telephony.PhoneNumberUtils; import android.telephony.SmsManager; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.PendingIntentFlags; import org.signal.core.util.logging.Log; @@ -17,7 +18,7 @@ import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkOrCellServiceConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -57,10 +58,10 @@ public class SmsSendJob extends SendJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId) - .putInt(KEY_RUN_ATTEMPT, runAttempt) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_MESSAGE_ID, messageId) + .putInt(KEY_RUN_ATTEMPT, runAttempt) + .serialize(); } @Override @@ -250,7 +251,8 @@ public class SmsSendJob extends SendJob { public static class Factory implements Job.Factory { @Override - public @NonNull SmsSendJob create(@NonNull Parameters parameters, @NonNull org.thoughtcrime.securesms.jobmanager.Data data) { + public @NonNull SmsSendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new SmsSendJob(parameters, data.getLong(KEY_MESSAGE_ID), data.getInt(KEY_RUN_ATTEMPT)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSentJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSentJob.java index 197c7c3f75..10ad0b0609 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSentJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSentJob.java @@ -4,6 +4,7 @@ import android.app.Activity; import android.telephony.SmsManager; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.MessageTable; @@ -11,7 +12,7 @@ import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.notifications.v2.ConversationId; import org.thoughtcrime.securesms.service.SmsDeliveryListener; @@ -54,13 +55,13 @@ public class SmsSentJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_MESSAGE_ID, messageId) - .putBoolean(KEY_IS_MULTIPART, isMultipart) - .putString(KEY_ACTION, action) - .putInt(KEY_RESULT, result) - .putInt(KEY_RUN_ATTEMPT, runAttempt) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_MESSAGE_ID, messageId) + .putBoolean(KEY_IS_MULTIPART, isMultipart) + .putString(KEY_ACTION, action) + .putInt(KEY_RESULT, result) + .putInt(KEY_RUN_ATTEMPT, runAttempt) + .serialize(); } @Override @@ -126,7 +127,9 @@ public class SmsSentJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull SmsSentJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull SmsSentJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new SmsSentJob(parameters, data.getLong(KEY_MESSAGE_ID), data.getBooleanOrDefault(KEY_IS_MULTIPART, true), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerDownloadJob.java index 09cdb1c5b1..a1dbbf8fcd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerDownloadJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; @@ -8,7 +9,7 @@ import org.thoughtcrime.securesms.database.StickerTable; import org.thoughtcrime.securesms.database.model.IncomingSticker; import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.mms.PartAuthority; @@ -56,18 +57,18 @@ public class StickerDownloadJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_PACK_ID, sticker.getPackId()) - .putString(KEY_PACK_KEY, sticker.getPackKey()) - .putString(KEY_PACK_TITLE, sticker.getPackTitle()) - .putString(KEY_PACK_AUTHOR, sticker.getPackAuthor()) - .putInt(KEY_STICKER_ID, sticker.getStickerId()) - .putString(KEY_EMOJI, sticker.getEmoji()) - .putString(KEY_CONTENT_TYPE, sticker.getContentType()) - .putBoolean(KEY_COVER, sticker.isCover()) - .putBoolean(KEY_INSTALLED, sticker.isInstalled()) - .putBoolean(KEY_NOTIFY, notify) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_PACK_ID, sticker.getPackId()) + .putString(KEY_PACK_KEY, sticker.getPackKey()) + .putString(KEY_PACK_TITLE, sticker.getPackTitle()) + .putString(KEY_PACK_AUTHOR, sticker.getPackAuthor()) + .putInt(KEY_STICKER_ID, sticker.getStickerId()) + .putString(KEY_EMOJI, sticker.getEmoji()) + .putString(KEY_CONTENT_TYPE, sticker.getContentType()) + .putBoolean(KEY_COVER, sticker.isCover()) + .putBoolean(KEY_INSTALLED, sticker.isInstalled()) + .putBoolean(KEY_NOTIFY, notify) + .serialize(); } @Override @@ -116,7 +117,9 @@ public class StickerDownloadJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull StickerDownloadJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull StickerDownloadJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + IncomingSticker sticker = new IncomingSticker(data.getString(KEY_PACK_ID), data.getString(KEY_PACK_KEY), data.getString(KEY_PACK_TITLE), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java index efbb1fbca2..ed59f43653 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.core.util.Preconditions; import org.signal.core.util.logging.Log; @@ -9,7 +10,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.StickerTable; import org.thoughtcrime.securesms.database.model.IncomingSticker; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -87,12 +88,12 @@ public class StickerPackDownloadJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_PACK_ID, packId) - .putString(KEY_PACK_KEY, packKey) - .putBoolean(KEY_REFERENCE_PACK, isReferencePack) - .putBoolean(KEY_NOTIFY, notify) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_PACK_ID, packId) + .putString(KEY_PACK_KEY, packKey) + .putBoolean(KEY_REFERENCE_PACK, isReferencePack) + .putBoolean(KEY_NOTIFY, notify) + .serialize(); } @Override @@ -178,7 +179,9 @@ public class StickerPackDownloadJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull StickerPackDownloadJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull StickerPackDownloadJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + return new StickerPackDownloadJob(parameters, data.getString(KEY_PACK_ID), data.getString(KEY_PACK_KEY), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageAccountRestoreJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageAccountRestoreJob.java index 8dea5fb3f3..1905bc2c46 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageAccountRestoreJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageAccountRestoreJob.java @@ -1,11 +1,12 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.JobTracker; @@ -53,8 +54,8 @@ public class StorageAccountRestoreJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -148,7 +149,7 @@ public class StorageAccountRestoreJob extends BaseJob { public static class Factory implements Job.Factory { @Override public @NonNull - StorageAccountRestoreJob create(@NonNull Parameters parameters, @NonNull Data data) { + StorageAccountRestoreJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new StorageAccountRestoreJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageForcePushJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageForcePushJob.java index b8cc2be19b..c22c0cedd2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageForcePushJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageForcePushJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.annimon.stream.Stream; @@ -10,7 +11,7 @@ import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.UnknownStorageIdTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -60,8 +61,8 @@ public class StorageForcePushJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -158,7 +159,7 @@ public class StorageForcePushJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull StorageForcePushJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull StorageForcePushJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new StorageForcePushJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java index 22a3e30d0f..ec586e6aa8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.jobs; import android.content.Context; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.annimon.stream.Stream; @@ -16,7 +17,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.UnknownStorageIdTable; import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -159,8 +160,8 @@ public class StorageSyncJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -539,7 +540,7 @@ public class StorageSyncJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull StorageSyncJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull StorageSyncJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new StorageSyncJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StoryOnboardingDownloadJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/StoryOnboardingDownloadJob.kt index 1f1750abfd..ddd9e7bda5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StoryOnboardingDownloadJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StoryOnboardingDownloadJob.kt @@ -9,7 +9,6 @@ import org.thoughtcrime.securesms.database.MessageTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -62,7 +61,7 @@ class StoryOnboardingDownloadJob private constructor(parameters: Parameters) : B } } - override fun serialize(): Data = Data.EMPTY + override fun serialize(): ByteArray? = null override fun getFactoryKey(): String = KEY override fun onFailure() = Unit @@ -188,7 +187,7 @@ class StoryOnboardingDownloadJob private constructor(parameters: Parameters) : B } class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): StoryOnboardingDownloadJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): StoryOnboardingDownloadJob { return StoryOnboardingDownloadJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SubmitRateLimitPushChallengeJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SubmitRateLimitPushChallengeJob.java index 5f224f017b..b3c3fb1e56 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SubmitRateLimitPushChallengeJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SubmitRateLimitPushChallengeJob.java @@ -1,10 +1,11 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.greenrobot.eventbus.EventBus; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -39,8 +40,8 @@ public final class SubmitRateLimitPushChallengeJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putString(KEY_CHALLENGE, challenge).build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putString(KEY_CHALLENGE, challenge).serialize(); } @Override @@ -70,7 +71,8 @@ public final class SubmitRateLimitPushChallengeJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull SubmitRateLimitPushChallengeJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull SubmitRateLimitPushChallengeJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new SubmitRateLimitPushChallengeJob(parameters, data.getString(KEY_CHALLENGE)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionKeepAliveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionKeepAliveJob.java index 7eac0d70a6..0f9a7661e7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionKeepAliveJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionKeepAliveJob.java @@ -2,11 +2,11 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.components.settings.app.subscription.errors.DonationErrorSource; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -59,8 +59,8 @@ public class SubscriptionKeepAliveJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -185,7 +185,7 @@ public class SubscriptionKeepAliveJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull SubscriptionKeepAliveJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull SubscriptionKeepAliveJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new SubscriptionKeepAliveJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java index 7bc18a6ebd..7956eecb10 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java @@ -20,7 +20,7 @@ import org.thoughtcrime.securesms.components.settings.app.subscription.errors.Pa import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.DonationReceiptRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -96,11 +96,11 @@ public class SubscriptionReceiptRequestResponseJob extends BaseJob { } @Override - public @NonNull Data serialize() { - Data.Builder builder = new Data.Builder().putBlobAsString(DATA_SUBSCRIBER_ID, subscriberId.getBytes()) - .putBoolean(DATA_IS_FOR_KEEP_ALIVE, isForKeepAlive); + public @Nullable byte[] serialize() { + JsonJobData.Builder builder = new JsonJobData.Builder().putBlobAsString(DATA_SUBSCRIBER_ID, subscriberId.getBytes()) + .putBoolean(DATA_IS_FOR_KEEP_ALIVE, isForKeepAlive); - return builder.build(); + return builder.serialize(); } @Override @@ -375,7 +375,7 @@ public class SubscriptionReceiptRequestResponseJob extends BaseJob { private void onAlreadyRedeemed(ServiceResponse response) throws Exception { if (isForKeepAlive) { Log.i(TAG, "KeepAlive: Latest paid receipt on subscription already redeemed with a different request credential, ignoring.", response.getApplicationError().get(), true); - setOutputData(new Data.Builder().putBoolean(DonationReceiptRedemptionJob.INPUT_KEEP_ALIVE_409, true).build()); + setOutputData(new JsonJobData.Builder().putBoolean(DonationReceiptRedemptionJob.INPUT_KEEP_ALIVE_409, true).serialize()); } else { Log.w(TAG, "Latest paid receipt on subscription already redeemed with a different request credential.", response.getApplicationError().get(), true); DonationError.routeDonationError(context, DonationError.genericBadgeRedemptionFailure(getErrorSource())); @@ -422,7 +422,9 @@ public class SubscriptionReceiptRequestResponseJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull SubscriptionReceiptRequestResponseJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull SubscriptionReceiptRequestResponseJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); + SubscriberId subscriberId = SubscriberId.fromBytes(data.getStringAsBlob(DATA_SUBSCRIBER_ID)); boolean isForKeepAlive = data.getBooleanOrDefault(DATA_IS_FOR_KEEP_ALIVE, false); String requestString = data.getStringOrDefault(DATA_REQUEST_BYTES, null); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SyncSystemContactLinksJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/SyncSystemContactLinksJob.kt index 0f4ea64755..f753ac7c5e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SyncSystemContactLinksJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SyncSystemContactLinksJob.kt @@ -12,7 +12,6 @@ import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.BuildConfig import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.permissions.Permissions import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter @@ -32,7 +31,7 @@ class SyncSystemContactLinksJob private constructor(parameters: Parameters) : Ba .build() ) - override fun serialize(): Data = Data.EMPTY + override fun serialize(): ByteArray? = null override fun getFactoryKey() = KEY override fun onFailure() = Unit override fun onShouldRetry(e: Exception) = false @@ -94,7 +93,7 @@ class SyncSystemContactLinksJob private constructor(parameters: Parameters) : Ba } class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data) = SyncSystemContactLinksJob(parameters) + override fun create(parameters: Parameters, serializedData: ByteArray?) = SyncSystemContactLinksJob(parameters) } companion object { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ThreadUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ThreadUpdateJob.java index 6335c7bb64..7193af43fb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ThreadUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ThreadUpdateJob.java @@ -1,11 +1,12 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.ThreadUtil; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; public final class ThreadUpdateJob extends BaseJob { @@ -34,8 +35,8 @@ public final class ThreadUpdateJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_THREAD_ID, threadId).build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_THREAD_ID, threadId).serialize(); } @Override @@ -60,7 +61,8 @@ public final class ThreadUpdateJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull ThreadUpdateJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull ThreadUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new ThreadUpdateJob(parameters, data.getLong(KEY_THREAD_ID)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/TrimThreadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/TrimThreadJob.java index 560ae596f6..4d251be672 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/TrimThreadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/TrimThreadJob.java @@ -17,13 +17,14 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.KeepMessagesDuration; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -57,8 +58,8 @@ public class TrimThreadJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_THREAD_ID, threadId).build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_THREAD_ID, threadId).serialize(); } @Override @@ -91,7 +92,8 @@ public class TrimThreadJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull TrimThreadJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull TrimThreadJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new TrimThreadJob(parameters, data.getLong(KEY_THREAD_ID)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java index 3e97efb0aa..6eb05b2fdf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.annimon.stream.Stream; @@ -8,7 +9,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.messages.GroupSendUtil; @@ -62,10 +63,10 @@ public class TypingSendJob extends BaseJob { @Override - public @NonNull Data serialize() { - return new Data.Builder().putLong(KEY_THREAD_ID, threadId) - .putBoolean(KEY_TYPING, typing) - .build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putLong(KEY_THREAD_ID, threadId) + .putBoolean(KEY_TYPING, typing) + .serialize(); } @Override @@ -148,7 +149,8 @@ public class TypingSendJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull TypingSendJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull TypingSendJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new TypingSendJob(parameters, data.getLong(KEY_THREAD_ID), data.getBoolean(KEY_TYPING)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/UpdateApkJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/UpdateApkJob.java index 801bad4281..d9b52a7657 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/UpdateApkJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/UpdateApkJob.java @@ -16,7 +16,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.BuildConfig; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.service.UpdateApkReadyListener; @@ -53,8 +53,8 @@ public class UpdateApkJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -285,7 +285,7 @@ public class UpdateApkJob extends BaseJob { public static final class Factory implements Job.Factory { @Override - public @NonNull UpdateApkJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull UpdateApkJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new UpdateApkJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/AccountRecordMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/AccountRecordMigrationJob.java index 7b00933405..40bdcce6c6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/AccountRecordMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/AccountRecordMigrationJob.java @@ -1,11 +1,11 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobs.StorageSyncJob; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -57,7 +57,7 @@ public class AccountRecordMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull AccountRecordMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull AccountRecordMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new AccountRecordMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplyUnknownFieldsToSelfMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplyUnknownFieldsToSelfMigrationJob.java index b3ddb6dffc..bb2ba98153 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplyUnknownFieldsToSelfMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplyUnknownFieldsToSelfMigrationJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.google.protobuf.InvalidProtocolBufferException; @@ -8,7 +9,6 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.RecipientRecord; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; @@ -86,7 +86,7 @@ public class ApplyUnknownFieldsToSelfMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull ApplyUnknownFieldsToSelfMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull ApplyUnknownFieldsToSelfMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new ApplyUnknownFieldsToSelfMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/AttachmentCleanupMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/AttachmentCleanupMigrationJob.java index 49e19e203f..6bc59d731a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/AttachmentCleanupMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/AttachmentCleanupMigrationJob.java @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; /** @@ -47,7 +47,7 @@ public class AttachmentCleanupMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull AttachmentCleanupMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull AttachmentCleanupMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new AttachmentCleanupMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/AttributesMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/AttributesMigrationJob.java index 257448d9ff..6ad5ac48c8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/AttributesMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/AttributesMigrationJob.java @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobs.RefreshAttributesJob; import org.thoughtcrime.securesms.jobs.RefreshOwnProfileJob; @@ -51,7 +51,7 @@ public final class AttributesMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull AttributesMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull AttributesMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new AttributesMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/AvatarIdRemovalMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/AvatarIdRemovalMigrationJob.java index ef5a9fd3f5..c97e6f0bf9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/AvatarIdRemovalMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/AvatarIdRemovalMigrationJob.java @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobs.RefreshOwnProfileJob; @@ -48,7 +48,7 @@ public class AvatarIdRemovalMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull AvatarIdRemovalMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull AvatarIdRemovalMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new AvatarIdRemovalMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/AvatarMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/AvatarMigrationJob.java index b7e8f9bcd2..250cb6de06 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/AvatarMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/AvatarMigrationJob.java @@ -1,11 +1,11 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.StreamUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.phonenumbers.NumberUtil; import org.thoughtcrime.securesms.profiles.AvatarHelper; @@ -88,7 +88,7 @@ public class AvatarMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull AvatarMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull AvatarMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new AvatarMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/BackupNotificationMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/BackupNotificationMigrationJob.java index 25600d6217..a7fdf6e808 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/BackupNotificationMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/BackupNotificationMigrationJob.java @@ -3,10 +3,10 @@ package org.thoughtcrime.securesms.migrations; import android.os.Build; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.backup.BackupFileIOError; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.util.BackupUtil; @@ -61,7 +61,7 @@ public final class BackupNotificationMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull BackupNotificationMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull BackupNotificationMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new BackupNotificationMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/BlobStorageLocationMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/BlobStorageLocationMigrationJob.java index bf3e220eba..b8399a3389 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/BlobStorageLocationMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/BlobStorageLocationMigrationJob.java @@ -3,9 +3,9 @@ package org.thoughtcrime.securesms.migrations; import android.content.Context; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import java.io.File; @@ -70,7 +70,7 @@ public class BlobStorageLocationMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull BlobStorageLocationMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull BlobStorageLocationMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new BlobStorageLocationMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/CachedAttachmentsMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/CachedAttachmentsMigrationJob.java index a7848326c9..840d3022a4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/CachedAttachmentsMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/CachedAttachmentsMigrationJob.java @@ -1,9 +1,9 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.util.FileUtils; @@ -54,7 +54,7 @@ public class CachedAttachmentsMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull CachedAttachmentsMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull CachedAttachmentsMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new CachedAttachmentsMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/ClearGlideCacheMigrationJob.kt b/app/src/main/java/org/thoughtcrime/securesms/migrations/ClearGlideCacheMigrationJob.kt index a16c73c721..3bbcbb93b4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ClearGlideCacheMigrationJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ClearGlideCacheMigrationJob.kt @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.migrations import com.bumptech.glide.Glide import org.signal.core.util.logging.Log -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job /** @@ -28,7 +27,7 @@ internal class ClearGlideCacheMigrationJob( override fun shouldRetry(e: Exception): Boolean = false class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): ClearGlideCacheMigrationJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): ClearGlideCacheMigrationJob { return ClearGlideCacheMigrationJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/DatabaseMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/DatabaseMigrationJob.java index fec8bec8bc..cd608377fc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/DatabaseMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/DatabaseMigrationJob.java @@ -1,9 +1,9 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; /** @@ -44,7 +44,7 @@ public class DatabaseMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull DatabaseMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull DatabaseMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new DatabaseMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/DecryptionsDrainedMigrationJob.kt b/app/src/main/java/org/thoughtcrime/securesms/migrations/DecryptionsDrainedMigrationJob.kt index e06b5b2081..d26b665342 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/DecryptionsDrainedMigrationJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/DecryptionsDrainedMigrationJob.kt @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.migrations import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobs.PushDecryptDrainedJob @@ -29,7 +28,7 @@ internal class DecryptionsDrainedMigrationJob( override fun shouldRetry(e: Exception): Boolean = false class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): DecryptionsDrainedMigrationJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): DecryptionsDrainedMigrationJob { return DecryptionsDrainedMigrationJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/DeleteDeprecatedLogsMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/DeleteDeprecatedLogsMigrationJob.java index 8b2ac716a6..61c0396a9c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/DeleteDeprecatedLogsMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/DeleteDeprecatedLogsMigrationJob.java @@ -1,9 +1,9 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import java.io.File; @@ -65,7 +65,7 @@ public class DeleteDeprecatedLogsMigrationJob extends MigrationJob { public static final class Factory implements Job.Factory { @Override - public @NonNull DeleteDeprecatedLogsMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull DeleteDeprecatedLogsMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new DeleteDeprecatedLogsMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/DirectoryRefreshMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/DirectoryRefreshMigrationJob.java index 39267b1ee0..db93f11a7e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/DirectoryRefreshMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/DirectoryRefreshMigrationJob.java @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -57,7 +57,7 @@ public final class DirectoryRefreshMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull DirectoryRefreshMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull DirectoryRefreshMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new DirectoryRefreshMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/EmojiDownloadMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/EmojiDownloadMigrationJob.java index 6e13423a86..6ad2f3ef32 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/EmojiDownloadMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/EmojiDownloadMigrationJob.java @@ -1,9 +1,9 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobs.DownloadLatestEmojiDataJob; import org.thoughtcrime.securesms.jobs.EmojiSearchIndexDownloadJob; @@ -46,7 +46,7 @@ public final class EmojiDownloadMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull EmojiDownloadMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull EmojiDownloadMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new EmojiDownloadMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/KbsEnclaveMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/KbsEnclaveMigrationJob.java index dff47afb70..39999c7256 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/KbsEnclaveMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/KbsEnclaveMigrationJob.java @@ -1,9 +1,9 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobs.KbsEnclaveMigrationWorkerJob; @@ -46,7 +46,7 @@ public class KbsEnclaveMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull KbsEnclaveMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull KbsEnclaveMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new KbsEnclaveMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/LegacyMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/LegacyMigrationJob.java index 7c49e1cbc6..2ce4b47a88 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/LegacyMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/LegacyMigrationJob.java @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.migrations; import android.content.Context; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.preference.PreferenceManager; import org.signal.core.util.logging.Log; @@ -15,7 +16,6 @@ import org.thoughtcrime.securesms.database.PushTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageRecord; 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.jobs.AttachmentDownloadJob; @@ -282,7 +282,7 @@ public class LegacyMigrationJob extends MigrationJob { public static final class Factory implements Job.Factory { @Override - public @NonNull LegacyMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull LegacyMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new LegacyMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/MigrationCompleteJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/MigrationCompleteJob.java index ee46f45338..5411bc8c32 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/MigrationCompleteJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/MigrationCompleteJob.java @@ -1,9 +1,10 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.greenrobot.eventbus.EventBus; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobs.BaseJob; @@ -38,8 +39,8 @@ public class MigrationCompleteJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return new Data.Builder().putInt(KEY_VERSION, version).build(); + public @Nullable byte[] serialize() { + return new JsonJobData.Builder().putInt(KEY_VERSION, version).serialize(); } @Override @@ -64,7 +65,8 @@ public class MigrationCompleteJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull MigrationCompleteJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull MigrationCompleteJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); return new MigrationCompleteJob(parameters, data.getInt(KEY_VERSION)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/MigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/MigrationJob.java index 53e03647ba..941f164e84 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/MigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/MigrationJob.java @@ -1,9 +1,10 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobLogger; import org.thoughtcrime.securesms.jobmanager.impl.BackoffUtil; @@ -31,8 +32,8 @@ abstract class MigrationJob extends Job { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/OptimizeMessageSearchIndexMigrationJob.kt b/app/src/main/java/org/thoughtcrime/securesms/migrations/OptimizeMessageSearchIndexMigrationJob.kt index 087ac7764a..d4dc7d0cce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/OptimizeMessageSearchIndexMigrationJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/OptimizeMessageSearchIndexMigrationJob.kt @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.migrations import org.signal.core.util.logging.Log -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobs.OptimizeMessageSearchIndexJob @@ -28,7 +27,7 @@ internal class OptimizeMessageSearchIndexMigrationJob( override fun shouldRetry(e: Exception): Boolean = false class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): OptimizeMessageSearchIndexMigrationJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): OptimizeMessageSearchIndexMigrationJob { return OptimizeMessageSearchIndexMigrationJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/PassingMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/PassingMigrationJob.java index c3ae04494f..1f6601f413 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/PassingMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/PassingMigrationJob.java @@ -1,8 +1,8 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; /** @@ -39,7 +39,7 @@ public final class PassingMigrationJob extends MigrationJob { public static final class Factory implements Job.Factory { @Override - public @NonNull PassingMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull PassingMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new PassingMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/PinOptOutMigration.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/PinOptOutMigration.java index 8bfc672a9a..90702fcfc0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/PinOptOutMigration.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/PinOptOutMigration.java @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobs.RefreshAttributesJob; import org.thoughtcrime.securesms.jobs.RefreshOwnProfileJob; @@ -64,7 +64,7 @@ public final class PinOptOutMigration extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull PinOptOutMigration create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull PinOptOutMigration create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new PinOptOutMigration(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/PinReminderMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/PinReminderMigrationJob.java index 449ebd28e1..9ac9346ae9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/PinReminderMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/PinReminderMigrationJob.java @@ -1,8 +1,8 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -43,7 +43,7 @@ public class PinReminderMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull PinReminderMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull PinReminderMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new PinReminderMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/PniAccountInitializationMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/PniAccountInitializationMigrationJob.java index 8ec948f450..1e7ac3bf05 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/PniAccountInitializationMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/PniAccountInitializationMigrationJob.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.state.PreKeyRecord; @@ -9,7 +10,6 @@ import org.signal.libsignal.protocol.state.SignedPreKeyRecord; import org.thoughtcrime.securesms.crypto.PreKeyUtil; import org.thoughtcrime.securesms.crypto.storage.PreKeyMetadataStore; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -93,7 +93,7 @@ public class PniAccountInitializationMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull PniAccountInitializationMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull PniAccountInitializationMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new PniAccountInitializationMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/PniMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/PniMigrationJob.java index 53129350a6..aa9a6f9a24 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/PniMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/PniMigrationJob.java @@ -1,16 +1,14 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.recipients.RecipientId; import org.whispersystems.signalservice.api.push.PNI; import java.io.IOException; @@ -66,7 +64,7 @@ public class PniMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull PniMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull PniMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new PniMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/ProfileMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/ProfileMigrationJob.java index 1c6d8942a7..8d1e12deaa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ProfileMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ProfileMigrationJob.java @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobs.ProfileUploadJob; @@ -48,7 +48,7 @@ public final class ProfileMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull ProfileMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull ProfileMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new ProfileMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/ProfileSharingUpdateMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/ProfileSharingUpdateMigrationJob.java index d932b23fde..d1780221dd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ProfileSharingUpdateMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ProfileSharingUpdateMigrationJob.java @@ -1,9 +1,9 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -45,7 +45,7 @@ public class ProfileSharingUpdateMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull ProfileSharingUpdateMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull ProfileSharingUpdateMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new ProfileSharingUpdateMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/RebuildMessageSearchIndexMigrationJob.kt b/app/src/main/java/org/thoughtcrime/securesms/migrations/RebuildMessageSearchIndexMigrationJob.kt index 3df514d6fa..90a331fc28 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/RebuildMessageSearchIndexMigrationJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/RebuildMessageSearchIndexMigrationJob.kt @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.migrations import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job /** @@ -30,7 +29,7 @@ internal class RebuildMessageSearchIndexMigrationJob( override fun shouldRetry(e: Exception): Boolean = false class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): RebuildMessageSearchIndexMigrationJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): RebuildMessageSearchIndexMigrationJob { return RebuildMessageSearchIndexMigrationJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/RecipientSearchMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/RecipientSearchMigrationJob.java index 1967f9b4e2..84f973e56f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/RecipientSearchMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/RecipientSearchMigrationJob.java @@ -1,9 +1,9 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -47,7 +47,7 @@ public class RecipientSearchMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull RecipientSearchMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull RecipientSearchMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new RecipientSearchMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/RegistrationPinV2MigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/RegistrationPinV2MigrationJob.java index a030579f67..6c248a7ba3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/RegistrationPinV2MigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/RegistrationPinV2MigrationJob.java @@ -3,10 +3,11 @@ package org.thoughtcrime.securesms.migrations; import android.text.TextUtils; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidKeyException; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.jobs.BaseJob; @@ -44,8 +45,8 @@ public final class RegistrationPinV2MigrationJob extends BaseJob { } @Override - public @NonNull Data serialize() { - return Data.EMPTY; + public @Nullable byte[] serialize() { + return null; } @Override @@ -84,7 +85,7 @@ public final class RegistrationPinV2MigrationJob extends BaseJob { public static class Factory implements Job.Factory { @Override - public @NonNull RegistrationPinV2MigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull RegistrationPinV2MigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new RegistrationPinV2MigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerAdditionMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerAdditionMigrationJob.java index e01d0a9478..a18c17505d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerAdditionMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerAdditionMigrationJob.java @@ -1,12 +1,13 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobs.StickerPackDownloadJob; @@ -49,9 +50,9 @@ public class StickerAdditionMigrationJob extends MigrationJob { } @Override - public @NonNull Data serialize() { + public @Nullable byte[] serialize() { String[] packsRaw = Stream.of(packs).map(BlessedPacks.Pack::toJson).toArray(String[]::new); - return new Data.Builder().putStringArray(KEY_PACKS, packsRaw).build(); + return new JsonJobData.Builder().putStringArray(KEY_PACKS, packsRaw).serialize(); } @Override @@ -71,7 +72,8 @@ public class StickerAdditionMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull StickerAdditionMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull StickerAdditionMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { + JsonJobData data = JsonJobData.deserialize(serializedData); String[] raw = data.getStringArray(KEY_PACKS); List packs = Stream.of(raw).map(BlessedPacks.Pack::fromJson).toList(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerDayByDayMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerDayByDayMigrationJob.java index 374c74da40..1b16c34854 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerDayByDayMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerDayByDayMigrationJob.java @@ -1,9 +1,9 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobs.StickerPackDownloadJob; import org.thoughtcrime.securesms.stickers.BlessedPacks; @@ -45,7 +45,7 @@ public class StickerDayByDayMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull StickerDayByDayMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull StickerDayByDayMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new StickerDayByDayMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerLaunchMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerLaunchMigrationJob.java index eba912e623..3e83ae3f32 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerLaunchMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerLaunchMigrationJob.java @@ -3,11 +3,11 @@ package org.thoughtcrime.securesms.migrations; import android.content.Context; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.StickerTable; 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.jobs.MultiDeviceStickerPackOperationJob; @@ -66,7 +66,7 @@ public class StickerLaunchMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override public @NonNull - StickerLaunchMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + StickerLaunchMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new StickerLaunchMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerMyDailyLifeMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerMyDailyLifeMigrationJob.java index 2e19e4a10b..608b1334ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerMyDailyLifeMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerMyDailyLifeMigrationJob.java @@ -1,9 +1,9 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobs.StickerPackDownloadJob; import org.thoughtcrime.securesms.stickers.BlessedPacks; @@ -45,7 +45,7 @@ public class StickerMyDailyLifeMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull StickerMyDailyLifeMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull StickerMyDailyLifeMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new StickerMyDailyLifeMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageCapabilityMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageCapabilityMigrationJob.java index 20482923de..c7be56d8bb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageCapabilityMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageCapabilityMigrationJob.java @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; 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.jobs.MultiDeviceKeysUpdateJob; @@ -72,7 +72,7 @@ public class StorageCapabilityMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull StorageCapabilityMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull StorageCapabilityMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new StorageCapabilityMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageServiceMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageServiceMigrationJob.java index 7e709fec19..dcaad4fd44 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageServiceMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageServiceMigrationJob.java @@ -1,11 +1,11 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; 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.jobs.MultiDeviceKeysUpdateJob; @@ -70,7 +70,7 @@ public class StorageServiceMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull StorageServiceMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull StorageServiceMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new StorageServiceMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageServiceSystemNameMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageServiceSystemNameMigrationJob.java index 4ccf03c0aa..34dc5ca299 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageServiceSystemNameMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/StorageServiceSystemNameMigrationJob.java @@ -1,13 +1,10 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; -import org.thoughtcrime.securesms.jobs.DownloadLatestEmojiDataJob; -import org.thoughtcrime.securesms.jobs.EmojiSearchIndexDownloadJob; import org.thoughtcrime.securesms.storage.StorageSyncHelper; /** @@ -49,7 +46,7 @@ public final class StorageServiceSystemNameMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull StorageServiceSystemNameMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull StorageServiceSystemNameMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new StorageServiceSystemNameMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/StoryReadStateMigrationJob.kt b/app/src/main/java/org/thoughtcrime/securesms/migrations/StoryReadStateMigrationJob.kt index df6ead2d9d..85affff548 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/StoryReadStateMigrationJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/StoryReadStateMigrationJob.kt @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.migrations import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.SignalDatabase.Companion.recipients -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient @@ -38,7 +37,7 @@ internal class StoryReadStateMigrationJob( override fun shouldRetry(e: Exception): Boolean = false class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): StoryReadStateMigrationJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): StoryReadStateMigrationJob { return StoryReadStateMigrationJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/StoryViewedReceiptsStateMigrationJob.kt b/app/src/main/java/org/thoughtcrime/securesms/migrations/StoryViewedReceiptsStateMigrationJob.kt index ed98a00bc7..0f11a84af0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/StoryViewedReceiptsStateMigrationJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/StoryViewedReceiptsStateMigrationJob.kt @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.migrations import org.thoughtcrime.securesms.database.SignalDatabase.Companion.recipients -import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient @@ -35,7 +34,7 @@ internal class StoryViewedReceiptsStateMigrationJob( override fun shouldRetry(e: Exception): Boolean = false class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): StoryViewedReceiptsStateMigrationJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): StoryViewedReceiptsStateMigrationJob { return StoryViewedReceiptsStateMigrationJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/SyncDistributionListsMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/SyncDistributionListsMigrationJob.java index 893fdda308..800af5eed8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/SyncDistributionListsMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/SyncDistributionListsMigrationJob.java @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.migrations; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; @@ -77,7 +77,7 @@ public final class SyncDistributionListsMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull SyncDistributionListsMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull SyncDistributionListsMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new SyncDistributionListsMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/TrimByLengthSettingsMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/TrimByLengthSettingsMigrationJob.java index 9cd09b79e4..66737f6816 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/TrimByLengthSettingsMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/TrimByLengthSettingsMigrationJob.java @@ -4,10 +4,10 @@ import android.content.SharedPreferences; import android.preference.PreferenceManager; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -60,7 +60,7 @@ public class TrimByLengthSettingsMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull TrimByLengthSettingsMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull TrimByLengthSettingsMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new TrimByLengthSettingsMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/UpdateSmsJobsMigrationJob.kt b/app/src/main/java/org/thoughtcrime/securesms/migrations/UpdateSmsJobsMigrationJob.kt index 2149bc668d..076ca6fb79 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/UpdateSmsJobsMigrationJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/UpdateSmsJobsMigrationJob.kt @@ -2,9 +2,8 @@ package org.thoughtcrime.securesms.migrations import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.dependencies.ApplicationDependencies -import org.thoughtcrime.securesms.jobmanager.Data -import org.thoughtcrime.securesms.jobmanager.Data.Serializer import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.jobmanager.JsonJobData import org.thoughtcrime.securesms.jobmanager.persistence.JobSpec import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -35,20 +34,20 @@ internal class UpdateSmsJobsMigrationJob( val idOffset = SignalStore.plaintext().smsMigrationIdOffset check(idOffset >= 0) { "Invalid ID offset of $idOffset -- this shouldn't be possible!" } - ApplicationDependencies.getJobManager().update { jobSpec, serializer -> + ApplicationDependencies.getJobManager().update { jobSpec -> when (jobSpec.factoryKey) { - "PushTextSendJob" -> jobSpec.updateAndSerialize(serializer, "message_id", null, idOffset) - "ReactionSendJob" -> jobSpec.updateAndSerialize(serializer, "message_id", "is_mms", idOffset) - "RemoteDeleteSendJob" -> jobSpec.updateAndSerialize(serializer, "message_id", "is_mms", idOffset) - "SmsSendJob" -> jobSpec.updateAndSerialize(serializer, "message_id", null, idOffset) - "SmsSentJob" -> jobSpec.updateAndSerialize(serializer, "message_id", null, idOffset) + "PushTextSendJob" -> jobSpec.updateAndSerialize("message_id", null, idOffset) + "ReactionSendJob" -> jobSpec.updateAndSerialize("message_id", "is_mms", idOffset) + "RemoteDeleteSendJob" -> jobSpec.updateAndSerialize("message_id", "is_mms", idOffset) + "SmsSendJob" -> jobSpec.updateAndSerialize("message_id", null, idOffset) + "SmsSentJob" -> jobSpec.updateAndSerialize("message_id", null, idOffset) else -> jobSpec } } } - private fun JobSpec.updateAndSerialize(serializer: Serializer, idKey: String, isMmsKey: String?, offset: Long): JobSpec { - val data = serializer.deserialize(this.serializedData) + private fun JobSpec.updateAndSerialize(idKey: String, isMmsKey: String?, offset: Long): JobSpec { + val data = JsonJobData.deserialize(this.serializedData) if (isMmsKey != null && data.getBooleanOrDefault(isMmsKey, false)) { return this @@ -57,10 +56,10 @@ internal class UpdateSmsJobsMigrationJob( return if (data.hasLong(idKey)) { val currentValue: Long = data.getLong(idKey) val updatedValue: Long = currentValue + offset - val updatedData: Data = data.buildUpon().putLong(idKey, updatedValue).build() + val updatedData: JsonJobData = data.buildUpon().putLong(idKey, updatedValue).build() Log.d(TAG, "Updating job with factory ${this.factoryKey} from $currentValue to $updatedValue") - this.withData(serializer.serialize(updatedData)) + this.withData(updatedData.serialize()) } else { this } @@ -69,7 +68,7 @@ internal class UpdateSmsJobsMigrationJob( override fun shouldRetry(e: Exception): Boolean = false class Factory : Job.Factory { - override fun create(parameters: Parameters, data: Data): UpdateSmsJobsMigrationJob { + override fun create(parameters: Parameters, serializedData: ByteArray?): UpdateSmsJobsMigrationJob { return UpdateSmsJobsMigrationJob(parameters) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/UserNotificationMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/UserNotificationMigrationJob.java index 75b2516b26..a76cc380b1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/UserNotificationMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/UserNotificationMigrationJob.java @@ -5,6 +5,7 @@ import android.app.PendingIntent; import android.content.Intent; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat; import androidx.core.app.TaskStackBuilder; @@ -16,7 +17,6 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.conversationlist.model.ConversationFilter; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.ThreadTable; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.notifications.NotificationChannels; @@ -128,7 +128,7 @@ public class UserNotificationMigrationJob extends MigrationJob { public static final class Factory implements Job.Factory { @Override - public @NonNull UserNotificationMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull UserNotificationMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new UserNotificationMigrationJob(parameters); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/UuidMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/UuidMigrationJob.java index dadcc40b44..acf49234d9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/UuidMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/UuidMigrationJob.java @@ -4,11 +4,11 @@ import android.content.Context; import android.text.TextUtils; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -83,7 +83,7 @@ public class UuidMigrationJob extends MigrationJob { public static class Factory implements Job.Factory { @Override - public @NonNull UuidMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) { + public @NonNull UuidMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { return new UuidMigrationJob(parameters); } } 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 89258500e5..105487dfbf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RateLimitUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RateLimitUtil.java @@ -8,7 +8,7 @@ import androidx.annotation.WorkerThread; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobs.PushGroupSendJob; import org.thoughtcrime.securesms.jobs.IndividualSendJob; @@ -35,12 +35,10 @@ public final class RateLimitUtil { SignalDatabase.messages().clearRateLimitStatus(messageIds); - ApplicationDependencies.getJobManager().update((job, serializer) -> { - Data data = serializer.deserialize(job.getSerializedData()); - - if (job.getFactoryKey().equals(IndividualSendJob.KEY) && messageIds.contains(IndividualSendJob.getMessageId(data))) { + ApplicationDependencies.getJobManager().update((job) -> { + if (job.getFactoryKey().equals(IndividualSendJob.KEY) && messageIds.contains(IndividualSendJob.getMessageId(job.getSerializedData()))) { return job.withNextRunAttemptTime(System.currentTimeMillis()); - } else if (job.getFactoryKey().equals(PushGroupSendJob.KEY) && messageIds.contains(PushGroupSendJob.getMessageId(data))) { + } else if (job.getFactoryKey().equals(PushGroupSendJob.KEY) && messageIds.contains(PushGroupSendJob.getMessageId(job.getSerializedData()))) { return job.withNextRunAttemptTime(System.currentTimeMillis()); } else { return job; diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/JobMigratorTest.java b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/JobMigratorTest.java index 7a2e7eeba2..31ac6e2a28 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/JobMigratorTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/JobMigratorTest.java @@ -53,7 +53,7 @@ public class JobMigratorTest { JobMigration migration2 = spy(new EmptyMigration(3)); JobMigrator subject = new JobMigrator(1, 3, Arrays.asList(migration1, migration2)); - int version = subject.migrate(simpleJobStorage(), mock(Data.Serializer.class)); + int version = subject.migrate(simpleJobStorage()); assertEquals(3, version); verify(migration1).migrate(any()); @@ -66,7 +66,7 @@ public class JobMigratorTest { JobMigration migration2 = spy(new EmptyMigration(3)); JobMigrator subject = new JobMigrator(2, 3, Arrays.asList(migration1, migration2)); - int version = subject.migrate(simpleJobStorage(), mock(Data.Serializer.class)); + int version = subject.migrate(simpleJobStorage()); assertEquals(3, version); verify(migration1, never()).migrate(any()); @@ -79,7 +79,7 @@ public class JobMigratorTest { JobMigration migration2 = spy(new EmptyMigration(3)); JobMigrator subject = new JobMigrator(3, 3, Arrays.asList(migration1, migration2)); - int version = subject.migrate(simpleJobStorage(), mock(Data.Serializer.class)); + int version = subject.migrate(simpleJobStorage()); assertEquals(3, version); verify(migration1, never()).migrate(any()); @@ -88,7 +88,7 @@ public class JobMigratorTest { private static JobStorage simpleJobStorage() { JobStorage jobStorage = mock(JobStorage.class); - when(jobStorage.getAllJobSpecs()).thenReturn(new ArrayList<>(Collections.singletonList(new JobSpec("1", "f1", null, 1, 1, 1, 1, 1, "", null, false, false)))); + when(jobStorage.getAllJobSpecs()).thenReturn(new ArrayList<>(Collections.singletonList(new JobSpec("1", "f1", null, 1, 1, 1, 1, 1, null, null, false, false)))); return jobStorage; } diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/impl/JsonDataSerializerTest.java b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/impl/JsonJobDataTest.java similarity index 87% rename from app/src/test/java/org/thoughtcrime/securesms/jobmanager/impl/JsonDataSerializerTest.java rename to app/src/test/java/org/thoughtcrime/securesms/jobmanager/impl/JsonJobDataTest.java index ed7170004d..17548103ea 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/impl/JsonDataSerializerTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/impl/JsonJobDataTest.java @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.jobmanager.impl; import org.junit.Test; import org.signal.core.util.StreamUtil; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import java.io.IOException; @@ -11,13 +11,13 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -public final class JsonDataSerializerTest { +public final class JsonJobDataTest { private static final float FloatDelta = 0.00001f; @Test public void deserialize_dataMatchesExpected() throws IOException { - Data data = new JsonDataSerializer().deserialize(StreamUtil.readFullyAsString(ClassLoader.getSystemClassLoader().getResourceAsStream("data/data_serialized.json"))); + JsonJobData data = JsonJobData.deserialize(StreamUtil.readFully(ClassLoader.getSystemClassLoader().getResourceAsStream("data/data_serialized.json"))); assertEquals("s1 value", data.getString("s1")); assertEquals("s2 value", data.getString("s2")); diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdFollowUpJobMigrationTest.java b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdFollowUpJobMigrationTest.java index e3d37fb690..37a622020d 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdFollowUpJobMigrationTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdFollowUpJobMigrationTest.java @@ -6,7 +6,7 @@ import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobMigration.JobData; import org.thoughtcrime.securesms.jobs.FailingJob; @@ -30,26 +30,28 @@ public class RecipientIdFollowUpJobMigrationTest { @Test public void migrate_sendDeliveryReceiptJob_good() throws Exception { - JobData testData = new JobData("SendDeliveryReceiptJob", null, new Data.Builder().putString("recipient", "1") - .putLong("message_id", 1) - .putLong("timestamp", 2) - .build()); + JobData testData = new JobData("SendDeliveryReceiptJob", null, new JsonJobData.Builder().putString("recipient", "1") + .putLong("message_id", 1) + .putLong("timestamp", 2) + .serialize()); RecipientIdFollowUpJobMigration subject = new RecipientIdFollowUpJobMigration(); JobData converted = subject.migrate(testData); assertEquals("SendDeliveryReceiptJob", converted.getFactoryKey()); assertNull(converted.getQueueKey()); - assertEquals("1", converted.getData().getString("recipient")); - assertEquals(1, converted.getData().getLong("message_id")); - assertEquals(2, converted.getData().getLong("timestamp")); + + JsonJobData data = JsonJobData.deserialize(converted.getData()); + assertEquals("1", data.getString("recipient")); + assertEquals(1, data.getLong("message_id")); + assertEquals(2, data.getLong("timestamp")); new SendDeliveryReceiptJob.Factory().create(mock(Job.Parameters.class), converted.getData()); } @Test public void migrate_sendDeliveryReceiptJob_bad() throws Exception { - JobData testData = new JobData("SendDeliveryReceiptJob", null, new Data.Builder().putString("recipient", "1") - .build()); + JobData testData = new JobData("SendDeliveryReceiptJob", null, new JsonJobData.Builder().putString("recipient", "1") + .serialize()); RecipientIdFollowUpJobMigration subject = new RecipientIdFollowUpJobMigration(); JobData converted = subject.migrate(testData); 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 f5b2b1930f..e3a36dab35 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 @@ -8,7 +8,7 @@ import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobMigration.JobData; import org.thoughtcrime.securesms.jobmanager.migrations.RecipientIdJobMigration.NewSerializableSyncMessageId; @@ -49,17 +49,18 @@ public class RecipientIdJobMigrationTest { @Test public void migrate_multiDeviceContactUpdateJob() throws Exception { - JobData testData = new JobData("MultiDeviceContactUpdateJob", "MultiDeviceContactUpdateJob", new Data.Builder().putBoolean("force_sync", false).putString("address", "+16101234567").build()); + JobData testData = new JobData("MultiDeviceContactUpdateJob", "MultiDeviceContactUpdateJob", new JsonJobData.Builder().putBoolean("force_sync", false).putString("address", "+16101234567").serialize()); mockRecipientResolve("+16101234567", 1); RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class)); JobData converted = subject.migrate(testData); + JsonJobData data = JsonJobData.deserialize(converted.getData()); assertEquals("MultiDeviceContactUpdateJob", converted.getFactoryKey()); assertEquals("MultiDeviceContactUpdateJob", converted.getQueueKey()); - assertFalse(converted.getData().getBoolean("force_sync")); - assertFalse(converted.getData().hasString("address")); - assertEquals("1", converted.getData().getString("recipient")); + assertFalse(data.getBoolean("force_sync")); + assertFalse(data.hasString("address")); + assertEquals("1", data.getString("recipient")); new MultiDeviceContactUpdateJob.Factory().create(mock(Job.Parameters.class), converted.getData()); } @@ -67,142 +68,150 @@ public class RecipientIdJobMigrationTest { @Test public void migrate_multiDeviceViewOnceOpenJob() throws Exception { OldSerializableSyncMessageId oldId = new OldSerializableSyncMessageId("+16101234567", 1); - JobData testData = new JobData("MultiDeviceRevealUpdateJob", null, new Data.Builder().putString("message_id", JsonUtils.toJson(oldId)).build()); + JobData testData = new JobData("MultiDeviceRevealUpdateJob", null, new JsonJobData.Builder().putString("message_id", JsonUtils.toJson(oldId)).serialize()); mockRecipientResolve("+16101234567", 1); RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class)); JobData converted = subject.migrate(testData); + JsonJobData data = JsonJobData.deserialize(converted.getData()); assertEquals("MultiDeviceRevealUpdateJob", converted.getFactoryKey()); assertNull(converted.getQueueKey()); - assertEquals(JsonUtils.toJson(new NewSerializableSyncMessageId("1", 1)), converted.getData().getString("message_id")); + assertEquals(JsonUtils.toJson(new NewSerializableSyncMessageId("1", 1)), data.getString("message_id")); new MultiDeviceViewOnceOpenJob.Factory().create(mock(Job.Parameters.class), converted.getData()); } @Test public void migrate_sendDeliveryReceiptJob() throws Exception { - JobData testData = new JobData("SendDeliveryReceiptJob", null, new Data.Builder().putString("address", "+16101234567") - .putLong("message_id", 1) - .putLong("timestamp", 2) - .build()); + JobData testData = new JobData("SendDeliveryReceiptJob", null, new JsonJobData.Builder().putString("address", "+16101234567") + .putLong("message_id", 1) + .putLong("timestamp", 2) + .serialize()); mockRecipientResolve("+16101234567", 1); RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class)); JobData converted = subject.migrate(testData); + JsonJobData data = JsonJobData.deserialize(converted.getData()); assertEquals("SendDeliveryReceiptJob", converted.getFactoryKey()); assertNull(converted.getQueueKey()); - assertEquals("1", converted.getData().getString("recipient")); - assertEquals(1, converted.getData().getLong("message_id")); - assertEquals(2, converted.getData().getLong("timestamp")); + assertEquals("1", data.getString("recipient")); + assertEquals(1, data.getLong("message_id")); + assertEquals(2, data.getLong("timestamp")); new SendDeliveryReceiptJob.Factory().create(mock(Job.Parameters.class), converted.getData()); } @Test public void migrate_multiDeviceVerifiedUpdateJob() throws Exception { - JobData testData = new JobData("MultiDeviceVerifiedUpdateJob", "__MULTI_DEVICE_VERIFIED_UPDATE__", new Data.Builder().putString("destination", "+16101234567") - .putString("identity_key", "abcd") - .putInt("verified_status", 1) - .putLong("timestamp", 123) - .build()); + JobData testData = new JobData("MultiDeviceVerifiedUpdateJob", "__MULTI_DEVICE_VERIFIED_UPDATE__", new JsonJobData.Builder().putString("destination", "+16101234567") + .putString("identity_key", "abcd") + .putInt("verified_status", 1) + .putLong("timestamp", 123) + .serialize()); mockRecipientResolve("+16101234567", 1); RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class)); JobData converted = subject.migrate(testData); + JsonJobData data = JsonJobData.deserialize(converted.getData()); assertEquals("MultiDeviceVerifiedUpdateJob", converted.getFactoryKey()); assertEquals("__MULTI_DEVICE_VERIFIED_UPDATE__", converted.getQueueKey()); - assertEquals("abcd", converted.getData().getString("identity_key")); - assertEquals(1, converted.getData().getInt("verified_status")); - assertEquals(123, converted.getData().getLong("timestamp")); - assertEquals("1", converted.getData().getString("destination")); + assertEquals("abcd", data.getString("identity_key")); + assertEquals(1, data.getInt("verified_status")); + assertEquals(123, data.getLong("timestamp")); + assertEquals("1", data.getString("destination")); new MultiDeviceVerifiedUpdateJob.Factory().create(mock(Job.Parameters.class), converted.getData()); } @Test public void migrate_pushGroupSendJob_null() throws Exception { - JobData testData = new JobData("PushGroupSendJob", "someGroupId", new Data.Builder().putString("filter_address", null) - .putLong("message_id", 123) - .build()); + JobData testData = new JobData("PushGroupSendJob", "someGroupId", new JsonJobData.Builder().putString("filter_address", null) + .putLong("message_id", 123) + .serialize()); mockRecipientResolve("someGroupId", 5); RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class)); JobData converted = subject.migrate(testData); + JsonJobData data = JsonJobData.deserialize(converted.getData()); assertEquals("PushGroupSendJob", converted.getFactoryKey()); assertEquals(RecipientId.from(5).toQueueKey(), converted.getQueueKey()); - assertNull(converted.getData().getString("filter_recipient")); - assertFalse(converted.getData().hasString("filter_address")); + assertNull(data.getString("filter_recipient")); + assertFalse(data.hasString("filter_address")); new PushGroupSendJob.Factory().create(mock(Job.Parameters.class), converted.getData()); } @Test public void migrate_pushGroupSendJob_nonNull() throws Exception { - JobData testData = new JobData("PushGroupSendJob", "someGroupId", new Data.Builder().putString("filter_address", "+16101234567") - .putLong("message_id", 123) - .build()); + JobData testData = new JobData("PushGroupSendJob", "someGroupId", new JsonJobData.Builder().putString("filter_address", "+16101234567") + .putLong("message_id", 123) + .serialize()); mockRecipientResolve("+16101234567", 1); mockRecipientResolve("someGroupId", 5); RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class)); JobData converted = subject.migrate(testData); + JsonJobData data = JsonJobData.deserialize(converted.getData()); assertEquals("PushGroupSendJob", converted.getFactoryKey()); assertEquals(RecipientId.from(5).toQueueKey(), converted.getQueueKey()); - assertEquals("1", converted.getData().getString("filter_recipient")); - assertFalse(converted.getData().hasString("filter_address")); + assertEquals("1", data.getString("filter_recipient")); + assertFalse(data.hasString("filter_address")); new PushGroupSendJob.Factory().create(mock(Job.Parameters.class), converted.getData()); } @Test public void migrate_directoryRefreshJob_null() throws Exception { - JobData testData = new JobData("DirectoryRefreshJob", "DirectoryRefreshJob", new Data.Builder().putString("address", null).putBoolean("notify_of_new_users", true).build()); + JobData testData = new JobData("DirectoryRefreshJob", "DirectoryRefreshJob", new JsonJobData.Builder().putString("address", null).putBoolean("notify_of_new_users", true).serialize()); RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class)); JobData converted = subject.migrate(testData); + JsonJobData data = JsonJobData.deserialize(converted.getData()); assertEquals("DirectoryRefreshJob", converted.getFactoryKey()); assertEquals("DirectoryRefreshJob", converted.getQueueKey()); - assertNull(converted.getData().getString("recipient")); - assertTrue(converted.getData().getBoolean("notify_of_new_users")); - assertFalse(converted.getData().hasString("address")); + assertNull(data.getString("recipient")); + assertTrue(data.getBoolean("notify_of_new_users")); + assertFalse(data.hasString("address")); new DirectoryRefreshJob.Factory().create(mock(Job.Parameters.class), converted.getData()); } @Test public void migrate_directoryRefreshJob_nonNull() throws Exception { - JobData testData = new JobData("DirectoryRefreshJob", "DirectoryRefreshJob", new Data.Builder().putString("address", "+16101234567").putBoolean("notify_of_new_users", true).build()); + JobData testData = new JobData("DirectoryRefreshJob", "DirectoryRefreshJob", new JsonJobData.Builder().putString("address", "+16101234567").putBoolean("notify_of_new_users", true).serialize()); mockRecipientResolve("+16101234567", 1); RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class)); JobData converted = subject.migrate(testData); + JsonJobData data = JsonJobData.deserialize(converted.getData()); assertEquals("DirectoryRefreshJob", converted.getFactoryKey()); assertEquals("DirectoryRefreshJob", converted.getQueueKey()); - assertTrue(converted.getData().getBoolean("notify_of_new_users")); - assertEquals("1", converted.getData().getString("recipient")); - assertFalse(converted.getData().hasString("address")); + assertTrue(data.getBoolean("notify_of_new_users")); + assertEquals("1", data.getString("recipient")); + assertFalse(data.hasString("address")); new DirectoryRefreshJob.Factory().create(mock(Job.Parameters.class), converted.getData()); } @Test public void migrate_retrieveProfileAvatarJob() throws Exception { - JobData testData = new JobData("RetrieveProfileAvatarJob", "RetrieveProfileAvatarJob+16101234567", new Data.Builder().putString("address", "+16101234567").putString("profile_avatar", "abc").build()); + JobData testData = new JobData("RetrieveProfileAvatarJob", "RetrieveProfileAvatarJob+16101234567", new JsonJobData.Builder().putString("address", "+16101234567").putString("profile_avatar", "abc").serialize()); mockRecipientResolve("+16101234567", 1); RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class)); JobData converted = subject.migrate(testData); + JsonJobData data = JsonJobData.deserialize(converted.getData()); assertEquals("RetrieveProfileAvatarJob", converted.getFactoryKey()); assertEquals("RetrieveProfileAvatarJob::" + RecipientId.from(1).toQueueKey(), converted.getQueueKey()); - assertEquals("1", converted.getData().getString("recipient")); + assertEquals("1", data.getString("recipient")); new RetrieveProfileAvatarJob.Factory().create(mock(Job.Parameters.class), converted.getData()); @@ -210,14 +219,15 @@ public class RecipientIdJobMigrationTest { @Test public void migrate_multiDeviceReadUpdateJob_empty() throws Exception { - JobData testData = new JobData("MultiDeviceReadUpdateJob", null, new Data.Builder().putStringArray("message_ids", new String[0]).build()); + JobData testData = new JobData("MultiDeviceReadUpdateJob", null, new JsonJobData.Builder().putStringArray("message_ids", new String[0]).serialize()); RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class)); JobData converted = subject.migrate(testData); + JsonJobData data = JsonJobData.deserialize(converted.getData()); assertEquals("MultiDeviceReadUpdateJob", converted.getFactoryKey()); assertNull(converted.getQueueKey()); - assertEquals(0, converted.getData().getStringArray("message_ids").length); + assertEquals(0, data.getStringArray("message_ids").length); new MultiDeviceReadUpdateJob.Factory().create(mock(Job.Parameters.class), converted.getData()); } @@ -227,17 +237,18 @@ public class RecipientIdJobMigrationTest { OldSerializableSyncMessageId id1 = new OldSerializableSyncMessageId("+16101234567", 1); OldSerializableSyncMessageId id2 = new OldSerializableSyncMessageId("+16101112222", 2); - JobData testData = new JobData("MultiDeviceReadUpdateJob", null, new Data.Builder().putStringArray("message_ids", new String[]{ JsonUtils.toJson(id1), JsonUtils.toJson(id2) }).build()); + JobData testData = new JobData("MultiDeviceReadUpdateJob", null, new JsonJobData.Builder().putStringArray("message_ids", new String[]{ JsonUtils.toJson(id1), JsonUtils.toJson(id2) }).serialize()); mockRecipientResolve("+16101234567", 1); mockRecipientResolve("+16101112222", 2); RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class)); JobData converted = subject.migrate(testData); + JsonJobData data = JsonJobData.deserialize(converted.getData()); assertEquals("MultiDeviceReadUpdateJob", converted.getFactoryKey()); assertNull(converted.getQueueKey()); - String[] updated = converted.getData().getStringArray("message_ids"); + String[] updated = data.getStringArray("message_ids"); assertEquals(2, updated.length); assertEquals(JsonUtils.toJson(new NewSerializableSyncMessageId("1", 1)), updated[0]); @@ -248,47 +259,50 @@ public class RecipientIdJobMigrationTest { @Test public void migrate_pushMediaSendJob() throws Exception { - JobData testData = new JobData("PushMediaSendJob", "+16101234567", new Data.Builder().putLong("message_id", 1).build()); + JobData testData = new JobData("PushMediaSendJob", "+16101234567", new JsonJobData.Builder().putLong("message_id", 1).serialize()); mockRecipientResolve("+16101234567", 1); RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class)); JobData converted = subject.migrate(testData); + JsonJobData data = JsonJobData.deserialize(converted.getData()); assertEquals("PushMediaSendJob", converted.getFactoryKey()); assertEquals(RecipientId.from(1).toQueueKey(), converted.getQueueKey()); - assertEquals(1, converted.getData().getLong("message_id")); + assertEquals(1, data.getLong("message_id")); new IndividualSendJob.Factory().create(mock(Job.Parameters.class), converted.getData()); } @Test public void migrate_smsSendJob_nonNull() throws Exception { - JobData testData = new JobData("SmsSendJob", "+16101234567", new Data.Builder().putLong("message_id", 1).putInt("run_attempt", 0).build()); + JobData testData = new JobData("SmsSendJob", "+16101234567", new JsonJobData.Builder().putLong("message_id", 1).putInt("run_attempt", 0).serialize()); mockRecipientResolve("+16101234567", 1); RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class)); JobData converted = subject.migrate(testData); + JsonJobData data = JsonJobData.deserialize(converted.getData()); assertEquals("SmsSendJob", converted.getFactoryKey()); assertEquals(RecipientId.from(1).toQueueKey(), converted.getQueueKey()); - assertEquals(1, converted.getData().getLong("message_id")); - assertEquals(0, converted.getData().getInt("run_attempt")); + assertEquals(1, data.getLong("message_id")); + assertEquals(0, data.getInt("run_attempt")); new SmsSendJob.Factory().create(mock(Job.Parameters.class), converted.getData()); } @Test public void migrate_smsSendJob_null() throws Exception { - JobData testData = new JobData("SmsSendJob", null, new Data.Builder().putLong("message_id", 1).putInt("run_attempt", 0).build()); + JobData testData = new JobData("SmsSendJob", null, new JsonJobData.Builder().putLong("message_id", 1).putInt("run_attempt", 0).serialize()); mockRecipientResolve("+16101234567", 1); RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class)); JobData converted = subject.migrate(testData); + JsonJobData data = JsonJobData.deserialize(converted.getData()); assertEquals("SmsSendJob", converted.getFactoryKey()); assertNull(converted.getQueueKey()); - assertEquals(1, converted.getData().getLong("message_id")); - assertEquals(0, converted.getData().getInt("run_attempt")); + assertEquals(1, data.getLong("message_id")); + assertEquals(0, data.getInt("run_attempt")); new SmsSendJob.Factory().create(mock(Job.Parameters.class), converted.getData()); } diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigrationTest.java b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigrationTest.java index b596d0c008..74619661a9 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigrationTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigrationTest.java @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.jobmanager.migrations; import org.junit.Test; import org.thoughtcrime.securesms.database.MessageTable; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.JobMigration; import org.thoughtcrime.securesms.jobs.SendReadReceiptJob; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -26,20 +26,21 @@ public class SendReadReceiptsJobMigrationTest { SendReadReceiptJob job = new SendReadReceiptJob(1, RecipientId.from(2), new ArrayList<>(), new ArrayList<>()); JobMigration.JobData jobData = new JobMigration.JobData(job.getFactoryKey(), "asdf", - new Data.Builder() + new JsonJobData.Builder() .putString("recipient", RecipientId.from(2).serialize()) .putLongArray("message_ids", new long[]{1, 2, 3, 4, 5}) - .putLong("timestamp", 292837649).build()); + .putLong("timestamp", 292837649).serialize()); when(mockDatabase.getThreadIdForMessage(anyLong())).thenReturn(1234L); // WHEN JobMigration.JobData result = testSubject.migrate(jobData); + JsonJobData data = JsonJobData.deserialize(result.getData()); // THEN - assertEquals(1234L, result.getData().getLong("thread")); - assertEquals(RecipientId.from(2).serialize(), result.getData().getString("recipient")); - assertTrue(result.getData().hasLongArray("message_ids")); - assertTrue(result.getData().hasLong("timestamp")); + assertEquals(1234L, data.getLong("thread")); + assertEquals(RecipientId.from(2).serialize(), data.getString("recipient")); + assertTrue(data.hasLongArray("message_ids")); + assertTrue(data.hasLong("timestamp")); } @Test @@ -48,10 +49,10 @@ public class SendReadReceiptsJobMigrationTest { SendReadReceiptJob job = new SendReadReceiptJob(1, RecipientId.from(2), new ArrayList<>(), new ArrayList<>()); JobMigration.JobData jobData = new JobMigration.JobData(job.getFactoryKey(), "asdf", - new Data.Builder() + new JsonJobData.Builder() .putString("recipient", RecipientId.from(2).serialize()) .putLongArray("message_ids", new long[]{}) - .putLong("timestamp", 292837649).build()); + .putLong("timestamp", 292837649).serialize()); when(mockDatabase.getThreadIdForMessage(anyLong())).thenReturn(-1L); // WHEN @@ -77,7 +78,7 @@ public class SendReadReceiptsJobMigrationTest { @Test public void givenSomeOtherJobDataWithThreadId_whenIMigrate_thenIDoNotReplace() { // GIVEN - JobMigration.JobData jobData = new JobMigration.JobData("SomeOtherJob", "asdf", new Data.Builder().putLong("thread", 1).build()); + JobMigration.JobData jobData = new JobMigration.JobData("SomeOtherJob", "asdf", new JsonJobData.Builder().putLong("thread", 1).serialize()); // WHEN JobMigration.JobData result = testSubject.migrate(jobData); @@ -89,7 +90,7 @@ public class SendReadReceiptsJobMigrationTest { @Test public void givenSomeOtherJobDataWithoutThreadId_whenIMigrate_thenIDoNotReplace() { // GIVEN - JobMigration.JobData jobData = new JobMigration.JobData("SomeOtherJob", "asdf", new Data.Builder().build()); + JobMigration.JobData jobData = new JobMigration.JobData("SomeOtherJob", "asdf", new JsonJobData.Builder().serialize()); // WHEN JobMigration.JobData result = testSubject.migrate(jobData); diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigrationTest.java b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigrationTest.java index 5d9fb938b4..4020ee27c4 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigrationTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigrationTest.java @@ -4,7 +4,7 @@ import org.junit.Test; import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.model.GroupRecord; import org.thoughtcrime.securesms.groups.GroupId; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.JobMigration; import org.thoughtcrime.securesms.jobs.FailingJob; import org.thoughtcrime.securesms.jobs.SenderKeyDistributionSendJob; @@ -30,10 +30,10 @@ public class SenderKeyDistributionSendJobRecipientMigrationTest { // GIVEN JobMigration.JobData jobData = new JobMigration.JobData(SenderKeyDistributionSendJob.KEY, "asdf", - new Data.Builder() + new JsonJobData.Builder() .putString("recipient_id", RecipientId.from(1).serialize()) .putBlobAsString("group_id", GROUP_ID.getDecodedId()) - .build()); + .serialize()); GroupRecord mockGroup = mock(GroupRecord.class); when(mockGroup.getRecipientId()).thenReturn(RecipientId.from(2)); @@ -41,10 +41,11 @@ public class SenderKeyDistributionSendJobRecipientMigrationTest { // WHEN JobMigration.JobData result = testSubject.migrate(jobData); + JsonJobData data = JsonJobData.deserialize(result.getData()); // THEN - assertEquals(RecipientId.from(1).serialize(), result.getData().getString("recipient_id")); - assertEquals(RecipientId.from(2).serialize(), result.getData().getString("thread_recipient_id")); + assertEquals(RecipientId.from(1).serialize(), data.getString("recipient_id")); + assertEquals(RecipientId.from(2).serialize(), data.getString("thread_recipient_id")); } @Test @@ -52,10 +53,10 @@ public class SenderKeyDistributionSendJobRecipientMigrationTest { // GIVEN JobMigration.JobData jobData = new JobMigration.JobData(SenderKeyDistributionSendJob.KEY, "asdf", - new Data.Builder() + new JsonJobData.Builder() .putString("recipient_id", RecipientId.from(1).serialize()) .putBlobAsString("group_id", GROUP_ID.getDecodedId()) - .build()); + .serialize()); // WHEN JobMigration.JobData result = testSubject.migrate(jobData); @@ -69,9 +70,9 @@ public class SenderKeyDistributionSendJobRecipientMigrationTest { // GIVEN JobMigration.JobData jobData = new JobMigration.JobData(SenderKeyDistributionSendJob.KEY, "asdf", - new Data.Builder() + new JsonJobData.Builder() .putString("recipient_id", RecipientId.from(1).serialize()) - .build()); + .serialize()); // WHEN JobMigration.JobData result = testSubject.migrate(jobData); 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 2985e46ef1..1abd5ab6b1 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/jobs/FastJobStorageTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/jobs/FastJobStorageTest.java @@ -6,9 +6,7 @@ import com.annimon.stream.Stream; import org.junit.Test; import org.thoughtcrime.securesms.database.JobDatabase; -import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; -import org.thoughtcrime.securesms.jobmanager.impl.JsonDataSerializer; import org.thoughtcrime.securesms.jobmanager.persistence.ConstraintSpec; import org.thoughtcrime.securesms.jobmanager.persistence.DependencySpec; import org.thoughtcrime.securesms.jobmanager.persistence.FullSpec; @@ -30,9 +28,6 @@ import static org.thoughtcrime.securesms.testutil.TestHelpers.setOf; public class FastJobStorageTest { - private static final JsonDataSerializer serializer = new JsonDataSerializer(); - private static final String EMPTY_DATA = serializer.serialize(Data.EMPTY); - @Test public void init_allStoredDataAvailable() { FastJobStorage subject = new FastJobStorage(fixedDataDatabase(DataSet1.FULL_SPECS)); @@ -97,10 +92,10 @@ public class FastJobStorageTest { @Test public void updateAllJobsToBePending_allArePending() { - FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 1, 1, 1, 1, 1, EMPTY_DATA, null, true, false), + FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 1, 1, 1, 1, 1, null, null, true, false), Collections.emptyList(), Collections.emptyList()); - FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 1, 1, 1, 1, 1, EMPTY_DATA, null, true, false), + FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 1, 1, 1, 1, 1, null, null, true, false), Collections.emptyList(), Collections.emptyList()); @@ -117,7 +112,7 @@ public class FastJobStorageTest { public void updateJobs_writesToDatabase() { JobDatabase database = fixedDataDatabase(DataSet1.FULL_SPECS); FastJobStorage subject = new FastJobStorage(database); - List jobs = Collections.singletonList(new JobSpec("id1", "f1", null, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false)); + List jobs = Collections.singletonList(new JobSpec("id1", "f1", null, 1, 1, 1, 1, 1, null, null, false, false)); subject.init(); subject.updateJobs(jobs); @@ -129,7 +124,7 @@ public class FastJobStorageTest { public void updateJobs_memoryOnly_doesNotWriteToDatabase() { JobDatabase database = fixedDataDatabase(DataSetMemory.FULL_SPECS); FastJobStorage subject = new FastJobStorage(database); - List jobs = Collections.singletonList(new JobSpec("id1", "f1", null, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false)); + List jobs = Collections.singletonList(new JobSpec("id1", "f1", null, 1, 1, 1, 1, 1, null, null, false, false)); subject.init(); subject.updateJobs(jobs); @@ -139,20 +134,20 @@ public class FastJobStorageTest { @Test public void updateJobs_updatesAllFields() { - FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false), + FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 1, 1, 1, 1, 1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); - FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false), + FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 1, 1, 1, 1, 1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); - FullSpec fullSpec3 = new FullSpec(new JobSpec("3", "f3", null, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false), + FullSpec fullSpec3 = new FullSpec(new JobSpec("3", "f3", null, 1, 1, 1, 1, 1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); FastJobStorage subject = new FastJobStorage(fixedDataDatabase(Arrays.asList(fullSpec1, fullSpec2, fullSpec3))); - JobSpec update1 = new JobSpec("1", "g1", "q1", 2, 2, 2, 2, 2, "abc", null, true, false); - JobSpec update2 = new JobSpec("2", "g2", "q2", 3, 3, 3, 3, 3, "def", "ghi", true, false); + JobSpec update1 = new JobSpec("1", "g1", "q1", 2, 2, 2, 2, 2, "abc".getBytes(), null, true, false); + JobSpec update2 = new JobSpec("2", "g2", "q2", 3, 3, 3, 3, 3, "def".getBytes(), "ghi".getBytes(), true, false); subject.init(); subject.updateJobs(Arrays.asList(update1, update2)); @@ -191,9 +186,9 @@ public class FastJobStorageTest { FastJobStorage subject = new FastJobStorage(database); subject.init(); - subject.updateJobAfterRetry("id1", true, 1, 10, "a"); + subject.updateJobAfterRetry("id1", true, 1, 10, "a".getBytes()); - verify(database).updateJobAfterRetry("id1", true, 1, 10, "a"); + verify(database).updateJobAfterRetry("id1", true, 1, 10, "a".getBytes()); } @Test @@ -202,21 +197,21 @@ public class FastJobStorageTest { FastJobStorage subject = new FastJobStorage(database); subject.init(); - subject.updateJobAfterRetry("id1", true, 1, 10, "a"); + subject.updateJobAfterRetry("id1", true, 1, 10, "a".getBytes()); - verify(database, times(0)).updateJobAfterRetry("id1", true, 1, 10, "a"); + verify(database, times(0)).updateJobAfterRetry("id1", true, 1, 10, "a".getBytes()); } @Test public void updateJobAfterRetry_stateUpdated() { - FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 3, -1, EMPTY_DATA, null, true, false), + FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 3, -1, null, null, true, false), Collections.emptyList(), Collections.emptyList()); FastJobStorage subject = new FastJobStorage(fixedDataDatabase(Collections.singletonList(fullSpec))); subject.init(); - subject.updateJobAfterRetry("1", false, 1, 10, "a"); + subject.updateJobAfterRetry("1", false, 1, 10, "a".getBytes()); JobSpec job = subject.getJobSpec("1"); @@ -224,15 +219,15 @@ public class FastJobStorageTest { assertFalse(job.isRunning()); assertEquals(1, job.getRunAttempt()); assertEquals(10, job.getNextRunAttemptTime()); - assertEquals("a", job.getSerializedData()); + assertEquals("a", new String(job.getSerializedData())); } @Test public void getPendingJobsWithNoDependenciesInCreatedOrder_noneWhenEarlierItemInQueueInRunning() { - FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, -1, EMPTY_DATA, null, true, false), + FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, -1, null, null, true, false), Collections.emptyList(), Collections.emptyList()); - FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", "q", 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", "q", 0, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); @@ -244,7 +239,7 @@ public class FastJobStorageTest { @Test public void getPendingJobsWithNoDependenciesInCreatedOrder_noneWhenAllJobsAreRunning() { - FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, -1, EMPTY_DATA, null, true, false), + FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, -1, null, null, true, false), Collections.emptyList(), Collections.emptyList()); @@ -256,7 +251,7 @@ public class FastJobStorageTest { @Test public void getPendingJobsWithNoDependenciesInCreatedOrder_noneWhenNextRunTimeIsAfterCurrentTime() { - FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 10, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 10, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); @@ -268,10 +263,10 @@ public class FastJobStorageTest { @Test public void getPendingJobsWithNoDependenciesInCreatedOrder_noneWhenDependentOnAnotherJob() { - FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 0, -1, EMPTY_DATA, null, true, false), + FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 0, -1, null, null, true, false), Collections.emptyList(), Collections.emptyList()); - FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 0, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.singletonList(new DependencySpec("2", "1", false))); @@ -284,7 +279,7 @@ public class FastJobStorageTest { @Test public void getPendingJobsWithNoDependenciesInCreatedOrder_singleEligibleJob() { - FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); @@ -296,10 +291,10 @@ public class FastJobStorageTest { @Test public void getPendingJobsWithNoDependenciesInCreatedOrder_multipleEligibleJobs() { - FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); - FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 0, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); @@ -312,10 +307,10 @@ public class FastJobStorageTest { @Test public void getPendingJobsWithNoDependenciesInCreatedOrder_singleEligibleJobInMixedList() { - FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 0, -1, EMPTY_DATA, null, true, false), + FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 0, -1, null, null, true, false), Collections.emptyList(), Collections.emptyList()); - FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 0, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); @@ -331,10 +326,10 @@ public class FastJobStorageTest { @Test public void getPendingJobsWithNoDependenciesInCreatedOrder_firstItemInQueue() { - FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); - FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", "q", 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", "q", 0, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); @@ -350,10 +345,10 @@ public class FastJobStorageTest { @Test public void getPendingJobsWithNoDependenciesInCreatedOrder_migrationJobTakesPrecedence() { - FullSpec plainSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec plainSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); - FullSpec migrationSpec = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec migrationSpec = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); @@ -368,10 +363,10 @@ public class FastJobStorageTest { @Test public void getPendingJobsWithNoDependenciesInCreatedOrder_runningMigrationBlocksNormalJobs() { - FullSpec plainSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec plainSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); - FullSpec migrationSpec = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, -1, EMPTY_DATA, null, true, false), + FullSpec migrationSpec = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, -1, null, null, true, false), Collections.emptyList(), Collections.emptyList()); @@ -385,10 +380,10 @@ public class FastJobStorageTest { @Test public void getPendingJobsWithNoDependenciesInCreatedOrder_runningMigrationBlocksLaterMigrationJobs() { - FullSpec migrationSpec1 = new FullSpec(new JobSpec("1", "f1", Job.Parameters.MIGRATION_QUEUE_KEY, 0, 0, 0, 0, -1, EMPTY_DATA, null, true, false), + FullSpec migrationSpec1 = new FullSpec(new JobSpec("1", "f1", Job.Parameters.MIGRATION_QUEUE_KEY, 0, 0, 0, 0, -1, null, null, true, false), Collections.emptyList(), Collections.emptyList()); - FullSpec migrationSpec2 = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec migrationSpec2 = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); @@ -402,10 +397,10 @@ public class FastJobStorageTest { @Test public void getPendingJobsWithNoDependenciesInCreatedOrder_onlyReturnFirstEligibleMigrationJob() { - FullSpec migrationSpec1 = new FullSpec(new JobSpec("1", "f1", Job.Parameters.MIGRATION_QUEUE_KEY, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec migrationSpec1 = new FullSpec(new JobSpec("1", "f1", Job.Parameters.MIGRATION_QUEUE_KEY, 0, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); - FullSpec migrationSpec2 = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec migrationSpec2 = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); @@ -420,10 +415,10 @@ public class FastJobStorageTest { @Test public void getPendingJobsWithNoDependenciesInCreatedOrder_onlyMigrationJobWithAppropriateNextRunTime() { - FullSpec migrationSpec1 = new FullSpec(new JobSpec("1", "f1", Job.Parameters.MIGRATION_QUEUE_KEY, 0, 999, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec migrationSpec1 = new FullSpec(new JobSpec("1", "f1", Job.Parameters.MIGRATION_QUEUE_KEY, 0, 999, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); - FullSpec migrationSpec2 = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, -1, EMPTY_DATA, null, false, false), + FullSpec migrationSpec2 = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, -1, null, null, false, false), Collections.emptyList(), Collections.emptyList()); @@ -608,9 +603,9 @@ public class FastJobStorageTest { } private static final class DataSet1 { - static final JobSpec JOB_1 = new JobSpec("id1", "f1", "q1", 1, 2, 3, 4, 5, EMPTY_DATA, null, false, false); - static final JobSpec JOB_2 = new JobSpec("id2", "f2", "q2", 1, 2, 3, 4, 5, EMPTY_DATA, null, false, false); - static final JobSpec JOB_3 = new JobSpec("id3", "f3", "q3", 1, 2, 3, 4, 5, EMPTY_DATA, null, false, false); + static final JobSpec JOB_1 = new JobSpec("id1", "f1", "q1", 1, 2, 3, 4, 5, null, null, false, false); + static final JobSpec JOB_2 = new JobSpec("id2", "f2", "q2", 1, 2, 3, 4, 5, null, null, false, false); + static final JobSpec JOB_3 = new JobSpec("id3", "f3", "q3", 1, 2, 3, 4, 5, null, null, false, false); static final ConstraintSpec CONSTRAINT_1 = new ConstraintSpec("id1", "f1", false); static final ConstraintSpec CONSTRAINT_2 = new ConstraintSpec("id2", "f2", false); static final DependencySpec DEPENDENCY_2 = new DependencySpec("id2", "id1", false); @@ -641,7 +636,7 @@ public class FastJobStorageTest { } private static final class DataSetMemory { - static final JobSpec JOB_1 = new JobSpec("id1", "f1", "q1", 1, 2, 3, 4, 5, EMPTY_DATA, null, false, true); + static final JobSpec JOB_1 = new JobSpec("id1", "f1", "q1", 1, 2, 3, 4, 5, null, null, false, true); static final ConstraintSpec CONSTRAINT_1 = new ConstraintSpec("id1", "f1", true); static final FullSpec FULL_SPEC_1 = new FullSpec(JOB_1, Collections.singletonList(CONSTRAINT_1), Collections.emptyList()); static final List FULL_SPECS = Collections.singletonList(FULL_SPEC_1); diff --git a/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java b/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java index 0f0f355271..8eba87925f 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java @@ -19,7 +19,7 @@ import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.database.model.StoryType; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Data; +import org.thoughtcrime.securesms.jobmanager.JsonJobData; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobs.MultiDeviceReadUpdateJob; @@ -92,7 +92,7 @@ public class MarkReadReceiverTest { return; } - Data data = job.serialize(); + JsonJobData data = JsonJobData.deserialize(job.serialize()); long threadId = data.getLong("thread"); String recipientId = data.getString("recipient"); diff --git a/app/src/test/java/org/thoughtcrime/securesms/sms/UploadDependencyGraphTest.kt b/app/src/test/java/org/thoughtcrime/securesms/sms/UploadDependencyGraphTest.kt index 08b006736a..efb28314c6 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/sms/UploadDependencyGraphTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/sms/UploadDependencyGraphTest.kt @@ -17,6 +17,7 @@ import org.thoughtcrime.securesms.attachments.DatabaseAttachment import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.JobManager +import org.thoughtcrime.securesms.jobmanager.JsonJobData import org.thoughtcrime.securesms.jobs.AttachmentCompressionJob import org.thoughtcrime.securesms.jobs.AttachmentCopyJob import org.thoughtcrime.securesms.jobs.AttachmentUploadJob @@ -211,8 +212,8 @@ class UploadDependencyGraphTest { if (expectedCopyDestinationCount > 0) { assertTrue(steps[3][0] is AttachmentCopyJob) - val uploadData = steps[2][0].serialize() - val copyData = steps[3][0].serialize() + val uploadData = JsonJobData.deserialize(steps[2][0].serialize()) + val copyData = JsonJobData.deserialize(steps[3][0].serialize()) val uploadAttachmentId = AttachmentId(uploadData.getLong("row_id"), uploadData.getLong("unique_id")) val copySourceAttachmentId = JsonUtils.fromJson(copyData.getString("source_id"), AttachmentId::class.java)