From 3059a57747aa081f3ade3992e5a1da7b3f1f6929 Mon Sep 17 00:00:00 2001 From: Tiger Oakes Date: Mon, 17 Aug 2020 09:44:52 -0700 Subject: [PATCH] Change separator to use its own view holder --- .../fenix/library/LibrarySiteItemView.kt | 8 +---- .../library/bookmarks/BookmarkAdapter.kt | 23 ++++++------- .../BookmarkSeparatorViewHolder.kt | 33 ++++--------------- app/src/main/res/layout/library_separator.xml | 18 ++++++++++ app/src/main/res/layout/library_site_item.xml | 14 -------- 5 files changed, 37 insertions(+), 59 deletions(-) create mode 100644 app/src/main/res/layout/library_separator.xml diff --git a/app/src/main/java/org/mozilla/fenix/library/LibrarySiteItemView.kt b/app/src/main/java/org/mozilla/fenix/library/LibrarySiteItemView.kt index a90fb4231..caf269920 100644 --- a/app/src/main/java/org/mozilla/fenix/library/LibrarySiteItemView.kt +++ b/app/src/main/java/org/mozilla/fenix/library/LibrarySiteItemView.kt @@ -75,13 +75,7 @@ class LibrarySiteItemView @JvmOverloads constructor( * Change visibility of parts of this view based on what type of item is being represented. */ fun displayAs(mode: ItemType) { - favicon.isVisible = mode != ItemType.SEPARATOR - title.isVisible = mode != ItemType.SEPARATOR url.isVisible = mode == ItemType.SITE - overflow_menu.isVisible = mode != ItemType.SEPARATOR - separator.isVisible = mode == ItemType.SEPARATOR - isClickable = mode != ItemType.SEPARATOR - isFocusable = mode != ItemType.SEPARATOR } /** @@ -136,7 +130,7 @@ class LibrarySiteItemView @JvmOverloads constructor( } enum class ItemType { - SITE, FOLDER, SEPARATOR; + SITE, FOLDER; } companion object { diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapter.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapter.kt index a91bc6277..da3d60526 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapter.kt @@ -22,7 +22,7 @@ import org.mozilla.fenix.library.bookmarks.viewholders.BookmarkNodeViewHolder import org.mozilla.fenix.library.bookmarks.viewholders.BookmarkSeparatorViewHolder class BookmarkAdapter(private val emptyView: View, private val interactor: BookmarkViewInteractor) : - RecyclerView.Adapter() { + RecyclerView.Adapter() { private var tree: List = listOf() private var mode: BookmarkFragmentState.Mode = BookmarkFragmentState.Mode.Normal() @@ -78,43 +78,44 @@ class BookmarkAdapter(private val emptyView: View, private val interactor: Bookm override fun getNewListSize(): Int = new.size } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BookmarkNodeViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val view = LayoutInflater.from(parent.context) .inflate(R.layout.bookmark_list_item, parent, false) as LibrarySiteItemView return when (viewType) { LibrarySiteItemView.ItemType.SITE.ordinal -> BookmarkItemViewHolder(view, interactor) LibrarySiteItemView.ItemType.FOLDER.ordinal -> BookmarkFolderViewHolder(view, interactor) - LibrarySiteItemView.ItemType.SEPARATOR.ordinal -> BookmarkSeparatorViewHolder(view, interactor) + BookmarkSeparatorViewHolder.LAYOUT_ID -> BookmarkSeparatorViewHolder(view) else -> throw IllegalStateException("ViewType $viewType does not match to a ViewHolder") } } override fun getItemViewType(position: Int): Int { return when (tree[position].type) { - BookmarkNodeType.ITEM -> LibrarySiteItemView.ItemType.SITE - BookmarkNodeType.FOLDER -> LibrarySiteItemView.ItemType.FOLDER - BookmarkNodeType.SEPARATOR -> LibrarySiteItemView.ItemType.SEPARATOR + BookmarkNodeType.ITEM -> LibrarySiteItemView.ItemType.SITE.ordinal + BookmarkNodeType.FOLDER -> LibrarySiteItemView.ItemType.FOLDER.ordinal + BookmarkNodeType.SEPARATOR -> BookmarkSeparatorViewHolder.LAYOUT_ID else -> throw IllegalStateException("Item $tree[position] does not match to a ViewType") - }.ordinal + } } override fun getItemCount(): Int = tree.size override fun onBindViewHolder( - holder: BookmarkNodeViewHolder, + holder: RecyclerView.ViewHolder, position: Int, payloads: MutableList ) { if (payloads.isNotEmpty() && payloads[0] is BookmarkPayload) { - holder.bind(tree[position], mode, payloads[0] as BookmarkPayload) + (holder as? BookmarkNodeViewHolder) + ?.bind(tree[position], mode, payloads[0] as BookmarkPayload) } else { super.onBindViewHolder(holder, position, payloads) } } - override fun onBindViewHolder(holder: BookmarkNodeViewHolder, position: Int) { - holder.bind(tree[position], mode) + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + (holder as? BookmarkNodeViewHolder)?.bind(tree[position], mode) } } diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/viewholders/BookmarkSeparatorViewHolder.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/viewholders/BookmarkSeparatorViewHolder.kt index 2000f7581..3c33f02b8 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/viewholders/BookmarkSeparatorViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/viewholders/BookmarkSeparatorViewHolder.kt @@ -4,36 +4,15 @@ package org.mozilla.fenix.library.bookmarks.viewholders -import mozilla.components.concept.storage.BookmarkNode -import org.mozilla.fenix.library.LibrarySiteItemView -import org.mozilla.fenix.library.bookmarks.BookmarkFragmentState -import org.mozilla.fenix.library.bookmarks.BookmarkPayload -import org.mozilla.fenix.library.bookmarks.BookmarkViewInteractor +import android.view.View +import androidx.recyclerview.widget.RecyclerView +import org.mozilla.fenix.R /** * Simple view holder for dividers in the bookmarks list. */ -class BookmarkSeparatorViewHolder( - view: LibrarySiteItemView, - interactor: BookmarkViewInteractor -) : BookmarkNodeViewHolder(view, interactor) { - - override var item: BookmarkNode? = null - - override fun bind( - item: BookmarkNode, - mode: BookmarkFragmentState.Mode - ) { - this.item = item - containerView.displayAs(LibrarySiteItemView.ItemType.SEPARATOR) - updateMenu(item.type) - } - - override fun bind( - item: BookmarkNode, - mode: BookmarkFragmentState.Mode, - payload: BookmarkPayload - ) { - bind(item, mode) +class BookmarkSeparatorViewHolder(view: View) : RecyclerView.ViewHolder(view) { + companion object { + const val LAYOUT_ID = R.layout.library_separator } } diff --git a/app/src/main/res/layout/library_separator.xml b/app/src/main/res/layout/library_separator.xml new file mode 100644 index 000000000..245b9ef68 --- /dev/null +++ b/app/src/main/res/layout/library_separator.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/app/src/main/res/layout/library_site_item.xml b/app/src/main/res/layout/library_site_item.xml index 4d8ea73fd..ca050dafe 100644 --- a/app/src/main/res/layout/library_site_item.xml +++ b/app/src/main/res/layout/library_site_item.xml @@ -84,18 +84,4 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent"/> - -