Show notification for group adds.

This commit is contained in:
Cody Henthorne
2024-06-10 14:49:40 -04:00
committed by Greyson Parrelli
parent c0d7145ada
commit 45a739ce92
4 changed files with 35 additions and 12 deletions

View File

@@ -2591,7 +2591,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
}
}
val silent = MessageTypes.isGroupUpdate(type) ||
val silent = (MessageTypes.isGroupUpdate(type) && !retrieved.isGroupAdd) ||
retrieved.type == MessageType.IDENTITY_DEFAULT ||
retrieved.type == MessageType.IDENTITY_VERIFIED ||
retrieved.type == MessageType.IDENTITY_UPDATE

View File

@@ -16,7 +16,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroup
import org.signal.storageservice.protos.groups.local.DecryptedGroupChange
import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.database.model.GroupRecord
import org.thoughtcrime.securesms.database.model.GroupsV2UpdateMessageConverter.translateDecryptedChange
import org.thoughtcrime.securesms.database.model.GroupsV2UpdateMessageConverter
import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context
import org.thoughtcrime.securesms.database.model.databaseprotos.GV2UpdateDescription
import org.thoughtcrime.securesms.dependencies.AppDependencies
@@ -632,11 +632,12 @@ class GroupsV2StateProcessor private constructor(
fun storeMessage(decryptedGroupV2Context: DecryptedGroupV2Context, timestamp: Long, serverGuid: String?) {
val editor: Optional<ServiceId> = getEditor(decryptedGroupV2Context)
val serviceIds = SignalStore.account().getServiceIds()
val outgoing = editor.isEmpty || aci == editor.get()
val updateDescription = GV2UpdateDescription(
gv2ChangeDescription = decryptedGroupV2Context,
groupChangeUpdate = translateDecryptedChange(SignalStore.account().getServiceIds(), decryptedGroupV2Context)
groupChangeUpdate = GroupsV2UpdateMessageConverter.translateDecryptedChange(serviceIds, decryptedGroupV2Context)
)
if (outgoing) {
@@ -654,12 +655,22 @@ class GroupsV2StateProcessor private constructor(
}
} else {
try {
val sender = RecipientId.from(editor.get())
val groupMessage = IncomingMessage.groupUpdate(sender, timestamp, groupId, decryptedGroupV2Context, serverGuid)
val isGroupAdd = updateDescription
.groupChangeUpdate!!
.updates
.asSequence()
.mapNotNull { it.groupMemberAddedUpdate }
.any { serviceIds.matches(it.newMemberAci) }
val groupMessage = IncomingMessage.groupUpdate(RecipientId.from(editor.get()), timestamp, groupId, updateDescription, isGroupAdd, serverGuid)
val insertResult = SignalDatabase.messages.insertMessageInbox(groupMessage)
if (insertResult.isPresent) {
SignalDatabase.threads.update(insertResult.get().threadId, unarchive = false, allowDeletion = false)
if (isGroupAdd) {
AppDependencies.messageNotifier.updateNotification(AppDependencies.application)
}
} else {
Log.w(TAG, "Could not insert update message")
}

View File

@@ -7,7 +7,6 @@ import org.thoughtcrime.securesms.database.model.Mention
import org.thoughtcrime.securesms.database.model.ParentStoryId
import org.thoughtcrime.securesms.database.model.StoryType
import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList
import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context
import org.thoughtcrime.securesms.database.model.databaseprotos.GV2UpdateDescription
import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge
import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras
@@ -39,7 +38,8 @@ class IncomingMessage(
linkPreviews: List<LinkPreview> = emptyList(),
mentions: List<Mention> = emptyList(),
val giftBadge: GiftBadge? = null,
val messageExtras: MessageExtras? = null
val messageExtras: MessageExtras? = null,
val isGroupAdd: Boolean = false
) {
val attachments: List<Attachment> = ArrayList(attachments)
@@ -97,18 +97,21 @@ class IncomingMessage(
}
@JvmStatic
fun groupUpdate(from: RecipientId, timestamp: Long, groupId: GroupId, groupContext: DecryptedGroupV2Context, serverGuid: String?): IncomingMessage {
val messageGroupContext = MessageGroupContext(groupContext)
fun groupUpdate(from: RecipientId, timestamp: Long, groupId: GroupId, update: GV2UpdateDescription, isGroupAdd: Boolean, serverGuid: String?): IncomingMessage {
val messageExtras = MessageExtras(gv2UpdateDescription = update)
val groupContext = MessageGroupContext(update.gv2ChangeDescription!!)
return IncomingMessage(
from = from,
sentTimeMillis = timestamp,
receivedTimeMillis = timestamp,
serverTimeMillis = timestamp,
serverGuid = serverGuid,
groupId = groupId,
groupContext = messageGroupContext,
groupContext = groupContext,
type = MessageType.GROUP_UPDATE,
messageExtras = MessageExtras(gv2UpdateDescription = GV2UpdateDescription(gv2ChangeDescription = groupContext, groupChangeUpdate = null))
messageExtras = messageExtras,
isGroupAdd = isGroupAdd
)
}
}