Files
forkmessager/client-mobile/core/presentation/components/AppAvatar.kt
Халимов Рустам 3310a3c4a4 Правка чата
2026-04-14 11:31:20 +03:00

81 lines
2.5 KiB
Kotlin

package core.presentation.components
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
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.material.icons.Icons
import androidx.compose.material.icons.filled.Bookmark
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil.compose.AsyncImage
import core.presentation.theme.SoftSquareShape
@Composable
fun AppAvatar(
url: String?,
name: String,
size: Dp = 48.dp,
modifier: Modifier = Modifier
) {
val isSavedMessages = remember(name) {
name.equals("Избранное", ignoreCase = true) || name.equals("Saved Messages", ignoreCase = true)
}
val initials = remember(name) {
if (isSavedMessages) "" else {
val words = name.trim().split("\\s+".toRegex())
if (words.size >= 2) {
(words[0].take(1) + words[1].take(1)).uppercase()
} else if (name.length >= 2) {
name.take(2).uppercase()
} else {
name.take(1).uppercase()
}
}
}
val avatarColor = Color(0xFF4AA6F3) // Premium Telegram Blue (Web)
Box(
modifier = modifier
.size(size)
.clip(SoftSquareShape)
.background(avatarColor),
contentAlignment = Alignment.Center
) {
if (!url.isNullOrBlank()) {
AsyncImage(
model = url,
contentDescription = name,
modifier = Modifier.size(size),
contentScale = ContentScale.Crop
)
} else if (isSavedMessages) {
Icon(
imageVector = Icons.Default.Bookmark,
contentDescription = null,
tint = Color.White,
modifier = Modifier.size((size.value * 0.5).dp)
)
} else {
Text(
text = initials,
color = Color.White,
fontSize = (size.value * 0.4).sp,
fontWeight = androidx.compose.ui.text.font.FontWeight.Bold,
style = MaterialTheme.typography.titleMedium
)
}
}
}