81 lines
2.5 KiB
Kotlin
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
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|