diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt index 57bb8100d..d71c07631 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt @@ -255,33 +255,6 @@ class GalleryListScene : SearchBarScene() { setEditTextHint(getString(if (EhUtils.isExHentai) R.string.gallery_list_search_bar_hint_exhentai else R.string.gallery_list_search_bar_hint_e_hentai)) } - private fun setSearchBarSuggestionProvider() { - setSuggestionProvider(object : SuggestionProvider { - override fun providerSuggestions(text: String): List? { - val result1 = GalleryDetailUrlParser.parse(text, false) - if (result1 != null) { - return listOf( - GalleryDetailUrlSuggestion( - result1.gid, - result1.token, - ), - ) - } - val result2 = GalleryPageUrlParser.parse(text, false) - if (result2 != null) { - return listOf( - GalleryPageUrlSuggestion( - result2.gid, - result2.pToken, - result2.page, - ), - ) - } - return null - } - }) - } - // Update search bar title, drawer checked item private fun onUpdateUrlBuilder() { _binding ?: return @@ -440,7 +413,13 @@ class GalleryListScene : SearchBarScene() { onApplySearch(query) } setSearchBarHint() - setSearchBarSuggestionProvider() + setSuggestionProvider { text -> + GalleryDetailUrlParser.parse(text, false)?.run { + GalleryDetailUrlSuggestion(gid, token) + } ?: GalleryPageUrlParser.parse(text, false)?.run { + GalleryPageUrlSuggestion(gid, pToken, page) + } + } binding.fabLayout.setAutoCancel(true) binding.fabLayout.isExpanded = false binding.fabLayout.setHidePrimaryFab(false) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/SearchBarScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/SearchBarScene.kt index d3ba7badf..4970d9414 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/SearchBarScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/SearchBarScene.kt @@ -1,6 +1,5 @@ package com.hippo.ehviewer.ui.scene -import android.annotation.SuppressLint import android.os.Build import android.os.Bundle import android.view.Gravity @@ -44,9 +43,9 @@ import com.hippo.ehviewer.ui.setMD3Content import com.jamal.composeprefs3.ui.ifNotNullThen import com.jamal.composeprefs3.ui.ifTrueThen import eu.kanade.tachiyomi.util.lang.launchIO -import eu.kanade.tachiyomi.util.lang.withUIContext import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.toList abstract class SearchBarScene : BaseScene(), ToolBarScene { private var _binding: SceneSearchbarBinding? = null @@ -218,8 +217,8 @@ abstract class SearchBarScene : BaseScene(), ToolBarScene { mAllowEmptySearch = allowEmptySearch } - interface SuggestionProvider { - fun providerSuggestions(text: String): List? + fun interface SuggestionProvider { + fun providerSuggestions(text: String): Suggestion? } private fun deleteKeyword(keyword: String) { @@ -229,9 +228,7 @@ abstract class SearchBarScene : BaseScene(), ToolBarScene { .setPositiveButton(R.string.delete) { _, _ -> lifecycleScope.launchIO { mSearchDatabase.deleteQuery(keyword) - withUIContext { - updateSuggestions(false) - } + updateSuggestions() } } .show() @@ -250,8 +247,7 @@ abstract class SearchBarScene : BaseScene(), ToolBarScene { override val keyword: String, ) : Suggestion() { override fun onClick() { - val edittext = binding.searchview.editText - edittext.let { + binding.searchview.editText.let { var keywords = it.text.toString().substringBeforeLast(' ', "") if (keywords.isNotEmpty()) keywords += ' ' keywords += wrapTagKeyword(keyword) @@ -274,15 +270,10 @@ abstract class SearchBarScene : BaseScene(), ToolBarScene { } } - @SuppressLint("NotifyDataSetChanged") - private fun updateSuggestions(scrollToTop: Boolean = true) { + private fun updateSuggestions() { _binding ?: return viewLifecycleOwner.lifecycleScope.launchIO { - val suggestions = mutableListOf() - mergedSuggestionFlow().collect { - suggestions.add(it) - } - mSuggestionList = suggestions + mSuggestionList = mergedSuggestionFlow().toList() } } @@ -290,7 +281,7 @@ abstract class SearchBarScene : BaseScene(), ToolBarScene { private fun mergedSuggestionFlow(): Flow = flow { binding.searchview.editText.text?.toString()?.let { text -> - mSuggestionProvider?.run { providerSuggestions(text)?.forEach { emit(it) } } + mSuggestionProvider?.run { providerSuggestions(text)?.let { emit(it) } } mSearchDatabase.suggestions(text, 128).forEach { emit(KeywordSuggestion(it)) } EhTagDatabase.takeIf { it.initialized }?.run { if (text.isNotEmpty() && !text.endsWith(' ')) {