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.
*/
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 {

@ -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<BookmarkNodeViewHolder>() {
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var tree: List<BookmarkNode> = 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<Any>
) {
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)
}
}

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

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

Loading…
Cancel
Save