on show voice call only option in DMs

This commit is contained in:
Valere
2026-03-04 15:08:24 +01:00
parent 6d069e46e2
commit f805dde0f3
8 changed files with 32 additions and 15 deletions

View File

@@ -271,6 +271,7 @@ class MessagesPresenter(
return MessagesState( return MessagesState(
roomId = room.roomId, roomId = room.roomId,
isDm = roomInfo.isDm,
roomName = roomInfo.name, roomName = roomInfo.name,
roomAvatar = roomAvatar, roomAvatar = roomAvatar,
heroes = heroes, heroes = heroes,

View File

@@ -32,6 +32,7 @@ import kotlinx.collections.immutable.ImmutableList
data class MessagesState( data class MessagesState(
val roomId: RoomId, val roomId: RoomId,
val roomName: String?, val roomName: String?,
val isDm: Boolean,
val roomAvatar: AvatarData, val roomAvatar: AvatarData,
val heroes: ImmutableList<AvatarData>, val heroes: ImmutableList<AvatarData>,
val userEventPermissions: UserEventPermissions, val userEventPermissions: UserEventPermissions,

View File

@@ -126,6 +126,7 @@ fun aMessagesState(
) = MessagesState( ) = MessagesState(
roomId = RoomId("!id:domain"), roomId = RoomId("!id:domain"),
roomName = roomName, roomName = roomName,
isDm = false,
roomAvatar = roomAvatar, roomAvatar = roomAvatar,
heroes = persistentListOf(), heroes = persistentListOf(),
userEventPermissions = userEventPermissions, userEventPermissions = userEventPermissions,

View File

@@ -67,15 +67,18 @@ private fun StandByCallMenuItem(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
Row(modifier = modifier) { Row(modifier = modifier) {
IconButton( // Only show voice call in DMs
modifier = modifier, if (roomCallState.isDM) {
onClick = { onJoinCallClick(true) }, IconButton(
enabled = roomCallState.canStartCall, modifier = modifier,
) { onClick = { onJoinCallClick(true) },
Icon( enabled = roomCallState.canStartCall,
imageVector = CompoundIcons.VoiceCallSolid(), ) {
contentDescription = stringResource(CommonStrings.a11y_start_call), Icon(
) imageVector = CompoundIcons.VoiceCallSolid(),
contentDescription = stringResource(CommonStrings.a11y_start_call),
)
}
} }
IconButton( IconButton(
modifier = modifier, modifier = modifier,

View File

@@ -18,6 +18,7 @@ sealed interface RoomCallState {
data class StandBy( data class StandBy(
val canStartCall: Boolean, val canStartCall: Boolean,
val isDM: Boolean,
// TODO: add is DM to know if should show the voice call option? // TODO: add is DM to know if should show the voice call option?
) : RoomCallState ) : RoomCallState

View File

@@ -14,6 +14,7 @@ open class RoomCallStateProvider : PreviewParameterProvider<RoomCallState> {
override val values: Sequence<RoomCallState> = sequenceOf( override val values: Sequence<RoomCallState> = sequenceOf(
aStandByCallState(), aStandByCallState(),
aStandByCallState(canStartCall = false), aStandByCallState(canStartCall = false),
aStandByCallState(canStartCall = false, isDM = true),
anOngoingCallState(), anOngoingCallState(),
anOngoingCallState(canJoinCall = false), anOngoingCallState(canJoinCall = false),
anOngoingCallState(canJoinCall = true, isUserInTheCall = true), anOngoingCallState(canJoinCall = true, isUserInTheCall = true),
@@ -36,6 +37,8 @@ fun anOngoingCallState(
fun aStandByCallState( fun aStandByCallState(
canStartCall: Boolean = true, canStartCall: Boolean = true,
isDM: Boolean = false,
) = RoomCallState.StandBy( ) = RoomCallState.StandBy(
canStartCall = canStartCall, canStartCall = canStartCall,
isDM
) )

View File

@@ -21,6 +21,7 @@ import io.element.android.features.enterprise.api.SessionEnterpriseService
import io.element.android.features.roomcall.api.RoomCallState import io.element.android.features.roomcall.api.RoomCallState
import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.room.JoinedRoom
import io.element.android.libraries.matrix.api.room.isDm
import io.element.android.libraries.matrix.api.room.powerlevels.canCall import io.element.android.libraries.matrix.api.room.powerlevels.canCall
import io.element.android.libraries.matrix.api.room.powerlevels.permissionsAsState import io.element.android.libraries.matrix.api.room.powerlevels.permissionsAsState
@@ -59,7 +60,10 @@ class RoomCallStatePresenter(
// TODO resolve intent while the call is ongoing // TODO resolve intent while the call is ongoing
isAudioCall = false isAudioCall = false
) )
else -> RoomCallState.StandBy(canStartCall = canJoinCall) else -> RoomCallState.StandBy(
canStartCall = canJoinCall,
isDM = roomInfo.isDm
)
} }
} }
} }

View File

@@ -357,11 +357,14 @@ private fun MainActionsSection(
} }
if (state.roomCallState.hasPermissionToJoin()) { if (state.roomCallState.hasPermissionToJoin()) {
// TODO Improve the view depending on all the cases here? // TODO Improve the view depending on all the cases here?
MainActionButton( if (state.roomType is RoomDetailsType.Dm) {
title = stringResource(CommonStrings.action_call), // As per design, only show voice call in DM
imageVector = CompoundIcons.VoiceCall(), MainActionButton(
onClick = { onCall(CallIntent.AUDIO) }, title = stringResource(CommonStrings.action_call),
) imageVector = CompoundIcons.VoiceCall(),
onClick = { onCall(CallIntent.AUDIO) },
)
}
MainActionButton( MainActionButton(
title = stringResource(CommonStrings.common_video), title = stringResource(CommonStrings.common_video),