From ab41783c4d9a16df50576286402f830ceed297e7 Mon Sep 17 00:00:00 2001 From: Doug <6060466+pixlwave@users.noreply.github.com> Date: Thu, 18 Sep 2025 18:24:24 +0100 Subject: [PATCH] Update the SDK and Element Call. (#4522) * Update the SDK and Element Call. Additionally fix a bug where there was no way to navigate out of a call link after hanging up. * Remove the temporary parameters. --- ElementX.xcodeproj/project.pbxproj | 4 ++-- .../xcshareddata/swiftpm/Package.resolved | 8 +++---- .../Screens/CallScreen/CallScreenModels.swift | 1 + .../CallScreen/CallScreenViewModel.swift | 3 +++ .../Screens/CallScreen/View/CallScreen.swift | 23 +++++++++++++++---- .../ElementCall/ElementCallWidgetDriver.swift | 4 +--- project.yml | 4 ++-- 7 files changed, 32 insertions(+), 15 deletions(-) diff --git a/ElementX.xcodeproj/project.pbxproj b/ElementX.xcodeproj/project.pbxproj index 70665d155..525ebb1a7 100644 --- a/ElementX.xcodeproj/project.pbxproj +++ b/ElementX.xcodeproj/project.pbxproj @@ -9322,7 +9322,7 @@ repositoryURL = "https://github.com/element-hq/matrix-rust-components-swift"; requirement = { kind = exactVersion; - version = "25.09.17-2"; + version = 25.09.18; }; }; 701C7BEF8F70F7A83E852DCC /* XCRemoteSwiftPackageReference "GZIP" */ = { @@ -9338,7 +9338,7 @@ repositoryURL = "https://github.com/element-hq/element-call-swift"; requirement = { kind = exactVersion; - version = 0.15.0; + version = "0.16.0-rc.2"; }; }; 821C67C9A7F8CC3FD41B28B4 /* XCRemoteSwiftPackageReference "emojibase-bindings" */ = { diff --git a/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 673596066..1ed6d68ae 100644 --- a/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -59,8 +59,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/element-hq/element-call-swift", "state" : { - "revision" : "deab02926b07c276514149e1a63e60d284f31878", - "version" : "0.15.0" + "revision" : "2bf81a3c0a4a0cf6347290f2476a30e0ed96eb47", + "version" : "0.16.0-rc.2" } }, { @@ -158,8 +158,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/element-hq/matrix-rust-components-swift", "state" : { - "revision" : "d4b8e73d2ad8676fd711a2a0e7603b14ad4b0151", - "version" : "25.9.17-2" + "revision" : "859a9ae1428c0aae88588fd7b46e4bdc50dd7bee", + "version" : "25.9.18" } }, { diff --git a/ElementX/Sources/Screens/CallScreen/CallScreenModels.swift b/ElementX/Sources/Screens/CallScreen/CallScreenModels.swift index 9501061ce..805cfce51 100644 --- a/ElementX/Sources/Screens/CallScreen/CallScreenModels.swift +++ b/ElementX/Sources/Screens/CallScreen/CallScreenModels.swift @@ -18,6 +18,7 @@ enum CallScreenViewModelAction { struct CallScreenViewState: BindableState { let script: String? var url: URL? + let isGenericCallLink: Bool let certificateValidator: CertificateValidatorHookProtocol diff --git a/ElementX/Sources/Screens/CallScreen/CallScreenViewModel.swift b/ElementX/Sources/Screens/CallScreen/CallScreenViewModel.swift index aa7d45908..fd5923eae 100644 --- a/ElementX/Sources/Screens/CallScreen/CallScreenViewModel.swift +++ b/ElementX/Sources/Screens/CallScreen/CallScreenViewModel.swift @@ -47,15 +47,18 @@ class CallScreenViewModel: CallScreenViewModelType, CallScreenViewModelProtocol self.analyticsService = analyticsService isPictureInPictureAllowed = allowPictureInPicture + var isGenericCallLink = false switch configuration.kind { case .genericCallLink(let url): widgetDriver = GenericCallLinkWidgetDriver(url: url) + isGenericCallLink = true case .roomCall(let roomProxy, let clientProxy, _, _, _, _): guard let deviceID = clientProxy.deviceID else { fatalError("Missing device ID for the call.") } widgetDriver = roomProxy.elementCallWidgetDriver(deviceID: deviceID) } super.init(initialViewState: CallScreenViewState(script: CallScreenJavaScriptMessageName.allCasesInjectionScript, + isGenericCallLink: isGenericCallLink, certificateValidator: appHooks.certificateValidatorHook)) elementCallService.actions diff --git a/ElementX/Sources/Screens/CallScreen/View/CallScreen.swift b/ElementX/Sources/Screens/CallScreen/View/CallScreen.swift index 9f1fc6bcd..61fe9c20d 100644 --- a/ElementX/Sources/Screens/CallScreen/View/CallScreen.swift +++ b/ElementX/Sources/Screens/CallScreen/View/CallScreen.swift @@ -16,10 +16,16 @@ struct CallScreen: View { @ObservedObject var context: CallScreenViewModel.Context var body: some View { - content - .frame(maxWidth: .infinity, maxHeight: .infinity) - .background(Color.compound.bgCanvasDefault.ignoresSafeArea()) - .alert(item: $context.alertInfo) + NavigationStack { + content + .frame(maxWidth: .infinity, maxHeight: .infinity) + .background(Color.compound.bgCanvasDefault.ignoresSafeArea()) + .navigationBarTitleDisplayMode(.inline) + .toolbar(context.viewState.isGenericCallLink ? .visible : .hidden, for: .navigationBar) + .toolbar { toolbar } + } + .alert(item: $context.alertInfo) + .preferredColorScheme(context.viewState.isGenericCallLink ? .dark : nil) } @ViewBuilder @@ -33,6 +39,15 @@ struct CallScreen: View { .ignoresSafeArea(edges: .bottom) } } + + var toolbar: some ToolbarContent { + ToolbarItem(placement: .cancellationAction) { + Button { context.send(viewAction: .navigateBack) } label: { + Image(systemSymbol: .chevronBackward) + .fontWeight(.semibold) + } + } + } } private struct CallView: UIViewRepresentable { diff --git a/ElementX/Sources/Services/ElementCall/ElementCallWidgetDriver.swift b/ElementX/Sources/Services/ElementCall/ElementCallWidgetDriver.swift index 3564b7e0f..3cc43a03f 100644 --- a/ElementX/Sources/Services/ElementCall/ElementCallWidgetDriver.swift +++ b/ElementX/Sources/Services/ElementCall/ElementCallWidgetDriver.swift @@ -92,9 +92,7 @@ class ElementCallWidgetDriver: WidgetCapabilitiesProvider, ElementCallWidgetDriv rageshakeSubmitUrl: rageshakeURL, sentryDsn: analyticsConfiguration?.sentryDSN, sentryEnvironment: nil), - config: .init(intent: intent, - skipLobby: true, // Should be nil, but needs a new EC. - preload: false)) // Should be nil, but needs a new EC. + config: .init(intent: intent)) } catch { MXLog.error("Failed to build widget settings: \(error)") return .failure(.failedBuildingWidgetSettings) diff --git a/project.yml b/project.yml index 634eeee62..5edbc851a 100644 --- a/project.yml +++ b/project.yml @@ -68,7 +68,7 @@ packages: # Element/Matrix dependencies MatrixRustSDK: url: https://github.com/element-hq/matrix-rust-components-swift - exactVersion: 25.09.17-2 + exactVersion: 25.09.18 # path: ../matrix-rust-sdk Compound: url: https://github.com/element-hq/compound-ios @@ -80,7 +80,7 @@ packages: # path: ../matrix-analytics-events EmbeddedElementCall: url: https://github.com/element-hq/element-call-swift - exactVersion: 0.15.0 + exactVersion: 0.16.0-rc.2 Emojibase: url: https://github.com/matrix-org/emojibase-bindings minorVersion: 1.4.2