diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversations/MessageExpiration.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/MessageExpiration.kt index 10e1052fdb1..18db189ff21 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/MessageExpiration.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/MessageExpiration.kt @@ -32,9 +32,6 @@ import androidx.lifecycle.repeatOnLifecycle import com.wire.android.R import com.wire.android.ui.home.conversations.model.ExpirationStatus import com.wire.android.ui.home.conversations.model.UIMessage -import com.wire.android.ui.home.conversations.model.UIMessageContent -import com.wire.kalium.logic.data.asset.AssetTransferStatus -import com.wire.kalium.logic.data.asset.isSaved import com.wire.kalium.logic.data.message.Message import kotlinx.coroutines.delay import kotlinx.datetime.Clock @@ -250,62 +247,9 @@ class SelfDeletionTimerHelper(private val stringResourceProvider: StringResource } @Composable - fun startDeletionTimer( - message: UIMessage, - assetTransferStatus: AssetTransferStatus?, - onStartMessageSelfDeletion: (UIMessage) -> Unit - ) { - if (assetTransferStatus != null) { - when (message.messageContent) { - is UIMessageContent.AssetMessage -> startAssetDeletion( - onSelfDeletingMessageRead = { onStartMessageSelfDeletion(message) }, - transferStatus = assetTransferStatus - ) - - is UIMessageContent.AudioAssetMessage -> startAssetDeletion( - onSelfDeletingMessageRead = { onStartMessageSelfDeletion(message) }, - transferStatus = assetTransferStatus - ) - - is UIMessageContent.ImageMessage -> startAssetDeletion( - onSelfDeletingMessageRead = { onStartMessageSelfDeletion(message) }, - transferStatus = assetTransferStatus - ) - - else -> startRegularDeletion(message = message, onStartMessageSelfDeletion = onStartMessageSelfDeletion) - } - } else { - startRegularDeletion(message = message, onStartMessageSelfDeletion = onStartMessageSelfDeletion) - } - } - - @Composable - private fun startAssetDeletion(onSelfDeletingMessageRead: () -> Unit, transferStatus: AssetTransferStatus) { - LaunchedEffect(transferStatus) { - if (transferStatus.isSaved()) { - onSelfDeletingMessageRead() - } - } - LaunchedEffect(key1 = timeLeft, key2 = transferStatus) { - if (transferStatus.isSaved()) { - if (timeLeft != ZERO) { - delay(updateInterval()) - recalculateTimeLeft() - } - } - } - val lifecycleOwner = LocalLifecycleOwner.current - LaunchedEffect(lifecycleOwner) { - lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { - recalculateTimeLeft() - } - } - } - - @Composable - private fun startRegularDeletion(message: UIMessage, onStartMessageSelfDeletion: (UIMessage) -> Unit) { + fun StartDeletionTimer(message: UIMessage, onSelfDeletingMessageRead: (UIMessage) -> Unit) { LaunchedEffect(Unit) { - onStartMessageSelfDeletion(message) + onSelfDeletingMessageRead(message) } LaunchedEffect(timeLeft) { if (timeLeft != ZERO) { @@ -322,7 +266,7 @@ class SelfDeletionTimerHelper(private val stringResourceProvider: StringResource } } - object NotExpirable : SelfDeletionTimerState() + data object NotExpirable : SelfDeletionTimerState() } } diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageContainerItem.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageContainerItem.kt index e68407246c3..ff8d746004b 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageContainerItem.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageContainerItem.kt @@ -52,11 +52,7 @@ import kotlinx.collections.immutable.PersistentMap fun MessageContainerItem( message: UIMessage, conversationDetailsData: ConversationDetailsData, - searchQuery: String = "", - showAuthor: Boolean = true, - useSmallBottomPadding: Boolean = false, audioMessagesState: PersistentMap, - assetStatus: AssetTransferStatus? = null, onLongClicked: (UIMessage.Regular) -> Unit, swipableMessageConfiguration: SwipableMessageConfiguration, onAssetMessageClicked: (String) -> Unit, @@ -67,6 +63,11 @@ fun MessageContainerItem( onReactionClicked: (String, String) -> Unit, onResetSessionClicked: (senderUserId: UserId, clientId: String?) -> Unit, onSelfDeletingMessageRead: (UIMessage) -> Unit, + modifier: Modifier = Modifier, + searchQuery: String = "", + showAuthor: Boolean = true, + useSmallBottomPadding: Boolean = false, + assetStatus: AssetTransferStatus? = null, onFailedMessageRetryClicked: (String, ConversationId) -> Unit = { _, _ -> }, onFailedMessageCancelClicked: (String) -> Unit = {}, onLinkClick: (String) -> Unit = {}, @@ -77,7 +78,7 @@ fun MessageContainerItem( shouldDisplayFooter: Boolean = true, onReplyClickable: Clickable? = null, isSelectedMessage: Boolean = false, - isInteractionAvailable: Boolean = true, + isInteractionAvailable: Boolean = true ) { val selfDeletionTimerState = rememberSelfDeletionTimer(message.header.messageStatus.expirationStatus) if ( @@ -85,14 +86,13 @@ fun MessageContainerItem( !message.isPending && !message.sendingFailed ) { - selfDeletionTimerState.startDeletionTimer( + selfDeletionTimerState.StartDeletionTimer( message = message, - assetTransferStatus = assetStatus, - onStartMessageSelfDeletion = onSelfDeletingMessageRead + onSelfDeletingMessageRead = onSelfDeletingMessageRead ) } Row( - Modifier + modifier .customizeMessageBackground( defaultBackgroundColor, message.sendingFailed, diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/RegularMessageItem.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/RegularMessageItem.kt index 7614b64753b..7325f0a6e73 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/RegularMessageItem.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/RegularMessageItem.kt @@ -105,7 +105,6 @@ import com.wire.android.ui.theme.wireColorScheme import com.wire.android.ui.theme.wireTypography import com.wire.android.util.launchGeoIntent import com.wire.kalium.logic.data.asset.AssetTransferStatus -import com.wire.kalium.logic.data.asset.isSaved import com.wire.kalium.logic.data.id.ConversationId import com.wire.kalium.logic.data.user.UserId import kotlinx.collections.immutable.PersistentMap @@ -127,6 +126,7 @@ fun RegularMessageItem( onOpenProfile: (String) -> Unit, onReactionClicked: (String, String) -> Unit, onResetSessionClicked: (senderUserId: UserId, clientId: String?) -> Unit, + modifier: Modifier = Modifier, searchQuery: String = "", showAuthor: Boolean = true, assetStatus: AssetTransferStatus? = null, @@ -145,7 +145,8 @@ fun RegularMessageItem( @Composable fun messageContent() { MessageItemTemplate( - showAuthor, + modifier = modifier, + showAuthor = showAuthor, useSmallBottomPadding = useSmallBottomPadding, fullAvatarOuterPadding = dimensions().avatarClickablePadding + dimensions().avatarStatusBorderSize, leading = { @@ -165,7 +166,7 @@ fun RegularMessageItem( Spacer(modifier = Modifier.height(dimensions().spacing4x)) } if (selfDeletionTimerState is SelfDeletionTimerHelper.SelfDeletionTimerState.Expirable) { - MessageExpireLabel(messageContent, assetStatus, selfDeletionTimerState.timeLeftFormatted) + MessageExpireLabel(messageContent, selfDeletionTimerState.timeLeftFormatted) // if the message is marked as deleted and is [SelfDeletionTimer.SelfDeletionTimerState.Expirable] // the deletion responsibility belongs to the receiver, therefore we need to wait for the receiver @@ -445,7 +446,11 @@ private fun UIMessage.Regular.MessageContentAndStatus( } @Composable -fun EphemeralMessageExpiredLabel(isSelfMessage: Boolean, conversationDetailsData: ConversationDetailsData) { +fun EphemeralMessageExpiredLabel( + isSelfMessage: Boolean, + conversationDetailsData: ConversationDetailsData, + modifier: Modifier = Modifier, +) { val stringResource = if (!isSelfMessage) { stringResource(id = R.string.label_information_waiting_for_deleation_when_self_not_sender) @@ -461,56 +466,21 @@ fun EphemeralMessageExpiredLabel(isSelfMessage: Boolean, conversationDetailsData } Text( + modifier = modifier, text = stringResource, style = typography().body05 ) } @Composable -fun MessageExpireLabel(messageContent: UIMessageContent?, assetTransferStatus: AssetTransferStatus?, timeLeft: String) { +fun MessageExpireLabel(messageContent: UIMessageContent?, timeLeft: String) { when (messageContent) { is UIMessageContent.Location, - is UIMessageContent.TextMessage -> { - StatusBox(statusText = stringResource(R.string.self_deleting_message_time_left, timeLeft)) - } - - is UIMessageContent.AssetMessage -> { - StatusBox( - statusText = if (assetTransferStatus.isSaved()) { - stringResource( - R.string.self_deleting_message_time_left, - timeLeft - ) - } else { - stringResource(R.string.self_deleting_message_label, timeLeft) - } - ) - } - - is UIMessageContent.AudioAssetMessage -> { - StatusBox( - statusText = if (assetTransferStatus.isSaved()) { - stringResource( - R.string.self_deleting_message_time_left, - timeLeft - ) - } else { - stringResource(R.string.self_deleting_message_label, timeLeft) - } - ) - } - + is UIMessageContent.TextMessage, + is UIMessageContent.AssetMessage, + is UIMessageContent.AudioAssetMessage, is UIMessageContent.ImageMessage -> { - StatusBox( - statusText = if (assetTransferStatus.isSaved()) { - stringResource( - R.string.self_deleting_message_time_left, - timeLeft - ) - } else { - stringResource(R.string.self_deleting_message_label, timeLeft) - } - ) + StatusBox(statusText = stringResource(R.string.self_deleting_message_time_left, timeLeft)) } is UIMessageContent.Deleted -> { diff --git a/kalium b/kalium index ed2bd50e383..112b9015ab7 160000 --- a/kalium +++ b/kalium @@ -1 +1 @@ -Subproject commit ed2bd50e3836c4a01955cdaa7c91aee5a8872b03 +Subproject commit 112b9015ab72783957daa73f78fccaceaed86d2d