Merge pull request #4429 from element-hq/feature/bma/hideUnencryptedLockForRedactedMsgs

Hide unencrypted lock for redacted msgs
This commit is contained in:
Benoit Marty
2025-03-18 21:29:25 +01:00
committed by GitHub
8 changed files with 55 additions and 21 deletions

View File

@@ -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))
}
}
}
}

View File

@@ -10,6 +10,7 @@ package io.element.android.features.messages.impl.timeline.components
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.messages.impl.timeline.aTimelineItemEvent
import io.element.android.features.messages.impl.timeline.model.TimelineItem
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemRedactedContent
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
@@ -33,5 +34,9 @@ class TimelineItemEventForTimestampViewProvider : PreviewParameterProvider<Timel
aTimelineItemEvent(
messageShield = MessageShield.UnknownDevice(isCritical = true),
),
aTimelineItemEvent(
content = aTimelineItemRedactedContent(),
messageShield = MessageShield.SentInClear(isCritical = true),
),
)
}

View File

@@ -22,18 +22,25 @@ internal fun TimelineItemEventRowTimestampPreview(
@PreviewParameter(TimelineItemEventForTimestampViewProvider::class) event: TimelineItem.Event
) = ElementPreview {
Column {
val oldContent = event.content as TimelineItemTextContent
listOf(
"Text",
"Text longer, displayed on 1 line",
"Text which should be rendered on several lines",
).forEach { str ->
ATimelineItemEventRow(
event = event.copy(
content = oldContent.copy(
body = str,
pillifiedBody = str,
when (event.content) {
is TimelineItemTextContent -> listOf(
"Text",
"Text longer, displayed on 1 line",
"Text which should be rendered on several lines",
).forEach { str ->
ATimelineItemEventRow(
event = event.copy(
content = event.content.copy(
body = str,
pillifiedBody = str,
),
reactionsState = aTimelineItemReactions(count = 0),
),
)
}
else -> ATimelineItemEventRow(
event = event.copy(
content = event.content,
reactionsState = aTimelineItemReactions(count = 0),
),
)

View File

@@ -92,6 +92,11 @@ fun TimelineItemEventContent.isEdited(): Boolean = when (this) {
else -> 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