书籍导入添加筛选

This commit is contained in:
Xwite
2023-03-11 22:51:06 +08:00
parent 522c4f75b0
commit 7d56dbe31c
8 changed files with 46 additions and 16 deletions
@@ -2,6 +2,7 @@ package io.legado.app.ui.book.import
import androidx.lifecycle.ViewModel
import androidx.viewbinding.ViewBinding
import androidx.appcompat.widget.SearchView
import io.legado.app.R
import io.legado.app.base.VMBaseActivity
import io.legado.app.help.config.AppConfig
@@ -13,6 +14,9 @@ import kotlin.coroutines.suspendCoroutine
abstract class BaseImportBookActivity<VB : ViewBinding, VM : ViewModel> : VMBaseActivity<VB, VM>() {
private var localBookTreeSelectListener: ((Boolean) -> Unit)? = null
private val searchView: SearchView by lazy {
binding.titleBar.findViewById(R.id.search_view)
}
private val localBookTreeSelect = registerForActivityResult(HandleFileContract()) {
it.uri?.let { treeUri ->
@@ -51,5 +55,22 @@ abstract class BaseImportBookActivity<VB : ViewBinding, VM : ViewModel> : VMBase
}
}
private fun initSearchView() {
searchView.applyTint(primaryTextColor)
searchView.onActionViewExpanded()
searchView.isSubmitButtonEnabled = true
searchView.queryHint = getString(R.string.screen_find)
searchView.clearFocus()
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
return false
}
override fun onQueryTextChange(newText: String?): Boolean {
viewModel.updateCallBackFlow(newText)
return false
}
})
}
}
@@ -52,7 +52,6 @@ class ImportBookActivity : BaseImportBookActivity<ActivityImportBookBinding, Imp
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
binding.titleBar.setTitle(R.string.book_local)
launch {
initView()
initEvent()
@@ -48,6 +48,11 @@ class ImportBookViewModel(application: Application) : BaseViewModel(application)
list.clear()
trySend(emptyList())
}
override fun screen(key: String?) {
trySend(list)
}
}
withContext(Main) {
@@ -163,6 +168,10 @@ class ImportBookViewModel(application: Application) : BaseViewModel(application)
}
}
fun updateCallBackFlow(filterKey: String?) {
dataCallback?.screen(filterKey)
}
interface DataCallback {
fun setItems(fileDocs: List<FileDoc>)
@@ -170,6 +179,8 @@ class ImportBookViewModel(application: Application) : BaseViewModel(application)
fun addItems(fileDocs: List<FileDoc>)
fun clear()
fun screen(key: String?)
}
@@ -37,7 +37,6 @@ class RemoteBookActivity : BaseImportBookActivity<ActivityImportBookBinding, Rem
private var groupMenu: SubMenu? = null
override fun onActivityCreated(savedInstanceState: Bundle?) {
binding.titleBar.setTitle(R.string.remote_book)
launch {
if (!setBookStorage()) {
finish()
@@ -49,6 +49,10 @@ class RemoteBookViewModel(application: Application) : BaseViewModel(application)
list.clear()
trySend(emptyList())
}
override fun screen(key: String?) {
trySend(list)
}
}
awaitClose {
@@ -137,6 +141,10 @@ class RemoteBookViewModel(application: Application) : BaseViewModel(application)
}
}
fun updateCallBackFlow(filterKey: String?) {
dataCallback?.screen(filterKey)
}
interface DataCallback {
fun setItems(remoteFiles: List<RemoteBook>)
@@ -144,6 +152,8 @@ class RemoteBookViewModel(application: Application) : BaseViewModel(application)
fun addItems(remoteFiles: List<RemoteBook>)
fun clear()
fun screen(key: String?)
}
}
@@ -9,8 +9,10 @@
android:id="@+id/titleBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
app:attachToActivity="false"
app:contentLayout="@layout/view_search" />
<!--path-->
<LinearLayout
android:id="@+id/lay_top"
-6
View File
@@ -4,12 +4,6 @@
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="AlwaysShowAction">
<item
android:id="@+id/menu_search"
android:icon="@drawable/ic_search"
android:title="@string/search"
app:showAsAction="always" />
<item
android:id="@+id/menu_refresh"
android:icon="@drawable/ic_refresh_black_24dp"
-6
View File
@@ -4,12 +4,6 @@
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="AlwaysShowAction">
<item
android:id="@+id/menu_search"
android:icon="@drawable/ic_search"
android:title="@string/search"
app:showAsAction="always" />
<item
android:id="@+id/menu_select_folder"
android:icon="@drawable/ic_folder_open"