Skip to content

Commit

Permalink
feat: add unarchiving logic [WPB-4435][WPB-4436] (#2285)
Browse files Browse the repository at this point in the history
  • Loading branch information
gongracr committed Sep 29, 2023
1 parent 0e96dfb commit b5a5ae7
Show file tree
Hide file tree
Showing 21 changed files with 132 additions and 61 deletions.
Expand Up @@ -41,7 +41,7 @@ fun ConversationSheetContent(
onMutingConversationStatusChange: () -> Unit,
addConversationToFavourites: () -> Unit,
moveConversationToFolder: () -> Unit,
moveConversationToArchive: (DialogState) -> Unit,
updateConversationArchiveStatus: (DialogState) -> Unit,
clearConversationContent: (DialogState) -> Unit,
blockUser: (BlockUserDialogState) -> Unit,
unblockUser: (UnblockUserDialogState) -> Unit,
Expand All @@ -61,7 +61,7 @@ fun ConversationSheetContent(
//
// addConversationToFavourites = addConversationToFavourites,
// moveConversationToFolder = moveConversationToFolder,
moveConversationToArchive = moveConversationToArchive,
updateConversationArchiveStatus = updateConversationArchiveStatus,
clearConversationContent = clearConversationContent,
blockUserClick = blockUser,
unblockUserClick = unblockUser,
Expand Down Expand Up @@ -124,7 +124,8 @@ data class ConversationSheetContent(
val mutingConversationState: MutedConversationStatus,
val conversationTypeDetail: ConversationTypeDetail,
val selfRole: Conversation.Member.Role?,
val isTeamConversation: Boolean
val isTeamConversation: Boolean,
val isArchived: Boolean
) {

private val isSelfUserMember: Boolean get() = selfRole != null
Expand Down
Expand Up @@ -75,7 +75,8 @@ fun rememberConversationSheetState(
isCreator = isSelfUserCreator
),
isTeamConversation = teamId != null,
selfRole = selfMemberRole
selfRole = selfMemberRole,
isArchived = conversationItem.isArchived
)
}
}
Expand All @@ -93,7 +94,8 @@ fun rememberConversationSheetState(
blockingState
),
isTeamConversation = isTeamConversation,
selfRole = Conversation.Member.Role.Member
selfRole = Conversation.Member.Role.Member,
isArchived = conversationItem.isArchived
)
}
}
Expand All @@ -107,7 +109,8 @@ fun rememberConversationSheetState(
userAvatarData.asset
),
isTeamConversation = isTeamConversation,
selfRole = Conversation.Member.Role.Member
selfRole = Conversation.Member.Role.Member,
isArchived = conversationItem.isArchived
)
}
}
Expand Down
Expand Up @@ -23,8 +23,8 @@ package com.wire.android.ui.common.bottomsheet.conversation
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Text
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
Expand Down Expand Up @@ -60,7 +60,7 @@ internal fun ConversationMainSheetContent(
// TODO(profile): enable when implemented
// addConversationToFavourites: () -> Unit,
// moveConversationToFolder: () -> Unit,
moveConversationToArchive: (DialogState) -> Unit,
updateConversationArchiveStatus: (DialogState) -> Unit,
clearConversationContent: (DialogState) -> Unit,
blockUserClick: (BlockUserDialogState) -> Unit,
unblockUserClick: (UnblockUserDialogState) -> Unit,
Expand Down Expand Up @@ -139,17 +139,24 @@ internal fun ConversationMainSheetContent(
icon = {
MenuItemIcon(
id = R.drawable.ic_archive,
contentDescription = stringResource(R.string.content_description_move_to_archive),
contentDescription = stringResource(
if (conversationSheetContent.isArchived) R.string.content_description_unarchive
else R.string.content_description_move_to_archive
),
)
},
title = stringResource(R.string.label_move_to_archive),
title = stringResource(
if (!conversationSheetContent.isArchived) R.string.label_move_to_archive
else R.string.label_unarchive
),
onItemClick = {
with(conversationSheetContent) {
moveConversationToArchive(
updateConversationArchiveStatus(
DialogState(
conversationId,
title,
conversationTypeDetail
conversationTypeDetail,
isArchived
)
)
}
Expand All @@ -169,7 +176,8 @@ internal fun ConversationMainSheetContent(
DialogState(
conversationSheetContent.conversationId,
conversationSheetContent.title,
conversationSheetContent.conversationTypeDetail
conversationSheetContent.conversationTypeDetail,
conversationSheetContent.isArchived
)
)
}
Expand Down
15 changes: 13 additions & 2 deletions app/src/main/kotlin/com/wire/android/ui/home/HomeScreen.kt
Expand Up @@ -363,8 +363,19 @@ private fun handleSnackBarMessage(
if (messageType.isGroup) R.string.group_content_deleted else R.string.conversation_content_deleted
)

HomeSnackbarState.ArchivingConversationError -> stringResource(id = R.string.error_archiving_conversation)
HomeSnackbarState.ArchivingConversationSuccess -> stringResource(id = R.string.success_archiving_conversation)
is HomeSnackbarState.UpdateArchivingStatusSuccess -> {
stringResource(
id = if (messageType.isArchiving) R.string.success_archiving_conversation
else R.string.success_unarchiving_conversation
)
}

is HomeSnackbarState.UpdateArchivingStatusError -> {
stringResource(
id = if (messageType.isArchiving) R.string.error_archiving_conversation
else R.string.error_archiving_conversation
)
}
}

LaunchedEffect(messageType) {
Expand Down
Expand Up @@ -35,6 +35,6 @@ sealed class HomeSnackbarState {
object DeleteConversationGroupError : HomeSnackbarState()
object LeftConversationSuccess : HomeSnackbarState()
object LeaveConversationError : HomeSnackbarState()
object ArchivingConversationSuccess : HomeSnackbarState()
object ArchivingConversationError : HomeSnackbarState()
data class UpdateArchivingStatusSuccess(val isArchiving: Boolean) : HomeSnackbarState()
data class UpdateArchivingStatusError(val isArchiving: Boolean) : HomeSnackbarState()
}
Expand Up @@ -360,11 +360,11 @@ private fun GroupConversationDetailsContent(
},
addConversationToFavourites = bottomSheetEventsHandler::onAddConversationToFavourites,
moveConversationToFolder = bottomSheetEventsHandler::onMoveConversationToFolder,
moveConversationToArchive = {
updateConversationArchiveStatus = {
conversationSheetContent?.let {
bottomSheetEventsHandler.onMoveConversationToArchive(
bottomSheetEventsHandler.updateConversationArchiveStatus(
conversationId = it.conversationId,
shouldArchive = true,
shouldArchive = !it.isArchived,
onMessage = closeBottomSheetAndShowSnackbarMessage
)
}
Expand Down
Expand Up @@ -149,7 +149,8 @@ class GroupConversationDetailsViewModel @Inject constructor(
mutingConversationState = groupDetails.conversation.mutedStatus,
conversationTypeDetail = ConversationTypeDetail.Group(conversationId, groupDetails.isSelfUserCreator),
isTeamConversation = groupDetails.conversation.teamId?.value != null,
selfRole = groupDetails.selfRole
selfRole = groupDetails.selfRole,
isArchived = groupDetails.conversation.archived
)
val isGuestAllowed = groupDetails.conversation.isGuestAllowed() || groupDetails.conversation.isNonTeamMemberAllowed()
val isUpdatingReadReceiptAllowed = if (selfTeam == null) {
Expand Down Expand Up @@ -378,7 +379,7 @@ class GroupConversationDetailsViewModel @Inject constructor(
override fun onMoveConversationToFolder(conversationId: ConversationId?) {
}

override fun onMoveConversationToArchive(
override fun updateConversationArchiveStatus(
conversationId: ConversationId,
shouldArchive: Boolean,
timestamp: Long,
Expand All @@ -390,8 +391,17 @@ class GroupConversationDetailsViewModel @Inject constructor(
withContext(dispatcher.io()) { updateConversationArchivedStatus(conversationId, shouldArchive, timestamp) }
requestInProgress = false
when (result) {
ArchiveStatusUpdateResult.Failure -> onMessage(UIText.StringResource(R.string.error_archiving_conversation))
ArchiveStatusUpdateResult.Success -> onMessage(UIText.StringResource(R.string.success_archiving_conversation))
ArchiveStatusUpdateResult.Failure -> onMessage(
UIText.StringResource(
if (shouldArchive) R.string.error_archiving_conversation else R.string.error_unarchiving_conversation
)
)

ArchiveStatusUpdateResult.Success -> onMessage(
UIText.StringResource(
if (shouldArchive) R.string.success_archiving_conversation else R.string.success_unarchiving_conversation
)
)
}
}
}
Expand Down
Expand Up @@ -31,7 +31,7 @@ interface GroupConversationDetailsBottomSheetEventsHandler {
fun onMutingConversationStatusChange(conversationId: ConversationId?, status: MutedConversationStatus, onMessage: (UIText) -> Unit)
fun onAddConversationToFavourites(conversationId: ConversationId? = null)
fun onMoveConversationToFolder(conversationId: ConversationId? = null)
fun onMoveConversationToArchive(
fun updateConversationArchiveStatus(
conversationId: ConversationId,
shouldArchive: Boolean,
timestamp: Long = DateTimeUtil.currentInstant().toEpochMilliseconds(),
Expand All @@ -52,7 +52,7 @@ interface GroupConversationDetailsBottomSheetEventsHandler {

override fun onAddConversationToFavourites(conversationId: ConversationId?) {}
override fun onMoveConversationToFolder(conversationId: ConversationId?) {}
override fun onMoveConversationToArchive(
override fun updateConversationArchiveStatus(
conversationId: ConversationId,
shouldArchive: Boolean,
timestamp: Long,
Expand Down
Expand Up @@ -432,11 +432,11 @@ class ConversationListViewModel @Inject constructor(
requestInProgress = false
when (result) {
is ArchiveStatusUpdateResult.Failure -> {
homeSnackBarState.emit(HomeSnackbarState.ArchivingConversationError)
homeSnackBarState.emit(HomeSnackbarState.UpdateArchivingStatusError(isArchiving))
}

is ArchiveStatusUpdateResult.Success -> {
homeSnackBarState.emit(HomeSnackbarState.ArchivingConversationSuccess)
homeSnackBarState.emit(HomeSnackbarState.UpdateArchivingStatusSuccess(isArchiving))
}
}
}
Expand Down Expand Up @@ -498,7 +498,8 @@ private fun ConversationDetails.toConversationItem(
isSelfUserCreator = isSelfUserCreator,
isSelfUserMember = isSelfUserMember,
teamId = conversation.teamId,
selfMemberRole = selfRole
selfMemberRole = selfRole,
isArchived = conversation.archived
)
}

Expand Down Expand Up @@ -528,7 +529,8 @@ private fun ConversationDetails.toConversationItem(
),
userId = otherUser.id,
blockingState = otherUser.BlockState,
teamId = otherUser.teamId
teamId = otherUser.teamId,
isArchived = conversation.archived
)
}

Expand Down
Expand Up @@ -149,10 +149,10 @@ fun ConversationRouterHomeBridge(
},
addConversationToFavourites = viewModel::addConversationToFavourites,
moveConversationToFolder = viewModel::moveConversationToFolder,
moveConversationToArchive = {
updateConversationArchiveStatus = {
viewModel.moveConversationToArchive(
conversationId = it.conversationId,
isArchiving = true // All conversations at this point are not archived
isArchiving = !it.isArchived
)
onCloseBottomSheet()
},
Expand Down
Expand Up @@ -249,7 +249,8 @@ fun PreviewGroupConversationItemWithUnreadCount() {
),
badgeEventType = BadgeEventType.UnreadMessage(100),
selfMemberRole = null,
teamId = null
teamId = null,
isArchived = false
),
searchQuery = "",
isSelectableItem = false,
Expand All @@ -271,7 +272,8 @@ fun PreviewGroupConversationItemWithNoBadges() {
),
badgeEventType = BadgeEventType.None,
selfMemberRole = null,
teamId = null
teamId = null,
isArchived = false
),
searchQuery = "",
isSelectableItem = false,
Expand All @@ -293,7 +295,8 @@ fun PreviewGroupConversationItemWithMutedBadgeAndUnreadMentionBadge() {
),
badgeEventType = BadgeEventType.UnreadMention,
selfMemberRole = null,
teamId = null
teamId = null,
isArchived = false
),
searchQuery = "",
isSelectableItem = false,
Expand All @@ -317,6 +320,7 @@ fun PreviewGroupConversationItemWithOngoingCall() {
selfMemberRole = null,
teamId = null,
hasOnGoingCall = true,
isArchived = false
),
searchQuery = "",
isSelectableItem = false,
Expand Down Expand Up @@ -376,7 +380,8 @@ fun PreviewPrivateConversationItemWithBlockedBadge() {
conversationInfo = ConversationInfo("Name"),
blockingState = BlockingState.BLOCKED,
teamId = null,
userId = UserId("value", "domain")
userId = UserId("value", "domain"),
isArchived = false
),
searchQuery = "",
isSelectableItem = false,
Expand Down
Expand Up @@ -39,21 +39,23 @@ sealed class ConversationItem {
abstract val lastMessageContent: UILastMessageContent?
abstract val badgeEventType: BadgeEventType
abstract val teamId: TeamId?
abstract val isArchived: Boolean

val isTeamConversation get() = teamId != null

data class GroupConversation(
val groupName: String,
val hasOnGoingCall: Boolean = false,
val isSelfUserCreator: Boolean = false,
val selfMemberRole: Conversation.Member.Role?,
val isSelfUserMember: Boolean = true,
override val conversationId: ConversationId,
override val mutedStatus: MutedConversationStatus,
override val isLegalHold: Boolean = false,
override val lastMessageContent: UILastMessageContent?,
override val badgeEventType: BadgeEventType,
override val teamId: TeamId?,
val hasOnGoingCall: Boolean = false,
val isSelfUserCreator: Boolean = false,
val selfMemberRole: Conversation.Member.Role?,
val isSelfUserMember: Boolean = true,
override val isArchived: Boolean,
) : ConversationItem()

data class PrivateConversation(
Expand All @@ -66,7 +68,8 @@ sealed class ConversationItem {
override val isLegalHold: Boolean = false,
override val lastMessageContent: UILastMessageContent?,
override val badgeEventType: BadgeEventType,
override val teamId: TeamId?
override val teamId: TeamId?,
override val isArchived: Boolean
) : ConversationItem()

data class ConnectionConversation(
Expand All @@ -77,6 +80,7 @@ sealed class ConversationItem {
override val isLegalHold: Boolean = false,
override val lastMessageContent: UILastMessageContent?,
override val badgeEventType: BadgeEventType,
override val isArchived: Boolean = false,
) : ConversationItem() {
override val teamId: TeamId? = null
}
Expand Down
Expand Up @@ -31,5 +31,6 @@ data class GroupDialogState(
data class DialogState(
val conversationId: ConversationId,
val conversationName: String,
val conversationTypeDetail: ConversationTypeDetail
val conversationTypeDetail: ConversationTypeDetail,
val isArchived: Boolean
)
Expand Up @@ -191,7 +191,8 @@ class ImportMediaAuthenticatedViewModel @Inject constructor(
isSelfUserCreator = isSelfUserCreator,
isSelfUserMember = isSelfUserMember,
teamId = conversation.teamId,
selfMemberRole = selfRole
selfMemberRole = selfRole,
isArchived = conversation.archived
)
}

Expand Down Expand Up @@ -226,7 +227,8 @@ class ImportMediaAuthenticatedViewModel @Inject constructor(
),
userId = otherUser.id,
blockingState = otherUser.BlockState,
teamId = otherUser.teamId
teamId = otherUser.teamId,
isArchived = conversation.archived
)
}

Expand Down

0 comments on commit b5a5ae7

Please sign in to comment.