Merge pull request #4877 from nextcloud/issue-4762-search-bug

Fixing bugs with Conversation search
This commit is contained in:
Marcel Hibbe 2025-05-22 12:48:57 +00:00 committed by GitHub
commit 39b7931534
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -41,9 +41,9 @@ import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.core.os.bundleOf
import androidx.core.graphics.drawable.toDrawable import androidx.core.graphics.drawable.toDrawable
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.core.os.bundleOf
import androidx.core.view.MenuItemCompat import androidx.core.view.MenuItemCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
@ -1349,6 +1349,7 @@ class ConversationsListActivity :
private fun performFilterAndSearch(filter: String?) { private fun performFilterAndSearch(filter: String?) {
if (filter!!.length >= SEARCH_MIN_CHARS) { if (filter!!.length >= SEARCH_MIN_CHARS) {
clearMessageSearchResults() clearMessageSearchResults()
binding.noArchivedConversationLayout.visibility = View.GONE
if (hasFilterEnabled()) { if (hasFilterEnabled()) {
adapter?.updateDataSet(conversationItems) adapter?.updateDataSet(conversationItems)
@ -1372,6 +1373,12 @@ class ConversationsListActivity :
clearMessageSearchResults() clearMessageSearchResults()
adapter?.setFilter("") adapter?.setFilter("")
adapter?.filterItems() adapter?.filterItems()
val archiveFilterOn = filterState[FilterConversationFragment.ARCHIVE] ?: false
if (archiveFilterOn && adapter!!.isEmpty) {
binding.noArchivedConversationLayout.visibility = View.VISIBLE
} else {
binding.noArchivedConversationLayout.visibility = View.GONE
}
} }
private fun clearMessageSearchResults() { private fun clearMessageSearchResults() {
@ -1380,6 +1387,7 @@ class ConversationsListActivity :
adapter?.removeSection(firstHeader) adapter?.removeSection(firstHeader)
} else { } else {
adapter?.removeItemsOfType(MessageResultItem.VIEW_TYPE) adapter?.removeItemsOfType(MessageResultItem.VIEW_TYPE)
adapter?.removeItemsOfType(MessagesTextHeaderItem.VIEW_TYPE)
} }
adapter?.removeItemsOfType(LoadMoreResultsItem.VIEW_TYPE) adapter?.removeItemsOfType(LoadMoreResultsItem.VIEW_TYPE)
} }
@ -2077,29 +2085,25 @@ class ConversationsListActivity :
val entries = results.messages val entries = results.messages
if (entries.isNotEmpty()) { if (entries.isNotEmpty()) {
val adapterItems: MutableList<AbstractFlexibleItem<*>> = ArrayList(entries.size + 1) val adapterItems: MutableList<AbstractFlexibleItem<*>> = ArrayList(entries.size + 1)
for (i in entries.indices) { for (i in entries.indices) {
val showHeader = i == 0
adapterItems.add( adapterItems.add(
MessageResultItem( MessageResultItem(
context, context,
currentUser!!, currentUser!!,
entries[i], entries[i],
showHeader,
viewThemeUtils = viewThemeUtils viewThemeUtils = viewThemeUtils
) )
) )
} }
if (results.hasMore) { if (results.hasMore) {
adapterItems.add(LoadMoreResultsItem) adapterItems.add(LoadMoreResultsItem)
} }
adapter?.addItems(Int.MAX_VALUE, adapterItems) adapter?.addItems(Int.MAX_VALUE, adapterItems)
val pos = adapter?.currentItems?.indexOfFirst {
it is MessageResultItem
}
val item = (adapter?.currentItems?.get(pos!!) as MessageResultItem).apply { showHeader = true }
adapter?.addItem(pos!!, item)
adapter?.notifyItemInserted(pos!!)
adapter?.removeItem(pos!! - 1)
adapter?.notifyItemRemoved(pos!! - 1)
binding.recyclerView.scrollToPosition(0) binding.recyclerView.scrollToPosition(0)
} }
} }