mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-23 10:20:25 +01:00
Store Job data as bytes.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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<T extends Job> {
|
||||
@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<String> 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<String> 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<String> 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<String> 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;
|
||||
}
|
||||
|
||||
@@ -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<JobSpec> 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<JobSpec> 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());
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<ConstraintObserver> 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<ConstraintObserver> 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<String, Job.Factory> jobFactories = new HashMap<>();
|
||||
private Map<String, Constraint.Factory> constraintFactories = new HashMap<>();
|
||||
private List<ConstraintObserver> 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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<JobSpec> 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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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<String, String> strings;
|
||||
@JsonProperty private final Map<String, String[]> stringArrays;
|
||||
@@ -31,18 +37,31 @@ public class Data {
|
||||
@JsonProperty private final Map<String, Boolean> booleans;
|
||||
@JsonProperty private final Map<String, boolean[]> booleanArrays;
|
||||
|
||||
public Data(@JsonProperty("strings") @NonNull Map<String, String> strings,
|
||||
@JsonProperty("stringArrays") @NonNull Map<String, String[]> stringArrays,
|
||||
@JsonProperty("integers") @NonNull Map<String, Integer> integers,
|
||||
@JsonProperty("integerArrays") @NonNull Map<String, int[]> integerArrays,
|
||||
@JsonProperty("longs") @NonNull Map<String, Long> longs,
|
||||
@JsonProperty("longArrays") @NonNull Map<String, long[]> longArrays,
|
||||
@JsonProperty("floats") @NonNull Map<String, Float> floats,
|
||||
@JsonProperty("floatArrays") @NonNull Map<String, float[]> floatArrays,
|
||||
@JsonProperty("doubles") @NonNull Map<String, Double> doubles,
|
||||
@JsonProperty("doubleArrays") @NonNull Map<String, double[]> doubleArrays,
|
||||
@JsonProperty("booleans") @NonNull Map<String, Boolean> booleans,
|
||||
@JsonProperty("booleanArrays") @NonNull Map<String, boolean[]> 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<String, String> strings,
|
||||
@JsonProperty("stringArrays") @NonNull Map<String, String[]> stringArrays,
|
||||
@JsonProperty("integers") @NonNull Map<String, Integer> integers,
|
||||
@JsonProperty("integerArrays") @NonNull Map<String, int[]> integerArrays,
|
||||
@JsonProperty("longs") @NonNull Map<String, Long> longs,
|
||||
@JsonProperty("longArrays") @NonNull Map<String, long[]> longArrays,
|
||||
@JsonProperty("floats") @NonNull Map<String, Float> floats,
|
||||
@JsonProperty("floatArrays") @NonNull Map<String, float[]> floatArrays,
|
||||
@JsonProperty("doubles") @NonNull Map<String, Double> doubles,
|
||||
@JsonProperty("doubleArrays") @NonNull Map<String, double[]> doubleArrays,
|
||||
@JsonProperty("booleans") @NonNull Map<String, Boolean> booleans,
|
||||
@JsonProperty("booleanArrays") @NonNull Map<String, boolean[]> 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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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 = "";
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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<Long> 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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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<AttachmentCompressionJob> {
|
||||
@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),
|
||||
|
||||
@@ -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<AttachmentCopyJob> {
|
||||
@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);
|
||||
|
||||
@@ -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<AttachmentDownloadJob> {
|
||||
@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)),
|
||||
|
||||
@@ -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<AttachmentMarkUploadedJob> {
|
||||
@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)));
|
||||
|
||||
@@ -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<AttachmentUploadJob> {
|
||||
@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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<AutomaticSessionResetJob> {
|
||||
@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),
|
||||
|
||||
@@ -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<AvatarGroupsV1DownloadJob> {
|
||||
@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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<AvatarGroupsV2DownloadJob> {
|
||||
@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));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<BoostReceiptRequestResponseJob> {
|
||||
@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));
|
||||
|
||||
@@ -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<CheckServiceReachabilityJob> {
|
||||
override fun create(parameters: Parameters, data: Data): CheckServiceReachabilityJob {
|
||||
override fun create(parameters: Parameters, serializedData: ByteArray?): CheckServiceReachabilityJob {
|
||||
return CheckServiceReachabilityJob(parameters)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<CleanPreKeysJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<ClearFallbackKbsEnclaveJob> {
|
||||
@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));
|
||||
|
||||
@@ -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<ConversationShortcutUpdateJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<CreateReleaseChannelJob> {
|
||||
override fun create(parameters: Parameters, data: Data): CreateReleaseChannelJob {
|
||||
override fun create(parameters: Parameters, serializedData: ByteArray?): CreateReleaseChannelJob {
|
||||
return CreateReleaseChannelJob(parameters)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<DirectoryRefreshJob> {
|
||||
|
||||
@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);
|
||||
|
||||
@@ -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<DonationReceiptRedemptionJob> {
|
||||
@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);
|
||||
|
||||
@@ -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<DownloadLatestEmojiDataJob> {
|
||||
@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)) {
|
||||
|
||||
@@ -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<EmojiSearchIndexDownloadJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<FailingJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<FcmRefreshJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<FetchRemoteMegaphoneImageJob> {
|
||||
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))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<FontDownloaderJob> {
|
||||
override fun create(parameters: Parameters, data: Data): FontDownloaderJob {
|
||||
override fun create(parameters: Parameters, serializedData: ByteArray?): FontDownloaderJob {
|
||||
return FontDownloaderJob(parameters)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<ForceUpdateGroupV2Job> {
|
||||
|
||||
@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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<ForceUpdateGroupV2WorkerJob> {
|
||||
|
||||
@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());
|
||||
}
|
||||
|
||||
@@ -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<GenerateAudioWaveFormJob> {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<GiftSendJob> {
|
||||
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)
|
||||
|
||||
|
||||
@@ -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<GroupCallPeekJob> {
|
||||
|
||||
@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)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<GroupCallPeekWorkerJob> {
|
||||
|
||||
@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)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<RecipientId> recipients = RecipientId.fromSerializedList(data.getString(KEY_RECIPIENTS));
|
||||
|
||||
@@ -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<GroupV1MigrationJob> {
|
||||
@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)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<GroupV2UpdateSelfProfileKeyJob> {
|
||||
|
||||
@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());
|
||||
}
|
||||
|
||||
@@ -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<IndividualSendJob> {
|
||||
@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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<KbsEnclaveMigrationWorkerJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<LeaveGroupV2Job> {
|
||||
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())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<LeaveGroupV2WorkerJob> {
|
||||
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())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<LocalBackupJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<LocalBackupJobApi29> {
|
||||
@Override
|
||||
public @NonNull
|
||||
LocalBackupJobApi29 create(@NonNull Parameters parameters, @NonNull Data data) {
|
||||
LocalBackupJobApi29 create(@NonNull Parameters parameters, @Nullable byte[] serializedData) {
|
||||
return new LocalBackupJobApi29(parameters);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MarkerJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MmsDownloadJob> {
|
||||
@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),
|
||||
|
||||
@@ -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<MmsReceiveJob> {
|
||||
@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);
|
||||
|
||||
@@ -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<MmsSendJob> {
|
||||
@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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MultiDeviceBlockedUpdateJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MultiDeviceConfigurationUpdateJob> {
|
||||
@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),
|
||||
|
||||
@@ -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<MultiDeviceContactSyncJob> {
|
||||
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))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MultiDeviceContactUpdateJob> {
|
||||
@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;
|
||||
|
||||
|
||||
@@ -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<MultiDeviceGroupUpdateJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MultiDeviceKeysUpdateJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MultiDeviceMessageRequestResponseJob> {
|
||||
@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));
|
||||
|
||||
|
||||
@@ -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<MultiDeviceOutgoingPaymentSyncJob> {
|
||||
|
||||
@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)));
|
||||
}
|
||||
|
||||
@@ -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<MultiDevicePniIdentityUpdateJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MultiDeviceProfileContentUpdateJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MultiDeviceProfileKeyUpdateJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MultiDeviceReadUpdateJob> {
|
||||
@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<SyncMessageId> ids = Stream.of(data.getStringArray(KEY_MESSAGE_IDS))
|
||||
.map(id -> {
|
||||
try {
|
||||
|
||||
@@ -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<MultiDeviceStickerPackOperationJob> {
|
||||
|
||||
@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),
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MultiDeviceStorageSyncRequestJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MultiDeviceStorySendSyncJob> {
|
||||
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),
|
||||
|
||||
@@ -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<MultiDeviceSubscriptionSyncRequestJob> {
|
||||
override fun create(parameters: Parameters, data: Data): MultiDeviceSubscriptionSyncRequestJob {
|
||||
override fun create(parameters: Parameters, serializedData: ByteArray?): MultiDeviceSubscriptionSyncRequestJob {
|
||||
return MultiDeviceSubscriptionSyncRequestJob(parameters)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MultiDeviceVerifiedUpdateJob> {
|
||||
@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));
|
||||
|
||||
@@ -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<MultiDeviceViewOnceOpenJob> {
|
||||
@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) {
|
||||
|
||||
@@ -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<MultiDeviceViewedUpdateJob> {
|
||||
@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<SyncMessageId> ids = Stream.of(data.getStringArray(KEY_MESSAGE_IDS))
|
||||
.map(id -> {
|
||||
try {
|
||||
|
||||
@@ -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<NewRegistrationUsernameSyncJob> {
|
||||
override fun create(parameters: Parameters, data: Data): NewRegistrationUsernameSyncJob {
|
||||
override fun create(parameters: Parameters, serializedData: ByteArray?): NewRegistrationUsernameSyncJob {
|
||||
return NewRegistrationUsernameSyncJob(parameters)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<NullMessageSendJob> {
|
||||
|
||||
@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);
|
||||
}
|
||||
|
||||
@@ -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<OptimizeMessageSearchIndexJob> {
|
||||
override fun create(parameters: Parameters, data: Data) = OptimizeMessageSearchIndexJob(parameters)
|
||||
override fun create(parameters: Parameters, serializedData: ByteArray?) = OptimizeMessageSearchIndexJob(parameters)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<PaymentLedgerUpdateJob> {
|
||||
@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);
|
||||
|
||||
@@ -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<PaymentNotificationSendJob> {
|
||||
@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)));
|
||||
|
||||
@@ -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<PaymentNotificationSendJobV2?> {
|
||||
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)),
|
||||
|
||||
@@ -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<PaymentSendJob> {
|
||||
@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),
|
||||
|
||||
@@ -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<PaymentTransactionCheckJob> {
|
||||
|
||||
@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)));
|
||||
}
|
||||
|
||||
@@ -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<PnpInitializeDevicesJob?> {
|
||||
override fun create(parameters: Parameters, data: Data): PnpInitializeDevicesJob {
|
||||
override fun create(parameters: Parameters, serializedData: ByteArray?): PnpInitializeDevicesJob {
|
||||
return PnpInitializeDevicesJob(parameters)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<PreKeysSyncJob> {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<ProfileKeySendJob> {
|
||||
|
||||
@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<RecipientId> recipients = RecipientId.fromSerializedList(data.getString(KEY_RECIPIENTS));
|
||||
|
||||
|
||||
@@ -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<ProfileUploadJob> {
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<PushDecryptDrainedJob> {
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<PushDecryptMessageJob> {
|
||||
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)),
|
||||
|
||||
@@ -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<PushDistributionListSendJob> {
|
||||
@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<RecipientId> recipientIds = new HashSet<>(RecipientId.fromSerializedList(data.getStringOrDefault(KEY_FILTERED_RECIPIENT_IDS, "")));
|
||||
return new PushDistributionListSendJob(parameters, data.getLong(KEY_MESSAGE_ID), recipientIds);
|
||||
}
|
||||
|
||||
@@ -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<PushGroupSendJob> {
|
||||
@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<RecipientId> filters = raw != null ? new HashSet<>(RecipientId.fromSerializedList(raw)) : Collections.emptySet();
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user