Skip to content

Commit

Permalink
Merge branch 'develop' into feat/location-replies
Browse files Browse the repository at this point in the history
  • Loading branch information
yamilmedina committed Dec 19, 2023
2 parents d9fc02c + a9547fc commit 1b3dddf
Show file tree
Hide file tree
Showing 8 changed files with 128 additions and 53 deletions.
6 changes: 5 additions & 1 deletion app/src/main/kotlin/com/wire/android/ui/calling/CallState.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import com.wire.android.ui.calling.model.UICallParticipant
import com.wire.android.ui.home.conversationslist.model.Membership
import com.wire.kalium.logic.data.call.CallStatus
import com.wire.kalium.logic.data.call.ConversationType
import com.wire.kalium.logic.data.conversation.Conversation
import com.wire.kalium.logic.data.id.ConversationId

data class CallState(
Expand All @@ -40,5 +41,8 @@ data class CallState(
val isSpeakerOn: Boolean = false,
val isCbrEnabled: Boolean = false,
val conversationType: ConversationType = ConversationType.OneOnOne,
val membership: Membership = Membership.None
val membership: Membership = Membership.None,
val protocolInfo: Conversation.ProtocolInfo? = null,
val mlsVerificationStatus: Conversation.VerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED,
val proteusVerificationStatus: Conversation.VerificationStatus = Conversation.VerificationStatus.NOT_VERIFIED
)
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,10 @@ class SharedCallingViewModel @Inject constructor(
is ConversationDetails.Group -> {
callState.copy(
conversationName = getConversationName(details.conversation.name),
conversationType = ConversationType.Conference
conversationType = ConversationType.Conference,
protocolInfo = details.conversation.protocol,
mlsVerificationStatus = details.conversation.mlsVerificationStatus,
proteusVerificationStatus = details.conversation.proteusVerificationStatus
)
}

Expand All @@ -157,7 +160,10 @@ class SharedCallingViewModel @Inject constructor(
ImageAsset.UserAvatarAsset(wireSessionImageLoader, assetId)
},
conversationType = ConversationType.OneOnOne,
membership = userTypeMapper.toMembership(details.otherUser.userType)
membership = userTypeMapper.toMembership(details.otherUser.userType),
protocolInfo = details.conversation.protocol,
mlsVerificationStatus = details.conversation.mlsVerificationStatus,
proteusVerificationStatus = details.conversation.proteusVerificationStatus
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import android.widget.Toast
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.IconButton
Expand All @@ -41,6 +42,7 @@ import com.wire.android.R
import com.wire.android.model.ImageAsset
import com.wire.android.model.UserAvatarData
import com.wire.android.ui.calling.ConversationName
import com.wire.android.ui.common.ConversationVerificationIcons
import com.wire.android.ui.common.MembershipQualifierLabel
import com.wire.android.ui.common.UserProfileAvatar
import com.wire.android.ui.common.banner.SecurityClassificationBannerForConversation
Expand All @@ -52,6 +54,7 @@ import com.wire.android.ui.home.conversationslist.model.hasLabel
import com.wire.android.ui.theme.wireTypography
import com.wire.android.util.EMPTY
import com.wire.kalium.logic.data.call.ConversationType
import com.wire.kalium.logic.data.conversation.Conversation
import com.wire.kalium.logic.data.id.ConversationId
import java.util.Locale

Expand All @@ -64,7 +67,10 @@ fun CallerDetails(
avatarAssetId: ImageAsset.UserAvatarAsset?,
conversationType: ConversationType,
membership: Membership,
callingLabel: String
callingLabel: String,
protocolInfo: Conversation.ProtocolInfo?,
mlsVerificationStatus: Conversation.VerificationStatus?,
proteusVerificationStatus: Conversation.VerificationStatus?,
) {
Column(
modifier = Modifier.fillMaxSize(),
Expand Down Expand Up @@ -93,16 +99,23 @@ fun CallerDetails(
style = MaterialTheme.wireTypography.title03,
)
}
Text(
text = when (conversationName) {
is ConversationName.Known -> conversationName.name
is ConversationName.Unknown -> stringResource(id = conversationName.resourceId)
else -> ""
},
color = colorsScheme().onBackground,
style = MaterialTheme.wireTypography.title01,
modifier = Modifier.padding(top = dimensions().spacing24x)
)
Row(modifier = Modifier.padding(top = dimensions().spacing24x)) {
Text(
text = when (conversationName) {
is ConversationName.Known -> conversationName.name
is ConversationName.Unknown -> stringResource(id = conversationName.resourceId)
else -> ""
},
color = colorsScheme().onBackground,
style = MaterialTheme.wireTypography.title01,
)

ConversationVerificationIcons(
protocolInfo,
mlsVerificationStatus,
proteusVerificationStatus
)
}
Text(
text = callingLabel,
color = colorsScheme().onBackground,
Expand All @@ -116,8 +129,7 @@ fun CallerDetails(

SecurityClassificationBannerForConversation(
conversationId = conversationId,
modifier = Modifier.padding(top = dimensions().spacing8x),

modifier = Modifier.padding(top = dimensions().spacing8x)
)

if (!isCameraOn && conversationType == ConversationType.OneOnOne) {
Expand All @@ -142,5 +154,8 @@ fun PreviewCallerDetails() {
conversationType = ConversationType.OneOnOne,
membership = Membership.Guest,
callingLabel = String.EMPTY,
protocolInfo = null,
mlsVerificationStatus = null,
proteusVerificationStatus = Conversation.VerificationStatus.VERIFIED
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,10 @@ private fun IncomingCallContent(
avatarAssetId = callState.avatarAssetId,
conversationType = callState.conversationType,
membership = callState.membership,
callingLabel = isCallingString
callingLabel = isCallingString,
protocolInfo = callState.protocolInfo,
mlsVerificationStatus = callState.mlsVerificationStatus,
proteusVerificationStatus = callState.proteusVerificationStatus
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,10 @@ private fun InitiatingCallContent(
avatarAssetId = callState.avatarAssetId,
conversationType = callState.conversationType,
membership = callState.membership,
callingLabel = stringResource(id = R.string.calling_label_ringing_call)
callingLabel = stringResource(id = R.string.calling_label_ringing_call),
protocolInfo = callState.protocolInfo,
mlsVerificationStatus = callState.mlsVerificationStatus,
proteusVerificationStatus = callState.proteusVerificationStatus,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import com.ramcosta.composedestinations.annotation.Destination
Expand All @@ -70,6 +71,7 @@ import com.wire.android.ui.calling.ongoing.fullscreen.DoubleTapToast
import com.wire.android.ui.calling.ongoing.fullscreen.FullScreenTile
import com.wire.android.ui.calling.ongoing.fullscreen.SelectedParticipant
import com.wire.android.ui.calling.ongoing.participantsview.VerticalCallingPager
import com.wire.android.ui.common.ConversationVerificationIcons
import com.wire.android.ui.common.banner.SecurityClassificationBannerForConversation
import com.wire.android.ui.common.bottomsheet.WireBottomSheetScaffold
import com.wire.android.ui.common.colorsScheme
Expand All @@ -81,6 +83,7 @@ import com.wire.android.ui.theme.wireColorScheme
import com.wire.android.ui.theme.wireDimensions
import com.wire.android.ui.theme.wireTypography
import com.wire.android.util.ui.PreviewMultipleThemes
import com.wire.kalium.logic.data.conversation.Conversation
import com.wire.kalium.logic.data.id.ConversationId
import java.util.Locale

Expand Down Expand Up @@ -112,6 +115,9 @@ fun OngoingCallScreen(
isSpeakerOn = isSpeakerOn,
isCbrEnabled = isCbrEnabled,
isOnFrontCamera = isOnFrontCamera,
protocolInfo = protocolInfo,
mlsVerificationStatus = mlsVerificationStatus,
proteusVerificationStatus = proteusVerificationStatus,
shouldShowDoubleTapToast = ongoingCallViewModel.shouldShowDoubleTapToast,
toggleSpeaker = sharedCallingViewModel::toggleSpeaker,
toggleMute = sharedCallingViewModel::toggleMute,
Expand Down Expand Up @@ -140,6 +146,9 @@ private fun OngoingCallContent(
isSpeakerOn: Boolean,
isCbrEnabled: Boolean,
shouldShowDoubleTapToast: Boolean,
protocolInfo: Conversation.ProtocolInfo?,
mlsVerificationStatus: Conversation.VerificationStatus?,
proteusVerificationStatus: Conversation.VerificationStatus?,
toggleSpeaker: () -> Unit,
toggleMute: () -> Unit,
hangUpCall: () -> Unit,
Expand Down Expand Up @@ -174,7 +183,10 @@ private fun OngoingCallContent(
else -> ""
},
isCbrEnabled = isCbrEnabled,
onCollapse = navigateBack
onCollapse = navigateBack,
protocolInfo = protocolInfo,
mlsVerificationStatus = mlsVerificationStatus,
proteusVerificationStatus = proteusVerificationStatus
)
},
sheetPeekHeight = dimensions().defaultSheetPeekHeight,
Expand Down Expand Up @@ -273,14 +285,34 @@ private fun OngoingCallContent(
private fun OngoingCallTopBar(
conversationName: String,
isCbrEnabled: Boolean,
protocolInfo: Conversation.ProtocolInfo?,
mlsVerificationStatus: Conversation.VerificationStatus?,
proteusVerificationStatus: Conversation.VerificationStatus?,
onCollapse: () -> Unit
) {
Column {
WireCenterAlignedTopAppBar(
onNavigationPressed = onCollapse,
titleStyle = MaterialTheme.wireTypography.title02,
maxLines = 1,
title = conversationName,
titleContent = {
Row(
modifier = Modifier.padding(
start = dimensions().spacing6x,
end = dimensions().spacing6x
)
) {
Text(
text = conversationName,
style = MaterialTheme.wireTypography.title02,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
ConversationVerificationIcons(
protocolInfo,
mlsVerificationStatus,
proteusVerificationStatus
)
}
},
navigationIconType = NavigationIconType.Collapse,
elevation = 0.dp,
actions = {}
Expand Down Expand Up @@ -354,5 +386,5 @@ private fun CallingControls(
@PreviewMultipleThemes
@Composable
fun PreviewOngoingCallTopBar() {
OngoingCallTopBar("Default", true) { }
OngoingCallTopBar("Default", true, null, null, null) { }
}
40 changes: 40 additions & 0 deletions app/src/main/kotlin/com/wire/android/ui/common/VerifiedIcons.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,52 @@ package com.wire.android.ui.common

import androidx.annotation.StringRes
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentWidth
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import com.wire.android.R
import com.wire.kalium.logic.data.conversation.Conversation

@Composable
fun RowScope.ConversationVerificationIcons(
protocolInfo: Conversation.ProtocolInfo?,
mlsVerificationStatus: Conversation.VerificationStatus?,
proteusVerificationStatus: Conversation.VerificationStatus?
) {
val mlsIcon: @Composable () -> Unit = {
if (mlsVerificationStatus == Conversation.VerificationStatus.VERIFIED) {
MLSVerifiedIcon(
contentDescriptionId = R.string.content_description_mls_certificate_valid,
modifier = Modifier
.wrapContentWidth()
.align(Alignment.CenterVertically)
)
}
}
val proteusIcon: @Composable () -> Unit = {
if (proteusVerificationStatus == Conversation.VerificationStatus.VERIFIED) {
ProteusVerifiedIcon(
contentDescriptionId = R.string.content_description_proteus_certificate_valid,
modifier = Modifier
.wrapContentWidth()
.align(Alignment.CenterVertically)
)
}
}

if (protocolInfo is Conversation.ProtocolInfo.Proteus) {
proteusIcon()
mlsIcon()
} else {
mlsIcon()
proteusIcon()
}
}

@Composable
fun ProteusVerifiedIcon(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
Expand All @@ -48,9 +47,8 @@ import com.wire.android.R
import com.wire.android.model.UserAvatarData
import com.wire.android.ui.calling.controlbuttons.JoinButton
import com.wire.android.ui.calling.controlbuttons.StartCallButton
import com.wire.android.ui.common.MLSVerifiedIcon
import com.wire.android.ui.common.ProteusVerifiedIcon
import com.wire.android.ui.common.UserProfileAvatar
import com.wire.android.ui.common.ConversationVerificationIcons
import com.wire.android.ui.common.button.WireSecondaryIconButton
import com.wire.android.ui.common.colorsScheme
import com.wire.android.ui.common.conversationColor
Expand Down Expand Up @@ -135,7 +133,7 @@ private fun ConversationScreenTopAppBarContent(
overflow = TextOverflow.Ellipsis,
modifier = Modifier.weight(weight = 1f, fill = false)
)
VerificationIcons(
ConversationVerificationIcons(
conversationInfoViewState.protocolInfo,
conversationInfoViewState.mlsVerificationStatus,
conversationInfoViewState.proteusVerificationStatus
Expand Down Expand Up @@ -186,32 +184,6 @@ private fun ConversationScreenTopAppBarContent(
)
}

@Composable
private fun RowScope.VerificationIcons(
protocolInfo: Conversation.ProtocolInfo?,
mlsVerificationStatus: Conversation.VerificationStatus?,
proteusVerificationStatus: Conversation.VerificationStatus?
) {
val mlsIcon: @Composable () -> Unit = {
if (mlsVerificationStatus == Conversation.VerificationStatus.VERIFIED) {
MLSVerifiedIcon(contentDescriptionId = R.string.content_description_mls_certificate_valid)
}
}
val proteusIcon: @Composable () -> Unit = {
if (proteusVerificationStatus == Conversation.VerificationStatus.VERIFIED) {
ProteusVerifiedIcon(contentDescriptionId = R.string.content_description_proteus_certificate_valid)
}
}

if (protocolInfo is Conversation.ProtocolInfo.Proteus) {
proteusIcon()
mlsIcon()
} else {
mlsIcon()
proteusIcon()
}
}

@Composable
private fun Avatar(
conversationAvatar: ConversationAvatar,
Expand Down

0 comments on commit 1b3dddf

Please sign in to comment.