Support for ongoing voice vs video call + joining (#5399)

This commit is contained in:
Valere Fedronic
2026-04-21 11:11:52 +02:00
committed by GitHub
parent d9013208dd
commit d49a6e5a5d
31 changed files with 185 additions and 54 deletions
@@ -0,0 +1,30 @@
//
// Copyright 2026 Element Creations Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
// Please see LICENSE files in the repository root for full details.
//
import Foundation
import MatrixRustSDK
enum CallIntent: Codable, CaseIterable {
case video, audio
}
extension CallIntent {
// periphery:ignore - Unused, but added to detect new cases when updating the SDK.
init(rustCallIntent: MatrixRustSDK.RtcCallIntent) {
switch rustCallIntent {
case .audio: self = .audio
case .video: self = .video
}
}
var rustCallIntent: MatrixRustSDK.RtcCallIntent {
switch self {
case .audio: .audio
case .video: .video
}
}
}
@@ -10,8 +10,9 @@ import Compound
import SwiftUI
struct JoinCallButton: View {
let isVoiceCall: Bool
let action: () -> Void
var body: some View {
if #available(iOS 26, *) {
glassButton
@@ -25,7 +26,7 @@ struct JoinCallButton: View {
// Use an HStack on iOS 26 as .labelStyle(.titleAndIcon) doesn't
// seem to have any effect on a label in the navigation bar 🤷‍♂️
HStack(spacing: 6) {
CompoundIcon(\.videoCallSolid)
CompoundIcon(isVoiceCall ? \.voiceCallSolid : \.videoCallSolid)
Text(L10n.actionJoin)
.padding(.trailing, 4)
}
@@ -66,9 +67,20 @@ struct JoinCallButton_Previews: PreviewProvider {
Color.clear
.toolbar {
ToolbarItem(placement: .confirmationAction) {
JoinCallButton { }
JoinCallButton(isVoiceCall: false) { }
}
}
}
.previewDisplayName("Join Video Call")
ElementNavigationStack {
Color.clear
.toolbar {
ToolbarItem(placement: .confirmationAction) {
JoinCallButton(isVoiceCall: true) { }
}
}
}
.previewDisplayName("Join Audio Call")
}
}