Replaced elmo avatar placeholder by Color+Initial

This commit is contained in:
Abdelilah El Aissaoui 2021-12-17 23:54:10 +01:00
parent 7f6cc7c32a
commit 79aff9104a
5 changed files with 78 additions and 20 deletions

View File

@ -49,16 +49,18 @@ object NetworkImageLoader {
} }
} }
@Composable @Composable
fun rememberNetworkImage(url: String): ImageBitmap { fun rememberNetworkImageOrNull(url: String, placeHolderImageRes: String? = null): ImageBitmap? {
val networkImageLoader = NetworkImageLoader val networkImageLoader = NetworkImageLoader
var image by remember(url) { var image by remember(url) {
mutableStateOf( val placeHolderImage = if(placeHolderImageRes != null)
useResource("image.jpg") { useResource(placeHolderImageRes) {
Image.makeFromEncoded(it.toByteArray()).toComposeImageBitmap() Image.makeFromEncoded(it.toByteArray()).toComposeImageBitmap()
} }
) else
null
mutableStateOf(placeHolderImage)
} }
LaunchedEffect(url) { LaunchedEffect(url) {
@ -71,4 +73,3 @@ fun rememberNetworkImage(url: String): ImageBitmap {
} }
fun ByteArray.toComposeImage() = Image.makeFromEncoded(this).toComposeImageBitmap() fun ByteArray.toComposeImage() = Image.makeFromEncoded(this).toComposeImageBitmap()

View File

@ -20,11 +20,11 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import app.extensions.* import app.extensions.*
import app.git.GitManager import app.git.GitManager
import app.images.rememberNetworkImage
import app.theme.headerBackground import app.theme.headerBackground
import app.theme.headerText import app.theme.headerText
import app.theme.primaryTextColor import app.theme.primaryTextColor
import app.theme.secondaryTextColor import app.theme.secondaryTextColor
import app.ui.components.AvatarImage
import app.ui.components.ScrollableLazyColumn import app.ui.components.ScrollableLazyColumn
import app.ui.components.TooltipText import app.ui.components.TooltipText
import org.eclipse.jgit.diff.DiffEntry import org.eclipse.jgit.diff.DiffEntry
@ -108,14 +108,11 @@ fun Author(commit: RevCommit) {
.background(MaterialTheme.colors.background), .background(MaterialTheme.colors.background),
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
val url = "https://www.gravatar.com/avatar/${authorIdent.emailAddress.md5}" AvatarImage(
Image(
bitmap = rememberNetworkImage(url),
modifier = Modifier modifier = Modifier
.padding(horizontal = 16.dp) .padding(horizontal = 16.dp)
.height(40.dp) .size(40.dp),
.clip(CircleShape), personIdent = commit.authorIdent,
contentDescription = null,
) )
Column( Column(

View File

@ -0,0 +1,62 @@
package app.ui.components
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.MaterialTheme
import androidx.compose.material.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.graphics.ImageBitmap
import app.extensions.md5
import app.images.rememberNetworkImageOrNull
import org.eclipse.jgit.lib.PersonIdent
@Composable
fun AvatarImage(
modifier: Modifier = Modifier,
personIdent: PersonIdent,
color: Color = MaterialTheme.colors.primary
) {
Box(
modifier = modifier
.clip(CircleShape)
) {
val avatar = rememberAvatar(personIdent.emailAddress)
if(avatar == null) {
Box(
modifier = Modifier
.fillMaxSize()
.background(color),
contentAlignment = Alignment.Center,
) {
Text(
text = personIdent.name.firstOrNull()?.uppercase() ?: "#",
color = Color.White,
)
}
} else {
Image(
bitmap = avatar,
modifier = Modifier
.fillMaxSize(),
contentDescription = null,
)
}
}
}
@Composable
fun rememberAvatar(email: String): ImageBitmap? {
val url = "https://www.gravatar.com/avatar/${email.md5}?s=60&d=404"
return rememberNetworkImageOrNull(
url = url,
placeHolderImageRes = null,
)
}

View File

@ -37,9 +37,9 @@ import app.extensions.*
import app.git.GitManager import app.git.GitManager
import app.git.LogStatus import app.git.LogStatus
import app.git.graph.GraphNode import app.git.graph.GraphNode
import app.images.rememberNetworkImage
import app.theme.* import app.theme.*
import app.ui.SelectedItem import app.ui.SelectedItem
import app.ui.components.AvatarImage
import app.ui.components.ScrollableLazyColumn import app.ui.components.ScrollableLazyColumn
import app.ui.context_menu.branchContextMenuItems import app.ui.context_menu.branchContextMenuItems
import app.ui.context_menu.tagContextMenuItems import app.ui.context_menu.tagContextMenuItems
@ -592,12 +592,10 @@ fun CommitNode(
.border(2.dp, color, shape = CircleShape) .border(2.dp, color, shape = CircleShape)
.clip(CircleShape) .clip(CircleShape)
) { ) {
val url = "https://www.gravatar.com/avatar/${plotCommit.authorIdent.emailAddress.md5}?s=60" AvatarImage(
Image( modifier = Modifier.fillMaxSize(),
bitmap = rememberNetworkImage(url), personIdent = plotCommit.authorIdent,
modifier = Modifier color = color,
.fillMaxSize(),
contentDescription = null
) )
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB