From f805dde0f3dc663a3bb4710663bbb80e808e05e6 Mon Sep 17 00:00:00 2001 From: Valere Date: Wed, 4 Mar 2026 15:08:24 +0100 Subject: [PATCH] on show voice call only option in DMs --- .../messages/impl/MessagesPresenter.kt | 1 + .../features/messages/impl/MessagesState.kt | 1 + .../messages/impl/MessagesStateProvider.kt | 1 + .../impl/timeline/components/CallMenuItem.kt | 21 +++++++++++-------- .../features/roomcall/api/RoomCallState.kt | 1 + .../roomcall/api/RoomCallStateProvider.kt | 3 +++ .../roomcall/impl/RoomCallStatePresenter.kt | 6 +++++- .../roomdetails/impl/RoomDetailsView.kt | 13 +++++++----- 8 files changed, 32 insertions(+), 15 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt index d9c3d17afa..2c2fda6fbb 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt @@ -271,6 +271,7 @@ class MessagesPresenter( return MessagesState( roomId = room.roomId, + isDm = roomInfo.isDm, roomName = roomInfo.name, roomAvatar = roomAvatar, heroes = heroes, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesState.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesState.kt index c18fb461e0..7b9b7b739c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesState.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesState.kt @@ -32,6 +32,7 @@ import kotlinx.collections.immutable.ImmutableList data class MessagesState( val roomId: RoomId, val roomName: String?, + val isDm: Boolean, val roomAvatar: AvatarData, val heroes: ImmutableList, val userEventPermissions: UserEventPermissions, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt index d969ae1491..0f12973158 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt @@ -126,6 +126,7 @@ fun aMessagesState( ) = MessagesState( roomId = RoomId("!id:domain"), roomName = roomName, + isDm = false, roomAvatar = roomAvatar, heroes = persistentListOf(), userEventPermissions = userEventPermissions, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/CallMenuItem.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/CallMenuItem.kt index bb3882898d..3a9c07fa4d 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/CallMenuItem.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/CallMenuItem.kt @@ -67,15 +67,18 @@ private fun StandByCallMenuItem( modifier: Modifier = Modifier, ) { Row(modifier = modifier) { - IconButton( - modifier = modifier, - onClick = { onJoinCallClick(true) }, - enabled = roomCallState.canStartCall, - ) { - Icon( - imageVector = CompoundIcons.VoiceCallSolid(), - contentDescription = stringResource(CommonStrings.a11y_start_call), - ) + // Only show voice call in DMs + if (roomCallState.isDM) { + IconButton( + modifier = modifier, + onClick = { onJoinCallClick(true) }, + enabled = roomCallState.canStartCall, + ) { + Icon( + imageVector = CompoundIcons.VoiceCallSolid(), + contentDescription = stringResource(CommonStrings.a11y_start_call), + ) + } } IconButton( modifier = modifier, diff --git a/features/roomcall/api/src/main/kotlin/io/element/android/features/roomcall/api/RoomCallState.kt b/features/roomcall/api/src/main/kotlin/io/element/android/features/roomcall/api/RoomCallState.kt index 10dc601702..27c46f816e 100644 --- a/features/roomcall/api/src/main/kotlin/io/element/android/features/roomcall/api/RoomCallState.kt +++ b/features/roomcall/api/src/main/kotlin/io/element/android/features/roomcall/api/RoomCallState.kt @@ -18,6 +18,7 @@ sealed interface RoomCallState { data class StandBy( val canStartCall: Boolean, + val isDM: Boolean, // TODO: add is DM to know if should show the voice call option? ) : RoomCallState diff --git a/features/roomcall/api/src/main/kotlin/io/element/android/features/roomcall/api/RoomCallStateProvider.kt b/features/roomcall/api/src/main/kotlin/io/element/android/features/roomcall/api/RoomCallStateProvider.kt index b2a8b036cc..3356fa0366 100644 --- a/features/roomcall/api/src/main/kotlin/io/element/android/features/roomcall/api/RoomCallStateProvider.kt +++ b/features/roomcall/api/src/main/kotlin/io/element/android/features/roomcall/api/RoomCallStateProvider.kt @@ -14,6 +14,7 @@ open class RoomCallStateProvider : PreviewParameterProvider { override val values: Sequence = sequenceOf( aStandByCallState(), aStandByCallState(canStartCall = false), + aStandByCallState(canStartCall = false, isDM = true), anOngoingCallState(), anOngoingCallState(canJoinCall = false), anOngoingCallState(canJoinCall = true, isUserInTheCall = true), @@ -36,6 +37,8 @@ fun anOngoingCallState( fun aStandByCallState( canStartCall: Boolean = true, + isDM: Boolean = false, ) = RoomCallState.StandBy( canStartCall = canStartCall, + isDM ) diff --git a/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/RoomCallStatePresenter.kt b/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/RoomCallStatePresenter.kt index 6a3af45f08..54ffdf6c25 100644 --- a/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/RoomCallStatePresenter.kt +++ b/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/RoomCallStatePresenter.kt @@ -21,6 +21,7 @@ import io.element.android.features.enterprise.api.SessionEnterpriseService import io.element.android.features.roomcall.api.RoomCallState import io.element.android.libraries.architecture.Presenter 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.permissionsAsState @@ -59,7 +60,10 @@ class RoomCallStatePresenter( // TODO resolve intent while the call is ongoing isAudioCall = false ) - else -> RoomCallState.StandBy(canStartCall = canJoinCall) + else -> RoomCallState.StandBy( + canStartCall = canJoinCall, + isDM = roomInfo.isDm + ) } } } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt index 9adb51bd6b..c48716db11 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt @@ -357,11 +357,14 @@ private fun MainActionsSection( } if (state.roomCallState.hasPermissionToJoin()) { // TODO Improve the view depending on all the cases here? - MainActionButton( - title = stringResource(CommonStrings.action_call), - imageVector = CompoundIcons.VoiceCall(), - onClick = { onCall(CallIntent.AUDIO) }, - ) + if (state.roomType is RoomDetailsType.Dm) { + // As per design, only show voice call in DM + MainActionButton( + title = stringResource(CommonStrings.action_call), + imageVector = CompoundIcons.VoiceCall(), + onClick = { onCall(CallIntent.AUDIO) }, + ) + } MainActionButton( title = stringResource(CommonStrings.common_video),