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