Ensure the icon stay grey if the global setting is set to mention only.
Implement the iOS logic #2282
This commit is contained in:
parent
01ba6aa917
commit
5737bd8e7a
2 changed files with 27 additions and 53 deletions
|
|
@ -35,6 +35,7 @@ import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.text.AnnotatedString
|
import androidx.compose.ui.text.AnnotatedString
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
|
|
@ -141,7 +142,7 @@ private fun RowScope.NameAndTimestampRow(room: RoomListRoomSummary) {
|
||||||
Text(
|
Text(
|
||||||
text = room.timestamp ?: "",
|
text = room.timestamp ?: "",
|
||||||
style = ElementTheme.typography.fontBodySmMedium,
|
style = ElementTheme.typography.fontBodySmMedium,
|
||||||
color = if (room.isTimestampHighlighted) {
|
color = if (room.isHighlighted) {
|
||||||
ElementTheme.colors.unreadIndicator
|
ElementTheme.colors.unreadIndicator
|
||||||
} else {
|
} else {
|
||||||
MaterialTheme.roomListRoomMessageDate()
|
MaterialTheme.roomListRoomMessageDate()
|
||||||
|
|
@ -165,69 +166,43 @@ private fun RowScope.LastMessageAndIndicatorRow(room: RoomListRoomSummary) {
|
||||||
maxLines = 2,
|
maxLines = 2,
|
||||||
overflow = TextOverflow.Ellipsis
|
overflow = TextOverflow.Ellipsis
|
||||||
)
|
)
|
||||||
|
// Call and unread
|
||||||
// Unread
|
|
||||||
Row(
|
Row(
|
||||||
modifier = Modifier.height(16.dp),
|
modifier = Modifier.height(16.dp),
|
||||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
) {
|
) {
|
||||||
// Video call
|
val tint = if (room.isHighlighted) ElementTheme.colors.unreadIndicator else ElementTheme.colors.iconQuaternary
|
||||||
if (room.hasRoomCall) {
|
if (room.hasRoomCall) {
|
||||||
OnGoingCallIcon()
|
OnGoingCallIcon(
|
||||||
|
color = tint,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if (room.userDefinedNotificationMode == RoomNotificationMode.MUTE) {
|
||||||
|
NotificationOffIndicatorAtom()
|
||||||
|
} else if (room.numberOfUnreadMentions > 0) {
|
||||||
|
MentionIndicatorAtom()
|
||||||
|
}
|
||||||
|
if (room.hasNewContent) {
|
||||||
|
UnreadIndicatorAtom(
|
||||||
|
color = tint
|
||||||
|
)
|
||||||
}
|
}
|
||||||
// Other indicators
|
|
||||||
NotificationIcons(
|
|
||||||
room.userDefinedNotificationMode,
|
|
||||||
room.numberOfUnreadMessages,
|
|
||||||
room.numberOfUnreadMentions,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun OnGoingCallIcon() {
|
private fun OnGoingCallIcon(
|
||||||
|
color: Color,
|
||||||
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
modifier = Modifier.size(16.dp),
|
modifier = Modifier.size(16.dp),
|
||||||
imageVector = CompoundIcons.VideoCallSolid,
|
imageVector = CompoundIcons.VideoCallSolid,
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
tint = ElementTheme.colors.unreadIndicator,
|
tint = color,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
|
||||||
private fun RowScope.NotificationIcons(
|
|
||||||
userDefinedNotificationMode: RoomNotificationMode?,
|
|
||||||
numberOfUnreadMessages: Int,
|
|
||||||
numberOfUnreadMentions: Int,
|
|
||||||
) {
|
|
||||||
when (userDefinedNotificationMode) {
|
|
||||||
null,
|
|
||||||
RoomNotificationMode.ALL_MESSAGES -> {
|
|
||||||
if (numberOfUnreadMentions > 0) {
|
|
||||||
MentionIndicatorAtom()
|
|
||||||
UnreadIndicatorAtom()
|
|
||||||
} else if (numberOfUnreadMessages > 0) {
|
|
||||||
UnreadIndicatorAtom()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY -> {
|
|
||||||
if (numberOfUnreadMentions > 0) {
|
|
||||||
MentionIndicatorAtom()
|
|
||||||
UnreadIndicatorAtom()
|
|
||||||
} else if (numberOfUnreadMessages > 0) {
|
|
||||||
UnreadIndicatorAtom(color = ElementTheme.colors.iconQuaternary)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RoomNotificationMode.MUTE -> {
|
|
||||||
NotificationOffIndicatorAtom()
|
|
||||||
if (numberOfUnreadMessages > 0 || numberOfUnreadMentions > 0) {
|
|
||||||
UnreadIndicatorAtom(color = ElementTheme.colors.iconQuaternary)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun NotificationOffIndicatorAtom() {
|
private fun NotificationOffIndicatorAtom() {
|
||||||
Icon(
|
Icon(
|
||||||
|
|
|
||||||
|
|
@ -37,11 +37,10 @@ data class RoomListRoomSummary(
|
||||||
val hasRoomCall: Boolean,
|
val hasRoomCall: Boolean,
|
||||||
val isDm: Boolean,
|
val isDm: Boolean,
|
||||||
) {
|
) {
|
||||||
val isTimestampHighlighted = hasRoomCall ||
|
val isHighlighted = userDefinedNotificationMode != RoomNotificationMode.MUTE &&
|
||||||
when (userDefinedNotificationMode) {
|
(numberOfUnreadNotifications > 0 || numberOfUnreadMentions > 0)
|
||||||
null,
|
|
||||||
RoomNotificationMode.ALL_MESSAGES -> numberOfUnreadMessages > 0 || numberOfUnreadMentions > 0
|
val hasNewContent = numberOfUnreadMessages > 0 ||
|
||||||
RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY -> numberOfUnreadMentions > 0
|
numberOfUnreadMentions > 0 ||
|
||||||
RoomNotificationMode.MUTE -> false
|
numberOfUnreadNotifications > 0
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue