Support incoming audio only calls

This commit is contained in:
Valere
2026-03-04 08:56:33 +01:00
parent ec420332c3
commit a3dd2c78b3
22 changed files with 156 additions and 53 deletions

View File

@@ -55,6 +55,7 @@ import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias
import io.element.android.libraries.matrix.api.notification.CallIntent
import io.element.android.libraries.matrix.api.permalink.PermalinkData
import io.element.android.libraries.matrix.api.room.JoinedRoom
import io.element.android.libraries.matrix.api.verification.VerificationRequest
@@ -223,12 +224,11 @@ class RoomDetailsFlowNode(
backstack.push(NavTarget.RoomMemberDetails(userId))
}
override fun navigateToRoomCall() {
override fun navigateToRoomCall(callIntent: CallIntent) {
val inputs = CallType.RoomCall(
sessionId = room.sessionId,
roomId = room.roomId,
// TODO
voiceIntent = false
voiceIntent = callIntent == CallIntent.AUDIO
)
analyticsService.captureInteraction(Interaction.Name.MobileRoomCallButton)
elementCallEntryPoint.startCall(inputs)
@@ -286,13 +286,12 @@ class RoomDetailsFlowNode(
callback.navigateToRoom(roomId, emptyList())
}
override fun startCall(dmRoomId: RoomId) {
override fun startCall(dmRoomId: RoomId, callIntent: CallIntent) {
elementCallEntryPoint.startCall(
CallType.RoomCall(
roomId = dmRoomId,
sessionId = room.sessionId,
// TODO
voiceIntent = false
voiceIntent = callIntent == CallIntent.AUDIO
)
)
}

View File

@@ -29,6 +29,7 @@ import io.element.android.libraries.architecture.appyx.launchMolecule
import io.element.android.libraries.architecture.callback
import io.element.android.libraries.di.RoomScope
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.notification.CallIntent
import io.element.android.libraries.matrix.api.room.BaseRoom
import io.element.android.services.analytics.api.AnalyticsService
import kotlinx.coroutines.CoroutineScope
@@ -59,7 +60,7 @@ class RoomDetailsNode(
fun navigateToKnockRequestsList()
fun navigateToSecurityAndPrivacy()
fun navigateToRoomMemberDetails(userId: UserId)
fun navigateToRoomCall()
fun navigateToRoomCall(callIntent: CallIntent)
fun navigateToReportRoom()
fun navigateToSelectNewOwnersWhenLeaving()
}

View File

@@ -79,6 +79,7 @@ import io.element.android.libraries.designsystem.utils.snackbar.rememberSnackbar
import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.notification.CallIntent
import io.element.android.libraries.matrix.api.room.RoomMember
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
import io.element.android.libraries.matrix.api.room.getBestName
@@ -105,7 +106,7 @@ fun RoomDetailsView(
openPollHistory: () -> Unit,
openMediaGallery: () -> Unit,
openAdminSettings: () -> Unit,
onJoinCallClick: () -> Unit,
onJoinCallClick: (CallIntent) -> Unit,
onPinnedMessagesClick: () -> Unit,
onKnockRequestsClick: () -> Unit,
onSecurityAndPrivacyClick: () -> Unit,
@@ -327,7 +328,7 @@ private fun MainActionsSection(
state: RoomDetailsState,
onShareRoom: () -> Unit,
onInvitePeople: () -> Unit,
onCall: () -> Unit,
onCall: (callIntent: CallIntent) -> Unit,
) {
Row(
modifier = Modifier
@@ -358,8 +359,14 @@ private fun MainActionsSection(
// TODO Improve the view depending on all the cases here?
MainActionButton(
title = stringResource(CommonStrings.action_call),
imageVector = CompoundIcons.VoiceCall(),
onClick = { onCall(CallIntent.AUDIO) },
)
MainActionButton(
title = stringResource(CommonStrings.common_video),
imageVector = CompoundIcons.VideoCall(),
onClick = onCall,
onClick = { onCall(CallIntent.VIDEO) },
)
}
if (state.roomType is RoomDetailsType.Room) {

View File

@@ -26,6 +26,7 @@ import io.element.android.libraries.architecture.inputs
import io.element.android.libraries.di.RoomScope
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.notification.CallIntent
import io.element.android.libraries.matrix.api.permalink.PermalinkBuilder
import io.element.android.services.analytics.api.AnalyticsService
@@ -67,8 +68,8 @@ class RoomMemberDetailsNode(
callback.navigateToRoom(roomId)
}
fun onStartCall(roomId: RoomId) {
callback.startCall(roomId)
fun onStartCall(roomId: RoomId, callIntent: CallIntent) {
callback.startCall(roomId, callIntent)
}
val state = presenter.present()