1
0
Fork 0

Remove selection holder from bookmark viewholder constructors.

Now that we're passing the mode to the viewholders in their bind
methods, there's no real need to pass them into their constructors. This
also allows us to remove the indirection of having the adapter implement
the SelectionHolder interface and have the mode implement it directly.
master
Kainalu Hagiwara 2020-08-06 12:22:53 -07:00 committed by Jeff Boek
parent b1db1cf976
commit 1ad9da09b0
6 changed files with 21 additions and 33 deletions

View File

@ -16,18 +16,16 @@ import mozilla.components.concept.storage.BookmarkNode
import mozilla.components.concept.storage.BookmarkNodeType
import org.mozilla.fenix.R
import org.mozilla.fenix.library.LibrarySiteItemView
import org.mozilla.fenix.library.SelectionHolder
import org.mozilla.fenix.library.bookmarks.viewholders.BookmarkFolderViewHolder
import org.mozilla.fenix.library.bookmarks.viewholders.BookmarkItemViewHolder
import org.mozilla.fenix.library.bookmarks.viewholders.BookmarkNodeViewHolder
import org.mozilla.fenix.library.bookmarks.viewholders.BookmarkSeparatorViewHolder
class BookmarkAdapter(val emptyView: View, val interactor: BookmarkViewInteractor) :
RecyclerView.Adapter<BookmarkNodeViewHolder>(), SelectionHolder<BookmarkNode> {
class BookmarkAdapter(private val emptyView: View, private val interactor: BookmarkViewInteractor) :
RecyclerView.Adapter<BookmarkNodeViewHolder>() {
private var tree: List<BookmarkNode> = listOf()
private var mode: BookmarkFragmentState.Mode = BookmarkFragmentState.Mode.Normal()
override val selectedItems: Set<BookmarkNode> get() = mode.selectedItems
private var isFirstRun = true
fun updateData(tree: BookmarkNode?, mode: BookmarkFragmentState.Mode) {
@ -85,8 +83,8 @@ class BookmarkAdapter(val emptyView: View, val interactor: BookmarkViewInteracto
.inflate(R.layout.bookmark_list_item, parent, false) as LibrarySiteItemView
return when (viewType) {
LibrarySiteItemView.ItemType.SITE.ordinal -> BookmarkItemViewHolder(view, interactor, this)
LibrarySiteItemView.ItemType.FOLDER.ordinal -> BookmarkFolderViewHolder(view, interactor, this)
LibrarySiteItemView.ItemType.SITE.ordinal -> BookmarkItemViewHolder(view, interactor)
LibrarySiteItemView.ItemType.FOLDER.ordinal -> BookmarkFolderViewHolder(view, interactor)
LibrarySiteItemView.ItemType.SEPARATOR.ordinal -> BookmarkSeparatorViewHolder(view, interactor)
else -> throw IllegalStateException("ViewType $viewType does not match to a ViewHolder")
}

View File

@ -9,6 +9,7 @@ import mozilla.components.concept.storage.BookmarkNode
import mozilla.components.lib.state.Action
import mozilla.components.lib.state.State
import mozilla.components.lib.state.Store
import org.mozilla.fenix.library.SelectionHolder
class BookmarkFragmentStore(
initialState: BookmarkFragmentState
@ -32,8 +33,8 @@ data class BookmarkFragmentState(
val isLoading: Boolean = true,
val isSwipeToRefreshEnabled: Boolean = true
) : State {
sealed class Mode {
open val selectedItems = emptySet<BookmarkNode>()
sealed class Mode : SelectionHolder<BookmarkNode> {
override val selectedItems = emptySet<BookmarkNode>()
data class Normal(val showMenu: Boolean = true) : Mode()
data class Selecting(override val selectedItems: Set<BookmarkNode>) : Mode()

View File

@ -12,7 +12,6 @@ import org.mozilla.fenix.R
import org.mozilla.fenix.ext.hideAndDisable
import org.mozilla.fenix.ext.showAndEnable
import org.mozilla.fenix.library.LibrarySiteItemView
import org.mozilla.fenix.library.SelectionHolder
import org.mozilla.fenix.library.bookmarks.BookmarkFragmentState
import org.mozilla.fenix.library.bookmarks.BookmarkPayload
import org.mozilla.fenix.library.bookmarks.BookmarkViewInteractor
@ -23,8 +22,7 @@ import org.mozilla.fenix.library.bookmarks.inRoots
*/
class BookmarkFolderViewHolder(
view: LibrarySiteItemView,
interactor: BookmarkViewInteractor,
private val selectionHolder: SelectionHolder<BookmarkNode>
interactor: BookmarkViewInteractor
) : BookmarkNodeViewHolder(view, interactor) {
override var item: BookmarkNode? = null
@ -43,7 +41,7 @@ class BookmarkFolderViewHolder(
override fun bind(item: BookmarkNode, mode: BookmarkFragmentState.Mode, payload: BookmarkPayload) {
this.item = item
setSelectionListeners(item, selectionHolder)
setSelectionListeners(item, mode)
if (!item.inRoots()) {
setupMenu(item)
@ -59,7 +57,7 @@ class BookmarkFolderViewHolder(
}
if (payload.selectedChanged) {
containerView.changeSelected(item in selectionHolder.selectedItems)
containerView.changeSelected(item in mode.selectedItems)
}
containerView.iconView.setImageDrawable(

View File

@ -9,7 +9,6 @@ import mozilla.components.concept.storage.BookmarkNode
import org.mozilla.fenix.ext.hideAndDisable
import org.mozilla.fenix.ext.showAndEnable
import org.mozilla.fenix.library.LibrarySiteItemView
import org.mozilla.fenix.library.SelectionHolder
import org.mozilla.fenix.library.bookmarks.BookmarkFragmentState
import org.mozilla.fenix.library.bookmarks.BookmarkPayload
import org.mozilla.fenix.library.bookmarks.BookmarkViewInteractor
@ -19,8 +18,7 @@ import org.mozilla.fenix.library.bookmarks.BookmarkViewInteractor
*/
class BookmarkItemViewHolder(
view: LibrarySiteItemView,
interactor: BookmarkViewInteractor,
private val selectionHolder: SelectionHolder<BookmarkNode>
interactor: BookmarkViewInteractor
) : BookmarkNodeViewHolder(view, interactor) {
override var item: BookmarkNode? = null
@ -50,7 +48,7 @@ class BookmarkItemViewHolder(
}
if (payload.selectedChanged) {
containerView.changeSelected(item in selectionHolder.selectedItems)
containerView.changeSelected(item in mode.selectedItems)
}
if (payload.titleChanged) {
@ -64,7 +62,7 @@ class BookmarkItemViewHolder(
setColorsAndIcons(item.url)
}
setSelectionListeners(item, selectionHolder)
setSelectionListeners(item, mode)
}
@VisibleForTesting

View File

@ -18,7 +18,6 @@ import org.junit.Test
import org.mozilla.fenix.ext.hideAndDisable
import org.mozilla.fenix.ext.showAndEnable
import org.mozilla.fenix.library.LibrarySiteItemView
import org.mozilla.fenix.library.SelectionHolder
import org.mozilla.fenix.library.bookmarks.BookmarkFragmentInteractor
import org.mozilla.fenix.library.bookmarks.BookmarkFragmentState
import org.mozilla.fenix.library.bookmarks.BookmarkPayload
@ -29,8 +28,6 @@ class BookmarkFolderViewHolderTest {
private lateinit var interactor: BookmarkFragmentInteractor
@MockK(relaxed = true)
private lateinit var siteItemView: LibrarySiteItemView
@MockK(relaxed = true)
private lateinit var selectionHolder: SelectionHolder<BookmarkNode>
private lateinit var holder: BookmarkFolderViewHolder
private val folder = BookmarkNode(
@ -50,7 +47,7 @@ class BookmarkFolderViewHolderTest {
mockkStatic(AppCompatResources::class)
every { AppCompatResources.getDrawable(any(), any()) } returns mockk(relaxed = true)
holder = BookmarkFolderViewHolder(siteItemView, interactor, selectionHolder)
holder = BookmarkFolderViewHolder(siteItemView, interactor)
}
@Test
@ -63,7 +60,6 @@ class BookmarkFolderViewHolderTest {
siteItemView.changeSelected(false)
}
every { selectionHolder.selectedItems } returns setOf(folder)
holder.bind(folder, BookmarkFragmentState.Mode.Selecting(setOf(folder)))
verify {

View File

@ -5,7 +5,6 @@
package org.mozilla.fenix.library.bookmarks.viewholders
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.verify
import mozilla.components.concept.storage.BookmarkNode
@ -15,7 +14,6 @@ import org.junit.Test
import org.mozilla.fenix.ext.hideAndDisable
import org.mozilla.fenix.ext.showAndEnable
import org.mozilla.fenix.library.LibrarySiteItemView
import org.mozilla.fenix.library.SelectionHolder
import org.mozilla.fenix.library.bookmarks.BookmarkFragmentInteractor
import org.mozilla.fenix.library.bookmarks.BookmarkFragmentState
import org.mozilla.fenix.library.bookmarks.BookmarkPayload
@ -28,8 +26,6 @@ class BookmarkItemViewHolderTest {
@MockK(relaxed = true)
private lateinit var siteItemView: LibrarySiteItemView
@MockK(relaxed = true)
private lateinit var selectionHolder: SelectionHolder<BookmarkNode>
private lateinit var holder: BookmarkItemViewHolder
private val item = BookmarkNode(
@ -45,15 +41,16 @@ class BookmarkItemViewHolderTest {
@Before
fun setup() {
MockKAnnotations.init(this)
holder = BookmarkItemViewHolder(siteItemView, interactor, selectionHolder)
holder = BookmarkItemViewHolder(siteItemView, interactor)
}
@Test
fun `binds views for unselected item`() {
holder.bind(item, BookmarkFragmentState.Mode.Normal())
val mode = BookmarkFragmentState.Mode.Normal()
holder.bind(item, mode)
verify {
siteItemView.setSelectionInteractor(item, selectionHolder, interactor)
siteItemView.setSelectionInteractor(item, mode, interactor)
siteItemView.titleView.text = item.title
siteItemView.urlView.text = item.url
siteItemView.overflowView.showAndEnable()
@ -64,11 +61,11 @@ class BookmarkItemViewHolderTest {
@Test
fun `binds views for selected item`() {
every { selectionHolder.selectedItems } returns setOf(item)
holder.bind(item, BookmarkFragmentState.Mode.Selecting(setOf(item)))
val mode = BookmarkFragmentState.Mode.Selecting(setOf(item))
holder.bind(item, mode)
verify {
siteItemView.setSelectionInteractor(item, selectionHolder, interactor)
siteItemView.setSelectionInteractor(item, mode, interactor)
siteItemView.titleView.text = item.title
siteItemView.urlView.text = item.url
siteItemView.overflowView.hideAndDisable()