Rewrite saved searches again, hopefully fix the last few bugs

This commit is contained in:
Jobobby04 2020-06-24 20:14:31 -04:00
parent 3e9e42271e
commit 75d5da71f2
4 changed files with 46 additions and 84 deletions

View File

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

View File

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

View File

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

View File

@ -81,12 +81,10 @@ class SourceFilterSheet(
var onSavedSearchDeleteClicked: (Int, String) -> Unit = { _, _ -> }
var savedSearchesAdapter: FlexibleAdapter<SavedSearchesItem> = FlexibleAdapter<SavedSearchesItem>(listOf(SavedSearchesItem(getChips(searches))))
private val savedSearchesAdapter = SavedSearchesAdapter(getSavedSearchesChips(searches))
// SY <--
val adapter: FlexibleAdapter<IFlexible<*>> = FlexibleAdapter<IFlexible<*>>(null)
.setDisplayHeadersAtStartUp(true)
.setStickyHeaders(true)
init {
// SY -->
@ -105,13 +103,14 @@ class SourceFilterSheet(
// EXH -->
fun setSavedSearches(searches: List<EXHSavedSearch>) {
val savedSearchesChips = getSavedSearchesChips(searches)
savedSearchesAdapter.chips = savedSearchesChips
recycler.post {
(recycler.findViewHolderForAdapterPosition(0) as? SavedSearchesHolder)?.setChips(getChips(searches))
savedSearchesAdapter.expand(0)
(recycler.findViewHolderForAdapterPosition(0) as? SavedSearchesAdapter.SavedSearchesViewHolder)?.bind(savedSearchesChips)
}
}
private fun getChips(searches: List<EXHSavedSearch>): List<Chip> {
private fun getSavedSearchesChips(searches: List<EXHSavedSearch>): List<Chip> {
recycler.post {
save_search_btn.visibility = if (searches.size < MAX_SAVED_SEARCHES) View.VISIBLE else View.GONE
}