From 7d8ca1ec98a33542336ba38b608b90f6eb35d4d3 Mon Sep 17 00:00:00 2001 From: Gabriel Luong Date: Mon, 5 Jul 2021 13:24:08 -0400 Subject: [PATCH] [fenix] For https://github.com/mozilla-mobile/fenix/issues/19886 - Add favicon to website info view Co-authored-by: Arturo Mejia --- .../settings/quicksettings/WebsiteInfoView.kt | 13 +++++--- .../res/layout/quicksettings_website_info.xml | 14 ++++++++- .../quicksettings/WebsiteInfoViewTest.kt | 30 ++++++++++++------- 3 files changed, 42 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt index c7c50fabe..cbf2f1b62 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt @@ -7,9 +7,11 @@ package org.mozilla.fenix.settings.quicksettings import android.view.LayoutInflater import android.view.ViewGroup import androidx.core.content.ContextCompat.getColor -import androidx.core.view.isVisible +import mozilla.components.browser.icons.BrowserIcons import mozilla.components.support.ktx.android.content.getDrawableWithTint -import org.mozilla.fenix.R +import mozilla.components.support.ktx.kotlin.tryGetHostFromUrl +import org.mozilla.fenix.ext.components +import org.mozilla.fenix.ext.loadIntoView import org.mozilla.fenix.databinding.QuicksettingsWebsiteInfoBinding /** @@ -18,9 +20,11 @@ import org.mozilla.fenix.databinding.QuicksettingsWebsiteInfoBinding * Currently it does not support any user interaction. * * @param container [ViewGroup] in which this View will inflate itself. + * @param icons [BrowserIcons] instance for rendering the sites icon. */ class WebsiteInfoView( - container: ViewGroup + container: ViewGroup, + private val icons: BrowserIcons = container.context.components.core.icons ) { val binding = QuicksettingsWebsiteInfoBinding.inflate( LayoutInflater.from(container.context), @@ -34,12 +38,13 @@ class WebsiteInfoView( * @param state [WebsiteInfoState] to be rendered. */ fun update(state: WebsiteInfoState) { + icons.loadIntoView(binding.favicon_image, state.websiteUrl) bindUrl(state.websiteUrl) bindSecurityInfo(state.websiteSecurityUiValues) } private fun bindUrl(websiteUrl: String) { - binding.url.text = websiteUrl + binding.url.text = websiteUrl.tryGetHostFromUrl() } private fun bindSecurityInfo(uiValues: WebsiteSecurityUiValues) { diff --git a/app/src/main/res/layout/quicksettings_website_info.xml b/app/src/main/res/layout/quicksettings_website_info.xml index 815e0c0ac..a041e1a98 100644 --- a/app/src/main/res/layout/quicksettings_website_info.xml +++ b/app/src/main/res/layout/quicksettings_website_info.xml @@ -15,11 +15,21 @@ + + diff --git a/app/src/test/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoViewTest.kt b/app/src/test/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoViewTest.kt index 75d7357a5..0b278642c 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoViewTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoViewTest.kt @@ -5,6 +5,11 @@ package org.mozilla.fenix.settings.quicksettings import android.widget.FrameLayout +import io.mockk.every +import io.mockk.mockk +import io.mockk.verify +import mozilla.components.browser.icons.BrowserIcons +import mozilla.components.browser.icons.IconRequest import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Before @@ -17,26 +22,31 @@ import org.mozilla.fenix.helpers.FenixRobolectricTestRunner class WebsiteInfoViewTest { private lateinit var view: WebsiteInfoView + private lateinit var icons: BrowserIcons private lateinit var binding: QuicksettingsWebsiteInfoBinding @Before fun setup() { - view = WebsiteInfoView(FrameLayout(testContext)) + icons = mockk(relaxed = true) + view = WebsiteInfoView(FrameLayout(testContext), icons) + every { icons.loadIntoView(view.favicon_image, any()) } returns mockk() binding = view.binding } @Test fun bindUrlAndTitle() { - view.update( - WebsiteInfoState( - websiteUrl = "https://mozilla.org", - websiteTitle = "Mozilla", - websiteSecurityUiValues = WebsiteSecurityUiValues.SECURE, - certificateName = "" - ) - ) + val websiteUrl = "https://mozilla.org" + + view.update(WebsiteInfoState( + websiteUrl = websiteUrl, + websiteTitle = "Mozilla", + websiteSecurityUiValues = WebsiteSecurityUiValues.SECURE, + certificateName = "" + )) + + verify { icons.loadIntoView(binding.favicon_image, IconRequest(websiteUrl)) } - assertEquals("https://mozilla.org", binding.url.text) + assertEquals("mozilla.org", binding.url.text) assertEquals("Secure Connection", binding.securityInfo.text) }