kunfei 3 лет назад
Родитель
Сommit
262f16a978

+ 21 - 24
app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt

@@ -78,33 +78,9 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
     private var booksFlowJob: Job? = null
     private var precisionSearchMenuItem: MenuItem? = null
     private var isManualStopSearch = false
-    private val searchFinishCallback: (isEmpty: Boolean) -> Unit = searchFinish@{ isEmpty ->
-        if (!isEmpty || viewModel.searchScope.isAll()) return@searchFinish
-        lifecycleScope.launch {
-            alert("搜索结果为空") {
-                val precisionSearch = appCtx.getPrefBoolean(PreferKey.precisionSearch)
-                if (precisionSearch) {
-                    setMessage("${viewModel.searchScope.display}分组搜索结果为空,是否关闭精准搜索?")
-                    yesButton {
-                        appCtx.putPrefBoolean(PreferKey.precisionSearch, false)
-                        precisionSearchMenuItem?.isChecked = false
-                        viewModel.searchKey = ""
-                        viewModel.search(searchView.query.toString())
-                    }
-                } else {
-                    setMessage("${viewModel.searchScope.display}分组搜索结果为空,是否切换到全部分组?")
-                    yesButton {
-                        viewModel.searchScope.update("")
-                    }
-                }
-                noButton()
-            }
-        }
-    }
 
     override fun onActivityCreated(savedInstanceState: Bundle?) {
         binding.llInputHelp.setBackgroundColor(backgroundColor)
-        viewModel.searchFinishCallback = searchFinishCallback
         initRecyclerView()
         initSearchView()
         initOtherView()
@@ -403,6 +379,27 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
         viewModel.upAdapterLiveData.observe(this) {
             adapter.notifyItemRangeChanged(0, adapter.itemCount, it)
         }
+        viewModel.searchFinishLiveData.observe(this) { isEmpty ->
+            if (!isEmpty || viewModel.searchScope.isAll()) return@observe
+            alert("搜索结果为空") {
+                val precisionSearch = appCtx.getPrefBoolean(PreferKey.precisionSearch)
+                if (precisionSearch) {
+                    setMessage("${viewModel.searchScope.display}分组搜索结果为空,是否关闭精准搜索?")
+                    yesButton {
+                        appCtx.putPrefBoolean(PreferKey.precisionSearch, false)
+                        precisionSearchMenuItem?.isChecked = false
+                        viewModel.searchKey = ""
+                        viewModel.search(searchView.query.toString())
+                    }
+                } else {
+                    setMessage("${viewModel.searchScope.display}分组搜索结果为空,是否切换到全部分组?")
+                    yesButton {
+                        viewModel.searchScope.update("")
+                    }
+                }
+                noButton()
+            }
+        }
     }
 
     /**

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt

@@ -25,7 +25,7 @@ class SearchViewModel(application: Application) : BaseViewModel(application) {
     val upAdapterLiveData = MutableLiveData<String>()
     var searchBookLiveData = ConflateLiveData<List<SearchBook>>(1000)
     val searchScope: SearchScope = SearchScope(AppConfig.searchScope)
-    var searchFinishCallback: ((isEmpty: Boolean) -> Unit)? = null
+    var searchFinishLiveData = MutableLiveData<Boolean>()
     var isSearchLiveData = MutableLiveData<Boolean>()
     var searchKey: String = ""
     private var searchID = 0L
@@ -45,7 +45,7 @@ class SearchViewModel(application: Application) : BaseViewModel(application) {
 
         override fun onSearchFinish(isEmpty: Boolean) {
             isSearchLiveData.postValue(false)
-            searchFinishCallback?.invoke(isEmpty)
+            searchFinishLiveData.postValue(isEmpty)
         }
 
         override fun onSearchCancel(exception: Exception?) {