Change separator to use its own view holder

pull/128/head^2
Tiger Oakes 4 years ago committed by ekager
parent 9afe9679d8
commit 3059a57747

@ -75,13 +75,7 @@ class LibrarySiteItemView @JvmOverloads constructor(
* Change visibility of parts of this view based on what type of item is being represented. * Change visibility of parts of this view based on what type of item is being represented.
*/ */
fun displayAs(mode: ItemType) { fun displayAs(mode: ItemType) {
favicon.isVisible = mode != ItemType.SEPARATOR
title.isVisible = mode != ItemType.SEPARATOR
url.isVisible = mode == ItemType.SITE 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 { enum class ItemType {
SITE, FOLDER, SEPARATOR; SITE, FOLDER;
} }
companion object { companion object {

@ -22,7 +22,7 @@ import org.mozilla.fenix.library.bookmarks.viewholders.BookmarkNodeViewHolder
import org.mozilla.fenix.library.bookmarks.viewholders.BookmarkSeparatorViewHolder import org.mozilla.fenix.library.bookmarks.viewholders.BookmarkSeparatorViewHolder
class BookmarkAdapter(private val emptyView: View, private val interactor: BookmarkViewInteractor) : class BookmarkAdapter(private val emptyView: View, private val interactor: BookmarkViewInteractor) :
RecyclerView.Adapter<BookmarkNodeViewHolder>() { RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var tree: List<BookmarkNode> = listOf() private var tree: List<BookmarkNode> = listOf()
private var mode: BookmarkFragmentState.Mode = BookmarkFragmentState.Mode.Normal() 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 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) val view = LayoutInflater.from(parent.context)
.inflate(R.layout.bookmark_list_item, parent, false) as LibrarySiteItemView .inflate(R.layout.bookmark_list_item, parent, false) as LibrarySiteItemView
return when (viewType) { return when (viewType) {
LibrarySiteItemView.ItemType.SITE.ordinal -> BookmarkItemViewHolder(view, interactor) LibrarySiteItemView.ItemType.SITE.ordinal -> BookmarkItemViewHolder(view, interactor)
LibrarySiteItemView.ItemType.FOLDER.ordinal -> BookmarkFolderViewHolder(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") else -> throw IllegalStateException("ViewType $viewType does not match to a ViewHolder")
} }
} }
override fun getItemViewType(position: Int): Int { override fun getItemViewType(position: Int): Int {
return when (tree[position].type) { return when (tree[position].type) {
BookmarkNodeType.ITEM -> LibrarySiteItemView.ItemType.SITE BookmarkNodeType.ITEM -> LibrarySiteItemView.ItemType.SITE.ordinal
BookmarkNodeType.FOLDER -> LibrarySiteItemView.ItemType.FOLDER BookmarkNodeType.FOLDER -> LibrarySiteItemView.ItemType.FOLDER.ordinal
BookmarkNodeType.SEPARATOR -> LibrarySiteItemView.ItemType.SEPARATOR BookmarkNodeType.SEPARATOR -> BookmarkSeparatorViewHolder.LAYOUT_ID
else -> throw IllegalStateException("Item $tree[position] does not match to a ViewType") else -> throw IllegalStateException("Item $tree[position] does not match to a ViewType")
}.ordinal }
} }
override fun getItemCount(): Int = tree.size override fun getItemCount(): Int = tree.size
override fun onBindViewHolder( override fun onBindViewHolder(
holder: BookmarkNodeViewHolder, holder: RecyclerView.ViewHolder,
position: Int, position: Int,
payloads: MutableList<Any> payloads: MutableList<Any>
) { ) {
if (payloads.isNotEmpty() && payloads[0] is BookmarkPayload) { 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 { } else {
super.onBindViewHolder(holder, position, payloads) super.onBindViewHolder(holder, position, payloads)
} }
} }
override fun onBindViewHolder(holder: BookmarkNodeViewHolder, position: Int) { override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
holder.bind(tree[position], mode) (holder as? BookmarkNodeViewHolder)?.bind(tree[position], mode)
} }
} }

@ -4,36 +4,15 @@
package org.mozilla.fenix.library.bookmarks.viewholders package org.mozilla.fenix.library.bookmarks.viewholders
import mozilla.components.concept.storage.BookmarkNode import android.view.View
import org.mozilla.fenix.library.LibrarySiteItemView import androidx.recyclerview.widget.RecyclerView
import org.mozilla.fenix.library.bookmarks.BookmarkFragmentState import org.mozilla.fenix.R
import org.mozilla.fenix.library.bookmarks.BookmarkPayload
import org.mozilla.fenix.library.bookmarks.BookmarkViewInteractor
/** /**
* Simple view holder for dividers in the bookmarks list. * Simple view holder for dividers in the bookmarks list.
*/ */
class BookmarkSeparatorViewHolder( class BookmarkSeparatorViewHolder(view: View) : RecyclerView.ViewHolder(view) {
view: LibrarySiteItemView, companion object {
interactor: BookmarkViewInteractor const val LAYOUT_ID = R.layout.library_separator
) : 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)
} }
} }

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/library_item_height"
android:importantForAccessibility="no">
<View
android:id="@+id/separator"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_gravity="center"
android:background="?neutralFaded"/>
</FrameLayout>

@ -84,18 +84,4 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/> app:layout_constraintTop_toTopOf="parent"/>
<View
android:id="@+id/separator"
android:layout_width="0dp"
android:layout_height="2dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:importantForAccessibility="no"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:background="?neutralFaded"
android:visibility="gone"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

Loading…
Cancel
Save