diff --git a/app/src/main/java/com/nextcloud/talk/newarch/data/repository/offline/ConversationsRepositoryImpl.kt b/app/src/main/java/com/nextcloud/talk/newarch/data/repository/offline/ConversationsRepositoryImpl.kt index 9824e09fe..59e28cda5 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/data/repository/offline/ConversationsRepositoryImpl.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/data/repository/offline/ConversationsRepositoryImpl.kt @@ -57,10 +57,18 @@ class ConversationsRepositoryImpl(val conversationsDao: ConversationsDao) : .deleteConversation(userId, conversationId) } - override fun getConversationsForUser(userId: Long): LiveData> { - return conversationsDao.getConversationsForUser(userId).distinctUntilChanged().map { data -> - data.map { - it.toConversation() + override fun getConversationsForUser(userId: Long, filter: String?): LiveData> { + filter?.let { + return conversationsDao.getConversationsForUserWithFilter(userId, it).distinctUntilChanged().map { data -> + data.map {conversationEntity -> + conversationEntity.toConversation() + } + } + } ?: run { + return conversationsDao.getConversationsForUser(userId).distinctUntilChanged().map { data -> + data.map { + it.toConversation() + } } } } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/domain/repository/offline/ConversationsRepository.kt b/app/src/main/java/com/nextcloud/talk/newarch/domain/repository/offline/ConversationsRepository.kt index b5cdc65ba..b91217c62 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/domain/repository/offline/ConversationsRepository.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/domain/repository/offline/ConversationsRepository.kt @@ -24,7 +24,7 @@ import androidx.lifecycle.LiveData import com.nextcloud.talk.models.json.conversations.Conversation interface ConversationsRepository { - fun getConversationsForUser(userId: Long): LiveData> + fun getConversationsForUser(userId: Long, filter: String?): LiveData> fun getShortcutTargetConversations(userId: Long): LiveData> suspend fun getConversationForUserWithToken(userId: Long, token: String): Conversation? diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt index 50dab2925..73acf8bbb 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt @@ -22,8 +22,11 @@ package com.nextcloud.talk.newarch.features.conversationsList import android.app.Application import android.graphics.drawable.Drawable +import android.os.Handler +import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Transformations +import androidx.lifecycle.distinctUntilChanged import androidx.lifecycle.viewModelScope import coil.Coil import coil.api.get @@ -47,6 +50,7 @@ import kotlinx.coroutines.launch import org.koin.core.parameter.parametersOf import java.util.concurrent.locks.ReentrantLock + class ConversationsListViewModel constructor( application: Application, private val getConversationsUseCase: GetConversationsUseCase, @@ -62,13 +66,18 @@ class ConversationsListViewModel constructor( var messageData: String? = null val networkStateLiveData: MutableLiveData = MutableLiveData(ConversationsListViewNetworkState.LOADING) val avatar: MutableLiveData = MutableLiveData(DisplayUtils.getRoundedDrawable(context.getDrawable(R.drawable.ic_settings_white_24dp))) - val conversationsLiveData = Transformations.switchMap(globalService.currentUserLiveData) { + val filterLiveData: MutableLiveData = MutableLiveData(null) + val conversationsLiveData = Transformations.switchMap(globalService.currentUserLiveData) { user -> if (networkStateLiveData.value != ConversationsListViewNetworkState.LOADING) { networkStateLiveData.postValue(ConversationsListViewNetworkState.LOADING) } loadConversations() loadAvatar() - conversationsRepository.getConversationsForUser(it.id!!) + + filterLiveData.value = null + Transformations.switchMap(filterLiveData.distinctUntilChanged()) { filter -> + conversationsRepository.getConversationsForUser(user.id!!, filter) + } } fun leaveConversation(conversation: Conversation) { diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/search/DebouncingQueryTextListener.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/search/DebouncingQueryTextListener.kt index 6f05f4060..e53ee3895 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/search/DebouncingQueryTextListener.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/search/DebouncingQueryTextListener.kt @@ -33,7 +33,7 @@ class DebouncingQueryTextListener( lifecycle: Lifecycle, private val onDebouncingQueryTextChange: (String?) -> Unit ) : OnQueryTextListener { - var debouncePeriod: Long = 500 + private var debouncePeriod: Long = 500 private val coroutineScope = lifecycle.coroutineScope diff --git a/app/src/main/java/com/nextcloud/talk/newarch/local/dao/ConversationsDao.kt b/app/src/main/java/com/nextcloud/talk/newarch/local/dao/ConversationsDao.kt index 0bf841a0f..9ace41aa7 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/local/dao/ConversationsDao.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/local/dao/ConversationsDao.kt @@ -30,6 +30,9 @@ abstract class ConversationsDao { @Query("SELECT * FROM conversations WHERE user_id = :userId ORDER BY favorite DESC, last_activity DESC") abstract fun getConversationsForUser(userId: Long): LiveData> + @Query("SELECT * FROM conversations WHERE user_id = :userId AND display_name LIKE '%' || :filter || '%' ORDER BY favorite DESC, last_activity DESC") + abstract fun getConversationsForUserWithFilter(userId: Long, filter: String): LiveData> + @Query("SELECT * FROM conversations WHERE user_id = :userId ORDER BY favorite DESC, last_activity DESC LIMIT 4") abstract fun getShortcutTargetConversations(userId: Long): LiveData>