Improved padding and spacing for chat messages

This commit is contained in:
Vitor Pamplona 2024-08-20 13:05:44 -04:00
parent 3a70cfb9e2
commit 7bd3e0beab
2 changed files with 53 additions and 16 deletions

View File

@ -71,7 +71,7 @@ import com.vitorpamplona.amethyst.ui.theme.ChatPaddingInnerQuoteModifier
import com.vitorpamplona.amethyst.ui.theme.ChatPaddingModifier import com.vitorpamplona.amethyst.ui.theme.ChatPaddingModifier
import com.vitorpamplona.amethyst.ui.theme.DoubleHorzSpacer import com.vitorpamplona.amethyst.ui.theme.DoubleHorzSpacer
import com.vitorpamplona.amethyst.ui.theme.Font12SP import com.vitorpamplona.amethyst.ui.theme.Font12SP
import com.vitorpamplona.amethyst.ui.theme.HalfTopPadding import com.vitorpamplona.amethyst.ui.theme.HalfHalfTopPadding
import com.vitorpamplona.amethyst.ui.theme.ReactionRowHeightChat import com.vitorpamplona.amethyst.ui.theme.ReactionRowHeightChat
import com.vitorpamplona.amethyst.ui.theme.RowColSpacing import com.vitorpamplona.amethyst.ui.theme.RowColSpacing
import com.vitorpamplona.amethyst.ui.theme.RowColSpacing5dp import com.vitorpamplona.amethyst.ui.theme.RowColSpacing5dp
@ -79,7 +79,6 @@ import com.vitorpamplona.amethyst.ui.theme.Size18Modifier
import com.vitorpamplona.amethyst.ui.theme.Size20dp import com.vitorpamplona.amethyst.ui.theme.Size20dp
import com.vitorpamplona.amethyst.ui.theme.Size5Modifier import com.vitorpamplona.amethyst.ui.theme.Size5Modifier
import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer
import com.vitorpamplona.amethyst.ui.theme.StdTopPadding
import com.vitorpamplona.amethyst.ui.theme.chatAuthorBox import com.vitorpamplona.amethyst.ui.theme.chatAuthorBox
import com.vitorpamplona.amethyst.ui.theme.incognitoIconModifier import com.vitorpamplona.amethyst.ui.theme.incognitoIconModifier
import com.vitorpamplona.amethyst.ui.theme.mediumImportanceLink import com.vitorpamplona.amethyst.ui.theme.mediumImportanceLink
@ -292,9 +291,7 @@ fun ChatBubbleLayout(
modifier = if (innerQuote) ChatPaddingInnerQuoteModifier else ChatPaddingModifier, modifier = if (innerQuote) ChatPaddingInnerQuoteModifier else ChatPaddingModifier,
horizontalArrangement = alignment, horizontalArrangement = alignment,
) { ) {
var popupExpanded = remember { mutableStateOf(false) } val popupExpanded = remember { mutableStateOf(false) }
val modif2 = if (innerQuote) Modifier else ChatBubbleMaxSizeModifier
val showDetails = val showDetails =
remember { remember {
@ -323,7 +320,7 @@ fun ChatBubbleLayout(
Row( Row(
horizontalArrangement = alignment, horizontalArrangement = alignment,
modifier = modif2, modifier = if (innerQuote) Modifier else ChatBubbleMaxSizeModifier,
) { ) {
Surface( Surface(
color = backgroundBubbleColor.value, color = backgroundBubbleColor.value,
@ -335,7 +332,7 @@ fun ChatBubbleLayout(
Row( Row(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = alignment, horizontalArrangement = alignment,
modifier = StdTopPadding.then(Modifier.clickable(onClick = onAuthorClick)), modifier = HalfHalfTopPadding.clickable(onClick = onAuthorClick),
) { ) {
drawAuthorLine() drawAuthorLine()
} }
@ -389,11 +386,14 @@ private fun BubblePreview() {
Icon( Icon(
imageVector = Icons.Default.Person, imageVector = Icons.Default.Person,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(Size20dp).clip(CircleShape), modifier =
Modifier
.size(Size20dp)
.clip(CircleShape),
) )
}, },
name = { name = {
Text("Me", fontWeight = FontWeight.Bold) Text("Someone else", fontWeight = FontWeight.Bold)
}, },
) )
}, },
@ -419,7 +419,10 @@ private fun BubblePreview() {
Icon( Icon(
imageVector = Icons.Default.Person, imageVector = Icons.Default.Person,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(Size20dp).clip(CircleShape), modifier =
Modifier
.size(Size20dp)
.clip(CircleShape),
) )
}, },
name = { name = {
@ -431,6 +434,39 @@ private fun BubblePreview() {
) { backgroundBubbleColor -> ) { backgroundBubbleColor ->
Text("This is a very long long loong note") Text("This is a very long long loong note")
} }
ChatBubbleLayout(
isLoggedInUser = true,
innerQuote = false,
isComplete = false,
hasDetailsToShow = false,
drawAuthorInfo = false,
parentBackgroundColor = backgroundBubbleColor,
onClick = { false },
onAuthorClick = {},
actionMenu = { onDismiss ->
},
drawAuthorLine = {
UserDisplayNameLayout(
picture = {
Icon(
imageVector = Icons.Default.Person,
contentDescription = null,
modifier =
Modifier
.size(Size20dp)
.clip(CircleShape),
)
},
name = {
Text("Me", fontWeight = FontWeight.Bold)
},
)
},
detailRow = { Text("Relays and Actions") },
) { backgroundBubbleColor ->
Text("Short note")
}
} }
} }
@ -654,7 +690,7 @@ private fun RenderRegularTextNote(
content = eventContent, content = eventContent,
canPreview = canPreview, canPreview = canPreview,
quotesLeft = if (innerQuote) 0 else 1, quotesLeft = if (innerQuote) 0 else 1,
modifier = HalfTopPadding, modifier = Modifier,
tags = tags, tags = tags,
backgroundColor = backgroundBubbleColor, backgroundColor = backgroundBubbleColor,
id = note.idHex, id = note.idHex,
@ -668,7 +704,7 @@ private fun RenderRegularTextNote(
content = stringRes(id = R.string.could_not_decrypt_the_message), content = stringRes(id = R.string.could_not_decrypt_the_message),
canPreview = true, canPreview = true,
quotesLeft = 0, quotesLeft = 0,
modifier = HalfTopPadding, modifier = Modifier,
tags = EmptyTagList, tags = EmptyTagList,
backgroundColor = backgroundBubbleColor, backgroundColor = backgroundBubbleColor,
id = note.idHex, id = note.idHex,
@ -738,7 +774,7 @@ fun UserDisplayNameLayout(
picture: @Composable () -> Unit, picture: @Composable () -> Unit,
name: @Composable () -> Unit, name: @Composable () -> Unit,
) { ) {
Box(chatAuthorBox, contentAlignment = Alignment.TopEnd) { Box(chatAuthorBox, contentAlignment = Alignment.Center) {
picture() picture()
} }

View File

@ -107,6 +107,7 @@ val HalfStartPadding = Modifier.padding(start = 5.dp)
val StdStartPadding = Modifier.padding(start = 10.dp) val StdStartPadding = Modifier.padding(start = 10.dp)
val StdTopPadding = Modifier.padding(top = 10.dp) val StdTopPadding = Modifier.padding(top = 10.dp)
val HalfTopPadding = Modifier.padding(top = 5.dp) val HalfTopPadding = Modifier.padding(top = 5.dp)
val HalfHalfTopPadding = Modifier.padding(top = 3.dp)
val HalfPadding = Modifier.padding(5.dp) val HalfPadding = Modifier.padding(5.dp)
val StdPadding = Modifier.padding(10.dp) val StdPadding = Modifier.padding(10.dp)
@ -163,7 +164,7 @@ val DividerThickness = 0.25.dp
val ReactionRowHeight = Modifier.padding(vertical = 7.dp).height(24.dp) val ReactionRowHeight = Modifier.padding(vertical = 7.dp).height(24.dp)
val ReactionRowHeightWithPadding = Modifier.padding(vertical = 7.dp).height(24.dp).padding(horizontal = 10.dp) val ReactionRowHeightWithPadding = Modifier.padding(vertical = 7.dp).height(24.dp).padding(horizontal = 10.dp)
val ReactionRowHeightChat = Modifier.height(25.dp) val ReactionRowHeightChat = Modifier.height(20.dp)
val ReactionRowHeightChatMaxWidth = Modifier.height(25.dp).fillMaxWidth() val ReactionRowHeightChatMaxWidth = Modifier.height(25.dp).fillMaxWidth()
val UserNameRowHeight = Modifier.fillMaxWidth() val UserNameRowHeight = Modifier.fillMaxWidth()
val UserNameMaxRowHeight = Modifier.fillMaxWidth() val UserNameMaxRowHeight = Modifier.fillMaxWidth()
@ -201,7 +202,7 @@ val ZeroPadding = PaddingValues(0.dp)
val FeedPadding = PaddingValues(top = 10.dp, bottom = 10.dp) val FeedPadding = PaddingValues(top = 10.dp, bottom = 10.dp)
val ButtonPadding = PaddingValues(vertical = 6.dp, horizontal = 16.dp) val ButtonPadding = PaddingValues(vertical = 6.dp, horizontal = 16.dp)
val ChatPaddingInnerQuoteModifier = Modifier.padding(top = 10.dp) val ChatPaddingInnerQuoteModifier = Modifier
val ChatPaddingModifier = val ChatPaddingModifier =
Modifier Modifier
.fillMaxWidth(1f) .fillMaxWidth(1f)
@ -255,7 +256,7 @@ val chatAuthorImage = Modifier.size(20.dp).clip(shape = CircleShape)
val AuthorInfoVideoFeed = Modifier.width(75.dp).padding(end = 15.dp) val AuthorInfoVideoFeed = Modifier.width(75.dp).padding(end = 15.dp)
val messageDetailsModifier = Modifier.height(Size25dp) val messageDetailsModifier = Modifier.height(Size25dp)
val messageBubbleLimits = Modifier.padding(start = 10.dp, end = 10.dp, bottom = 5.dp) val messageBubbleLimits = Modifier.padding(start = 7.dp, end = 7.dp, top = 5.dp, bottom = 5.dp)
val inlinePlaceholder = val inlinePlaceholder =
Placeholder( Placeholder(