mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-05-03 23:15:44 +01:00
Show member labels in quotes.
This commit is contained in:
committed by
Michelle Tang
parent
e384a37fab
commit
cb05608422
@@ -25,6 +25,9 @@ import androidx.compose.ui.unit.dp
|
||||
import org.signal.core.ui.compose.DayNightPreviews
|
||||
import org.signal.core.ui.compose.Previews
|
||||
|
||||
private val defaultModifier = Modifier.padding(horizontal = 12.dp, vertical = 2.dp)
|
||||
private val defaultTextStyle: @Composable () -> TextStyle = { MaterialTheme.typography.bodyLarge }
|
||||
|
||||
/**
|
||||
* Displays member label text with an optional emoji.
|
||||
*/
|
||||
@@ -33,8 +36,8 @@ fun MemberLabelPill(
|
||||
emoji: String?,
|
||||
text: String,
|
||||
tintColor: Color,
|
||||
modifier: Modifier = Modifier.padding(horizontal = 12.dp, vertical = 2.dp),
|
||||
textStyle: TextStyle = MaterialTheme.typography.bodyLarge
|
||||
modifier: Modifier = defaultModifier,
|
||||
textStyle: TextStyle = defaultTextStyle()
|
||||
) {
|
||||
val isDark = isSystemInDarkTheme()
|
||||
val backgroundColor = tintColor.copy(alpha = if (isDark) 0.32f else 0.10f)
|
||||
@@ -45,6 +48,28 @@ fun MemberLabelPill(
|
||||
Color.Black.copy(alpha = 0.30f).compositeOver(tintColor)
|
||||
}
|
||||
|
||||
MemberLabelPill(
|
||||
emoji = emoji,
|
||||
text = text,
|
||||
textColor = textColor,
|
||||
backgroundColor = backgroundColor,
|
||||
modifier = modifier,
|
||||
textStyle = textStyle
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays member label text with an optional emoji.
|
||||
*/
|
||||
@Composable
|
||||
fun MemberLabelPill(
|
||||
emoji: String?,
|
||||
text: String,
|
||||
textColor: Color,
|
||||
backgroundColor: Color,
|
||||
modifier: Modifier = defaultModifier,
|
||||
textStyle: TextStyle = defaultTextStyle()
|
||||
) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.background(
|
||||
|
||||
@@ -17,22 +17,83 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import org.signal.core.ui.compose.DayNightPreviews
|
||||
import org.signal.core.ui.compose.Previews
|
||||
|
||||
private val defaultLabelModifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp)
|
||||
private val defaultLabelTextStyle: @Composable () -> TextStyle = { MaterialTheme.typography.bodySmall }
|
||||
|
||||
/**
|
||||
* Displays a sender name with an optional member label pill.
|
||||
* Displays a sender name with an optional member label pill with label colors derived from [senderColor].
|
||||
*/
|
||||
@OptIn(ExperimentalLayoutApi::class)
|
||||
@Composable
|
||||
fun SenderNameWithLabel(
|
||||
senderName: String,
|
||||
senderColor: Color,
|
||||
label: MemberLabel?,
|
||||
memberLabel: MemberLabel?,
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
SenderNameWithLabel(
|
||||
senderName = senderName,
|
||||
senderColor = senderColor,
|
||||
memberLabel = memberLabel,
|
||||
modifier = modifier,
|
||||
labelSlot = { label ->
|
||||
MemberLabelPill(
|
||||
emoji = label.emoji,
|
||||
text = label.text,
|
||||
tintColor = senderColor,
|
||||
modifier = defaultLabelModifier,
|
||||
textStyle = defaultLabelTextStyle()
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays a sender name with an optional member label pill with explicit label colors.
|
||||
*/
|
||||
@OptIn(ExperimentalLayoutApi::class)
|
||||
@Composable
|
||||
fun SenderNameWithLabel(
|
||||
senderName: String,
|
||||
senderColor: Color,
|
||||
memberLabel: MemberLabel?,
|
||||
labelTextColor: Color,
|
||||
labelBackgroundColor: Color,
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
SenderNameWithLabel(
|
||||
senderName = senderName,
|
||||
senderColor = senderColor,
|
||||
memberLabel = memberLabel,
|
||||
modifier = modifier,
|
||||
labelSlot = { label ->
|
||||
MemberLabelPill(
|
||||
emoji = label.emoji,
|
||||
text = label.text,
|
||||
textColor = labelTextColor,
|
||||
backgroundColor = labelBackgroundColor,
|
||||
modifier = defaultLabelModifier,
|
||||
textStyle = defaultLabelTextStyle()
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalLayoutApi::class)
|
||||
@Composable
|
||||
private fun SenderNameWithLabel(
|
||||
senderName: String,
|
||||
senderColor: Color,
|
||||
memberLabel: MemberLabel?,
|
||||
modifier: Modifier = Modifier,
|
||||
labelSlot: @Composable (MemberLabel) -> Unit
|
||||
) {
|
||||
FlowRow(
|
||||
modifier = modifier,
|
||||
@@ -49,14 +110,8 @@ fun SenderNameWithLabel(
|
||||
overflow = TextOverflow.Ellipsis
|
||||
)
|
||||
|
||||
if (label != null) {
|
||||
MemberLabelPill(
|
||||
emoji = label.emoji,
|
||||
text = label.text,
|
||||
tintColor = senderColor,
|
||||
textStyle = MaterialTheme.typography.labelSmall,
|
||||
modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp)
|
||||
)
|
||||
if (memberLabel != null) {
|
||||
labelSlot(memberLabel)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -68,7 +123,7 @@ private fun SenderNameWithLabelPreview() = Previews.Preview {
|
||||
SenderNameWithLabel(
|
||||
senderName = "Foo Bar",
|
||||
senderColor = Color(0xFF7C4DFF),
|
||||
label = MemberLabel(emoji = "\uD83D\uDC36", text = "Vet Coordinator")
|
||||
memberLabel = MemberLabel(emoji = "\uD83D\uDC36", text = "Vet Coordinator")
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -80,7 +135,7 @@ private fun SenderNameWithLabelLongLabelPreview() = Previews.Preview {
|
||||
SenderNameWithLabel(
|
||||
senderName = "Foo Bar",
|
||||
senderColor = Color(0xFF7C4DFF),
|
||||
label = MemberLabel(emoji = "🧠", text = "Zero-Knowledge Know-It-All")
|
||||
memberLabel = MemberLabel(emoji = "🧠", text = "Zero-Knowledge Know-It-It-All")
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -92,7 +147,7 @@ private fun SenderNameWithLabelLongNamePreview() = Previews.Preview {
|
||||
SenderNameWithLabel(
|
||||
senderName = "Cassandra NullPointer-Exception",
|
||||
senderColor = Color(0xFF7C4DFF),
|
||||
label = MemberLabel(emoji = "🧠", text = "Vet Coordinator")
|
||||
memberLabel = MemberLabel(emoji = "🧠", text = "Vet Coordinator")
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -104,7 +159,21 @@ private fun SenderNameWithLabelNoLabelPreview() = Previews.Preview {
|
||||
SenderNameWithLabel(
|
||||
senderName = "Sam",
|
||||
senderColor = Color(0xFF4CAF50),
|
||||
label = null
|
||||
memberLabel = null
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@DayNightPreviews
|
||||
@Composable
|
||||
private fun SenderNameWithLabelExplicitColorsPreview() = Previews.Preview {
|
||||
Box(modifier = Modifier.width(200.dp)) {
|
||||
SenderNameWithLabel(
|
||||
senderName = "Foo Bar",
|
||||
senderColor = MaterialTheme.colorScheme.onSurface,
|
||||
memberLabel = MemberLabel(emoji = "\uD83D\uDC36", text = "Vet Coordinator"),
|
||||
labelTextColor = MaterialTheme.colorScheme.onSurface,
|
||||
labelBackgroundColor = MaterialTheme.colorScheme.surfaceVariant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user