diff --git a/persona/src/androidMain/kotlin/com/dimension/maskbook/persona/ui/AvatarImage.kt b/persona/src/androidMain/kotlin/com/dimension/maskbook/persona/ui/AvatarImage.kt new file mode 100644 index 00000000..9c7f8195 --- /dev/null +++ b/persona/src/androidMain/kotlin/com/dimension/maskbook/persona/ui/AvatarImage.kt @@ -0,0 +1,60 @@ +/* + * Mask-Android + * + * Copyright (C) 2022 DimensionDev and Contributors + * + * This file is part of Mask-Android. + * + * Mask-Android is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Mask-Android is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Mask-Android. If not, see . + */ +package com.dimension.maskbook.persona.ui + +import androidx.compose.foundation.Image +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.LocalContentAlpha +import androidx.compose.material.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import coil.compose.rememberImagePainter +import com.dimension.maskbook.common.ui.widget.NameImage +import com.dimension.maskbook.persona.export.model.Network + +@Composable +fun AvatarImage( + modifier: Modifier = Modifier, + avatar: String, + name: String, + network: Network, +) { + if (avatar.isNotEmpty()) { + val source = when (network) { + Network.Twitter -> "https://unavatar.io/$name" + else -> avatar + } + Image( + painter = rememberImagePainter(source), + contentDescription = null, + modifier = modifier + .clip(CircleShape), + alpha = LocalContentAlpha.current, + ) + } else { + NameImage( + name = name, + style = MaterialTheme.typography.h4, + modifier = modifier, + ) + } +} diff --git a/persona/src/androidMain/kotlin/com/dimension/maskbook/persona/ui/scenes/contacts/ContactsScene.kt b/persona/src/androidMain/kotlin/com/dimension/maskbook/persona/ui/scenes/contacts/ContactsScene.kt index 919c23f3..6a51ad1b 100644 --- a/persona/src/androidMain/kotlin/com/dimension/maskbook/persona/ui/scenes/contacts/ContactsScene.kt +++ b/persona/src/androidMain/kotlin/com/dimension/maskbook/persona/ui/scenes/contacts/ContactsScene.kt @@ -50,18 +50,17 @@ import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import coil.compose.rememberImagePainter import com.dimension.maskbook.common.ui.widget.HorizontalScenePadding import com.dimension.maskbook.common.ui.widget.MaskAnimatedVisibility import com.dimension.maskbook.common.ui.widget.MaskListItem import com.dimension.maskbook.common.ui.widget.MaskSearchInput -import com.dimension.maskbook.common.ui.widget.NameImage import com.dimension.maskbook.common.ui.widget.SinglelineText import com.dimension.maskbook.common.ui.widget.button.MaskButton import com.dimension.maskbook.common.ui.widget.button.PrimaryButton import com.dimension.maskbook.persona.R import com.dimension.maskbook.persona.model.ContactData import com.dimension.maskbook.persona.model.icon +import com.dimension.maskbook.persona.ui.AvatarImage @OptIn(ExperimentalFoundationApi::class) @Composable @@ -182,18 +181,12 @@ fun LazyListScope.ContactsScene( MaskListItem( icon = { Box(contentAlignment = Alignment.BottomEnd) { - if (item.avatar.isEmpty()) { - NameImage( - name = item.name, - modifier = Modifier.size(38.dp), - ) - } else { - Image( - painter = rememberImagePainter(item.avatar), - contentDescription = null, - modifier = Modifier.size(38.dp).clip(shape = CircleShape), - ) - } + AvatarImage( + modifier = Modifier.size(38.dp), + avatar = item.avatar, + name = item.name, + network = item.network + ) Image( painter = painterResource(item.network.icon), contentDescription = null, diff --git a/persona/src/androidMain/kotlin/com/dimension/maskbook/persona/ui/scenes/social/SocialScene.kt b/persona/src/androidMain/kotlin/com/dimension/maskbook/persona/ui/scenes/social/SocialScene.kt index a8a6e19f..e71a7d86 100644 --- a/persona/src/androidMain/kotlin/com/dimension/maskbook/persona/ui/scenes/social/SocialScene.kt +++ b/persona/src/androidMain/kotlin/com/dimension/maskbook/persona/ui/scenes/social/SocialScene.kt @@ -51,15 +51,14 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import coil.compose.rememberImagePainter import com.dimension.maskbook.common.ui.widget.HorizontalScenePadding -import com.dimension.maskbook.common.ui.widget.NameImage import com.dimension.maskbook.common.ui.widget.button.MaskGridButton import com.dimension.maskbook.common.ui.widget.itemsGridIndexed import com.dimension.maskbook.persona.R import com.dimension.maskbook.persona.export.model.Network import com.dimension.maskbook.persona.export.model.SocialData import com.dimension.maskbook.persona.model.icon +import com.dimension.maskbook.persona.ui.AvatarImage @Composable fun SocialScene( @@ -169,7 +168,12 @@ private fun SocialItem( ), icon = { Box { - AvatarImage(item.avatar, item.name) + AvatarImage( + modifier = Modifier.size(SocialScreenDefaults.itemIconSize), + avatar = item.avatar, + name = item.name, + network = item.network, + ) Image( painter = painterResource(item.network.icon), contentDescription = null, @@ -204,26 +208,6 @@ private fun SocialItem( ) } -@Composable -private fun AvatarImage(avatar: String, name: String) { - if (avatar.isNotEmpty()) { - Image( - painter = rememberImagePainter(avatar), - contentDescription = null, - modifier = Modifier - .size(SocialScreenDefaults.itemIconSize) - .clip(CircleShape), - alpha = LocalContentAlpha.current, - ) - } else { - NameImage( - name = name, - style = MaterialTheme.typography.h4, - modifier = Modifier.size(SocialScreenDefaults.itemIconSize), - ) - } -} - @Preview(showBackground = true) @Composable private fun AddIconPreview() {