Merge pull request #4429 from element-hq/feature/bma/hideUnencryptedLockForRedactedMsgs
Hide unencrypted lock for redacted msgs
This commit is contained in:
commit
da9b751847
8 changed files with 55 additions and 21 deletions
|
|
@ -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.TimelineEvents
|
||||||
import io.element.android.features.messages.impl.timeline.model.TimelineItem
|
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.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.core.bool.orFalse
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
|
|
@ -44,7 +45,8 @@ fun TimelineEventTimestampView(
|
||||||
val hasError = event.localSendState is LocalEventSendState.Failed
|
val hasError = event.localSendState is LocalEventSendState.Failed
|
||||||
val hasEncryptionCritical = event.messageShield?.isCritical.orFalse()
|
val hasEncryptionCritical = event.messageShield?.isCritical.orFalse()
|
||||||
val isMessageEdited = event.content.isEdited()
|
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(
|
Row(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(PaddingValues(start = TimelineEventTimestampViewDefaults.spacing))
|
.padding(PaddingValues(start = TimelineEventTimestampViewDefaults.spacing))
|
||||||
|
|
@ -78,19 +80,22 @@ fun TimelineEventTimestampView(
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
event.messageShield?.let { shield ->
|
|
||||||
Spacer(modifier = Modifier.width(2.dp))
|
if (!isMessageRedacted) {
|
||||||
Icon(
|
event.messageShield?.let { shield ->
|
||||||
imageVector = shield.toIcon(),
|
Spacer(modifier = Modifier.width(2.dp))
|
||||||
contentDescription = shield.toText(),
|
Icon(
|
||||||
modifier = Modifier
|
imageVector = shield.toIcon(),
|
||||||
|
contentDescription = shield.toText(),
|
||||||
|
modifier = Modifier
|
||||||
.size(15.dp)
|
.size(15.dp)
|
||||||
.clickable {
|
.clickable {
|
||||||
eventSink(TimelineEvents.ShowShieldDialog(shield))
|
eventSink(TimelineEvents.ShowShieldDialog(shield))
|
||||||
},
|
},
|
||||||
tint = shield.toIconColor(),
|
tint = shield.toIconColor(),
|
||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.width(4.dp))
|
Spacer(modifier = Modifier.width(4.dp))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ package io.element.android.features.messages.impl.timeline.components
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.features.messages.impl.timeline.aTimelineItemEvent
|
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.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.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.LocalEventSendState
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
|
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
|
||||||
|
|
@ -33,5 +34,9 @@ class TimelineItemEventForTimestampViewProvider : PreviewParameterProvider<Timel
|
||||||
aTimelineItemEvent(
|
aTimelineItemEvent(
|
||||||
messageShield = MessageShield.UnknownDevice(isCritical = true),
|
messageShield = MessageShield.UnknownDevice(isCritical = true),
|
||||||
),
|
),
|
||||||
|
aTimelineItemEvent(
|
||||||
|
content = aTimelineItemRedactedContent(),
|
||||||
|
messageShield = MessageShield.SentInClear(isCritical = true),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,18 +22,25 @@ internal fun TimelineItemEventRowTimestampPreview(
|
||||||
@PreviewParameter(TimelineItemEventForTimestampViewProvider::class) event: TimelineItem.Event
|
@PreviewParameter(TimelineItemEventForTimestampViewProvider::class) event: TimelineItem.Event
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
Column {
|
Column {
|
||||||
val oldContent = event.content as TimelineItemTextContent
|
when (event.content) {
|
||||||
listOf(
|
is TimelineItemTextContent -> listOf(
|
||||||
"Text",
|
"Text",
|
||||||
"Text longer, displayed on 1 line",
|
"Text longer, displayed on 1 line",
|
||||||
"Text which should be rendered on several lines",
|
"Text which should be rendered on several lines",
|
||||||
).forEach { str ->
|
).forEach { str ->
|
||||||
ATimelineItemEventRow(
|
ATimelineItemEventRow(
|
||||||
event = event.copy(
|
event = event.copy(
|
||||||
content = oldContent.copy(
|
content = event.content.copy(
|
||||||
body = str,
|
body = str,
|
||||||
pillifiedBody = str,
|
pillifiedBody = str,
|
||||||
|
),
|
||||||
|
reactionsState = aTimelineItemReactions(count = 0),
|
||||||
),
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
else -> ATimelineItemEventRow(
|
||||||
|
event = event.copy(
|
||||||
|
content = event.content,
|
||||||
reactionsState = aTimelineItemReactions(count = 0),
|
reactionsState = aTimelineItemReactions(count = 0),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,11 @@ fun TimelineItemEventContent.isEdited(): Boolean = when (this) {
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the event content has been redacted.
|
||||||
|
*/
|
||||||
|
fun TimelineItemEventContent.isRedacted(): Boolean = this is TimelineItemRedactedContent
|
||||||
|
|
||||||
fun TimelineItemEventContentWithAttachment.duration(): Duration? {
|
fun TimelineItemEventContentWithAttachment.duration(): Duration? {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is TimelineItemAudioContent -> duration
|
is TimelineItemAudioContent -> duration
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:de9876d82b13a220cd296f6117bedf7c1a260d9560978701065ce068e22b1c8b
|
||||||
|
size 4485
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:5dc95cafaeda3d0cd45ce37408de0858543f1de07a29b18d165cf2c9a438e9c6
|
||||||
|
size 4465
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:d8cf8e9260385fdc03b2bb611a7c79af93190b7f6c9cfbb53d45afebd0590d08
|
||||||
|
size 11279
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:cf4558bdae3a8f6e04a3390e15194cef3faa7552f5c0fd772eb8b4a7b9954de2
|
||||||
|
size 11234
|
||||||
Loading…
Add table
Add a link
Reference in a new issue