Use shared list widget in tab history (#13884)

pull/35/head
Tiger Oakes 4 years ago committed by GitHub
parent 0102e03d75
commit 50ac4fe17d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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)
}

@ -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
}
}
}

@ -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

@ -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<View.OnClickListener>
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<LibrarySiteItemView>(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 }
}
}

Loading…
Cancel
Save