| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- package eu.mjdev.desktop.components.custom
- import androidx.compose.desktop.ui.tooling.preview.Preview
- import androidx.compose.foundation.background
- import androidx.compose.foundation.gestures.Orientation
- import androidx.compose.foundation.layout.*
- import androidx.compose.material.Button
- import androidx.compose.material.ButtonDefaults
- import androidx.compose.runtime.Composable
- import androidx.compose.ui.Alignment
- import androidx.compose.ui.Modifier
- import androidx.compose.ui.graphics.Color
- import androidx.compose.ui.graphics.ColorFilter
- import androidx.compose.ui.graphics.vector.ImageVector
- import androidx.compose.ui.text.font.FontWeight
- import androidx.compose.ui.text.style.TextAlign
- import androidx.compose.ui.unit.Dp
- import androidx.compose.ui.unit.dp
- import eu.mjdev.desktop.components.image.ImageAny
- import eu.mjdev.desktop.components.text.TextAny
- import eu.mjdev.desktop.extensions.Compose.noElevation
- import eu.mjdev.desktop.extensions.Compose.transparent
- import eu.mjdev.desktop.extensions.Modifier.circleBorder
- import eu.mjdev.desktop.extensions.Modifier.clipCircle
- import eu.mjdev.desktop.provider.DesktopProvider
- import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
- @Suppress("FunctionName")
- @Preview
- @Composable
- fun UserAvatar(
- backgroundColor: Color,
- avatarSize: Dp = 128.dp,
- orientation: Orientation = Orientation.Vertical,
- api: DesktopProvider = LocalDesktop.current,
- iconTintColor: Color = Color.White,
- textColor: Color = Color.White,
- onUserAvatarClick: () -> Unit
- ) = Box(
- modifier = Modifier
- .fillMaxWidth()
- .background(backgroundColor)
- .padding(16.dp)
- ) {
- when (orientation) {
- Orientation.Vertical -> Column(
- modifier = Modifier
- .fillMaxWidth()
- .align(Alignment.Center),
- horizontalAlignment = Alignment.CenterHorizontally
- ) {
- Button(
- modifier = Modifier
- .size(avatarSize)
- .clipCircle(),
- contentPadding = PaddingValues(0.dp),
- onClick = onUserAvatarClick,
- colors = ButtonDefaults.transparent(),
- elevation = ButtonDefaults.noElevation()
- ) {
- ImageAny(
- modifier = Modifier
- .size(avatarSize)
- .circleBorder(2.dp, iconTintColor),
- src = api.currentUser.picture,
- colorFilter = if (api.currentUser.picture is ImageVector) ColorFilter.tint(iconTintColor) else null,
- contentDescription = ""
- )
- }
- Column(
- modifier = Modifier.fillMaxWidth()
- .padding(top = 8.dp),
- horizontalAlignment = Alignment.CenterHorizontally
- ) {
- TextAny(
- text = api.currentUser.name ?: api.homeDir?.name ?: "-",
- color = textColor,
- textAlign = TextAlign.Center,
- fontWeight = FontWeight.Bold
- )
- TextAny(
- text = api.machineName,
- color = textColor,
- textAlign = TextAlign.Center,
- fontWeight = FontWeight.Medium
- )
- }
- }
- Orientation.Horizontal -> Row(
- modifier = Modifier
- .fillMaxWidth()
- .align(Alignment.TopCenter),
- horizontalArrangement = Arrangement.Start,
- ) {
- Button(
- modifier = Modifier
- .size(avatarSize)
- .clipCircle(),
- contentPadding = PaddingValues(0.dp),
- onClick = {},
- colors = ButtonDefaults.transparent(),
- elevation = ButtonDefaults.noElevation()
- ) {
- ImageAny(
- modifier = Modifier
- .size(avatarSize)
- .circleBorder(2.dp, iconTintColor),
- src = api.currentUser.picture,
- colorFilter = if (api.currentUser.picture is ImageVector) ColorFilter.tint(iconTintColor) else null,
- contentDescription = ""
- )
- }
- Column(
- modifier = Modifier.padding(start = 8.dp).fillMaxWidth().padding(top = 8.dp),
- ) {
- TextAny(
- text = api.currentUser.name ?: api.homeDir?.name ?: "-",
- color = textColor,
- textAlign = TextAlign.Start,
- fontWeight = FontWeight.Bold
- )
- TextAny(
- text = api.machineName,
- color = textColor,
- textAlign = TextAlign.Start,
- fontWeight = FontWeight.Medium
- )
- }
- }
- }
- }
|