mirror of
https://github.com/nextcloud/talk-android
synced 2025-03-06 22:29:09 +00:00
Improved Search
- Uncommented out fetchOpenConversations - Added fetchUsers to conversationList - Made the messages appear first Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
This commit is contained in:
parent
4632d20705
commit
4425f8249a
@ -70,6 +70,7 @@ import com.nextcloud.talk.account.WebViewLoginActivity
|
||||
import com.nextcloud.talk.activities.BaseActivity
|
||||
import com.nextcloud.talk.activities.CallActivity
|
||||
import com.nextcloud.talk.activities.MainActivity
|
||||
import com.nextcloud.talk.adapters.items.ContactItem
|
||||
import com.nextcloud.talk.adapters.items.ConversationItem
|
||||
import com.nextcloud.talk.adapters.items.GenericTextHeaderItem
|
||||
import com.nextcloud.talk.adapters.items.LoadMoreResultsItem
|
||||
@ -80,6 +81,8 @@ import com.nextcloud.talk.application.NextcloudTalkApplication
|
||||
import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager
|
||||
import com.nextcloud.talk.chat.ChatActivity
|
||||
import com.nextcloud.talk.contacts.ContactsActivityCompose
|
||||
import com.nextcloud.talk.contacts.ContactsUiState
|
||||
import com.nextcloud.talk.contacts.ContactsViewModel
|
||||
import com.nextcloud.talk.conversationlist.viewmodels.ConversationsListViewModel
|
||||
import com.nextcloud.talk.data.network.NetworkMonitor
|
||||
import com.nextcloud.talk.data.user.model.User
|
||||
@ -95,6 +98,9 @@ import com.nextcloud.talk.messagesearch.MessageSearchHelper
|
||||
import com.nextcloud.talk.messagesearch.MessageSearchHelper.MessageSearchResults
|
||||
import com.nextcloud.talk.models.domain.ConversationModel
|
||||
import com.nextcloud.talk.models.json.conversations.ConversationEnums
|
||||
import com.nextcloud.talk.models.json.conversations.RoomsOverall
|
||||
import com.nextcloud.talk.models.json.converters.EnumActorTypeConverter
|
||||
import com.nextcloud.talk.models.json.participants.Participant
|
||||
import com.nextcloud.talk.repositories.unifiedsearch.UnifiedSearchRepository
|
||||
import com.nextcloud.talk.settings.SettingsActivity
|
||||
import com.nextcloud.talk.ui.dialog.ChooseAccountDialogFragment
|
||||
@ -178,6 +184,9 @@ class ConversationsListActivity :
|
||||
@Inject
|
||||
lateinit var networkMonitor: NetworkMonitor
|
||||
|
||||
@Inject
|
||||
lateinit var contactsViewModel: ContactsViewModel
|
||||
|
||||
lateinit var conversationsListViewModel: ConversationsListViewModel
|
||||
|
||||
override val appBarLayoutType: AppBarLayoutType
|
||||
@ -387,6 +396,45 @@ class ConversationsListActivity :
|
||||
setConversationList(list)
|
||||
}.collect()
|
||||
}
|
||||
|
||||
lifecycleScope.launch {
|
||||
contactsViewModel.contactsViewState.onEach { state ->
|
||||
when (state) {
|
||||
is ContactsUiState.Success -> {
|
||||
if (state.contacts.isNullOrEmpty()) return@onEach
|
||||
|
||||
val userItems: MutableList<AbstractFlexibleItem<*>> = ArrayList()
|
||||
val actorTypeConverter = EnumActorTypeConverter()
|
||||
var genericTextHeaderItem: GenericTextHeaderItem
|
||||
for (autocompleteUser in state.contacts) {
|
||||
val headerTitle = resources!!.getString(R.string.nc_user)
|
||||
if (!callHeaderItems.containsKey(headerTitle)) {
|
||||
genericTextHeaderItem = GenericTextHeaderItem(headerTitle, viewThemeUtils)
|
||||
callHeaderItems[headerTitle] = genericTextHeaderItem
|
||||
}
|
||||
|
||||
val participant = Participant()
|
||||
participant.actorId = autocompleteUser.id
|
||||
participant.actorType = actorTypeConverter.getFromString(autocompleteUser.source)
|
||||
participant.displayName = autocompleteUser.label
|
||||
|
||||
val contactItem = ContactItem(
|
||||
participant,
|
||||
currentUser!!,
|
||||
callHeaderItems[headerTitle],
|
||||
viewThemeUtils
|
||||
)
|
||||
|
||||
userItems.add(contactItem)
|
||||
}
|
||||
|
||||
searchableConversationItems.addAll(userItems)
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}.collect()
|
||||
}
|
||||
}
|
||||
|
||||
private fun setConversationList(list: List<ConversationModel>) {
|
||||
@ -411,6 +459,9 @@ class ConversationsListActivity :
|
||||
intArrayOf(ApiUtils.API_V4, ApiUtils.API_V3, 1)
|
||||
)
|
||||
fetchOpenConversations(apiVersion)
|
||||
|
||||
// Get users
|
||||
fetchUsers()
|
||||
}
|
||||
|
||||
private fun hasFilterEnabled(): Boolean {
|
||||
@ -944,40 +995,45 @@ class ConversationsListActivity :
|
||||
)
|
||||
) {
|
||||
val openConversationItems: MutableList<AbstractFlexibleItem<*>> = ArrayList()
|
||||
// openConversationsQueryDisposable = ncApi.getOpenConversations(
|
||||
// credentials,
|
||||
// ApiUtils.getUrlForOpenConversations(apiVersion, currentUser!!.baseUrl!!)
|
||||
// )
|
||||
// .subscribeOn(Schedulers.io())
|
||||
// .observeOn(AndroidSchedulers.mainThread())
|
||||
// .subscribe({ (ocs): RoomsOverall ->
|
||||
// for (conversation in ocs!!.data!!) {
|
||||
// val headerTitle = resources!!.getString(R.string.openConversations)
|
||||
// var genericTextHeaderItem: GenericTextHeaderItem
|
||||
// if (!callHeaderItems.containsKey(headerTitle)) {
|
||||
// genericTextHeaderItem = GenericTextHeaderItem(headerTitle, viewThemeUtils)
|
||||
// callHeaderItems[headerTitle] = genericTextHeaderItem
|
||||
// }
|
||||
// val conversationItem = ConversationItem(
|
||||
// conversation,
|
||||
// currentUser!!,
|
||||
// this,
|
||||
// callHeaderItems[headerTitle],
|
||||
// viewThemeUtils
|
||||
// )
|
||||
// openConversationItems.add(conversationItem)
|
||||
// }
|
||||
// searchableConversationItems.addAll(openConversationItems)
|
||||
// }, { throwable: Throwable ->
|
||||
// Log.e(TAG, "fetchData - getRooms - ERROR", throwable)
|
||||
// handleHttpExceptions(throwable)
|
||||
// dispose(openConversationsQueryDisposable)
|
||||
// }) { dispose(openConversationsQueryDisposable) }
|
||||
openConversationsQueryDisposable = ncApi.getOpenConversations(
|
||||
credentials,
|
||||
ApiUtils.getUrlForOpenConversations(apiVersion, currentUser!!.baseUrl!!),
|
||||
""
|
||||
)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe({ (ocs): RoomsOverall ->
|
||||
for (conversation in ocs!!.data!!) {
|
||||
val headerTitle = resources!!.getString(R.string.openConversations)
|
||||
var genericTextHeaderItem: GenericTextHeaderItem
|
||||
if (!callHeaderItems.containsKey(headerTitle)) {
|
||||
genericTextHeaderItem = GenericTextHeaderItem(headerTitle, viewThemeUtils)
|
||||
callHeaderItems[headerTitle] = genericTextHeaderItem
|
||||
}
|
||||
val conversationItem = ConversationItem(
|
||||
ConversationModel.mapToConversationModel(conversation, currentUser!!),
|
||||
currentUser!!,
|
||||
this,
|
||||
callHeaderItems[headerTitle],
|
||||
viewThemeUtils
|
||||
)
|
||||
openConversationItems.add(conversationItem)
|
||||
}
|
||||
searchableConversationItems.addAll(openConversationItems)
|
||||
}, { throwable: Throwable ->
|
||||
Log.e(TAG, "fetchData - getRooms - ERROR", throwable)
|
||||
handleHttpExceptions(throwable)
|
||||
dispose(openConversationsQueryDisposable)
|
||||
}) { dispose(openConversationsQueryDisposable) }
|
||||
} else {
|
||||
Log.d(TAG, "no open conversations fetched because of missing capability")
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchUsers() {
|
||||
contactsViewModel.getContactsFromSearchParams()
|
||||
}
|
||||
|
||||
private fun handleHttpExceptions(throwable: Throwable) {
|
||||
if (throwable is HttpException) {
|
||||
when (throwable.code()) {
|
||||
@ -1923,8 +1979,8 @@ class ConversationsListActivity :
|
||||
if (results.hasMore) {
|
||||
adapterItems.add(LoadMoreResultsItem)
|
||||
}
|
||||
// add unified search result at the end of the list
|
||||
adapter!!.addItems(adapter!!.mainItemCount + adapter!!.scrollableHeaders.size, adapterItems)
|
||||
|
||||
adapter!!.addItems(0, adapterItems)
|
||||
binding.recyclerView?.scrollToPosition(0)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user