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.
66 lines
2.8 KiB
Java
66 lines
2.8 KiB
Java
package org.thoughtcrime.securesms.jobs;
|
|
|
|
import android.content.Context;
|
|
import android.support.annotation.NonNull;
|
|
import android.util.Log;
|
|
|
|
import org.thoughtcrime.securesms.ApplicationContext;
|
|
import org.thoughtcrime.securesms.database.Address;
|
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
|
import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId;
|
|
import org.thoughtcrime.securesms.database.RecipientDatabase;
|
|
import org.thoughtcrime.securesms.jobmanager.JobManager;
|
|
import org.thoughtcrime.securesms.jobmanager.JobParameters;
|
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
|
import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
|
|
|
|
public abstract class PushReceivedJob extends ContextJob {
|
|
|
|
private static final String TAG = PushReceivedJob.class.getSimpleName();
|
|
|
|
protected PushReceivedJob(Context context, JobParameters parameters) {
|
|
super(context, parameters);
|
|
}
|
|
|
|
public void handle(SignalServiceEnvelope envelope) {
|
|
Address source = Address.fromExternal(context, envelope.getSource());
|
|
Recipient recipient = Recipient.from(context, source, false);
|
|
|
|
if (!isActiveNumber(recipient)) {
|
|
DatabaseFactory.getRecipientDatabase(context).setRegistered(recipient, RecipientDatabase.RegisteredState.REGISTERED);
|
|
ApplicationContext.getInstance(context).getJobManager().add(new DirectoryRefreshJob(context, recipient, false));
|
|
}
|
|
|
|
if (envelope.isReceipt()) {
|
|
handleReceipt(envelope);
|
|
} else if (envelope.isPreKeySignalMessage() || envelope.isSignalMessage()) {
|
|
handleMessage(envelope, source);
|
|
} else {
|
|
Log.w(TAG, "Received envelope of unknown type: " + envelope.getType());
|
|
}
|
|
}
|
|
|
|
private void handleMessage(SignalServiceEnvelope envelope, Address source) {
|
|
Recipient recipients = Recipient.from(context, source, false);
|
|
JobManager jobManager = ApplicationContext.getInstance(context).getJobManager();
|
|
|
|
if (!recipients.isBlocked()) {
|
|
long messageId = DatabaseFactory.getPushDatabase(context).insert(envelope);
|
|
jobManager.add(new PushDecryptJob(context, messageId));
|
|
} else {
|
|
Log.w(TAG, "*** Received blocked push message, ignoring...");
|
|
}
|
|
}
|
|
|
|
private void handleReceipt(SignalServiceEnvelope envelope) {
|
|
Log.w(TAG, String.format("Received receipt: (XXXXX, %d)", envelope.getTimestamp()));
|
|
DatabaseFactory.getMmsSmsDatabase(context).incrementDeliveryReceiptCount(new SyncMessageId(Address.fromExternal(context, envelope.getSource()),
|
|
envelope.getTimestamp()), System.currentTimeMillis());
|
|
}
|
|
|
|
private boolean isActiveNumber(@NonNull Recipient recipient) {
|
|
return recipient.resolve().getRegistered() == RecipientDatabase.RegisteredState.REGISTERED;
|
|
}
|
|
|
|
|
|
}
|