Do not process messages while change number is happening.
This commit is contained in:
parent
bbdf54097e
commit
99bd8e82ca
6 changed files with 67 additions and 4 deletions
|
@ -0,0 +1,27 @@
|
||||||
|
package org.thoughtcrime.securesms.jobmanager.impl
|
||||||
|
|
||||||
|
import android.app.job.JobInfo
|
||||||
|
import org.thoughtcrime.securesms.jobmanager.Constraint
|
||||||
|
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constraint that, when added, means that a job cannot be performed while a change number operation is in progress.
|
||||||
|
*/
|
||||||
|
object ChangeNumberConstraint : Constraint {
|
||||||
|
|
||||||
|
const val KEY = "ChangeNumberConstraint"
|
||||||
|
|
||||||
|
override fun isMet(): Boolean {
|
||||||
|
return !SignalStore.misc().isChangeNumberLocked
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getFactoryKey(): String = KEY
|
||||||
|
|
||||||
|
override fun applyToJobInfo(jobInfoBuilder: JobInfo.Builder) = Unit
|
||||||
|
|
||||||
|
class Factory : Constraint.Factory<ChangeNumberConstraint> {
|
||||||
|
override fun create(): ChangeNumberConstraint {
|
||||||
|
return ChangeNumberConstraint
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package org.thoughtcrime.securesms.jobmanager.impl
|
||||||
|
|
||||||
|
import org.thoughtcrime.securesms.jobmanager.ConstraintObserver
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An observer for the [ChangeNumberConstraint]. This class expects to be told when a change happens,
|
||||||
|
* since the points at which it happens are triggered by application code.
|
||||||
|
*/
|
||||||
|
object ChangeNumberConstraintObserver : ConstraintObserver {
|
||||||
|
|
||||||
|
private const val REASON = "ChangeNumberConstraint"
|
||||||
|
|
||||||
|
private var notifier: ConstraintObserver.Notifier? = null
|
||||||
|
|
||||||
|
override fun register(notifier: ConstraintObserver.Notifier) {
|
||||||
|
this.notifier = notifier
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Let the observer know that the change number state has changed.
|
||||||
|
*/
|
||||||
|
fun onChange() {
|
||||||
|
notifier?.onConstraintMet(REASON)
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,6 +11,7 @@ import org.thoughtcrime.securesms.jobmanager.Job;
|
||||||
import org.thoughtcrime.securesms.jobmanager.JobMigration;
|
import org.thoughtcrime.securesms.jobmanager.JobMigration;
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.AutoDownloadEmojiConstraint;
|
import org.thoughtcrime.securesms.jobmanager.impl.AutoDownloadEmojiConstraint;
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.CellServiceConstraintObserver;
|
import org.thoughtcrime.securesms.jobmanager.impl.CellServiceConstraintObserver;
|
||||||
|
import org.thoughtcrime.securesms.jobmanager.impl.ChangeNumberConstraint;
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.ChargingConstraint;
|
import org.thoughtcrime.securesms.jobmanager.impl.ChargingConstraint;
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.ChargingConstraintObserver;
|
import org.thoughtcrime.securesms.jobmanager.impl.ChargingConstraintObserver;
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint;
|
import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint;
|
||||||
|
@ -277,13 +278,14 @@ public final class JobManagerFactories {
|
||||||
public static Map<String, Constraint.Factory> getConstraintFactories(@NonNull Application application) {
|
public static Map<String, Constraint.Factory> getConstraintFactories(@NonNull Application application) {
|
||||||
return new HashMap<String, Constraint.Factory>() {{
|
return new HashMap<String, Constraint.Factory>() {{
|
||||||
put(AutoDownloadEmojiConstraint.KEY, new AutoDownloadEmojiConstraint.Factory(application));
|
put(AutoDownloadEmojiConstraint.KEY, new AutoDownloadEmojiConstraint.Factory(application));
|
||||||
|
put(ChangeNumberConstraint.KEY, new ChangeNumberConstraint.Factory());
|
||||||
put(ChargingConstraint.KEY, new ChargingConstraint.Factory());
|
put(ChargingConstraint.KEY, new ChargingConstraint.Factory());
|
||||||
|
put(DecryptionsDrainedConstraint.KEY, new DecryptionsDrainedConstraint.Factory());
|
||||||
put(NetworkConstraint.KEY, new NetworkConstraint.Factory(application));
|
put(NetworkConstraint.KEY, new NetworkConstraint.Factory(application));
|
||||||
put(NetworkOrCellServiceConstraint.KEY, new NetworkOrCellServiceConstraint.Factory(application));
|
put(NetworkOrCellServiceConstraint.KEY, new NetworkOrCellServiceConstraint.Factory(application));
|
||||||
put(NetworkOrCellServiceConstraint.LEGACY_KEY, new NetworkOrCellServiceConstraint.Factory(application));
|
put(NetworkOrCellServiceConstraint.LEGACY_KEY, new NetworkOrCellServiceConstraint.Factory(application));
|
||||||
put(SqlCipherMigrationConstraint.KEY, new SqlCipherMigrationConstraint.Factory(application));
|
|
||||||
put(DecryptionsDrainedConstraint.KEY, new DecryptionsDrainedConstraint.Factory());
|
|
||||||
put(NotInCallConstraint.KEY, new NotInCallConstraint.Factory());
|
put(NotInCallConstraint.KEY, new NotInCallConstraint.Factory());
|
||||||
|
put(SqlCipherMigrationConstraint.KEY, new SqlCipherMigrationConstraint.Factory(application));
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ import org.thoughtcrime.securesms.groups.GroupChangeBusyException;
|
||||||
import org.thoughtcrime.securesms.groups.GroupId;
|
import org.thoughtcrime.securesms.groups.GroupId;
|
||||||
import org.thoughtcrime.securesms.jobmanager.JsonJobData;
|
import org.thoughtcrime.securesms.jobmanager.JsonJobData;
|
||||||
import org.thoughtcrime.securesms.jobmanager.Job;
|
import org.thoughtcrime.securesms.jobmanager.Job;
|
||||||
|
import org.thoughtcrime.securesms.jobmanager.impl.ChangeNumberConstraint;
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
|
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
|
||||||
import org.thoughtcrime.securesms.messages.MessageContentProcessor;
|
import org.thoughtcrime.securesms.messages.MessageContentProcessor;
|
||||||
import org.thoughtcrime.securesms.messages.MessageContentProcessor.ExceptionMetadata;
|
import org.thoughtcrime.securesms.messages.MessageContentProcessor.ExceptionMetadata;
|
||||||
|
@ -91,7 +92,8 @@ public final class PushProcessMessageJob extends BaseJob {
|
||||||
Context context = ApplicationDependencies.getApplication();
|
Context context = ApplicationDependencies.getApplication();
|
||||||
String queueName = QUEUE_PREFIX;
|
String queueName = QUEUE_PREFIX;
|
||||||
Parameters.Builder builder = new Parameters.Builder()
|
Parameters.Builder builder = new Parameters.Builder()
|
||||||
.setMaxAttempts(Parameters.UNLIMITED);
|
.setMaxAttempts(Parameters.UNLIMITED)
|
||||||
|
.addConstraint(ChangeNumberConstraint.KEY);
|
||||||
|
|
||||||
if (content != null) {
|
if (content != null) {
|
||||||
SignalServiceGroupV2 signalServiceGroupContext = GroupUtil.getGroupContextIfPresent(content);
|
SignalServiceGroupV2 signalServiceGroupContext = GroupUtil.getGroupContextIfPresent(content);
|
||||||
|
|
|
@ -7,6 +7,7 @@ import org.signal.core.util.logging.Log
|
||||||
import org.thoughtcrime.securesms.database.SignalDatabase.Companion.groups
|
import org.thoughtcrime.securesms.database.SignalDatabase.Companion.groups
|
||||||
import org.thoughtcrime.securesms.groups.GroupChangeBusyException
|
import org.thoughtcrime.securesms.groups.GroupChangeBusyException
|
||||||
import org.thoughtcrime.securesms.jobmanager.Job
|
import org.thoughtcrime.securesms.jobmanager.Job
|
||||||
|
import org.thoughtcrime.securesms.jobmanager.impl.ChangeNumberConstraint
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
|
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
|
||||||
import org.thoughtcrime.securesms.messages.MessageContentProcessorV2
|
import org.thoughtcrime.securesms.messages.MessageContentProcessorV2
|
||||||
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.groupId
|
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.groupId
|
||||||
|
@ -112,7 +113,10 @@ class PushProcessMessageJobV2 private constructor(
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
private fun createParameters(content: Content, metadata: EnvelopeMetadata): Parameters {
|
private fun createParameters(content: Content, metadata: EnvelopeMetadata): Parameters {
|
||||||
val queueName: String
|
val queueName: String
|
||||||
val builder = Parameters.Builder().setMaxAttempts(Parameters.UNLIMITED)
|
val builder = Parameters.Builder()
|
||||||
|
.setMaxAttempts(Parameters.UNLIMITED)
|
||||||
|
.addConstraint(ChangeNumberConstraint.KEY)
|
||||||
|
|
||||||
val groupContext = GroupUtil.getGroupContextIfPresent(content)
|
val groupContext = GroupUtil.getGroupContextIfPresent(content)
|
||||||
val groupId = groupContext?.groupId
|
val groupId = groupContext?.groupId
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.database.model.databaseprotos.PendingChangeNumberMetadata;
|
import org.thoughtcrime.securesms.database.model.databaseprotos.PendingChangeNumberMetadata;
|
||||||
|
import org.thoughtcrime.securesms.jobmanager.impl.ChangeNumberConstraintObserver;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -110,10 +111,12 @@ public final class MiscellaneousValues extends SignalStoreValues {
|
||||||
|
|
||||||
public void lockChangeNumber() {
|
public void lockChangeNumber() {
|
||||||
putBoolean(CHANGE_NUMBER_LOCK, true);
|
putBoolean(CHANGE_NUMBER_LOCK, true);
|
||||||
|
ChangeNumberConstraintObserver.INSTANCE.onChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unlockChangeNumber() {
|
public void unlockChangeNumber() {
|
||||||
putBoolean(CHANGE_NUMBER_LOCK, false);
|
putBoolean(CHANGE_NUMBER_LOCK, false);
|
||||||
|
ChangeNumberConstraintObserver.INSTANCE.onChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable PendingChangeNumberMetadata getPendingChangeNumberMetadata() {
|
public @Nullable PendingChangeNumberMetadata getPendingChangeNumberMetadata() {
|
||||||
|
|
Loading…
Add table
Reference in a new issue