Change separator to use its own view holder
This commit is contained in:
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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
18
app/src/main/res/layout/library_separator.xml
Normal file
18
app/src/main/res/layout/library_separator.xml
Normal file
|
@ -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…
Reference in New Issue
Block a user