Add support for blocked chat events.

This commit is contained in:
Michelle Tang
2025-03-12 12:18:04 -04:00
committed by Greyson Parrelli
parent 8101fcbd8d
commit f61109391a
11 changed files with 177 additions and 28 deletions

View File

@@ -24,10 +24,10 @@ import org.thoughtcrime.securesms.jobs.MultiDeviceBlockedUpdateJob;
import org.thoughtcrime.securesms.jobs.RefreshOwnProfileJob;
import org.thoughtcrime.securesms.jobs.RotateProfileKeyJob;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.mms.MmsException;
import org.thoughtcrime.securesms.mms.OutgoingMessage;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.storage.StorageSyncHelper;
import org.thoughtcrime.securesms.util.ExpirationTimerUtil;
import org.whispersystems.signalservice.api.push.ServiceId;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
import org.whispersystems.signalservice.api.push.exceptions.NotFoundException;
@@ -36,6 +36,7 @@ import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
public class RecipientUtil {
@@ -172,6 +173,7 @@ public class RecipientUtil {
}
SignalDatabase.recipients().setBlocked(recipient.getId(), true);
insertBlockedUpdate(recipient, SignalDatabase.threads().getOrCreateThreadIdFor(recipient));
if (recipient.isSystemContact() || recipient.isProfileSharing() || isProfileSharedViaGroup(recipient)) {
SignalDatabase.recipients().setProfileSharing(recipient.getId(), false);
@@ -194,10 +196,37 @@ public class RecipientUtil {
SignalDatabase.recipients().setBlocked(recipient.getId(), false);
SignalDatabase.recipients().setProfileSharing(recipient.getId(), true);
insertUnblockedUpdate(recipient, SignalDatabase.threads().getOrCreateThreadIdFor(recipient));
AppDependencies.getJobManager().add(new MultiDeviceBlockedUpdateJob());
StorageSyncHelper.scheduleSyncForDataChange();
}
private static void insertBlockedUpdate(@NonNull Recipient recipient, long threadId) {
try {
SignalDatabase.messages().insertMessageOutbox(
OutgoingMessage.blockedMessage(recipient, System.currentTimeMillis(), TimeUnit.SECONDS.toMillis(recipient.getExpiresInSeconds())),
threadId,
false,
null
);
} catch (MmsException e) {
Log.w(TAG, "Unable to insert blocked message", e);
}
}
private static void insertUnblockedUpdate(@NonNull Recipient recipient, long threadId) {
try {
SignalDatabase.messages().insertMessageOutbox(
OutgoingMessage.unblockedMessage(recipient, System.currentTimeMillis(), TimeUnit.SECONDS.toMillis(recipient.getExpiresInSeconds())),
threadId,
false,
null
);
} catch (MmsException e) {
Log.w(TAG, "Unable to insert unblocked message", e);
}
}
@WorkerThread
public static Recipient.HiddenState getRecipientHiddenState(long threadId) {
if (threadId < 0) {