diff --git a/app/src/main/java/org/mozilla/fenix/tabhistory/TabHistoryAdapter.kt b/app/src/main/java/org/mozilla/fenix/tabhistory/TabHistoryAdapter.kt index 96e130079..8293d20ee 100644 --- a/app/src/main/java/org/mozilla/fenix/tabhistory/TabHistoryAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/tabhistory/TabHistoryAdapter.kt @@ -8,6 +8,7 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter +import mozilla.components.ui.widgets.WidgetSiteItemView import org.mozilla.fenix.R data class TabHistoryItem( @@ -23,7 +24,7 @@ class TabHistoryAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TabHistoryViewHolder { val view = LayoutInflater.from(parent.context) - .inflate(R.layout.tab_history_list_item, parent, false) + .inflate(R.layout.site_list_item, parent, false) as WidgetSiteItemView return TabHistoryViewHolder(view, interactor) } diff --git a/app/src/main/java/org/mozilla/fenix/tabhistory/TabHistoryViewHolder.kt b/app/src/main/java/org/mozilla/fenix/tabhistory/TabHistoryViewHolder.kt index 0f001590b..d81593e43 100644 --- a/app/src/main/java/org/mozilla/fenix/tabhistory/TabHistoryViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/tabhistory/TabHistoryViewHolder.kt @@ -4,40 +4,38 @@ package org.mozilla.fenix.tabhistory -import android.view.View -import androidx.core.view.isVisible -import kotlinx.android.synthetic.main.tab_history_list_item.* +import androidx.recyclerview.widget.RecyclerView +import mozilla.components.browser.icons.BrowserIcons import mozilla.components.support.ktx.android.content.getColorFromAttr +import mozilla.components.ui.widgets.WidgetSiteItemView import org.mozilla.fenix.R -import org.mozilla.fenix.library.LibrarySiteItemView -import org.mozilla.fenix.utils.view.ViewHolder +import org.mozilla.fenix.ext.components +import org.mozilla.fenix.ext.loadIntoView class TabHistoryViewHolder( - view: View, - private val interactor: TabHistoryViewInteractor -) : ViewHolder(view) { + private val view: WidgetSiteItemView, + private val interactor: TabHistoryViewInteractor, + private val icons: BrowserIcons = view.context.components.core.icons +) : RecyclerView.ViewHolder(view) { private lateinit var item: TabHistoryItem init { - history_layout.setOnClickListener { interactor.goToHistoryItem(item) } + view.setOnClickListener { interactor.goToHistoryItem(item) } } fun bind(item: TabHistoryItem) { this.item = item - history_layout.displayAs(LibrarySiteItemView.ItemType.SITE) - history_layout.overflowView.isVisible = false - history_layout.titleView.text = item.title - history_layout.urlView.text = item.url - history_layout.loadFavicon(item.url) + view.setText(label = item.title, caption = item.url) + icons.loadIntoView(view.iconView, item.url) if (item.isSelected) { - history_layout.setBackgroundColor( - history_layout.context.getColorFromAttr(R.attr.tabHistoryItemSelectedBackground) + view.setBackgroundColor( + view.context.getColorFromAttr(R.attr.tabHistoryItemSelectedBackground) ) } else { - history_layout.background = null + view.background = null } } } diff --git a/app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryAdapterTest.kt b/app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryAdapterTest.kt index 7bfd37904..a96a5d716 100644 --- a/app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryAdapterTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryAdapterTest.kt @@ -5,15 +5,13 @@ package org.mozilla.fenix.tabhistory import android.content.Context -import android.graphics.drawable.ColorDrawable import android.widget.FrameLayout import androidx.appcompat.view.ContextThemeWrapper import io.mockk.MockKAnnotations import io.mockk.impl.annotations.MockK -import kotlinx.android.synthetic.main.history_list_item.* -import mozilla.components.support.ktx.android.content.getColorFromAttr +import io.mockk.spyk +import io.mockk.verify 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 @@ -56,18 +54,13 @@ class TabHistoryAdapterTest { fun `creates and binds view holder`() { adapter.submitList(listOf(selectedItem, unselectedItem)) - val holder = adapter.createViewHolder(parent, 0) + val holder = spyk(adapter.createViewHolder(parent, 0)) adapter.bindViewHolder(holder, 0) - assertEquals("Mozilla", holder.history_layout.titleView.text) - assertEquals( - context.getColorFromAttr(R.attr.tabHistoryItemSelectedBackground), - (holder.history_layout.background as ColorDrawable).color - ) + verify { holder.bind(selectedItem) } adapter.bindViewHolder(holder, 1) - assertEquals("Firefox", holder.history_layout.titleView.text) - assertEquals(null, holder.history_layout.background) + verify { holder.bind(unselectedItem) } } @Test diff --git a/app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryViewHolderTest.kt index e6598c1b9..d7d980294 100644 --- a/app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryViewHolderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryViewHolderTest.kt @@ -10,28 +10,42 @@ import io.mockk.just import io.mockk.mockk import io.mockk.slot import io.mockk.verify +import mozilla.components.browser.icons.BrowserIcons +import mozilla.components.browser.icons.IconRequest +import mozilla.components.ui.widgets.WidgetSiteItemView import org.junit.Before import org.junit.Test -import org.mozilla.fenix.R -import org.mozilla.fenix.library.LibrarySiteItemView class TabHistoryViewHolderTest { - @MockK private lateinit var view: View + @MockK(relaxed = true) private lateinit var view: WidgetSiteItemView @MockK private lateinit var interactor: TabHistoryViewInteractor - @MockK(relaxed = true) private lateinit var siteItemView: LibrarySiteItemView + @MockK private lateinit var icons: BrowserIcons private lateinit var holder: TabHistoryViewHolder private lateinit var onClick: CapturingSlot + private val selectedItem = TabHistoryItem( + title = "Mozilla", + url = "https://mozilla.org", + index = 0, + isSelected = true + ) + private val unselectedItem = TabHistoryItem( + title = "Firefox", + url = "https://firefox.com", + index = 1, + isSelected = false + ) + @Before fun setup() { MockKAnnotations.init(this) onClick = slot() - every { siteItemView.setOnClickListener(capture(onClick)) } just Runs - every { view.findViewById(R.id.history_layout) } returns siteItemView + every { view.setOnClickListener(capture(onClick)) } just Runs + every { icons.loadIntoView(view.iconView, any()) } returns mockk() - holder = TabHistoryViewHolder(view, interactor) + holder = TabHistoryViewHolder(view, interactor, icons) } @Test @@ -46,17 +60,18 @@ class TabHistoryViewHolderTest { @Test fun `binds title and url`() { - val item = TabHistoryItem( - title = "Firefox", - url = "https://firefox.com", - index = 1, - isSelected = false - ) - holder.bind(item) + holder.bind(unselectedItem) + + verify { view.setText(label = "Firefox", caption = "https://firefox.com") } + verify { icons.loadIntoView(view.iconView, IconRequest("https://firefox.com")) } + } + + @Test + fun `binds background`() { + holder.bind(selectedItem) + verify { view.setBackgroundColor(any()) } - verify { siteItemView.displayAs(LibrarySiteItemView.ItemType.SITE) } - verify { siteItemView.titleView.text = "Firefox" } - verify { siteItemView.urlView.text = "https://firefox.com" } - verify { siteItemView.loadFavicon("https://firefox.com") } + holder.bind(unselectedItem) + verify { view.background = null } } }