Merge pull request #923 from VASHvic/redesign_emoji_selector

redesign emoji selector
This commit is contained in:
Vitor Pamplona
2024-06-20 17:36:23 -04:00
committed by GitHub
3 changed files with 102 additions and 91 deletions

View File

@@ -27,6 +27,7 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -112,6 +113,7 @@ fun AllRelayListView(
Text( Text(
text = stringRes(R.string.relay_settings), text = stringRes(R.string.relay_settings),
style = MaterialTheme.typography.titleLarge, style = MaterialTheme.typography.titleLarge,
modifier = Modifier.widthIn(max = 200.dp),
) )
SaveButton( SaveButton(

View File

@@ -34,6 +34,8 @@ import androidx.compose.animation.slideInVertically
import androidx.compose.animation.slideOutVertically import androidx.compose.animation.slideOutVertically
import androidx.compose.animation.togetherWith import androidx.compose.animation.togetherWith
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
@@ -47,10 +49,15 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ripple.rememberRipple import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.ElevatedCard
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ProgressIndicatorDefaults import androidx.compose.material3.ProgressIndicatorDefaults
@@ -1323,16 +1330,25 @@ fun ReactionChoicePopup(
offset = IntOffset(0, iconSizePx), offset = IntOffset(0, iconSizePx),
onDismissRequest = { onDismiss() }, onDismissRequest = { onDismiss() },
) { ) {
FlowRow(horizontalArrangement = Arrangement.Center) { ElevatedCard(
account.reactionChoices.forEach { reactionType -> Modifier
ActionableReactionButton( .border(width = 1.dp, color = MaterialTheme.colorScheme.outline, shape = RoundedCornerShape(5.dp)),
baseNote, elevation = CardDefaults.elevatedCardElevation(defaultElevation = 8.dp),
reactionType, colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceVariant),
accountViewModel, ) {
onDismiss, Box(modifier = Modifier.padding(5.dp)) {
onChangeAmount, FlowRow(horizontalArrangement = Arrangement.Center) {
toRemove, account.reactionChoices.forEach { reactionType ->
) ActionableReactionButton(
baseNote,
reactionType,
accountViewModel,
onDismiss,
onChangeAmount,
toRemove,
)
}
}
} }
} }
} }
@@ -1348,24 +1364,11 @@ private fun ActionableReactionButton(
onChangeAmount: () -> Unit, onChangeAmount: () -> Unit,
toRemove: ImmutableSet<String>, toRemove: ImmutableSet<String>,
) { ) {
Button( val thisModifier =
modifier = Modifier.padding(horizontal = 3.dp), remember(reactionType) {
onClick = { Modifier
accountViewModel.reactToOrDelete( .padding(horizontal = 3.dp)
baseNote, .combinedClickable(
reactionType,
)
onDismiss()
},
shape = ButtonBorder,
colors =
ButtonDefaults.buttonColors(
containerColor = MaterialTheme.colorScheme.primary,
),
) {
val thisModifier =
remember(reactionType) {
Modifier.combinedClickable(
onClick = { onClick = {
accountViewModel.reactToOrDelete( accountViewModel.reactToOrDelete(
baseNote, baseNote,
@@ -1375,59 +1378,60 @@ private fun ActionableReactionButton(
}, },
onLongClick = { onChangeAmount() }, onLongClick = { onChangeAmount() },
) )
.padding(5.dp)
}
val removeSymbol =
remember(reactionType) {
if (reactionType in toRemove) {
""
} else {
""
} }
}
val removeSymbol = if (reactionType.startsWith(":")) {
remember(reactionType) { val noStartColon = reactionType.removePrefix(":")
if (reactionType in toRemove) { val url = noStartColon.substringAfter(":")
""
} else {
""
}
}
if (reactionType.startsWith(":")) { val renderable =
val noStartColon = reactionType.removePrefix(":") persistentListOf(
val url = noStartColon.substringAfter(":") Nip30CustomEmoji.ImageUrlType(url),
Nip30CustomEmoji.TextType(removeSymbol),
val renderable =
persistentListOf(
Nip30CustomEmoji.ImageUrlType(url),
Nip30CustomEmoji.TextType(removeSymbol),
)
InLineIconRenderer(
renderable,
style = SpanStyle(color = Color.White),
maxLines = 1,
) )
} else {
when (reactionType) {
"+" -> {
LikedIcon(modifier = thisModifier.size(16.dp), tint = Color.White)
Text( InLineIconRenderer(
text = removeSymbol, renderable,
color = Color.White, style = SpanStyle(color = Color.White),
textAlign = TextAlign.Center, maxLines = 1,
modifier = thisModifier, modifier = thisModifier,
) )
} } else {
"-" -> when (reactionType) {
Text( "+" -> {
text = "\uD83D\uDC4E$removeSymbol", LikedIcon(modifier = thisModifier.size(16.dp), tint = Color.White)
color = Color.White,
textAlign = TextAlign.Center, Text(
modifier = thisModifier, text = removeSymbol,
) color = Color.White,
else -> textAlign = TextAlign.Center,
Text( modifier = thisModifier,
"$reactionType$removeSymbol", )
color = Color.White,
textAlign = TextAlign.Center,
modifier = thisModifier,
)
} }
"-" ->
Text(
text = "\uD83D\uDC4E$removeSymbol",
color = Color.White,
textAlign = TextAlign.Center,
modifier = thisModifier,
)
else ->
Text(
"$reactionType$removeSymbol",
color = Color.White,
textAlign = TextAlign.Center,
modifier = thisModifier,
)
} }
} }
} }

View File

@@ -21,12 +21,14 @@
package com.vitorpamplona.amethyst.ui.note package com.vitorpamplona.amethyst.ui.note
import androidx.compose.animation.animateContentSize import androidx.compose.animation.animateContentSize
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
@@ -38,6 +40,7 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Button import androidx.compose.material3.Button
@@ -265,15 +268,17 @@ private fun RenderReactionOption(
reactionType: String, reactionType: String,
postViewModel: UpdateReactionTypeViewModel, postViewModel: UpdateReactionTypeViewModel,
) { ) {
Button( Box(
modifier = Modifier.padding(horizontal = 3.dp), modifier =
shape = ButtonBorder, Modifier
colors = .padding(3.dp)
ButtonDefaults.buttonColors( .clickable { postViewModel.removeChoice(reactionType) }
containerColor = MaterialTheme.colorScheme.primary, .border(
), width = 1.dp,
onClick = { postViewModel.removeChoice(reactionType) }, color = MaterialTheme.colorScheme.surfaceDim,
contentPadding = PaddingValues(horizontal = 5.dp), shape = RoundedCornerShape(8.dp),
)
.padding(8.dp),
) { ) {
if (reactionType.startsWith(":")) { if (reactionType.startsWith(":")) {
val noStartColon = reactionType.removePrefix(":") val noStartColon = reactionType.removePrefix(":")
@@ -287,30 +292,30 @@ private fun RenderReactionOption(
InLineIconRenderer( InLineIconRenderer(
renderable, renderable,
style = SpanStyle(color = Color.White), style = SpanStyle(color = MaterialTheme.colorScheme.onBackground),
maxLines = 1, maxLines = 1,
) )
} else { } else {
when (reactionType) { when (reactionType) {
"+" -> { "+" -> {
LikedIcon(modifier = Modifier.size(16.dp), tint = Color.White) LikedIcon(modifier = Modifier.size(16.dp), tint = MaterialTheme.colorScheme.onBackground)
Text( Text(
text = "", text = "",
color = Color.White, color = MaterialTheme.colorScheme.onBackground,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
) )
} }
"-" -> "-" ->
Text( Text(
text = "\uD83D\uDC4E", text = "\uD83D\uDC4E",
color = Color.White, color = MaterialTheme.colorScheme.onBackground,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
) )
else -> else ->
Text( Text(
text = "$reactionType", text = "$reactionType",
color = Color.White, color = MaterialTheme.colorScheme.onBackground,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
) )
} }