Add additional delete sync support.

This commit is contained in:
Cody Henthorne
2024-06-13 10:11:29 -04:00
committed by Greyson Parrelli
parent d22d18da47
commit c80ccd70ec
37 changed files with 183 additions and 333 deletions

View File

@@ -10,6 +10,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.database.model.MessageRecord
import org.thoughtcrime.securesms.jobs.MultiDeviceDeleteSendSyncJob
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.sms.MessageSender
import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask
@@ -45,13 +46,24 @@ object DeleteDialog {
if (forceRemoteDelete) {
builder.setPositiveButton(R.string.ConversationFragment_delete_for_everyone) { _, _ -> deleteForEveryone(messageRecords, emitter) }
} else {
builder.setPositiveButton(if (isNoteToSelfDelete) R.string.ConversationFragment_delete_on_this_device else R.string.ConversationFragment_delete_for_me) { _, _ ->
val deleteSyncEnabled = Recipient.self().deleteSyncCapability.isSupported
val positiveButton = if (isNoteToSelfDelete) {
if (deleteSyncEnabled) R.string.ConversationFragment_delete else R.string.ConversationFragment_delete_on_this_device
} else {
R.string.ConversationFragment_delete_for_me
}
builder.setPositiveButton(positiveButton) { _, _ ->
DeleteProgressDialogAsyncTask(context, messageRecords) {
emitter.onSuccess(Pair(true, it))
}.executeOnExecutor(SignalExecutors.BOUNDED)
}
if (MessageConstraintsUtil.isValidRemoteDeleteSend(messageRecords, System.currentTimeMillis()) && (!isNoteToSelfDelete || TextSecurePreferences.isMultiDevice(context))) {
val canDeleteForEveryone = MessageConstraintsUtil.isValidRemoteDeleteSend(messageRecords, System.currentTimeMillis()) && !isNoteToSelfDelete
val canDeleteForEveryoneInNoteToSelf = isNoteToSelfDelete && TextSecurePreferences.isMultiDevice(context) && !deleteSyncEnabled
if (canDeleteForEveryone || canDeleteForEveryoneInNoteToSelf) {
builder.setNeutralButton(if (isNoteToSelfDelete) R.string.ConversationFragment_delete_everywhere else R.string.ConversationFragment_delete_for_everyone) { _, _ -> handleDeleteForEveryone(context, messageRecords, emitter) }
}
}
@@ -109,7 +121,7 @@ object DeleteDialog {
}
}
if (RemoteConfig.deleteSyncEnabled) {
if (Recipient.self().deleteSyncCapability.isSupported) {
MultiDeviceDeleteSendSyncJob.enqueueMessageDeletes(messageRecords)
}

View File

@@ -98,7 +98,7 @@ public final class IdentityUtil {
} catch (MmsException e) {
throw new AssertionError(e);
}
SignalDatabase.threads().update(threadId, true);
SignalDatabase.threads().update(threadId, true, true);
}
}
}
@@ -129,7 +129,7 @@ public final class IdentityUtil {
} catch (MmsException e) {
throw new AssertionError();
}
SignalDatabase.threads().update(threadId, true);
SignalDatabase.threads().update(threadId, true, true);
}
}

View File

@@ -10,6 +10,8 @@ import org.signal.core.util.mebiBytes
import org.thoughtcrime.securesms.BuildConfig
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.groups.SelectionLimits
import org.thoughtcrime.securesms.jobs.RefreshAttributesJob
import org.thoughtcrime.securesms.jobs.RefreshOwnProfileJob
import org.thoughtcrime.securesms.jobs.RemoteConfigRefreshJob
import org.thoughtcrime.securesms.jobs.Svr3MirrorJob
import org.thoughtcrime.securesms.keyvalue.SignalStore
@@ -1070,12 +1072,13 @@ object RemoteConfig {
)
/** Whether or not to delete syncing is enabled. */
@JvmStatic
@get:JvmName("deleteSyncEnabled")
val deleteSyncEnabled: Boolean by remoteBoolean(
key = "android.deleteSyncSendReceive",
key = "android.deleteSyncEnabled",
defaultValue = false,
hotSwappable = true
hotSwappable = true,
onChangeListener = {
AppDependencies.jobManager.startChain(RefreshAttributesJob()).then(RefreshOwnProfileJob()).enqueue()
}
)
/** Which phase we're in for the SVR3 migration */