Skip to content

Commit 623726e

Browse files
Merge pull request #6185 from nextcloud/feat/6181/convo-list-swipe
🔁 Add swipe actions to conversation list items
2 parents af319a8 + ba0ccb0 commit 623726e

13 files changed

Lines changed: 534 additions & 50 deletions

app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt

Lines changed: 17 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -462,9 +462,6 @@ class ConversationsListActivity : BaseActivity() {
462462
conversationsListViewModel.readUnreadState.collect { state ->
463463
when (state) {
464464
is ConversationsListViewModel.ConversationReadUnreadUiState.Success -> {
465-
fetchRooms()
466-
val resId = if (state.isMarkedRead) R.string.marked_as_read else R.string.marked_as_unread
467-
showSnackbar(String.format(resources.getString(resId), state.conversationDisplayName))
468465
conversationsListViewModel.resetReadUnreadState()
469466
}
470467
is ConversationsListViewModel.ConversationReadUnreadUiState.Error -> {
@@ -475,6 +472,21 @@ class ConversationsListActivity : BaseActivity() {
475472
}
476473
}
477474
}
475+
476+
lifecycleScope.launch {
477+
conversationsListViewModel.favoriteState.collect { state ->
478+
when (state) {
479+
is ConversationsListViewModel.FavoriteUiState.Success -> {
480+
conversationsListViewModel.resetFavoriteState()
481+
}
482+
is ConversationsListViewModel.FavoriteUiState.Error -> {
483+
showSnackbar(resources.getString(R.string.nc_common_error_sorry))
484+
conversationsListViewModel.resetFavoriteState()
485+
}
486+
ConversationsListViewModel.FavoriteUiState.None -> { /* no-op */ }
487+
}
488+
}
489+
}
478490
}
479491

480492
private fun handleNoteToSelfShortcut(noteToSelfAvailable: Boolean, noteToSelfToken: String) {
@@ -1096,38 +1108,12 @@ class ConversationsListActivity : BaseActivity() {
10961108
}
10971109
}
10981110

1099-
@Suppress("Detekt.TooGenericExceptionCaught", "TooGenericExceptionCaught")
11001111
private fun addConversationToFavorites(conversation: ConversationModel) {
1101-
val apiVersion = ApiUtils.getConversationApiVersion(currentUser!!, intArrayOf(ApiUtils.API_V4, ApiUtils.API_V1))
1102-
val url = ApiUtils.getUrlForRoomFavorite(apiVersion, currentUser?.baseUrl!!, conversation.token)
1103-
lifecycleScope.launch {
1104-
try {
1105-
withContext(Dispatchers.IO) { ncApiCoroutines.addConversationToFavorites(credentials!!, url) }
1106-
fetchRooms()
1107-
showSnackbar(
1108-
String.format(resources.getString(R.string.added_to_favorites), conversation.displayName)
1109-
)
1110-
} catch (e: Exception) {
1111-
showSnackbar(resources.getString(R.string.nc_common_error_sorry))
1112-
}
1113-
}
1112+
conversationsListViewModel.addConversationToFavorites(conversation)
11141113
}
11151114

1116-
@Suppress("Detekt.TooGenericExceptionCaught", "TooGenericExceptionCaught")
11171115
private fun removeConversationFromFavorites(conversation: ConversationModel) {
1118-
val apiVersion = ApiUtils.getConversationApiVersion(currentUser!!, intArrayOf(ApiUtils.API_V4, ApiUtils.API_V1))
1119-
val url = ApiUtils.getUrlForRoomFavorite(apiVersion, currentUser?.baseUrl!!, conversation.token)
1120-
lifecycleScope.launch {
1121-
try {
1122-
withContext(Dispatchers.IO) { ncApiCoroutines.removeConversationFromFavorites(credentials!!, url) }
1123-
fetchRooms()
1124-
showSnackbar(
1125-
String.format(resources.getString(R.string.removed_from_favorites), conversation.displayName)
1126-
)
1127-
} catch (e: Exception) {
1128-
showSnackbar(resources.getString(R.string.nc_common_error_sorry))
1129-
}
1130-
}
1116+
conversationsListViewModel.removeConversationFromFavorites(conversation)
11311117
}
11321118

11331119
private fun markConversationAsUnread(conversation: ConversationModel) {

app/src/main/java/com/nextcloud/talk/conversationlist/data/OfflineConversationsRepository.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ interface OfflineConversationsRepository {
4444

4545
suspend fun updateConversation(conversationModel: ConversationModel)
4646

47+
suspend fun updateConversationLocallyAndEmit(user: User, conversation: ConversationModel)
48+
4749
@Deprecated("use observeConversation")
4850
suspend fun getLocallyStoredConversation(user: User, roomToken: String): ConversationModel?
4951

app/src/main/java/com/nextcloud/talk/conversationlist/data/network/OfflineFirstConversationsRepository.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,12 @@ class OfflineFirstConversationsRepository @Inject constructor(
127127
dao.updateConversation(entity)
128128
}
129129

130+
override suspend fun updateConversationLocallyAndEmit(user: User, conversation: ConversationModel) {
131+
dao.updateConversation(conversation.asEntity())
132+
val updatedList = getListOfConversations(user.id!!)
133+
_roomListFlow.emit(updatedList)
134+
}
135+
130136
override suspend fun getLocallyStoredConversation(user: User, roomToken: String): ConversationModel? {
131137
val id = user.id!!
132138
return getConversation(id, roomToken)

0 commit comments

Comments
 (0)