mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
优化
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user