feat: channel name and icon in info sheet
Signed-off-by: Infi <wingit@geist.ga>
This commit is contained in:
parent
b5a940465f
commit
ccd9433773
|
|
@ -0,0 +1,110 @@
|
||||||
|
package chat.revolt.components.screens.chat
|
||||||
|
|
||||||
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
|
import androidx.compose.foundation.layout.Row
|
||||||
|
import androidx.compose.foundation.layout.Spacer
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.foundation.layout.size
|
||||||
|
import androidx.compose.foundation.layout.width
|
||||||
|
import androidx.compose.foundation.shape.CircleShape
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.draw.clip
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.layout.ContentScale
|
||||||
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import chat.revolt.api.REVOLT_FILES
|
||||||
|
import chat.revolt.api.schemas.AutumnResource
|
||||||
|
import chat.revolt.api.schemas.ChannelType
|
||||||
|
import chat.revolt.components.generic.RemoteImage
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun ChannelSheetHeader(
|
||||||
|
channelName: String,
|
||||||
|
channelIcon: AutumnResource? = null,
|
||||||
|
channelType: ChannelType,
|
||||||
|
channelId: String,
|
||||||
|
) {
|
||||||
|
Row(
|
||||||
|
modifier = Modifier.padding(vertical = 4.dp),
|
||||||
|
verticalAlignment = Alignment.CenterVertically
|
||||||
|
) {
|
||||||
|
Box(
|
||||||
|
modifier = Modifier
|
||||||
|
.size(48.dp)
|
||||||
|
.clip(CircleShape)
|
||||||
|
.background(
|
||||||
|
getIconBackColour(channelId)
|
||||||
|
.copy(alpha = if (channelIcon != null) 0.6f else 0.2f)
|
||||||
|
),
|
||||||
|
contentAlignment = Alignment.Center
|
||||||
|
) {
|
||||||
|
if (channelIcon != null) {
|
||||||
|
RemoteImage(
|
||||||
|
url = "$REVOLT_FILES/icons/${channelIcon.id ?: ""}?max_side=48",
|
||||||
|
description = null, // decorative
|
||||||
|
contentScale = ContentScale.Fit,
|
||||||
|
height = 48,
|
||||||
|
width = 48,
|
||||||
|
modifier = Modifier
|
||||||
|
.size(24.dp)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
ChannelIcon(channelType = channelType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.width(8.dp))
|
||||||
|
|
||||||
|
Text(
|
||||||
|
text = channelName,
|
||||||
|
fontWeight = FontWeight.Medium,
|
||||||
|
maxLines = 1,
|
||||||
|
overflow = TextOverflow.Ellipsis,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getIconBackColour(channelId: String): Color {
|
||||||
|
// The ULID alphabet does not include I, L, O, or U.
|
||||||
|
return when (channelId.uppercase().last()) {
|
||||||
|
'0' -> Color(0xFFE91E63)
|
||||||
|
'1' -> Color(0xFF9C27B0)
|
||||||
|
'2' -> Color(0xFF673AB7)
|
||||||
|
'3' -> Color(0xFF3F51B5)
|
||||||
|
'4' -> Color(0xFF2196F3)
|
||||||
|
'5' -> Color(0xFF03A9F4)
|
||||||
|
'6' -> Color(0xFF00BCD4)
|
||||||
|
'7' -> Color(0xFF009688)
|
||||||
|
'8' -> Color(0xFF4CAF50)
|
||||||
|
'9' -> Color(0xFF8BC34A)
|
||||||
|
'A' -> Color(0xFFCDDC39)
|
||||||
|
'B' -> Color(0xFFFFEB3B)
|
||||||
|
'C' -> Color(0xFFFFC107)
|
||||||
|
'D' -> Color(0xFFFF9800)
|
||||||
|
'E' -> Color(0xFFFF5722)
|
||||||
|
'F' -> Color(0xFF795548)
|
||||||
|
'G' -> Color(0xFF9E9E9E)
|
||||||
|
'H' -> Color(0xFF607D8B)
|
||||||
|
'J' -> Color(0xFF9FA8DA)
|
||||||
|
'K' -> Color(0xFF90CAF9)
|
||||||
|
'M' -> Color(0xFF81D4FA)
|
||||||
|
'N' -> Color(0xFF80DEEA)
|
||||||
|
'P' -> Color(0xFF80CBC4)
|
||||||
|
'Q' -> Color(0xFFA5D6A7)
|
||||||
|
'R' -> Color(0xFFC5E1A5)
|
||||||
|
'S' -> Color(0xFFE6EE9C)
|
||||||
|
'T' -> Color(0xFFFFF59D)
|
||||||
|
'V' -> Color(0xFFFFE082)
|
||||||
|
'W' -> Color(0xFFFFCC80)
|
||||||
|
'X' -> Color(0xFFFFAB91)
|
||||||
|
'Y' -> Color(0xFFFF8A65)
|
||||||
|
'Z' -> Color(0xFFFF8A80)
|
||||||
|
else -> Color(0xFFFFFFFF)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -23,7 +23,9 @@ import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import chat.revolt.R
|
import chat.revolt.R
|
||||||
import chat.revolt.api.RevoltAPI
|
import chat.revolt.api.RevoltAPI
|
||||||
|
import chat.revolt.api.schemas.ChannelType
|
||||||
import chat.revolt.components.generic.SheetClickable
|
import chat.revolt.components.generic.SheetClickable
|
||||||
|
import chat.revolt.components.screens.chat.ChannelSheetHeader
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ChannelInfoSheet(
|
fun ChannelInfoSheet(
|
||||||
|
|
@ -46,7 +48,14 @@ fun ChannelInfoSheet(
|
||||||
.padding(horizontal = 16.dp)
|
.padding(horizontal = 16.dp)
|
||||||
.verticalScroll(rememberScrollState()),
|
.verticalScroll(rememberScrollState()),
|
||||||
) {
|
) {
|
||||||
Spacer(modifier = Modifier.height(16.dp))
|
ChannelSheetHeader(
|
||||||
|
channelName = channel.name ?: stringResource(id = R.string.unknown),
|
||||||
|
channelIcon = channel.icon,
|
||||||
|
channelType = channel.channelType ?: ChannelType.TextChannel,
|
||||||
|
channelId = channel.id ?: "9",
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(id = R.string.channel_info_sheet_description),
|
text = stringResource(id = R.string.channel_info_sheet_description),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue