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.impl.AutoDownloadEmojiConstraint;
|
||||
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.ChargingConstraintObserver;
|
||||
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) {
|
||||
return new HashMap<String, Constraint.Factory>() {{
|
||||
put(AutoDownloadEmojiConstraint.KEY, new AutoDownloadEmojiConstraint.Factory(application));
|
||||
put(ChangeNumberConstraint.KEY, new ChangeNumberConstraint.Factory());
|
||||
put(ChargingConstraint.KEY, new ChargingConstraint.Factory());
|
||||
put(DecryptionsDrainedConstraint.KEY, new DecryptionsDrainedConstraint.Factory());
|
||||
put(NetworkConstraint.KEY, new NetworkConstraint.Factory(application));
|
||||
put(NetworkOrCellServiceConstraint.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(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.jobmanager.JsonJobData;
|
||||
import org.thoughtcrime.securesms.jobmanager.Job;
|
||||
import org.thoughtcrime.securesms.jobmanager.impl.ChangeNumberConstraint;
|
||||
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
|
||||
import org.thoughtcrime.securesms.messages.MessageContentProcessor;
|
||||
import org.thoughtcrime.securesms.messages.MessageContentProcessor.ExceptionMetadata;
|
||||
|
@ -91,7 +92,8 @@ public final class PushProcessMessageJob extends BaseJob {
|
|||
Context context = ApplicationDependencies.getApplication();
|
||||
String queueName = QUEUE_PREFIX;
|
||||
Parameters.Builder builder = new Parameters.Builder()
|
||||
.setMaxAttempts(Parameters.UNLIMITED);
|
||||
.setMaxAttempts(Parameters.UNLIMITED)
|
||||
.addConstraint(ChangeNumberConstraint.KEY);
|
||||
|
||||
if (content != null) {
|
||||
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.groups.GroupChangeBusyException
|
||||
import org.thoughtcrime.securesms.jobmanager.Job
|
||||
import org.thoughtcrime.securesms.jobmanager.impl.ChangeNumberConstraint
|
||||
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
|
||||
import org.thoughtcrime.securesms.messages.MessageContentProcessorV2
|
||||
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil.groupId
|
||||
|
@ -112,7 +113,10 @@ class PushProcessMessageJobV2 private constructor(
|
|||
@WorkerThread
|
||||
private fun createParameters(content: Content, metadata: EnvelopeMetadata): Parameters {
|
||||
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 groupId = groupContext?.groupId
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import androidx.annotation.NonNull;
|
|||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.PendingChangeNumberMetadata;
|
||||
import org.thoughtcrime.securesms.jobmanager.impl.ChangeNumberConstraintObserver;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
@ -110,10 +111,12 @@ public final class MiscellaneousValues extends SignalStoreValues {
|
|||
|
||||
public void lockChangeNumber() {
|
||||
putBoolean(CHANGE_NUMBER_LOCK, true);
|
||||
ChangeNumberConstraintObserver.INSTANCE.onChange();
|
||||
}
|
||||
|
||||
public void unlockChangeNumber() {
|
||||
putBoolean(CHANGE_NUMBER_LOCK, false);
|
||||
ChangeNumberConstraintObserver.INSTANCE.onChange();
|
||||
}
|
||||
|
||||
public @Nullable PendingChangeNumberMetadata getPendingChangeNumberMetadata() {
|
||||
|
|
Loading…
Add table
Reference in a new issue