diff --git a/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegate.kt b/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegate.kt index 428438ae4..7ca18ec46 100644 --- a/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegate.kt +++ b/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegate.kt @@ -13,6 +13,7 @@ import android.view.View import androidx.core.net.toUri import androidx.core.text.HtmlCompat import androidx.core.text.getSpans +import androidx.core.view.isVisible import mozilla.components.feature.addons.Addon import mozilla.components.feature.addons.ui.translateDescription import mozilla.components.feature.addons.ui.updatedAtDate @@ -68,12 +69,25 @@ class AddonDetailsBindingDelegate( } private fun bindWebsite(addon: Addon) { + if (addon.siteUrl.isBlank()) { + binding.homePageLabel.isVisible = false + binding.homePageDivider.isVisible = false + return + } + binding.homePageLabel.setOnClickListener { interactor.openWebsite(addon.siteUrl.toUri()) } } private fun bindLastUpdated(addon: Addon) { + if (addon.updatedAt.isBlank()) { + binding.lastUpdatedLabel.isVisible = false + binding.lastUpdatedText.isVisible = false + binding.lastUpdatedDivider.isVisible = false + return + } + binding.lastUpdatedText.text = dateFormatter.format(addon.updatedAtDate) } @@ -95,6 +109,13 @@ class AddonDetailsBindingDelegate( } private fun bindAuthors(addon: Addon) { + if (addon.authors.isEmpty()) { + binding.authorLabel.isVisible = false + binding.authorText.isVisible = false + binding.authorDivider.isVisible = false + return + } + binding.authorText.text = addon.authors.joinToString { author -> author.name }.trim() } diff --git a/app/src/test/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegateTest.kt b/app/src/test/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegateTest.kt index d59b96bd7..34727b2b6 100644 --- a/app/src/test/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegateTest.kt +++ b/app/src/test/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegateTest.kt @@ -8,11 +8,13 @@ import android.net.Uri import android.text.method.LinkMovementMethod import android.view.LayoutInflater import android.view.View +import androidx.core.view.isVisible import io.mockk.mockk import io.mockk.verify import mozilla.components.feature.addons.Addon import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test @@ -137,4 +139,30 @@ class AddonDetailsBindingDelegateTest { ) assertTrue(binding.details.movementMethod is LinkMovementMethod) } + + @Test + fun `bind without last updated date`() { + detailsBindingDelegate.bind(baseAddon.copy(updatedAt = "")) + + assertFalse(binding.lastUpdatedLabel.isVisible) + assertFalse(binding.lastUpdatedText.isVisible) + assertFalse(binding.lastUpdatedDivider.isVisible) + } + + @Test + fun `bind without authors`() { + detailsBindingDelegate.bind(baseAddon.copy(authors = emptyList())) + + assertFalse(binding.authorLabel.isVisible) + assertFalse(binding.authorText.isVisible) + assertFalse(binding.authorDivider.isVisible) + } + + @Test + fun `bind without a home page`() { + detailsBindingDelegate.bind(baseAddon.copy(siteUrl = "")) + + assertFalse(binding.homePageLabel.isVisible) + assertFalse(binding.homePageDivider.isVisible) + } }