From e88cd55c6d6efbd2b8d83bf071cfa15cc12b7266 Mon Sep 17 00:00:00 2001 From: Adam Liga Date: Fri, 31 Oct 2025 00:34:18 +0100 Subject: [PATCH] Fix Reader feed image display for VIDEO card types - VIDEO cards now show featured images when available - Updated buildFeaturedImageVisibility() to support VIDEO cards with images - Updated buildFeaturedImageUrl() for consistent behavior across card types - Added comprehensive unit tests for VIDEO card image display - Fixes issue where VIDEO posts with thumbnails didn't show images Fixes #21332 --- .../discover/ReaderPostUiStateBuilder.kt | 12 +++-- .../discover/ReaderPostUiStateBuilderTest.kt | 51 +++++++++++-------- 2 files changed, 39 insertions(+), 24 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderPostUiStateBuilder.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderPostUiStateBuilder.kt index 579b4755f368..d7c47c7491cb 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderPostUiStateBuilder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderPostUiStateBuilder.kt @@ -282,9 +282,13 @@ class ReaderPostUiStateBuilder @Inject constructor( // TODO malinjir show overlay when buildFullVideoUrl != null private fun buildVideoOverlayVisibility(post: ReaderPost) = post.cardType == VIDEO - private fun buildFeaturedImageVisibility(post: ReaderPost) = - (post.cardType == PHOTO || post.cardType == DEFAULT) && post.hasFeaturedImage() || - post.cardType == VIDEO && post.hasFeaturedVideo() + private fun buildFeaturedImageVisibility(post: ReaderPost): Boolean { + return when (post.cardType) { + GALLERY -> false + VIDEO -> post.hasFeaturedVideo() || post.hasFeaturedImage() + else -> post.hasFeaturedImage() + } + } private fun buildThumbnailStripUrls(post: ReaderPost) = post.takeIf { it.cardType == GALLERY } @@ -292,7 +296,7 @@ class ReaderPostUiStateBuilder @Inject constructor( private fun buildFeaturedImageUrl(post: ReaderPost, photonWidth: Int, photonHeight: Int): String? { return post - .takeIf { (it.cardType == PHOTO || it.cardType == DEFAULT) && it.hasFeaturedImage() } + .takeIf { it.cardType != GALLERY && it.hasFeaturedImage() } ?.getFeaturedImageForDisplay(photonWidth, photonHeight) } diff --git a/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderPostUiStateBuilderTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderPostUiStateBuilderTest.kt index a4fa6856162e..26479d91157a 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderPostUiStateBuilderTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderPostUiStateBuilderTest.kt @@ -312,10 +312,10 @@ class ReaderPostUiStateBuilderTest : BaseUnitTest() { // region FEATURED IMAGE @Test - fun `featured image is displayed for photo and default card types`() = test { + fun `featured image is displayed for supported card types`() = test { // Arrange val dummyUrl = "12345" - ReaderCardType.values().filter { it == PHOTO || it == DEFAULT }.forEach { + ReaderCardType.values().filter { it != GALLERY }.forEach { val post = createPost(cardType = it, hasFeaturedImage = true, featuredImageUrlForDisplay = dummyUrl) // Act val uiState = mapPostToUiState(post) @@ -325,10 +325,10 @@ class ReaderPostUiStateBuilderTest : BaseUnitTest() { } @Test - fun `featured image is displayed for photo and default card types for new UI`() = test { + fun `featured image is displayed for supported card types for new UI`() = test { // Arrange val dummyUrl = "12345" - ReaderCardType.values().filter { it == PHOTO || it == DEFAULT }.forEach { + ReaderCardType.values().filter { it != GALLERY }.forEach { val post = createPost(cardType = it, hasFeaturedImage = true, featuredImageUrlForDisplay = dummyUrl) // Act val uiState = mapPostToUiState(post) @@ -338,27 +338,23 @@ class ReaderPostUiStateBuilderTest : BaseUnitTest() { } @Test - fun `featured image is not displayed for other than photo and default card types`() = test { + fun `featured image is not displayed for gallery card type`() = test { // Arrange - ReaderCardType.values().filter { it != PHOTO && it != DEFAULT }.forEach { - val post = createPost(cardType = it, hasFeaturedImage = true) - // Act - val uiState = mapPostToUiState(post) - // Assert - assertThat(uiState.featuredImageUrl).isNull() - } + val post = createPost(cardType = GALLERY, hasFeaturedImage = true) + // Act + val uiState = mapPostToUiState(post) + // Assert + assertThat(uiState.featuredImageUrl).isNull() } @Test - fun `featured image is not displayed for other than photo and default card types for new UI`() = test { + fun `featured image is not displayed for gallery card type for new UI`() = test { // Arrange - ReaderCardType.values().filter { it != PHOTO && it != DEFAULT }.forEach { - val post = createPost(cardType = it, hasFeaturedImage = true) - // Act - val uiState = mapPostToUiState(post) - // Assert - assertThat(uiState.featuredImageUrl).isNull() - } + val post = createPost(cardType = GALLERY, hasFeaturedImage = true) + // Act + val uiState = mapPostToUiState(post) + // Assert + assertThat(uiState.featuredImageUrl).isNull() } @Test @@ -380,6 +376,21 @@ class ReaderPostUiStateBuilderTest : BaseUnitTest() { // Assert assertThat(uiState.featuredImageUrl).isNull() } + + @Test + fun `video card shows featured media area when only video is available`() = test { + // Arrange + val post = createPost( + cardType = VIDEO, + hasFeaturedVideo = true, + featuredVideoUrl = "video://example", + hasFeaturedImage = false + ) + // Act + val uiState = mapPostToUiState(post) + // Assert + assertThat(uiState.featuredImageVisibility).isTrue + } // endregion // region TITLE & EXCERPT