| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package eu.mjdev.desktop.components.custom
- import androidx.compose.desktop.ui.tooling.preview.Preview
- import androidx.compose.foundation.Image
- 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.material.Text
- 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.text.style.TextAlign
- import androidx.compose.ui.unit.Dp
- import androidx.compose.ui.unit.dp
- 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
- @Preview
- @Composable
- fun UserAvatar(
- backgroundColor: Color,
- avatarSize: Dp = 128.dp,
- orientation: Orientation = Orientation.Vertical,
- api: DesktopProvider = LocalDesktop.current,
- 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()
- ) {
- Image(
- modifier = Modifier
- .size(avatarSize)
- .circleBorder(2.dp, Color.White.copy(alpha = 0.6f)),
- imageVector = api.currentUser.picture,
- colorFilter = ColorFilter.tint(Color.White),
- contentDescription = ""
- )
- }
- Text(
- modifier = Modifier.fillMaxWidth().padding(top = 16.dp),
- text = api.currentUser.name ?: api.appsProvider.homeDir?.name ?: "-",
- color = Color.White,
- textAlign = TextAlign.Center
- )
- }
- 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()
- ) {
- Image(
- modifier = Modifier
- .size(avatarSize)
- .circleBorder(2.dp, Color.White.copy(alpha = 0.6f)),
- imageVector = api.currentUser.picture,
- colorFilter = ColorFilter.tint(Color.White),
- contentDescription = ""
- )
- }
- Text(
- modifier = Modifier.padding(start = 16.dp).fillMaxWidth().padding(top = 16.dp),
- text = api.currentUser.name ?: api.appsProvider.homeDir?.name ?: "-",
- color = Color.White,
- textAlign = TextAlign.Start
- )
- }
- }
- }
|