Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: handle legal hold system messages [WPB-4779] #2505

Merged
merged 21 commits into from
Dec 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
d4e11a3
feat: add legal hold system messages UI [WPB-4779]
saleniuk Dec 1, 2023
b966023
handle new legal hold system message type
saleniuk Dec 1, 2023
4473ff8
update kalium ref
saleniuk Dec 1, 2023
fb913af
Merge remote-tracking branch 'origin/develop' into feat/legalhold-sys…
saleniuk Dec 4, 2023
5d0c714
fix use case result names
saleniuk Dec 5, 2023
ee93f67
add legalhold system message type to get memberIdList
saleniuk Dec 5, 2023
58c77b6
Merge remote-tracking branch 'origin/develop' into feat/legalhold-sys…
saleniuk Dec 6, 2023
a8750cb
change kalium ref
saleniuk Dec 6, 2023
915bb90
updates after changes in kalium
saleniuk Dec 6, 2023
fd25ecf
Merge remote-tracking branch 'origin/develop' into feat/legalhold-sys…
saleniuk Dec 6, 2023
1ceb593
trigger build
saleniuk Dec 7, 2023
d93b59c
fix detekt
saleniuk Dec 7, 2023
d6e2f91
fix tests
saleniuk Dec 7, 2023
2dc12a5
Merge remote-tracking branch 'origin/develop' into feat/legalhold-sys…
saleniuk Dec 11, 2023
f37a31a
change kalium ref
saleniuk Dec 11, 2023
ed48f13
add legal hold enabled for conversation system message type
saleniuk Dec 11, 2023
3b66010
make "learn more" link to be in the same line
saleniuk Dec 11, 2023
0594883
Merge remote-tracking branch 'origin/develop' into feat/legalhold-sys…
saleniuk Dec 11, 2023
c3857ec
update kalium ref
saleniuk Dec 12, 2023
8e85b4a
Merge remote-tracking branch 'origin/develop' into feat/legalhold-sys…
saleniuk Dec 12, 2023
9c71370
fix to use recent kalium ref
saleniuk Dec 12, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ class MessageMapper @Inject constructor(
is Message.System -> {
when (val content = message.content) {
is MessageContent.MemberChange -> content.members
is MessageContent.LegalHold.ForMembers -> content.members
else -> listOf()
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
is MessageContent.FederationStopped -> mapFederationMessage(content)
is MessageContent.ConversationProtocolChanged -> mapConversationProtocolChanged(content)
is MessageContent.ConversationStartedUnverifiedWarning -> mapConversationCreatedUnverifiedWarning()
is MessageContent.LegalHold -> mapLegalHoldMessage(content, message.senderUserId, members)

Check warning on line 74 in app/src/main/kotlin/com/wire/android/mapper/SystemMessageContentMapper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/mapper/SystemMessageContentMapper.kt#L74

Added line #L74 was not covered by tests
}

private fun mapConversationCreated(senderUserId: UserId, date: String, userList: List<User>): UIMessageContent.SystemMessage {
Expand Down Expand Up @@ -276,6 +277,38 @@
else -> UIText.StringResource(messageResourceProvider.memberNameDeleted)
}

private fun mapLegalHoldMessage(
content: MessageContent.LegalHold,
senderUserId: UserId,
userList: List<User>
): UIMessageContent.SystemMessage {

fun handleLegalHoldForMembers(
members: List<UserId>,
self: () -> UIMessageContent.SystemMessage.LegalHold,
others: (List<UIText>) -> UIMessageContent.SystemMessage.LegalHold
): UIMessageContent.SystemMessage.LegalHold =
if (members.size == 1 && senderUserId == members.first()) self()
else others(members.map { mapMemberName(user = userList.findUser(userId = it), type = SelfNameType.ResourceLowercase) })

Check warning on line 292 in app/src/main/kotlin/com/wire/android/mapper/SystemMessageContentMapper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/mapper/SystemMessageContentMapper.kt#L292

Added line #L292 was not covered by tests

return when (content) {

Check warning on line 294 in app/src/main/kotlin/com/wire/android/mapper/SystemMessageContentMapper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/mapper/SystemMessageContentMapper.kt#L294

Added line #L294 was not covered by tests
MessageContent.LegalHold.ForConversation.Disabled -> UIMessageContent.SystemMessage.LegalHold.Disabled.Conversation
MessageContent.LegalHold.ForConversation.Enabled -> UIMessageContent.SystemMessage.LegalHold.Enabled.Conversation

is MessageContent.LegalHold.ForMembers.Disabled -> handleLegalHoldForMembers(
members = content.members,
self = { UIMessageContent.SystemMessage.LegalHold.Disabled.Self },
others = { UIMessageContent.SystemMessage.LegalHold.Disabled.Others(it) }

Check warning on line 301 in app/src/main/kotlin/com/wire/android/mapper/SystemMessageContentMapper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/mapper/SystemMessageContentMapper.kt#L299-L301

Added lines #L299 - L301 were not covered by tests
)

is MessageContent.LegalHold.ForMembers.Enabled -> handleLegalHoldForMembers(
members = content.members,
self = { UIMessageContent.SystemMessage.LegalHold.Enabled.Self },
others = { UIMessageContent.SystemMessage.LegalHold.Enabled.Others(it) }

Check warning on line 307 in app/src/main/kotlin/com/wire/android/mapper/SystemMessageContentMapper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/mapper/SystemMessageContentMapper.kt#L304-L307

Added lines #L304 - L307 were not covered by tests
)
}
}

enum class SelfNameType {
ResourceLowercase, ResourceTitleCase, NameOrDeleted
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,41 +20,30 @@

package com.wire.android.ui.common

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.res.painterResource
import com.wire.android.R
import com.wire.android.ui.theme.WireTheme
import com.wire.android.ui.theme.wireColorScheme
import com.wire.android.util.ui.PreviewMultipleThemes

@Composable
fun LegalHoldIndicator(modifier: Modifier = Modifier) {
Box(
Icon(
painter = painterResource(id = R.drawable.ic_legal_hold),
contentDescription = null,
tint = MaterialTheme.wireColorScheme.error,
modifier = modifier,
contentAlignment = Alignment.Center
) {
Box(
modifier = Modifier
.size(12.dp)
.clip(CircleShape)
.background(MaterialTheme.colorScheme.errorContainer)
)
Box(
modifier = Modifier
.size(6.dp)
.clip(CircleShape)
.background(MaterialTheme.colorScheme.error)
)
}
)
}

@Preview
@PreviewMultipleThemes
@Composable
fun PreviewLegalHoldIndicator() {
LegalHoldIndicator()
WireTheme {
LegalHoldIndicator()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import com.wire.kalium.logic.data.call.Call
import com.wire.kalium.logic.data.user.LegalHoldStatus
import com.wire.kalium.logic.data.sync.SyncState
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.feature.legalhold.ObserveLegalHoldRequestUseCaseResult
import com.wire.kalium.logic.feature.legalhold.ObserveLegalHoldRequestUseCase
import com.wire.kalium.logic.feature.session.CurrentSessionResult
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.ExperimentalCoroutinesApi
Expand Down Expand Up @@ -82,7 +82,7 @@ class CommonTopAppBarViewModel @Inject constructor(
observeLegalHoldRequest() // TODO combine with legal hold status
.map { legalHoldRequestResult ->
when (legalHoldRequestResult) {
is ObserveLegalHoldRequestUseCaseResult.ObserveLegalHoldRequestAvailable -> LegalHoldStatus.PENDING
is ObserveLegalHoldRequestUseCase.Result.LegalHoldRequestAvailable -> LegalHoldStatus.PENDING
else -> LegalHoldStatus.DISABLED
}
}
Expand Down