From aeb78b293ed348bc843d7f515b33668488092463 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 23 Jan 2023 20:32:10 -0300 Subject: [PATCH] No more black profile pictures while loading --- .../com/vitorpamplona/amethyst/ui/navigation/AppTopBar.kt | 2 ++ .../vitorpamplona/amethyst/ui/navigation/DrawerContent.kt | 2 ++ .../com/vitorpamplona/amethyst/ui/note/BoostSetCompose.kt | 2 ++ .../com/vitorpamplona/amethyst/ui/note/ChatroomCompose.kt | 6 ++++++ .../amethyst/ui/note/ChatroomMessageCompose.kt | 2 ++ .../com/vitorpamplona/amethyst/ui/note/LikeSetCompose.kt | 2 ++ .../java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt | 3 +++ .../java/com/vitorpamplona/amethyst/ui/note/UserCompose.kt | 2 ++ .../com/vitorpamplona/amethyst/ui/screen/ThreadFeedView.kt | 2 ++ .../amethyst/ui/screen/loggedIn/ChannelScreen.kt | 2 ++ .../amethyst/ui/screen/loggedIn/ChatroomScreen.kt | 2 ++ .../amethyst/ui/screen/loggedIn/ProfileScreen.kt | 2 ++ .../amethyst/ui/screen/loggedIn/SearchScreen.kt | 3 +++ 13 files changed, 32 insertions(+) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppTopBar.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppTopBar.kt index a2606cd49..c25b66866 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppTopBar.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppTopBar.kt @@ -39,6 +39,7 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavHostController import coil.compose.AsyncImage +import coil.compose.rememberAsyncImagePainter import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.service.NostrAccountDataSource import com.vitorpamplona.amethyst.service.NostrChannelDataSource @@ -183,6 +184,7 @@ fun MainTopBar(scaffoldState: ScaffoldState, accountViewModel: AccountViewModel) ) { AsyncImage( model = accountUser?.profilePicture() ?: "https://robohash.org/ohno.png", + placeholder = rememberAsyncImagePainter("https://robohash.org/${accountUser?.pubkeyHex}.png"), contentDescription = "Profile Image", modifier = Modifier .width(34.dp) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt index ce7649d94..552633394 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt @@ -37,6 +37,7 @@ import androidx.compose.ui.unit.sp import androidx.navigation.NavController import androidx.navigation.NavHostController import coil.compose.AsyncImage +import coil.compose.rememberAsyncImagePainter import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.ui.screen.AccountStateViewModel @@ -117,6 +118,7 @@ fun ProfileContent(accountUser: User?, modifier: Modifier = Modifier, scaffoldSt AsyncImage( model = accountUser?.profilePicture() ?: "https://robohash.org/ohno.png", contentDescription = "Profile Image", + placeholder = rememberAsyncImagePainter("https://robohash.org/${accountUser?.pubkeyHex}.png"), modifier = Modifier .width(100.dp) .height(100.dp) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/BoostSetCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/BoostSetCompose.kt index bbc775985..9759728b6 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/BoostSetCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/BoostSetCompose.kt @@ -21,6 +21,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.navigation.NavController import coil.compose.AsyncImage +import coil.compose.rememberAsyncImagePainter import com.google.accompanist.flowlayout.FlowRow import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.ui.screen.BoostSetCard @@ -67,6 +68,7 @@ fun BoostSetCompose(likeSetCard: BoostSetCard, isInnerNote: Boolean = false, acc AsyncImage( model = userState?.user?.profilePicture(), + placeholder = rememberAsyncImagePainter("https://robohash.org/${userState?.user?.pubkeyHex}.png"), contentDescription = "Profile Image", modifier = Modifier .width(35.dp) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomCompose.kt index 0168605cd..e12cb9f60 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomCompose.kt @@ -17,11 +17,13 @@ import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.navigation.NavController import coil.compose.AsyncImage +import coil.compose.rememberAsyncImagePainter import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.service.model.ChannelCreateEvent import com.vitorpamplona.amethyst.service.model.ChannelMetadataEvent @@ -57,6 +59,7 @@ fun ChatroomCompose(baseNote: Note, accountViewModel: AccountViewModel, navContr channel?.let { channel -> ChannelName( channelPicture = channel.profilePicture(), + channelPicturePlaceholder = null, channelTitle = { Text( "${channel.info.name}", @@ -93,6 +96,7 @@ fun ChatroomCompose(baseNote: Note, accountViewModel: AccountViewModel, navContr userToComposeOn?.let { user -> ChannelName( channelPicture = user.profilePicture(), + channelPicturePlaceholder = rememberAsyncImagePainter("https://robohash.org/${user.pubkeyHex}.png"), channelTitle = { UsernameDisplay(user, it) }, channelLastTime = note.event?.createdAt, channelLastContent = accountViewModel.decrypt(note), @@ -105,6 +109,7 @@ fun ChatroomCompose(baseNote: Note, accountViewModel: AccountViewModel, navContr @Composable fun ChannelName( channelPicture: String, + channelPicturePlaceholder: Painter?, channelTitle: @Composable (Modifier) -> Unit, channelLastTime: Long?, channelLastContent: String?, @@ -117,6 +122,7 @@ fun ChannelName( AsyncImage( model = channelPicture, + placeholder = channelPicturePlaceholder, contentDescription = "Profile Image", modifier = Modifier .width(55.dp) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomMessageCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomMessageCompose.kt index 5714698ef..c2bcf3580 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomMessageCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomMessageCompose.kt @@ -35,6 +35,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.NavController import coil.compose.AsyncImage +import coil.compose.rememberAsyncImagePainter import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.service.model.ChannelCreateEvent import com.vitorpamplona.amethyst.service.model.ChannelMessageEvent @@ -117,6 +118,7 @@ fun ChatroomMessageCompose(baseNote: Note, innerQuote: Boolean = false, accountV ) { AsyncImage( model = author?.profilePicture(), + placeholder = rememberAsyncImagePainter("https://robohash.org/${author?.pubkeyHex}.png"), contentDescription = "Profile Image", modifier = Modifier .width(25.dp) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/LikeSetCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/LikeSetCompose.kt index ed49bbad6..3365cf02c 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/LikeSetCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/LikeSetCompose.kt @@ -21,6 +21,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.navigation.NavController import coil.compose.AsyncImage +import coil.compose.rememberAsyncImagePainter import com.google.accompanist.flowlayout.FlowRow import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.ui.screen.LikeSetCard @@ -67,6 +68,7 @@ fun LikeSetCompose(likeSetCard: LikeSetCard, modifier: Modifier = Modifier, isIn AsyncImage( model = userState?.user?.profilePicture(), + placeholder = rememberAsyncImagePainter("https://robohash.org/${userState?.user?.pubkeyHex}.png"), contentDescription = "Profile Image", modifier = Modifier .width(35.dp).height(35.dp) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt index c8434306d..ab8fb2e25 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt @@ -32,6 +32,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.navigation.NavController import coil.compose.AsyncImage +import coil.compose.rememberAsyncImagePainter import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.toNote import com.vitorpamplona.amethyst.service.model.ChannelMessageEvent @@ -87,6 +88,7 @@ fun NoteCompose(baseNote: Note, modifier: Modifier = Modifier, isInnerNote: Bool AsyncImage( model = author?.profilePicture(), contentDescription = "Profile Image", + placeholder = rememberAsyncImagePainter("https://robohash.org/${author?.pubkeyHex}.png"), modifier = Modifier .width(55.dp).height(55.dp) .clip(shape = CircleShape) @@ -103,6 +105,7 @@ fun NoteCompose(baseNote: Note, modifier: Modifier = Modifier, isInnerNote: Bool AsyncImage( model = boostedPosts[0].author?.profilePicture(), contentDescription = "Profile Image", + placeholder = rememberAsyncImagePainter("https://robohash.org/${boostedPosts[0].author?.pubkeyHex}.png"), modifier = Modifier .width(35.dp).height(35.dp) .clip(shape = CircleShape) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserCompose.kt index be0b63df0..37070edd6 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserCompose.kt @@ -20,6 +20,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.navigation.NavController import coil.compose.AsyncImage +import coil.compose.rememberAsyncImagePainter import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.ui.screen.FollowButton import com.vitorpamplona.amethyst.ui.screen.UnfollowButton @@ -47,6 +48,7 @@ fun UserCompose(baseUser: User, accountViewModel: AccountViewModel, navControlle AsyncImage( model = user.profilePicture(), + placeholder = rememberAsyncImagePainter("https://robohash.org/${user.pubkeyHex}.png"), contentDescription = "Profile Image", modifier = Modifier .width(55.dp).height(55.dp) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ThreadFeedView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ThreadFeedView.kt index 31e88ebf9..4a7670876 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ThreadFeedView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ThreadFeedView.kt @@ -33,6 +33,7 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavController import coil.compose.AsyncImage +import coil.compose.rememberAsyncImagePainter import com.google.accompanist.swiperefresh.SwipeRefresh import com.google.accompanist.swiperefresh.rememberSwipeRefreshState import com.vitorpamplona.amethyst.model.Note @@ -176,6 +177,7 @@ fun NoteMaster(baseNote: Note, accountViewModel: AccountViewModel, navController // Draws the boosted picture outside the boosted card. AsyncImage( model = author?.profilePicture(), + placeholder = rememberAsyncImagePainter("https://robohash.org/${author?.pubkeyHex}.png"), contentDescription = "Profile Image", modifier = Modifier .width(55.dp).height(55.dp) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChannelScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChannelScreen.kt index b6ce28550..c3cee606b 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChannelScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChannelScreen.kt @@ -40,6 +40,7 @@ import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController import coil.compose.AsyncImage +import coil.compose.rememberAsyncImagePainter import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.Channel import com.vitorpamplona.amethyst.model.Note @@ -135,6 +136,7 @@ fun ChannelHeader(baseChannel: Channel, account: Account, accountStateViewModel: AsyncImage( model = channel?.profilePicture(), + placeholder = null, contentDescription = "Profile Image", modifier = Modifier .width(35.dp) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt index b881c37b1..674315bb0 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt @@ -30,6 +30,7 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController import coil.compose.AsyncImage +import coil.compose.rememberAsyncImagePainter import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.service.NostrChatRoomDataSource import com.vitorpamplona.amethyst.ui.actions.PostButton @@ -116,6 +117,7 @@ fun ChatroomHeader(baseUser: User, accountViewModel: AccountViewModel, navContro AsyncImage( model = author?.profilePicture(), + placeholder = rememberAsyncImagePainter("https://robohash.org/${author?.pubkeyHex}.png"), contentDescription = "Profile Image", modifier = Modifier .width(35.dp).height(35.dp) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt index 3b2f19983..2eec43405 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt @@ -49,6 +49,7 @@ import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController import coil.compose.AsyncImage +import coil.compose.rememberAsyncImagePainter import com.google.accompanist.pager.ExperimentalPagerApi import com.google.accompanist.pager.HorizontalPager import com.google.accompanist.pager.pagerTabIndicatorOffset @@ -130,6 +131,7 @@ fun ProfileScreen(userId: String?, accountViewModel: AccountViewModel, navContro verticalAlignment = Alignment.Bottom) { AsyncImage( model = user.profilePicture(), + placeholder = rememberAsyncImagePainter("https://robohash.org/${user?.pubkeyHex}.png"), contentDescription = "Profile Image", modifier = Modifier .width(100.dp) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt index 2a2bc6e8e..62a3715ae 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/SearchScreen.kt @@ -44,6 +44,7 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController import coil.compose.AsyncImage +import coil.compose.rememberAsyncImagePainter import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.Channel import com.vitorpamplona.amethyst.model.LocalCache @@ -174,6 +175,7 @@ private fun SearchBar(accountViewModel: AccountViewModel, navController: NavCont itemsIndexed(searchResultsChannels.value, key = { _, item -> "c"+item.idHex }) { index, item -> ChannelName( channelPicture = item.profilePicture(), + channelPicturePlaceholder = null, channelTitle = { Text( "${item.info.name}", @@ -215,6 +217,7 @@ fun UserLine( AsyncImage( model = user.profilePicture(), + placeholder = rememberAsyncImagePainter("https://robohash.org/${user.pubkeyHex}.png"), contentDescription = "Profile Image", modifier = Modifier .width(55.dp)