mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 17:29:32 +01:00
Add support for blocked chat events.
This commit is contained in:
committed by
Greyson Parrelli
parent
8101fcbd8d
commit
f61109391a
@@ -420,6 +420,8 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
|
||||
$TYPE & ${MessageTypes.KEY_EXCHANGE_IDENTITY_VERIFIED_BIT} = 0 AND
|
||||
$TYPE & ${MessageTypes.SPECIAL_TYPES_MASK} != ${MessageTypes.SPECIAL_TYPE_REPORTED_SPAM} AND
|
||||
$TYPE & ${MessageTypes.SPECIAL_TYPES_MASK} != ${MessageTypes.SPECIAL_TYPE_MESSAGE_REQUEST_ACCEPTED} AND
|
||||
$TYPE & ${MessageTypes.SPECIAL_TYPES_MASK} != ${MessageTypes.SPECIAL_TYPE_BLOCKED} AND
|
||||
$TYPE & ${MessageTypes.SPECIAL_TYPES_MASK} != ${MessageTypes.SPECIAL_TYPE_UNBLOCKED} AND
|
||||
$TYPE NOT IN (
|
||||
${MessageTypes.PROFILE_CHANGE_TYPE},
|
||||
${MessageTypes.GV1_MIGRATION_TYPE},
|
||||
@@ -1911,7 +1913,9 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
|
||||
$TYPE != ${MessageTypes.RELEASE_CHANNEL_DONATION_REQUEST_TYPE} AND
|
||||
$TYPE & ${MessageTypes.GROUP_V2_LEAVE_BITS} != ${MessageTypes.GROUP_V2_LEAVE_BITS} AND
|
||||
$TYPE & ${MessageTypes.SPECIAL_TYPES_MASK} != ${MessageTypes.SPECIAL_TYPE_REPORTED_SPAM} AND
|
||||
$TYPE & ${MessageTypes.SPECIAL_TYPES_MASK} != ${MessageTypes.SPECIAL_TYPE_MESSAGE_REQUEST_ACCEPTED}
|
||||
$TYPE & ${MessageTypes.SPECIAL_TYPES_MASK} != ${MessageTypes.SPECIAL_TYPE_MESSAGE_REQUEST_ACCEPTED} AND
|
||||
$TYPE & ${MessageTypes.SPECIAL_TYPES_MASK} != ${MessageTypes.SPECIAL_TYPE_BLOCKED} AND
|
||||
$TYPE & ${MessageTypes.SPECIAL_TYPES_MASK} != ${MessageTypes.SPECIAL_TYPE_UNBLOCKED}
|
||||
)
|
||||
"""
|
||||
|
||||
@@ -2556,6 +2560,18 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
|
||||
sentTimeMillis = timestamp,
|
||||
expiresIn = expiresIn
|
||||
)
|
||||
} else if (MessageTypes.isBlocked(outboxType)) {
|
||||
OutgoingMessage.blockedMessage(
|
||||
threadRecipient = threadRecipient,
|
||||
sentTimeMillis = timestamp,
|
||||
expiresIn = expiresIn
|
||||
)
|
||||
} else if (MessageTypes.isUnblocked(outboxType)) {
|
||||
OutgoingMessage.unblockedMessage(
|
||||
threadRecipient = threadRecipient,
|
||||
sentTimeMillis = timestamp,
|
||||
expiresIn = expiresIn
|
||||
)
|
||||
} else {
|
||||
val giftBadge: GiftBadge? = if (body != null && MessageTypes.isGiftBadge(outboxType)) {
|
||||
GiftBadge.ADAPTER.decode(Base64.decode(body))
|
||||
@@ -2727,6 +2743,8 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
|
||||
!MessageTypes.isReportedSpam(type) &&
|
||||
!MessageTypes.isMessageRequestAccepted(type) &&
|
||||
!MessageTypes.isExpirationTimerUpdate(type) &&
|
||||
!MessageTypes.isBlocked(type) &&
|
||||
!MessageTypes.isUnblocked(type) &&
|
||||
!retrieved.storyType.isStory &&
|
||||
isNotStoryGroupReply &&
|
||||
!silent
|
||||
@@ -2860,8 +2878,8 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
|
||||
fun insertMessageOutbox(
|
||||
message: OutgoingMessage,
|
||||
threadId: Long,
|
||||
forceSms: Boolean,
|
||||
insertListener: InsertListener?
|
||||
forceSms: Boolean = false,
|
||||
insertListener: InsertListener? = null
|
||||
): Long {
|
||||
return insertMessageOutbox(
|
||||
message = message,
|
||||
@@ -2904,7 +2922,16 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
|
||||
}
|
||||
|
||||
if (message.isGroup) {
|
||||
if (message.isV2Group) {
|
||||
if (message.isBlocked) {
|
||||
type = type or MessageTypes.GROUP_V2_BIT or MessageTypes.SPECIAL_TYPE_BLOCKED
|
||||
hasSpecialType = true
|
||||
} else if (message.isUnblocked) {
|
||||
if (hasSpecialType) {
|
||||
throw MmsException("Cannot insert message with multiple special types.")
|
||||
}
|
||||
type = type or MessageTypes.GROUP_V2_BIT or MessageTypes.SPECIAL_TYPE_UNBLOCKED
|
||||
hasSpecialType = true
|
||||
} else if (message.isV2Group) {
|
||||
type = type or (MessageTypes.GROUP_V2_BIT or MessageTypes.GROUP_UPDATE_BIT)
|
||||
|
||||
if (message.isJustAGroupLeave) {
|
||||
@@ -2926,6 +2953,9 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
|
||||
}
|
||||
|
||||
if (message.isStoryReaction) {
|
||||
if (hasSpecialType) {
|
||||
throw MmsException("Cannot insert message with multiple special types.")
|
||||
}
|
||||
type = type or MessageTypes.SPECIAL_TYPE_STORY_REACTION
|
||||
hasSpecialType = true
|
||||
}
|
||||
@@ -2978,6 +3008,22 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
|
||||
hasSpecialType = true
|
||||
}
|
||||
|
||||
if (message.isBlocked && !message.isGroup) {
|
||||
if (hasSpecialType) {
|
||||
throw MmsException("Cannot insert message with multiple special types.")
|
||||
}
|
||||
type = type or MessageTypes.SPECIAL_TYPE_BLOCKED
|
||||
hasSpecialType = true
|
||||
}
|
||||
|
||||
if (message.isUnblocked && !message.isGroup) {
|
||||
if (hasSpecialType) {
|
||||
throw MmsException("Cannot insert message with multiple special types.")
|
||||
}
|
||||
type = type or MessageTypes.SPECIAL_TYPE_UNBLOCKED
|
||||
hasSpecialType = true
|
||||
}
|
||||
|
||||
val earlyDeliveryReceipts: Map<RecipientId, Receipt> = earlyDeliveryReceiptCache.remove(message.sentTimeMillis)
|
||||
|
||||
if (earlyDeliveryReceipts.isNotEmpty()) {
|
||||
|
||||
@@ -248,4 +248,12 @@ public abstract class DisplayRecord {
|
||||
public boolean isMessageRequestAccepted() {
|
||||
return MessageTypes.isMessageRequestAccepted(type);
|
||||
}
|
||||
|
||||
public boolean isBlocked() {
|
||||
return MessageTypes.isBlocked(type);
|
||||
}
|
||||
|
||||
public boolean isUnblocked() {
|
||||
return MessageTypes.isUnblocked(type);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -283,6 +283,10 @@ public abstract class MessageRecord extends DisplayRecord {
|
||||
return staticUpdateDescription(context.getString(R.string.MessageRecord_reported_as_spam), R.drawable.symbol_spam_16);
|
||||
} else if (isMessageRequestAccepted()) {
|
||||
return staticUpdateDescription(context.getString(R.string.MessageRecord_you_accepted_the_message_request), R.drawable.symbol_thread_16);
|
||||
} else if (isBlocked()) {
|
||||
return staticUpdateDescription(context.getString(isGroupV2() ? R.string.MessageRecord_you_blocked_this_group : R.string.MessageRecord_you_blocked_this_person), R.drawable.symbol_block_16);
|
||||
} else if (isUnblocked()) {
|
||||
return staticUpdateDescription(context.getString(isGroupV2() ? R.string.MessageRecord_you_unblocked_this_group : R.string.MessageRecord_you_unblocked_this_person) , R.drawable.symbol_thread_16);
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -688,7 +692,8 @@ public abstract class MessageRecord extends DisplayRecord {
|
||||
isEndSession() || isIdentityUpdate() || isIdentityVerified() || isIdentityDefault() ||
|
||||
isProfileChange() || isGroupV1MigrationEvent() || isChatSessionRefresh() || isBadDecryptType() ||
|
||||
isChangeNumber() || isReleaseChannelDonationRequest() || isThreadMergeEventType() || isSmsExportType() || isSessionSwitchoverEventType() ||
|
||||
isPaymentsRequestToActivate() || isPaymentsActivated() || isReportedSpam() || isMessageRequestAccepted();
|
||||
isPaymentsRequestToActivate() || isPaymentsActivated() || isReportedSpam() || isMessageRequestAccepted() ||
|
||||
isBlocked() || isUnblocked();
|
||||
}
|
||||
|
||||
public boolean isMediaPending() {
|
||||
|
||||
@@ -317,6 +317,8 @@ public class MmsMessageRecord extends MessageRecord {
|
||||
(type & MessageTypes.KEY_EXCHANGE_MASK) == 0 &&
|
||||
!isReportedSpam() &&
|
||||
!isMessageRequestAccepted() &&
|
||||
!isBlocked() &&
|
||||
!isUnblocked() &&
|
||||
storyType == StoryType.NONE &&
|
||||
getDateSent() > 0 &&
|
||||
(parentStoryId == null || parentStoryId.isDirectReply());
|
||||
|
||||
Reference in New Issue
Block a user