From 3649ecee5830cfc01f75063f20ca16dc0b3b0ac3 Mon Sep 17 00:00:00 2001 From: Mojtaba Chenani Date: Wed, 28 Aug 2024 06:49:20 +0000 Subject: [PATCH 1/3] Commit with unresolved merge conflicts outside of submodules --- .../conversation/ConversationSheetContent.kt | 2 + .../details/GroupConversationDetailsScreen.kt | 15 ++- ...roupConversationDetailsTopBarCollapsing.kt | 17 ++++ .../GroupConversationParticipants.kt | 33 ++++++- .../ConversationSheetContentTest.kt | 91 +++++++++++++++++++ 5 files changed, 156 insertions(+), 2 deletions(-) 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 02279736e91..f2c79a0cf47 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 @@ -153,4 +153,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 6d22e0907c1..bda68a7c243 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 @@ -18,6 +18,7 @@ package com.wire.android.ui.home.conversations.details +import SwipeableSnackbar import androidx.annotation.StringRes import androidx.compose.animation.AnimatedContent import androidx.compose.animation.slideInVertically @@ -38,7 +39,12 @@ import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme +<<<<<<< HEAD import androidx.compose.material3.Surface +======= +import androidx.compose.material3.Scaffold +import androidx.compose.material3.SnackbarHost +>>>>>>> 862931793 (fix(conversation): disable addMember on a one-on-one conversation with deleted account (WPB-10259) (#3349)) import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider @@ -123,7 +129,10 @@ import com.wire.kalium.logic.data.id.ConversationId import com.wire.kalium.logic.data.id.GroupID import com.wire.kalium.logic.data.mls.CipherSuite import kotlinx.coroutines.launch +<<<<<<< HEAD import kotlinx.datetime.Instant +======= +>>>>>>> 862931793 (fix(conversation): disable addMember on a one-on-one conversation with deleted account (WPB-10259) (#3349)) @RootNavGraph @WireDestination( @@ -425,7 +434,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/GroupConversationDetailsTopBarCollapsing.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsTopBarCollapsing.kt index 47e008094af..ef78106944f 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsTopBarCollapsing.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsTopBarCollapsing.kt @@ -106,6 +106,7 @@ fun GroupConversationDetailsTopBarCollapsing( horizontal = dimensions().spacing16x, vertical = dimensions().spacing4x ) +<<<<<<< HEAD ) Text( text = stringResource( @@ -114,6 +115,22 @@ fun GroupConversationDetailsTopBarCollapsing( ), style = MaterialTheme.wireTypography.subline01, color = MaterialTheme.wireColorScheme.secondaryText, +======= + ) { + Text( + text = title.ifBlank { + if (isLoading) "" + else UIText.StringResource(R.string.member_name_deleted_label).asString() + }, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + style = MaterialTheme.wireTypography.body02, + color = MaterialTheme.colorScheme.onBackground + ) + } + Row( + verticalAlignment = Alignment.CenterVertically, +>>>>>>> 862931793 (fix(conversation): disable addMember on a one-on-one conversation with deleted account (WPB-10259) (#3349)) modifier = Modifier .padding(horizontal = dimensions().spacing64x) ) 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 1b0f15999f2..249e41428a9 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,7 +55,8 @@ import com.wire.kalium.logic.data.user.SupportedProtocol fun GroupConversationParticipants( onProfilePressed: (UIParticipant) -> Unit, groupParticipantsState: GroupConversationParticipantsState, - lazyListState: LazyListState = rememberLazyListState() + lazyListState: LazyListState = rememberLazyListState(), + isAbandonedOneOnOneConversation: Boolean = false ) { val context = LocalContext.current Column { @@ -64,6 +65,7 @@ fun GroupConversationParticipants( modifier = Modifier.fillMaxSize() ) { item(key = "participants_list_header") { +<<<<<<< HEAD if (BuildConfig.MLS_SUPPORT_ENABLED && BuildConfig.DEVELOPER_FEATURES_ENABLED) { Column( modifier = Modifier @@ -71,6 +73,35 @@ fun GroupConversationParticipants( .background(MaterialTheme.wireColorScheme.surface) .padding(MaterialTheme.wireDimensions.spacing16x) ) { +======= + Column( + modifier = Modifier + .fillMaxWidth() + .background(MaterialTheme.wireColorScheme.surface) + .padding(MaterialTheme.wireDimensions.spacing16x) + ) { + Text( + text = context.resources.stringWithStyledArgs( + R.string.conversation_details_participants_info, + MaterialTheme.wireTypography.body01, + MaterialTheme.wireTypography.body02, + MaterialTheme.wireColorScheme.onBackground, + MaterialTheme.wireColorScheme.onBackground, + groupParticipantsState.data.allCount.toString() + ) + ) + if (groupParticipantsState.data.isSelfAnAdmin && !isAbandonedOneOnOneConversation) { + WirePrimaryButton( + text = stringResource(R.string.conversation_details_group_participants_add), + fillMaxWidth = true, + onClick = onAddParticipantsPressed, + modifier = Modifier + .fillMaxWidth() + .padding(top = MaterialTheme.wireDimensions.spacing16x), + ) + } + if (BuildConfig.MLS_SUPPORT_ENABLED && BuildConfig.DEVELOPER_FEATURES_ENABLED) { +>>>>>>> 862931793 (fix(conversation): disable addMember on a one-on-one conversation with deleted account (WPB-10259) (#3349)) val groupParticipants = groupParticipantsState.data.allParticipants MLSProgressIndicator( mlsProgress = (groupParticipants) 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 00000000000..5b86e7dd5eb --- /dev/null +++ b/app/src/test/kotlin/com/wire/android/ui/common/bottomsheet/conversation/ConversationSheetContentTest.kt @@ -0,0 +1,91 @@ +/* + * 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 + ) + 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 + ) + 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 + ) + val givenParticipantsCount = 3 + + assertEquals(false, givenConversationSheetContent.isAbandonedOneOnOneConversation(givenParticipantsCount)) + } +} From 00144a334dcb41ceb4f298d14828eadfa23aa3eb Mon Sep 17 00:00:00 2001 From: Mohamad Jaara Date: Thu, 26 Sep 2024 12:57:56 +0200 Subject: [PATCH 2/3] fix merge conflicts --- .../details/GroupConversationDetailsScreen.kt | 9 ------ ...roupConversationDetailsTopBarCollapsing.kt | 17 ----------- .../GroupConversationParticipants.kt | 30 ------------------- 3 files changed, 56 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 bda68a7c243..40ff4209e41 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 @@ -18,7 +18,6 @@ package com.wire.android.ui.home.conversations.details -import SwipeableSnackbar import androidx.annotation.StringRes import androidx.compose.animation.AnimatedContent import androidx.compose.animation.slideInVertically @@ -39,12 +38,7 @@ import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme -<<<<<<< HEAD import androidx.compose.material3.Surface -======= -import androidx.compose.material3.Scaffold -import androidx.compose.material3.SnackbarHost ->>>>>>> 862931793 (fix(conversation): disable addMember on a one-on-one conversation with deleted account (WPB-10259) (#3349)) import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider @@ -129,10 +123,7 @@ import com.wire.kalium.logic.data.id.ConversationId import com.wire.kalium.logic.data.id.GroupID import com.wire.kalium.logic.data.mls.CipherSuite import kotlinx.coroutines.launch -<<<<<<< HEAD import kotlinx.datetime.Instant -======= ->>>>>>> 862931793 (fix(conversation): disable addMember on a one-on-one conversation with deleted account (WPB-10259) (#3349)) @RootNavGraph @WireDestination( diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsTopBarCollapsing.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsTopBarCollapsing.kt index ef78106944f..47e008094af 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsTopBarCollapsing.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/details/GroupConversationDetailsTopBarCollapsing.kt @@ -106,7 +106,6 @@ fun GroupConversationDetailsTopBarCollapsing( horizontal = dimensions().spacing16x, vertical = dimensions().spacing4x ) -<<<<<<< HEAD ) Text( text = stringResource( @@ -115,22 +114,6 @@ fun GroupConversationDetailsTopBarCollapsing( ), style = MaterialTheme.wireTypography.subline01, color = MaterialTheme.wireColorScheme.secondaryText, -======= - ) { - Text( - text = title.ifBlank { - if (isLoading) "" - else UIText.StringResource(R.string.member_name_deleted_label).asString() - }, - overflow = TextOverflow.Ellipsis, - maxLines = 1, - style = MaterialTheme.wireTypography.body02, - color = MaterialTheme.colorScheme.onBackground - ) - } - Row( - verticalAlignment = Alignment.CenterVertically, ->>>>>>> 862931793 (fix(conversation): disable addMember on a one-on-one conversation with deleted account (WPB-10259) (#3349)) modifier = Modifier .padding(horizontal = dimensions().spacing64x) ) 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 249e41428a9..e3bb646e413 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 @@ -65,7 +65,6 @@ fun GroupConversationParticipants( modifier = Modifier.fillMaxSize() ) { item(key = "participants_list_header") { -<<<<<<< HEAD if (BuildConfig.MLS_SUPPORT_ENABLED && BuildConfig.DEVELOPER_FEATURES_ENABLED) { Column( modifier = Modifier @@ -73,35 +72,6 @@ fun GroupConversationParticipants( .background(MaterialTheme.wireColorScheme.surface) .padding(MaterialTheme.wireDimensions.spacing16x) ) { -======= - Column( - modifier = Modifier - .fillMaxWidth() - .background(MaterialTheme.wireColorScheme.surface) - .padding(MaterialTheme.wireDimensions.spacing16x) - ) { - Text( - text = context.resources.stringWithStyledArgs( - R.string.conversation_details_participants_info, - MaterialTheme.wireTypography.body01, - MaterialTheme.wireTypography.body02, - MaterialTheme.wireColorScheme.onBackground, - MaterialTheme.wireColorScheme.onBackground, - groupParticipantsState.data.allCount.toString() - ) - ) - if (groupParticipantsState.data.isSelfAnAdmin && !isAbandonedOneOnOneConversation) { - WirePrimaryButton( - text = stringResource(R.string.conversation_details_group_participants_add), - fillMaxWidth = true, - onClick = onAddParticipantsPressed, - modifier = Modifier - .fillMaxWidth() - .padding(top = MaterialTheme.wireDimensions.spacing16x), - ) - } - if (BuildConfig.MLS_SUPPORT_ENABLED && BuildConfig.DEVELOPER_FEATURES_ENABLED) { ->>>>>>> 862931793 (fix(conversation): disable addMember on a one-on-one conversation with deleted account (WPB-10259) (#3349)) val groupParticipants = groupParticipantsState.data.allParticipants MLSProgressIndicator( mlsProgress = (groupParticipants) From a9356812e4a25de9e17e0963cbea6465375801b3 Mon Sep 17 00:00:00 2001 From: Mohamad Jaara Date: Thu, 26 Sep 2024 14:22:06 +0200 Subject: [PATCH 3/3] fix tests --- .../conversation/ConversationSheetContentTest.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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 index 5b86e7dd5eb..09f6b2160ab 100644 --- 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 @@ -40,7 +40,8 @@ class ConversationSheetContentTest { isArchived = false, protocol = Conversation.ProtocolInfo.Proteus, mlsVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED, - proteusVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED + proteusVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED, + isUnderLegalHold = false ) val givenParticipantsCount = 1 @@ -61,7 +62,8 @@ class ConversationSheetContentTest { isArchived = false, protocol = Conversation.ProtocolInfo.Proteus, mlsVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED, - proteusVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED + proteusVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED, + isUnderLegalHold = false ) val givenParticipantsCount = 3 @@ -82,7 +84,8 @@ class ConversationSheetContentTest { isArchived = false, protocol = Conversation.ProtocolInfo.Proteus, mlsVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED, - proteusVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED + proteusVerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED, + isUnderLegalHold = false ) val givenParticipantsCount = 3