diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt index 8dccfb586d..9a467eeea7 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt @@ -25,6 +25,7 @@ import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.messages.impl.timeline.TimelineEvents import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.event.isEdited +import io.element.android.features.messages.impl.timeline.model.event.isRedacted import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight @@ -44,7 +45,8 @@ fun TimelineEventTimestampView( val hasError = event.localSendState is LocalEventSendState.Failed val hasEncryptionCritical = event.messageShield?.isCritical.orFalse() val isMessageEdited = event.content.isEdited() - val tint = if (hasError || hasEncryptionCritical) ElementTheme.colors.textCriticalPrimary else ElementTheme.colors.textSecondary + val isMessageRedacted = event.content.isRedacted() + val tint = if (hasError || hasEncryptionCritical && !isMessageRedacted) ElementTheme.colors.textCriticalPrimary else ElementTheme.colors.textSecondary Row( modifier = Modifier .padding(PaddingValues(start = TimelineEventTimestampViewDefaults.spacing)) @@ -78,19 +80,22 @@ fun TimelineEventTimestampView( }, ) } - event.messageShield?.let { shield -> - Spacer(modifier = Modifier.width(2.dp)) - Icon( - imageVector = shield.toIcon(), - contentDescription = shield.toText(), - modifier = Modifier + + if (!isMessageRedacted) { + event.messageShield?.let { shield -> + Spacer(modifier = Modifier.width(2.dp)) + Icon( + imageVector = shield.toIcon(), + contentDescription = shield.toText(), + modifier = Modifier .size(15.dp) .clickable { eventSink(TimelineEvents.ShowShieldDialog(shield)) }, - tint = shield.toIconColor(), - ) - Spacer(modifier = Modifier.width(4.dp)) + tint = shield.toIconColor(), + ) + Spacer(modifier = Modifier.width(4.dp)) + } } } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventForTimestampViewProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventForTimestampViewProvider.kt index b3cb657d66..dbec4afaf6 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventForTimestampViewProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventForTimestampViewProvider.kt @@ -33,5 +33,9 @@ class TimelineItemEventForTimestampViewProvider : PreviewParameterProvider false } +/** + * Whether the event content has been redacted. + */ +fun TimelineItemEventContent.isRedacted(): Boolean = this is TimelineItemRedactedContent + fun TimelineItemEventContentWithAttachment.duration(): Duration? { return when (this) { is TimelineItemAudioContent -> duration