diff --git a/homeUi/screenshotTests/roborazzi/com.gravatar.app.homeUi.presentation.home.gravatar.GravatarScreenTest.gravatarScreenWithOnlyOneAvatarBeingUploaded.png b/homeUi/screenshotTests/roborazzi/com.gravatar.app.homeUi.presentation.home.gravatar.GravatarScreenTest.gravatarScreenWithOnlyOneAvatarBeingUploaded.png new file mode 100644 index 00000000..2224eee7 Binary files /dev/null and b/homeUi/screenshotTests/roborazzi/com.gravatar.app.homeUi.presentation.home.gravatar.GravatarScreenTest.gravatarScreenWithOnlyOneAvatarBeingUploaded.png differ diff --git a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/gravatar/components/AvatarsGridSection.kt b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/gravatar/components/AvatarsGridSection.kt index 9ff9a589..a20e6575 100644 --- a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/gravatar/components/AvatarsGridSection.kt +++ b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/gravatar/components/AvatarsGridSection.kt @@ -53,7 +53,7 @@ internal fun LazyGridScope.avatarsGridSection( ) } } else { - if (avatars.none { it is AvatarUi.Uploaded && it.isSelected }) { + if (avatars.shouldShowNoAvatarSelectedBanner) { item( span = { GridItemSpan(maxLineSpan) }, ) { @@ -109,6 +109,9 @@ private fun AvatarsGridHeader( } } +private val List.shouldShowNoAvatarSelectedBanner: Boolean + get() = none { it is AvatarUi.Uploaded && it.isSelected } && any { it is AvatarUi.Uploaded } + @Composable private fun NoAvatarSelectedBanner( modifier: Modifier = Modifier @@ -192,6 +195,33 @@ private fun AvatarsGridSectionNoAvatarSelectedPreview() { } } +@Composable +@Preview(showBackground = true) +private fun AvatarsGridSectionUploadingFirstAvatarPreview() { + MaterialTheme { + Box { + LazyVerticalGrid( + columns = GridCells.Adaptive(minSize = avatarSize), + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + state = rememberLazyGridState(), + ) { + avatarsGridSection( + avatars = List(1) { + AvatarUi.Local( + uri = Uri.EMPTY, + isLoading = true + ) + }, + onAvatarOptionClicked = { _, _ -> }, + onFailedAvatarClicked = { }, + ) + } + } + } +} + @Composable @Preview(showBackground = true) private fun AvatarsGridSectionEmptyPreview() { diff --git a/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/gravatar/GravatarScreenTest.kt b/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/gravatar/GravatarScreenTest.kt index de41a25b..e0c91709 100644 --- a/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/gravatar/GravatarScreenTest.kt +++ b/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/gravatar/GravatarScreenTest.kt @@ -1,5 +1,6 @@ package com.gravatar.app.homeUi.presentation.home.gravatar +import android.net.Uri import com.gravatar.app.design.theme.GravatarAppTheme import com.gravatar.app.testUtils.roborazzi.RoborazziTest import com.gravatar.restapi.models.Avatar @@ -58,6 +59,23 @@ class GravatarScreenTest : RoborazziTest() { } } + @Test + fun gravatarScreenWithOnlyOneAvatarBeingUploaded() = screenshotTest { + GravatarAppTheme { + GravatarScreen( + uiState = GravatarUiState( + isLoading = false, + avatars = emptyList(), + uploadingAvatar = Uri.EMPTY, + selectedAvatarId = null + ), + onEvent = { }, + onTakePictureClicked = { }, + onPickMediaClicked = { }, + ) + } + } + @Test fun gravatarScreenWithNullAvatars() = screenshotTest { GravatarAppTheme {