EC: handle back navigation from the webview

EC: remove native header

updated element call to 0.13.0-rc1
This commit is contained in:
Mauro Romito
2025-06-25 15:57:30 +02:00
committed by Mauro
parent 589751deb3
commit f8d1ca54dd
7 changed files with 21 additions and 24 deletions

View File

@@ -8764,7 +8764,7 @@
repositoryURL = "https://github.com/element-hq/element-call-swift";
requirement = {
kind = exactVersion;
version = 0.12.2;
version = "0.13.0-rc.1";
};
};
821C67C9A7F8CC3FD41B28B4 /* XCRemoteSwiftPackageReference "emojibase-bindings" */ = {

View File

@@ -59,8 +59,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/element-hq/element-call-swift",
"state" : {
"revision" : "46e04acd94d139223364806063eda083f17007d0",
"version" : "0.12.2"
"revision" : "b3ceeddf59652a0806c008858ef9885bdd924d4c",
"version" : "0.13.0-rc.1"
}
},
{

View File

@@ -56,6 +56,8 @@ enum CallScreenJavaScriptMessageName: String, CaseIterable {
case showNativeOutputDevicePicker
/// Used to determine if the webview has selected the earpiece or not.
case onOutputDeviceSelect
/// Used to handle the webview back button
case onBackButtonPressed
private var postMessageScript: String {
switch self {
@@ -87,6 +89,12 @@ enum CallScreenJavaScriptMessageName: String, CaseIterable {
window.webkit.messageHandlers.\(rawValue).postMessage(id);
};
"""
case .onBackButtonPressed:
"""
window.controls.\(rawValue) = () => {
window.webkit.messageHandlers.\(rawValue).postMessage("");
}
"""
}
}

View File

@@ -114,7 +114,7 @@ class CallScreenViewModel: CallScreenViewModelType, CallScreenViewModelProtocol
setupCall()
timeoutTask = Task { [weak self] in
try? await Task.sleep(for: .seconds(30))
try? await Task.sleep(for: .seconds(10))
guard !Task.isCancelled, let self else { return }
MXLog.error("Failed to join Element Call: Timeout")
state.bindings.alertInfo = .init(id: UUID(),

View File

@@ -16,21 +16,10 @@ struct CallScreen: View {
@ObservedObject var context: CallScreenViewModel.Context
var body: some View {
NavigationStack {
content
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.compound.bgCanvasDefault.ignoresSafeArea())
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .cancellationAction) {
Button { context.send(viewAction: .navigateBack) } label: {
Image(systemSymbol: .chevronBackward)
.fontWeight(.semibold)
}
}
}
}
.alert(item: $context.alertInfo)
content
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.compound.bgCanvasDefault.ignoresSafeArea())
.alert(item: $context.alertInfo)
}
@ViewBuilder
@@ -185,6 +174,8 @@ private struct CallView: UIViewRepresentable {
case .onOutputDeviceSelect:
guard let deviceID = message.body as? String else { return }
viewModelContext?.send(viewAction: .outputDeviceSelected(deviceID: deviceID))
case .onBackButtonPressed:
viewModelContext?.send(viewAction: .navigateBack)
}
}
@@ -354,8 +345,6 @@ struct CallScreen_Previews: PreviewProvider {
}()
static var previews: some View {
NavigationStack {
CallScreen(context: viewModel.context)
}
CallScreen(context: viewModel.context)
}
}

View File

@@ -83,7 +83,7 @@ class ElementCallWidgetDriver: WidgetCapabilitiesProvider, ElementCallWidgetDriv
widgetId: widgetID,
parentUrl: nil,
header: .appBar,
hideHeader: nil,
hideHeader: true,
preload: nil,
fontScale: nil,
appPrompt: false,

View File

@@ -77,7 +77,7 @@ packages:
# path: ../matrix-analytics-events
EmbeddedElementCall:
url: https://github.com/element-hq/element-call-swift
exactVersion: 0.12.2
exactVersion: 0.13.0-rc.1
Emojibase:
url: https://github.com/matrix-org/emojibase-bindings
minorVersion: 1.4.2