Rewrite saved searches again, hopefully fix the last few bugs
This commit is contained in:
parent
3e9e42271e
commit
75d5da71f2
@ -0,0 +1,41 @@
|
|||||||
|
package eu.kanade.tachiyomi.ui.browse.source.browse
|
||||||
|
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.google.android.material.chip.Chip
|
||||||
|
import eu.kanade.tachiyomi.databinding.SourceFilterSheetSavedSearchesBinding
|
||||||
|
import eu.kanade.tachiyomi.util.view.gone
|
||||||
|
import eu.kanade.tachiyomi.util.view.visible
|
||||||
|
|
||||||
|
class SavedSearchesAdapter(var chips: List<Chip> = emptyList()) :
|
||||||
|
RecyclerView.Adapter<SavedSearchesAdapter.SavedSearchesViewHolder>() {
|
||||||
|
|
||||||
|
private lateinit var binding: SourceFilterSheetSavedSearchesBinding
|
||||||
|
|
||||||
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SavedSearchesViewHolder {
|
||||||
|
binding = SourceFilterSheetSavedSearchesBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||||
|
return SavedSearchesViewHolder(binding.root)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getItemCount(): Int = 1
|
||||||
|
|
||||||
|
override fun onBindViewHolder(holder: SavedSearchesViewHolder, position: Int) {
|
||||||
|
holder.bind(chips)
|
||||||
|
}
|
||||||
|
|
||||||
|
inner class SavedSearchesViewHolder(view: View) : RecyclerView.ViewHolder(view) {
|
||||||
|
fun bind(chips: List<Chip> = emptyList()) {
|
||||||
|
binding.savedSearches.removeAllViews()
|
||||||
|
if (chips.isEmpty()) {
|
||||||
|
binding.savedSearchesTitle.gone()
|
||||||
|
} else {
|
||||||
|
binding.savedSearchesTitle.visible()
|
||||||
|
chips.forEach {
|
||||||
|
binding.savedSearches.addView(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,32 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.ui.browse.source.browse
|
|
||||||
|
|
||||||
import android.view.View
|
|
||||||
import com.google.android.material.chip.Chip
|
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
|
||||||
import eu.kanade.tachiyomi.databinding.SourceFilterSheetSavedSearchesBinding
|
|
||||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
|
||||||
import eu.kanade.tachiyomi.util.view.gone
|
|
||||||
import eu.kanade.tachiyomi.util.view.visible
|
|
||||||
import timber.log.Timber
|
|
||||||
|
|
||||||
class SavedSearchesHolder(
|
|
||||||
view: View,
|
|
||||||
adapter: FlexibleAdapter<SavedSearchesItem>
|
|
||||||
) : BaseFlexibleViewHolder(view, adapter) {
|
|
||||||
|
|
||||||
var binding: SourceFilterSheetSavedSearchesBinding = SourceFilterSheetSavedSearchesBinding.bind(itemView)
|
|
||||||
|
|
||||||
fun setChips(chips: List<Chip> = emptyList()) {
|
|
||||||
Timber.d("Chips set")
|
|
||||||
binding.savedSearches.removeAllViews()
|
|
||||||
if (chips.isEmpty()) {
|
|
||||||
binding.savedSearchesTitle.gone()
|
|
||||||
} else {
|
|
||||||
binding.savedSearchesTitle.visible()
|
|
||||||
}
|
|
||||||
chips.forEach {
|
|
||||||
Timber.d(it.text.toString())
|
|
||||||
binding.savedSearches.addView(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.ui.browse.source.browse
|
|
||||||
|
|
||||||
import android.view.View
|
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
|
||||||
import com.google.android.material.chip.Chip
|
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
|
||||||
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
|
|
||||||
import eu.davidea.flexibleadapter.items.IFlexible
|
|
||||||
import eu.kanade.tachiyomi.R
|
|
||||||
|
|
||||||
class SavedSearchesItem(val chips: List<Chip>) :
|
|
||||||
AbstractFlexibleItem<SavedSearchesHolder>() {
|
|
||||||
|
|
||||||
override fun getLayoutRes(): Int {
|
|
||||||
return R.layout.source_filter_sheet_saved_searches
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun isSelectable(): Boolean {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun isSwipeable(): Boolean {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun createViewHolder(view: View, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>): SavedSearchesHolder {
|
|
||||||
return SavedSearchesHolder(view, adapter as FlexibleAdapter<SavedSearchesItem>)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun bindViewHolder(
|
|
||||||
adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,
|
|
||||||
holder: SavedSearchesHolder,
|
|
||||||
position: Int,
|
|
||||||
payloads: MutableList<Any?>?
|
|
||||||
) {
|
|
||||||
holder.setChips(chips)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean {
|
|
||||||
return (this === other)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
|
||||||
return this.hashCode()
|
|
||||||
}
|
|
||||||
}
|
|
@ -81,12 +81,10 @@ class SourceFilterSheet(
|
|||||||
|
|
||||||
var onSavedSearchDeleteClicked: (Int, String) -> Unit = { _, _ -> }
|
var onSavedSearchDeleteClicked: (Int, String) -> Unit = { _, _ -> }
|
||||||
|
|
||||||
var savedSearchesAdapter: FlexibleAdapter<SavedSearchesItem> = FlexibleAdapter<SavedSearchesItem>(listOf(SavedSearchesItem(getChips(searches))))
|
private val savedSearchesAdapter = SavedSearchesAdapter(getSavedSearchesChips(searches))
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
val adapter: FlexibleAdapter<IFlexible<*>> = FlexibleAdapter<IFlexible<*>>(null)
|
val adapter: FlexibleAdapter<IFlexible<*>> = FlexibleAdapter<IFlexible<*>>(null)
|
||||||
.setDisplayHeadersAtStartUp(true)
|
|
||||||
.setStickyHeaders(true)
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// SY -->
|
// SY -->
|
||||||
@ -105,13 +103,14 @@ class SourceFilterSheet(
|
|||||||
|
|
||||||
// EXH -->
|
// EXH -->
|
||||||
fun setSavedSearches(searches: List<EXHSavedSearch>) {
|
fun setSavedSearches(searches: List<EXHSavedSearch>) {
|
||||||
|
val savedSearchesChips = getSavedSearchesChips(searches)
|
||||||
|
savedSearchesAdapter.chips = savedSearchesChips
|
||||||
recycler.post {
|
recycler.post {
|
||||||
(recycler.findViewHolderForAdapterPosition(0) as? SavedSearchesHolder)?.setChips(getChips(searches))
|
(recycler.findViewHolderForAdapterPosition(0) as? SavedSearchesAdapter.SavedSearchesViewHolder)?.bind(savedSearchesChips)
|
||||||
savedSearchesAdapter.expand(0)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getChips(searches: List<EXHSavedSearch>): List<Chip> {
|
private fun getSavedSearchesChips(searches: List<EXHSavedSearch>): List<Chip> {
|
||||||
recycler.post {
|
recycler.post {
|
||||||
save_search_btn.visibility = if (searches.size < MAX_SAVED_SEARCHES) View.VISIBLE else View.GONE
|
save_search_btn.visibility = if (searches.size < MAX_SAVED_SEARCHES) View.VISIBLE else View.GONE
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user