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..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 @@ -425,7 +425,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 1b0f15999f2..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 @@ -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 { 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..09f6b2160ab --- /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)) + } +}