Use MediaPreviewValue.Private to check if media should be displayed in notifications (#6038)
* Use `MediaPreviewValue.Private` to check if images should be displayed in notifications Also added `NotificationData.roomJoinRule` so we can use it to check if the room is public or not * Add logging message for cases when we should have an image uri it turns out we don't
This commit is contained in:
committed by
GitHub
parent
87619e50e8
commit
deb340daba
@@ -14,6 +14,7 @@ import io.element.android.libraries.matrix.api.core.SessionId
|
||||
import io.element.android.libraries.matrix.api.core.ThreadId
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.room.RoomMembershipState
|
||||
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageType
|
||||
|
||||
data class NotificationData(
|
||||
@@ -36,6 +37,7 @@ data class NotificationData(
|
||||
val timestamp: Long,
|
||||
val content: NotificationContent,
|
||||
val hasMention: Boolean,
|
||||
val roomJoinRule: JoinRule?,
|
||||
) {
|
||||
fun getDisambiguatedDisplayName(userId: UserId): String = when {
|
||||
senderDisplayName.isNullOrBlank() -> userId.value
|
||||
|
||||
@@ -18,6 +18,7 @@ import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.notification.NotificationContent
|
||||
import io.element.android.libraries.matrix.api.notification.NotificationData
|
||||
import io.element.android.libraries.matrix.api.room.isDm
|
||||
import io.element.android.libraries.matrix.impl.room.join.map
|
||||
import io.element.android.services.toolbox.api.systemclock.SystemClock
|
||||
import org.matrix.rustcomponents.sdk.NotificationEvent
|
||||
import org.matrix.rustcomponents.sdk.NotificationItem
|
||||
@@ -59,6 +60,7 @@ class NotificationMapper(
|
||||
timestamp = timestamp,
|
||||
content = notificationContentMapper.map(item.event).getOrThrow(),
|
||||
hasMention = item.hasMention.orFalse(),
|
||||
roomJoinRule = item.roomInfo.joinRule?.map(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ package io.element.android.libraries.matrix.test.notification
|
||||
import io.element.android.libraries.matrix.api.core.ThreadId
|
||||
import io.element.android.libraries.matrix.api.notification.NotificationContent
|
||||
import io.element.android.libraries.matrix.api.notification.NotificationData
|
||||
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||
import io.element.android.libraries.matrix.test.AN_EVENT_ID
|
||||
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
||||
import io.element.android.libraries.matrix.test.A_ROOM_NAME
|
||||
@@ -27,7 +28,8 @@ fun aNotificationData(
|
||||
timestamp: Long = A_TIMESTAMP,
|
||||
senderDisplayName: String? = A_USER_NAME_2,
|
||||
senderIsNameAmbiguous: Boolean = false,
|
||||
roomDisplayName: String? = A_ROOM_NAME
|
||||
roomDisplayName: String? = A_ROOM_NAME,
|
||||
roomJoinRule: JoinRule? = null,
|
||||
): NotificationData {
|
||||
return NotificationData(
|
||||
sessionId = A_SESSION_ID,
|
||||
@@ -47,5 +49,6 @@ fun aNotificationData(
|
||||
timestamp = timestamp,
|
||||
content = content,
|
||||
hasMention = hasMention,
|
||||
roomJoinRule = roomJoinRule,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -31,11 +31,12 @@ import io.element.android.libraries.matrix.api.core.SessionId
|
||||
import io.element.android.libraries.matrix.api.core.ThreadId
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.exception.NotificationResolverException
|
||||
import io.element.android.libraries.matrix.api.media.MediaPreviewValue
|
||||
import io.element.android.libraries.matrix.api.media.getMediaPreviewValue
|
||||
import io.element.android.libraries.matrix.api.media.isPreviewEnabled
|
||||
import io.element.android.libraries.matrix.api.notification.NotificationContent
|
||||
import io.element.android.libraries.matrix.api.notification.NotificationData
|
||||
import io.element.android.libraries.matrix.api.permalink.PermalinkParser
|
||||
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.AudioMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EmoteMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventType
|
||||
@@ -140,10 +141,24 @@ class DefaultNotifiableEventResolver(
|
||||
): Result<ResolvedPushEvent> = runCatchingExceptions {
|
||||
when (val content = this.content) {
|
||||
is NotificationContent.MessageLike.RoomMessage -> {
|
||||
val showMediaPreview = client.mediaPreviewService.getMediaPreviewValue() == MediaPreviewValue.On
|
||||
val showMediaPreview = client.mediaPreviewService.getMediaPreviewValue().isPreviewEnabled(roomJoinRule)
|
||||
val senderDisambiguatedDisplayName = getDisambiguatedDisplayName(content.senderId)
|
||||
val imageMimeType = if (showMediaPreview) content.getImageMimetype() else null
|
||||
val imageUriString = imageMimeType?.let { content.fetchImageIfPresent(client, imageMimeType)?.toString() }
|
||||
val imageMimeType = content.getImageMimetype()
|
||||
val imageUriString = if (showMediaPreview && imageMimeType != null) {
|
||||
content.fetchImageIfPresent(client, imageMimeType)?.toString()
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
val isPublicRoom = roomJoinRule == null || roomJoinRule == JoinRule.Public
|
||||
if (imageMimeType != null && !showMediaPreview && isPublicRoom) {
|
||||
Timber.tag(loggerTag.value)
|
||||
.d("We should only display media previews for private rooms and the current room is public. Ignoring image uri.")
|
||||
} else if (showMediaPreview && content.messageType is ImageMessageType && imageUriString == null) {
|
||||
Timber.tag(loggerTag.value)
|
||||
.w("No image uri returned for message with an image and previews enabled. Something went wrong.")
|
||||
}
|
||||
|
||||
val messageBody = descriptionFromMessageContent(
|
||||
content = content,
|
||||
senderDisambiguatedDisplayName = senderDisambiguatedDisplayName,
|
||||
|
||||
Reference in New Issue
Block a user