diff --git a/app/src/main/kotlin/com/wire/android/ui/common/bottomsheet/conversation/HomeSheetContent.kt b/app/src/main/kotlin/com/wire/android/ui/common/bottomsheet/conversation/HomeSheetContent.kt index 72fe53f7c4..fc7934570c 100644 --- a/app/src/main/kotlin/com/wire/android/ui/common/bottomsheet/conversation/HomeSheetContent.kt +++ b/app/src/main/kotlin/com/wire/android/ui/common/bottomsheet/conversation/HomeSheetContent.kt @@ -153,10 +153,11 @@ internal fun ConversationMainSheetContent( with(conversationSheetContent) { updateConversationArchiveStatus( DialogState( - conversationId, - title, - conversationTypeDetail, - isArchived + conversationId = conversationId, + conversationName = title, + conversationTypeDetail = conversationTypeDetail, + isArchived = isArchived, + isMember = conversationSheetContent.selfRole != null ) ) } @@ -174,10 +175,11 @@ internal fun ConversationMainSheetContent( onItemClick = { clearConversationContent( DialogState( - conversationSheetContent.conversationId, - conversationSheetContent.title, - conversationSheetContent.conversationTypeDetail, - conversationSheetContent.isArchived + conversationId = conversationSheetContent.conversationId, + conversationName = conversationSheetContent.title, + conversationTypeDetail = conversationSheetContent.conversationTypeDetail, + isArchived = conversationSheetContent.isArchived, + isMember = conversationSheetContent.selfRole != null ) ) } diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsViewModel.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsViewModel.kt index b257ace576..3edc0dec77 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsViewModel.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsViewModel.kt @@ -387,7 +387,14 @@ class GroupConversationDetailsViewModel @Inject constructor( viewModelScope.launch { val shouldArchive = dialogState.isArchived.not() requestInProgress = true - val result = withContext(dispatcher.io()) { updateConversationArchivedStatus(conversationId, shouldArchive, timestamp) } + val result = withContext(dispatcher.io()) { + updateConversationArchivedStatus( + conversationId = conversationId, + shouldArchiveConversation = shouldArchive, + onlyLocally = !dialogState.isMember, + archivedStatusTimestamp = timestamp + ) + } requestInProgress = false when (result) { ArchiveStatusUpdateResult.Failure -> onMessage( diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversationslist/ConversationListViewModel.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversationslist/ConversationListViewModel.kt index 4b511ff752..59b418cf1c 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversationslist/ConversationListViewModel.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversationslist/ConversationListViewModel.kt @@ -414,8 +414,14 @@ class ConversationListViewModel @Inject constructor( with(dialogState) { viewModelScope.launch { val isArchiving = !isArchived + requestInProgress = true - val result = updateConversationArchivedStatus(conversationId, isArchiving, timestamp) + val result = updateConversationArchivedStatus( + conversationId = conversationId, + shouldArchiveConversation = isArchiving, + onlyLocally = !dialogState.isMember, + archivedStatusTimestamp = timestamp + ) requestInProgress = false when (result) { is ArchiveStatusUpdateResult.Failure -> { diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversationslist/model/GroupDialogState.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversationslist/model/GroupDialogState.kt index cffea2a5b4..4c172647ca 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversationslist/model/GroupDialogState.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversationslist/model/GroupDialogState.kt @@ -32,5 +32,6 @@ data class DialogState( val conversationId: ConversationId, val conversationName: String, val conversationTypeDetail: ConversationTypeDetail, - val isArchived: Boolean + val isArchived: Boolean, + val isMember: Boolean ) diff --git a/app/src/main/kotlin/com/wire/android/ui/userprofile/other/OtherUserProfileScreenViewModel.kt b/app/src/main/kotlin/com/wire/android/ui/userprofile/other/OtherUserProfileScreenViewModel.kt index 4e96648dd3..db4af6fdfe 100644 --- a/app/src/main/kotlin/com/wire/android/ui/userprofile/other/OtherUserProfileScreenViewModel.kt +++ b/app/src/main/kotlin/com/wire/android/ui/userprofile/other/OtherUserProfileScreenViewModel.kt @@ -300,7 +300,13 @@ class OtherUserProfileScreenViewModel @Inject constructor( viewModelScope.launch { val shouldArchive = !dialogState.isArchived requestInProgress = true - val result = withContext(dispatchers.io()) { updateConversationArchivedStatus(dialogState.conversationId, shouldArchive) } + val result = withContext(dispatchers.io()) { + updateConversationArchivedStatus( + conversationId = dialogState.conversationId, + shouldArchiveConversation = shouldArchive, + onlyLocally = !dialogState.isMember + ) + } requestInProgress = false when (result) { ArchiveStatusUpdateResult.Failure -> { diff --git a/app/src/test/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsViewModelTest.kt b/app/src/test/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsViewModelTest.kt index cdfb6dcc20..5a797ebce7 100644 --- a/app/src/test/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsViewModelTest.kt +++ b/app/src/test/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsViewModelTest.kt @@ -147,7 +147,8 @@ class GroupConversationDetailsViewModelTest { conversationId = conversationDetails.conversation.id, isCreator = conversationDetails.isSelfUserCreator ), - isArchived = conversationDetails.conversation.archived + isArchived = conversationDetails.conversation.archived, + isMember = true ) val (arrangement, viewModel) = GroupConversationDetailsViewModelArrangement() @@ -167,7 +168,8 @@ class GroupConversationDetailsViewModelTest { arrangement.updateConversationArchivedStatus( conversationId = viewModel.conversationId, shouldArchiveConversation = !conversationDetails.conversation.archived, - archivedStatusTimestamp = archivingEventTimestamp + archivedStatusTimestamp = archivingEventTimestamp, + onlyLocally = false ) } } @@ -194,7 +196,8 @@ class GroupConversationDetailsViewModelTest { conversationId = conversationDetails.conversation.id, isCreator = conversationDetails.isSelfUserCreator ), - isArchived = conversationDetails.conversation.archived + isArchived = conversationDetails.conversation.archived, + isMember = true ) val (arrangement, viewModel) = GroupConversationDetailsViewModelArrangement() @@ -214,7 +217,8 @@ class GroupConversationDetailsViewModelTest { arrangement.updateConversationArchivedStatus( conversationId = viewModel.conversationId, shouldArchiveConversation = false, - archivedStatusTimestamp = archivingEventTimestamp + archivedStatusTimestamp = archivingEventTimestamp, + onlyLocally = false ) } } @@ -692,7 +696,7 @@ internal class GroupConversationDetailsViewModelArrangement { coEvery { isMLSEnabledUseCase() } returns true coEvery { updateConversationMutedStatus(any(), any(), any()) } returns ConversationUpdateStatusResult.Success coEvery { observeSelfDeletionTimerSettingsForConversation(any(), any()) } returns flowOf(SelfDeletionTimer.Disabled) - coEvery { updateConversationArchivedStatus(any(), any()) } returns ArchiveStatusUpdateResult.Success + coEvery { updateConversationArchivedStatus(any(), any(), any()) } returns ArchiveStatusUpdateResult.Success } suspend fun withConversationDetailUpdate(conversationDetails: ConversationDetails) = apply { @@ -719,8 +723,8 @@ internal class GroupConversationDetailsViewModelArrangement { } suspend fun withUpdateArchivedStatus(result: ArchiveStatusUpdateResult) = apply { - coEvery { updateConversationArchivedStatus(any(), any()) } returns result coEvery { updateConversationArchivedStatus(any(), any(), any()) } returns result + coEvery { updateConversationArchivedStatus(any(), any(), any(), any()) } returns result } fun arrange() = this to viewModel diff --git a/app/src/test/kotlin/com/wire/android/ui/home/conversationslist/ConversationListViewModelTest.kt b/app/src/test/kotlin/com/wire/android/ui/home/conversationslist/ConversationListViewModelTest.kt index 336156ca67..e74e5b3a7d 100644 --- a/app/src/test/kotlin/com/wire/android/ui/home/conversationslist/ConversationListViewModelTest.kt +++ b/app/src/test/kotlin/com/wire/android/ui/home/conversationslist/ConversationListViewModelTest.kt @@ -337,11 +337,12 @@ class ConversationListViewModelTest { conversationItem.conversationId, conversationItem.conversationInfo.name, ConversationTypeDetail.Private(null, conversationItem.userId, BlockingState.NOT_BLOCKED), - !isArchiving + !isArchiving, + true ) val archivingTimestamp = 123456789L - coEvery { updateConversationArchivedStatus(any(), any(), any()) } returns ArchiveStatusUpdateResult.Success + coEvery { updateConversationArchivedStatus(any(), any(), any(), any()) } returns ArchiveStatusUpdateResult.Success conversationListViewModel.homeSnackBarState.test { conversationListViewModel.moveConversationToArchive(dialogState, archivingTimestamp) @@ -351,6 +352,7 @@ class ConversationListViewModelTest { updateConversationArchivedStatus.invoke( dialogState.conversationId, !dialogState.isArchived, + onlyLocally = false, archivingTimestamp ) } @@ -363,11 +365,12 @@ class ConversationListViewModelTest { conversationItem.conversationId, conversationItem.conversationInfo.name, ConversationTypeDetail.Private(null, conversationItem.userId, BlockingState.NOT_BLOCKED), - !isArchiving + !isArchiving, + isMember = true ) val archivingTimestamp = 123456789L - coEvery { updateConversationArchivedStatus(any(), any(), any()) } returns ArchiveStatusUpdateResult.Failure + coEvery { updateConversationArchivedStatus(any(), any(), any(), any()) } returns ArchiveStatusUpdateResult.Failure conversationListViewModel.homeSnackBarState.test { conversationListViewModel.moveConversationToArchive(dialogState, archivingTimestamp) @@ -377,7 +380,8 @@ class ConversationListViewModelTest { updateConversationArchivedStatus.invoke( dialogState.conversationId, !dialogState.isArchived, - archivingTimestamp + false, + archivingTimestamp, ) } } diff --git a/app/src/test/kotlin/com/wire/android/ui/userprofile/other/OtherUserProfileViewModelArrangement.kt b/app/src/test/kotlin/com/wire/android/ui/userprofile/other/OtherUserProfileViewModelArrangement.kt index 39f2fb89b0..6bf5877728 100644 --- a/app/src/test/kotlin/com/wire/android/ui/userprofile/other/OtherUserProfileViewModelArrangement.kt +++ b/app/src/test/kotlin/com/wire/android/ui/userprofile/other/OtherUserProfileViewModelArrangement.kt @@ -144,7 +144,7 @@ internal class OtherUserProfileViewModelArrangement { ) ) coEvery { observeSelfUser() } returns flowOf(TestUser.SELF_USER) - coEvery { updateConversationArchivedStatus(any(), any()) } returns ArchiveStatusUpdateResult.Success + coEvery { updateConversationArchivedStatus(any(), any(), any()) } returns ArchiveStatusUpdateResult.Success every { userTypeMapper.toMembership(any()) } returns Membership.None coEvery { getOneToOneConversation(USER_ID) } returns flowOf( GetOneToOneConversationUseCase.Result.Success(OtherUserProfileScreenViewModelTest.CONVERSATION) diff --git a/kalium b/kalium index 85418fc071..ca4d92a268 160000 --- a/kalium +++ b/kalium @@ -1 +1 @@ -Subproject commit 85418fc0714c6613ba5ab372233997e3c2eb030f +Subproject commit ca4d92a268f35ea5397d8f1a177d47b0e62cc873