This commit is contained in:
kunfei 2022-10-14 08:58:08 +08:00
parent 72b6d34096
commit 91111c9b76

View File

@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.SearchView
import androidx.recyclerview.widget.RecyclerView
import io.legado.app.R
import io.legado.app.base.BaseDialogFragment
@ -25,9 +26,10 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
private val binding by viewBinding(DialogSearchScopeBinding::bind)
val callback: Callback get() = parentFragment as? Callback ?: activity as Callback
var groups: List<String> = arrayListOf()
var sources: List<BookSource> = arrayListOf()
var groups: List<String> = emptyList()
var sources: List<BookSource> = emptyList()
val screenSources = arrayListOf<BookSource>()
var screenText: String? = null
val adapter by lazy {
RecyclerAdapter()
@ -42,6 +44,7 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
binding.toolBar.setBackgroundColor(primaryColor)
binding.recyclerView.adapter = adapter
initMenu()
initSearchView()
initOtherView()
initData()
upData()
@ -52,6 +55,22 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
binding.toolBar.menu.applyTint(requireContext())
}
private fun initSearchView() {
val searchView = binding.toolBar.menu.findItem(R.id.menu_screen).actionView as SearchView
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
return false
}
override fun onQueryTextChange(newText: String?): Boolean {
screenText = newText
upData()
return false
}
})
}
private fun initOtherView() {
binding.rgScope.setOnCheckedChangeListener { group, checkedId ->
binding.toolBar.menu.findItem(R.id.menu_screen)?.isVisible = checkedId == R.id.rb_source
@ -94,6 +113,18 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
@SuppressLint("NotifyDataSetChanged")
private fun upData() {
launch {
withContext(IO) {
if (binding.rbSource.isChecked) {
sources.filter { source ->
screenText?.let { screenText ->
source.bookSourceName.contains(screenText)
} ?: true
}.let {
screenSources.clear()
screenSources.addAll(it)
}
}
}
adapter.notifyDataSetChanged()
}
}
@ -135,7 +166,7 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
}
}
is ItemRadioButtonBinding -> {
sources.getOrNull(position)?.let {
screenSources.getOrNull(position)?.let {
holder.binding.radioButton.isChecked = selectSource == it
holder.binding.radioButton.text = it.bookSourceName
}
@ -163,7 +194,7 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
}
}
is ItemRadioButtonBinding -> {
sources.getOrNull(position)?.let {
screenSources.getOrNull(position)?.let {
holder.binding.radioButton.isChecked = selectSource == it
holder.binding.radioButton.text = it.bookSourceName
holder.binding.radioButton.setOnCheckedChangeListener { buttonView, isChecked ->
@ -181,7 +212,7 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
override fun getItemCount(): Int {
return if (binding.rbSource.isChecked) {
sources.size
screenSources.size
} else {
groups.size
}