mirror of
https://github.com/oxen-io/session-android.git
synced 2023-12-14 02:53:01 +01:00
42f1baaf61
We have to make some changes, and it's gotten to the point where maintaining it as a separate library is more hassle than it's worth, especially with Google releasing WorkManager as the preferred job scheduling library.
93 lines
3.1 KiB
Java
93 lines
3.1 KiB
Java
package org.thoughtcrime.securesms.jobs;
|
|
|
|
import android.content.Context;
|
|
import android.util.Log;
|
|
|
|
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
|
import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId;
|
|
import org.thoughtcrime.securesms.dependencies.InjectableType;
|
|
import org.thoughtcrime.securesms.jobmanager.JobParameters;
|
|
import org.thoughtcrime.securesms.jobmanager.requirements.NetworkRequirement;
|
|
import org.thoughtcrime.securesms.jobs.requirements.MasterSecretRequirement;
|
|
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
|
import org.whispersystems.signalservice.api.SignalServiceMessageSender;
|
|
import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
|
|
import org.whispersystems.signalservice.api.messages.multidevice.ReadMessage;
|
|
import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage;
|
|
import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException;
|
|
|
|
import java.io.IOException;
|
|
import java.io.Serializable;
|
|
import java.util.LinkedList;
|
|
import java.util.List;
|
|
|
|
import javax.inject.Inject;
|
|
|
|
public class MultiDeviceReadUpdateJob extends MasterSecretJob implements InjectableType {
|
|
|
|
private static final long serialVersionUID = 1L;
|
|
private static final String TAG = MultiDeviceReadUpdateJob.class.getSimpleName();
|
|
|
|
private final List<SerializableSyncMessageId> messageIds;
|
|
|
|
@Inject transient SignalServiceMessageSender messageSender;
|
|
|
|
public MultiDeviceReadUpdateJob(Context context, List<SyncMessageId> messageIds) {
|
|
super(context, JobParameters.newBuilder()
|
|
.withRequirement(new NetworkRequirement(context))
|
|
.withRequirement(new MasterSecretRequirement(context))
|
|
.withPersistence()
|
|
.create());
|
|
|
|
this.messageIds = new LinkedList<>();
|
|
|
|
for (SyncMessageId messageId : messageIds) {
|
|
this.messageIds.add(new SerializableSyncMessageId(messageId.getAddress().toPhoneString(), messageId.getTimetamp()));
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public void onRun(MasterSecret masterSecret) throws IOException, UntrustedIdentityException {
|
|
if (!TextSecurePreferences.isMultiDevice(context)) {
|
|
Log.w(TAG, "Not multi device...");
|
|
return;
|
|
}
|
|
|
|
List<ReadMessage> readMessages = new LinkedList<>();
|
|
|
|
for (SerializableSyncMessageId messageId : messageIds) {
|
|
readMessages.add(new ReadMessage(messageId.sender, messageId.timestamp));
|
|
}
|
|
|
|
messageSender.sendMessage(SignalServiceSyncMessage.forRead(readMessages));
|
|
}
|
|
|
|
@Override
|
|
public boolean onShouldRetryThrowable(Exception exception) {
|
|
return exception instanceof PushNetworkException;
|
|
}
|
|
|
|
@Override
|
|
public void onAdded() {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onCanceled() {
|
|
|
|
}
|
|
|
|
private static class SerializableSyncMessageId implements Serializable {
|
|
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
private final String sender;
|
|
private final long timestamp;
|
|
|
|
private SerializableSyncMessageId(String sender, long timestamp) {
|
|
this.sender = sender;
|
|
this.timestamp = timestamp;
|
|
}
|
|
}
|
|
}
|