From 2e6fd8d0690eacdb93b0aa1406b718af6bc2ef5d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 12:59:37 +0000 Subject: [PATCH 1/4] Commit with unresolved merge conflicts outside of submodules --- .../conversation/ConversationSheetContent.kt | 2 + .../details/GroupConversationDetailsScreen.kt | 6 +- .../GroupConversationParticipants.kt | 5 + .../ConversationSheetContentTest.kt | 94 +++++++++++++++++++ 4 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 app/src/test/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationSheetContentTest.kt diff --git a/app/src/main/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationSheetContent.kt b/app/src/main/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationSheetContent.kt index b84dc76108..57007fae7a 100644 --- a/app/src/main/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationSheetContent.kt +++ b/app/src/main/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationSheetContent.kt @@ -150,4 +150,6 @@ data class ConversationSheetContent( fun canAddToFavourite(): Boolean = (conversationTypeDetail is ConversationTypeDetail.Private && conversationTypeDetail.blockingState != BlockingState.BLOCKED) || conversationTypeDetail is ConversationTypeDetail.Group + + fun isAbandonedOneOnOneConversation(participantsCount: Int): Boolean = title.isEmpty() && participantsCount == 1 } diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsScreen.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsScreen.kt index ef8a870b35..dad97e0534 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsScreen.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsScreen.kt @@ -421,7 +421,11 @@ private fun GroupConversationDetailsContent( GroupConversationDetailsTabItem.PARTICIPANTS -> GroupConversationParticipants( groupParticipantsState = groupParticipantsState, onProfilePressed = onProfilePressed, - lazyListState = lazyListStates[pageIndex] + lazyListState = lazyListStates[pageIndex], + isAbandonedOneOnOneConversation = conversationSheetState.conversationSheetContent?.isAbandonedOneOnOneConversation( + groupParticipantsState.data.allCount + ) ?: false + ) } } diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt index 88eda234d5..d784bc7563 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt @@ -55,8 +55,13 @@ import com.wire.kalium.logic.data.user.SupportedProtocol fun GroupConversationParticipants( onProfilePressed: (UIParticipant) -> Unit, groupParticipantsState: GroupConversationParticipantsState, +<<<<<<< HEAD modifier: Modifier = Modifier, lazyListState: LazyListState = rememberLazyListState() +======= + lazyListState: LazyListState = rememberLazyListState(), + isAbandonedOneOnOneConversation: Boolean = false +>>>>>>> 0b5a43678 (fix(conversation): disable addMember on a one-on-one conversation with deleted account (WPB-10259) 🍒 (#3396)) ) { val context = LocalContext.current Column(modifier = modifier) { diff --git a/app/src/test/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationSheetContentTest.kt b/app/src/test/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationSheetContentTest.kt new file mode 100644 index 0000000000..09f6b2160a --- /dev/null +++ b/app/src/test/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationSheetContentTest.kt @@ -0,0 +1,94 @@ +/* + * Wire + * Copyright (C) 2024 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + */ +package com.wire.android.ui.common.bottomsheet.conversation + +import com.wire.android.ui.home.conversations.details.GroupConversationDetailsViewModelTest.Companion.testGroup +import com.wire.kalium.logic.data.conversation.Conversation +import com.wire.kalium.logic.data.id.TeamId +import kotlinx.coroutines.test.runTest +import org.amshove.kluent.internal.assertEquals +import org.junit.jupiter.api.Test + +class ConversationSheetContentTest { + + @Test + fun givenTitleIsEmptyAndTheGroupSizeIsOne_whenCallingIsTheGroupAbandoned_returnsTrue() = runTest { + val details = testGroup.copy(conversation = testGroup.conversation.copy(teamId = TeamId("team_id"))) + + val givenConversationSheetContent = ConversationSheetContent( + title = "", + conversationId = details.conversation.id, + mutingConversationState = details.conversation.mutedStatus, + conversationTypeDetail = ConversationTypeDetail.Group(details.conversation.id, details.isSelfUserCreator), + selfRole = Conversation.Member.Role.Member, + isTeamConversation = details.conversation.isTeamGroup(), + isArchived = false, + protocol = Conversation.ProtocolInfo.Proteus, + mlsVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED, + proteusVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED, + isUnderLegalHold = false + ) + val givenParticipantsCount = 1 + + assertEquals(true, givenConversationSheetContent.isAbandonedOneOnOneConversation(givenParticipantsCount)) + } + + @Test + fun givenTitleIsEmptyAndTheGroupSizeIsGtOne_whenCallingIsTheGroupAbandoned_returnsFalse() = runTest { + val details = testGroup.copy(conversation = testGroup.conversation.copy(teamId = TeamId("team_id"))) + + val givenConversationSheetContent = ConversationSheetContent( + title = "", + conversationId = details.conversation.id, + mutingConversationState = details.conversation.mutedStatus, + conversationTypeDetail = ConversationTypeDetail.Group(details.conversation.id, details.isSelfUserCreator), + selfRole = Conversation.Member.Role.Member, + isTeamConversation = details.conversation.isTeamGroup(), + isArchived = false, + protocol = Conversation.ProtocolInfo.Proteus, + mlsVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED, + proteusVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED, + isUnderLegalHold = false + ) + val givenParticipantsCount = 3 + + assertEquals(false, givenConversationSheetContent.isAbandonedOneOnOneConversation(givenParticipantsCount)) + } + + @Test + fun givenTitleIsNotEmptyAndTheGroupSizeIsOne_whenCallingIsTheGroupAbandoned_returnsFalse() = runTest { + val details = testGroup.copy(conversation = testGroup.conversation.copy(teamId = TeamId("team_id"))) + + val givenConversationSheetContent = ConversationSheetContent( + title = "notEmpty", + conversationId = details.conversation.id, + mutingConversationState = details.conversation.mutedStatus, + conversationTypeDetail = ConversationTypeDetail.Group(details.conversation.id, details.isSelfUserCreator), + selfRole = Conversation.Member.Role.Member, + isTeamConversation = details.conversation.isTeamGroup(), + isArchived = false, + protocol = Conversation.ProtocolInfo.Proteus, + mlsVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED, + proteusVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED, + isUnderLegalHold = false + ) + val givenParticipantsCount = 3 + + assertEquals(false, givenConversationSheetContent.isAbandonedOneOnOneConversation(givenParticipantsCount)) + } +} From 20675c1d30a3b9f37d63c2575b2a1a5b7ba07239 Mon Sep 17 00:00:00 2001 From: Mohamad Jaara Date: Fri, 27 Sep 2024 15:04:04 +0000 Subject: [PATCH 2/4] Commit with unresolved merge conflicts outside of submodules --- .../details/GroupConversationDetailsScreen.kt | 16 +++++++++++++--- .../GroupConversationParticipants.kt | 12 +++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsScreen.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsScreen.kt index ef8a870b35..f23ad71e10 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsScreen.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsScreen.kt @@ -239,7 +239,11 @@ fun GroupConversationDetailsScreen( }, isLoading = viewModel.requestInProgress, onSearchConversationMessagesClick = onSearchConversationMessagesClick, - onConversationMediaClick = onConversationMediaClick + onConversationMediaClick = onConversationMediaClick, + isAbandonedOneOnOneConversation = viewModel.conversationSheetContent?.isAbandonedOneOnOneConversation( + viewModel.groupParticipantsState.data.allCount + ) ?: false + ) val tryAgainSnackBarMessage = stringResource(id = R.string.error_unknown_message) @@ -279,6 +283,7 @@ private fun GroupConversationDetailsContent( onDeleteGroup: (GroupDialogState) -> Unit, groupParticipantsState: GroupConversationParticipantsState, isLoading: Boolean, + isAbandonedOneOnOneConversation: Boolean, onSearchConversationMessagesClick: () -> Unit, onConversationMediaClick: () -> Unit ) { @@ -385,7 +390,7 @@ private fun GroupConversationDetailsContent( } GroupConversationDetailsTabItem.PARTICIPANTS -> { - if (groupParticipantsState.addParticipantsEnabled) { + if (groupParticipantsState.addParticipantsEnabled && !isAbandonedOneOnOneConversation) { Box(modifier = Modifier.padding(MaterialTheme.wireDimensions.spacing16x)) { WirePrimaryButton( text = stringResource(R.string.conversation_details_group_participants_add), @@ -421,7 +426,11 @@ private fun GroupConversationDetailsContent( GroupConversationDetailsTabItem.PARTICIPANTS -> GroupConversationParticipants( groupParticipantsState = groupParticipantsState, onProfilePressed = onProfilePressed, +<<<<<<< HEAD lazyListState = lazyListStates[pageIndex] +======= + lazyListState = lazyListStates[pageIndex], +>>>>>>> 48ec7dec8 (fix: disable addMember on a one-on-one conversation with deleted account (WPB-10259) (#3473)) ) } } @@ -601,7 +610,8 @@ fun PreviewGroupConversationDetails() { onEditSelfDeletingMessages = {}, onEditGuestAccess = {}, onSearchConversationMessagesClick = {}, - onConversationMediaClick = {} + onConversationMediaClick = {}, + isAbandonedOneOnOneConversation = false ) } } diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt index 88eda234d5..1c8c1e3005 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt @@ -56,13 +56,17 @@ fun GroupConversationParticipants( onProfilePressed: (UIParticipant) -> Unit, groupParticipantsState: GroupConversationParticipantsState, modifier: Modifier = Modifier, +<<<<<<< HEAD lazyListState: LazyListState = rememberLazyListState() +======= + lazyListState: LazyListState = rememberLazyListState(), +>>>>>>> 48ec7dec8 (fix: disable addMember on a one-on-one conversation with deleted account (WPB-10259) (#3473)) ) { val context = LocalContext.current Column(modifier = modifier) { LazyColumn( state = lazyListState, - modifier = Modifier.fillMaxSize() + modifier = modifier.fillMaxSize() ) { if (BuildConfig.MLS_SUPPORT_ENABLED && BuildConfig.DEVELOPER_FEATURES_ENABLED) { item(key = "participants_list_header") { @@ -128,6 +132,12 @@ fun PreviewGroupConversationParticipants() = WireTheme { GroupConversationParticipants({}, GroupConversationParticipantsState.PREVIEW) } +@PreviewMultipleThemes +@Composable +fun PreviewGroupConversationParticipantsAdandonedOneOnOne() = WireTheme { + GroupConversationParticipants({}, GroupConversationParticipantsState.PREVIEW) +} + @PreviewMultipleThemes @Composable fun PreviewMLSProgressIndicator() = WireTheme { From 1fe937d866550fdafa6635541dc656f840aa31ad Mon Sep 17 00:00:00 2001 From: Mohamad Jaara Date: Mon, 7 Oct 2024 12:43:05 +0200 Subject: [PATCH 3/4] fix merge conflicts --- .../details/participants/GroupConversationParticipants.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt index d784bc7563..37cbf3b747 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt @@ -55,13 +55,9 @@ import com.wire.kalium.logic.data.user.SupportedProtocol fun GroupConversationParticipants( onProfilePressed: (UIParticipant) -> Unit, groupParticipantsState: GroupConversationParticipantsState, -<<<<<<< HEAD modifier: Modifier = Modifier, - lazyListState: LazyListState = rememberLazyListState() -======= lazyListState: LazyListState = rememberLazyListState(), isAbandonedOneOnOneConversation: Boolean = false ->>>>>>> 0b5a43678 (fix(conversation): disable addMember on a one-on-one conversation with deleted account (WPB-10259) 🍒 (#3396)) ) { val context = LocalContext.current Column(modifier = modifier) { From 28ad8efbff6ab52eb8839947e01b06b35944108e Mon Sep 17 00:00:00 2001 From: Mohamad Jaara Date: Mon, 7 Oct 2024 13:01:38 +0200 Subject: [PATCH 4/4] fix merge conflicts --- .../details/participants/GroupConversationParticipants.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt index 852136e273..ac5f136e73 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/participants/GroupConversationParticipants.kt @@ -125,13 +125,13 @@ fun MLSProgressIndicator( @PreviewMultipleThemes @Composable fun PreviewGroupConversationParticipants() = WireTheme { - GroupConversationParticipants({}, GroupConversationParticipantsState.PREVIEW) + GroupConversationParticipants({}, GroupConversationParticipantsState.PREVIEW, rememberLazyListState()) } @PreviewMultipleThemes @Composable fun PreviewGroupConversationParticipantsAdandonedOneOnOne() = WireTheme { - GroupConversationParticipants({}, GroupConversationParticipantsState.PREVIEW) + GroupConversationParticipants({}, GroupConversationParticipantsState.PREVIEW, rememberLazyListState()) } @PreviewMultipleThemes