Support incoming audio only calls
This commit is contained in:
parent
5491040ac5
commit
7ef43abd57
22 changed files with 156 additions and 53 deletions
|
|
@ -18,6 +18,9 @@ import androidx.compose.ui.res.stringResource
|
|||
import androidx.compose.ui.unit.dp
|
||||
import io.element.android.compound.tokens.generated.CompoundIcons
|
||||
import io.element.android.libraries.designsystem.components.button.MainActionButton
|
||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||
import io.element.android.libraries.matrix.api.notification.CallIntent
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
|
||||
@Composable
|
||||
|
|
@ -26,11 +29,13 @@ fun UserProfileMainActionsSection(
|
|||
canCall: Boolean,
|
||||
onShareUser: () -> Unit,
|
||||
onStartDM: () -> Unit,
|
||||
onCall: () -> Unit,
|
||||
onCall: (CallIntent) -> Unit,
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
Row(
|
||||
modifier.fillMaxWidth().padding(horizontal = 16.dp),
|
||||
modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 16.dp),
|
||||
horizontalArrangement = Arrangement.SpaceEvenly,
|
||||
) {
|
||||
if (!isCurrentUser) {
|
||||
|
|
@ -43,8 +48,14 @@ fun UserProfileMainActionsSection(
|
|||
if (canCall) {
|
||||
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) },
|
||||
)
|
||||
}
|
||||
MainActionButton(
|
||||
|
|
@ -54,3 +65,15 @@ fun UserProfileMainActionsSection(
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
@PreviewsDayNight()
|
||||
@Composable
|
||||
internal fun UserProfileMainActionsSectionPreview() = ElementPreview {
|
||||
UserProfileMainActionsSection(
|
||||
isCurrentUser = false,
|
||||
canCall = true,
|
||||
onShareUser = { },
|
||||
onStartDM = { },
|
||||
onCall = { }
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import io.element.android.libraries.androidutils.system.startSharePlainTextInten
|
|||
import io.element.android.libraries.architecture.NodeInputs
|
||||
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.libraries.ui.strings.CommonStrings
|
||||
import timber.log.Timber
|
||||
|
|
@ -24,7 +25,7 @@ class UserProfileNodeHelper(
|
|||
interface Callback : NodeInputs {
|
||||
fun navigateToAvatarPreview(username: String, avatarUrl: String)
|
||||
fun navigateToRoom(roomId: RoomId)
|
||||
fun startCall(dmRoomId: RoomId)
|
||||
fun startCall(dmRoomId: RoomId, callIntent: CallIntent)
|
||||
fun startVerifyUserFlow(userId: UserId)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ import io.element.android.libraries.designsystem.utils.snackbar.SnackbarHost
|
|||
import io.element.android.libraries.designsystem.utils.snackbar.rememberSnackbarHostState
|
||||
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.ui.components.CreateDmConfirmationBottomSheet
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
|
||||
|
|
@ -52,7 +53,7 @@ fun UserProfileView(
|
|||
state: UserProfileState,
|
||||
onShareUser: () -> Unit,
|
||||
onOpenDm: (RoomId) -> Unit,
|
||||
onStartCall: (RoomId) -> Unit,
|
||||
onStartCall: (RoomId, CallIntent) -> Unit,
|
||||
goBack: () -> Unit,
|
||||
openAvatarPreview: (username: String, url: String) -> Unit,
|
||||
onVerifyClick: (UserId) -> Unit,
|
||||
|
|
@ -90,7 +91,7 @@ fun UserProfileView(
|
|||
canCall = state.canCall,
|
||||
onShareUser = onShareUser,
|
||||
onStartDM = { state.eventSink(UserProfileEvents.StartDM) },
|
||||
onCall = { state.dmRoomId?.let { onStartCall(it) } }
|
||||
onCall = { intent -> state.dmRoomId?.let { onStartCall(it, intent) } }
|
||||
)
|
||||
Spacer(modifier = Modifier.height(26.dp))
|
||||
if (!state.isCurrentUser) {
|
||||
|
|
@ -151,7 +152,7 @@ internal fun UserProfileViewPreview(
|
|||
onShareUser = {},
|
||||
goBack = {},
|
||||
onOpenDm = {},
|
||||
onStartCall = {},
|
||||
onStartCall = { _, _ -> },
|
||||
openAvatarPreview = { _, _ -> },
|
||||
onVerifyClick = {},
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue