diff --git a/app/src/main/java/io/legado/app/model/webBook/SearchModel.kt b/app/src/main/java/io/legado/app/model/webBook/SearchModel.kt index 6d66e30cb..50dd83186 100644 --- a/app/src/main/java/io/legado/app/model/webBook/SearchModel.kt +++ b/app/src/main/java/io/legado/app/model/webBook/SearchModel.kt @@ -73,6 +73,7 @@ class SearchModel(private val scope: CoroutineScope, private val callBack: CallB private fun startSearch() { val precision = appCtx.getPrefBoolean(PreferKey.precisionSearch) + var hasMore = false searchJob = scope.launch(searchPool!!) { flow { for (bs in bookSourceParts) { @@ -90,12 +91,13 @@ class SearchModel(private val scope: CoroutineScope, private val callBack: CallB for (book in items) { book.releaseHtmlData() } + hasMore = hasMore || items.isNotEmpty() appDb.searchBookDao.insert(*items.toTypedArray()) mergeItems(items, precision) currentCoroutineContext().ensureActive() callBack.onSearchSuccess(searchBooks) }.onCompletion { - if (it == null) callBack.onSearchFinish(searchBooks.isEmpty()) + if (it == null) callBack.onSearchFinish(searchBooks.isEmpty(), hasMore) }.catch { AppLog.put("书源搜索出错\n${it.localizedMessage}", it) }.collect() @@ -185,7 +187,7 @@ class SearchModel(private val scope: CoroutineScope, private val callBack: CallB fun getSearchScope(): SearchScope fun onSearchStart() fun onSearchSuccess(searchBooks: List) - fun onSearchFinish(isEmpty: Boolean) + fun onSearchFinish(isEmpty: Boolean, hasMore: Boolean) fun onSearchCancel(exception: Throwable? = null) } diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt index 006ba064e..b29c869e8 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt @@ -54,7 +54,6 @@ import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import splitties.init.appCtx -import kotlin.math.abs class SearchActivity : VMBaseActivity(), BookAdapter.CallBack, @@ -240,20 +239,7 @@ class SearchActivity : VMBaseActivity() var isSearchLiveData = MutableLiveData() var searchKey: String = "" + var hasMore = true private var searchID = 0L private val searchModel = SearchModel(viewModelScope, object : SearchModel.CallBack { @@ -45,9 +46,10 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { searchBookLiveData.postValue(searchBooks) } - override fun onSearchFinish(isEmpty: Boolean) { + override fun onSearchFinish(isEmpty: Boolean, hasMore: Boolean) { isSearchLiveData.postValue(false) searchFinishLiveData.postValue(isEmpty) + this@SearchViewModel.hasMore = hasMore } override fun onSearchCancel(exception: Throwable?) { @@ -99,6 +101,7 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { searchID = System.currentTimeMillis() searchBookLiveData.postValue(emptyList()) searchKey = key + hasMore = true } if (searchKey.isEmpty()) { return@execute diff --git a/app/src/main/java/io/legado/app/ui/widget/text/MultilineTextView.kt b/app/src/main/java/io/legado/app/ui/widget/text/MultilineTextView.kt index 622279292..acaa6aa0a 100644 --- a/app/src/main/java/io/legado/app/ui/widget/text/MultilineTextView.kt +++ b/app/src/main/java/io/legado/app/ui/widget/text/MultilineTextView.kt @@ -1,12 +1,19 @@ package io.legado.app.ui.widget.text import android.content.Context +import android.os.Build import android.util.AttributeSet import androidx.appcompat.widget.AppCompatTextView class MultilineTextView(context: Context, attrs: AttributeSet?) : AppCompatTextView(context, attrs) { + init { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + isFallbackLineSpacing = false + } + } + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { val heightSize = MeasureSpec.getSize(heightMeasureSpec) calculateLines(heightSize) diff --git a/app/src/main/java/io/legado/app/web/socket/BookSearchWebSocket.kt b/app/src/main/java/io/legado/app/web/socket/BookSearchWebSocket.kt index b1ed3f907..c6917e410 100644 --- a/app/src/main/java/io/legado/app/web/socket/BookSearchWebSocket.kt +++ b/app/src/main/java/io/legado/app/web/socket/BookSearchWebSocket.kt @@ -90,7 +90,7 @@ class BookSearchWebSocket(handshakeRequest: NanoHTTPD.IHTTPSession) : send(GSON.toJson(searchBooks)) } - override fun onSearchFinish(isEmpty: Boolean) = close(normalClosure, SEARCH_FINISH, false) + override fun onSearchFinish(isEmpty: Boolean, hasMore: Boolean) = close(normalClosure, SEARCH_FINISH, false) override fun onSearchCancel(exception: Throwable?) = close(normalClosure, exception?.toString() ?: SEARCH_FINISH, false)