Show the call buttons on macOS when the experimental native calling feature is enabled. (#6183)

* Show the call buttons on macOS when the experimental native calling feature is enabled.

* Start native calls in their own window on macOS.

* Update the Enterprise submodule.
This commit is contained in:
Doug
2026-09-23 12:24:54 +01:00
committed by GitHub
parent 27ffd4f3d5
commit 7c758df208
14 changed files with 56 additions and 10 deletions
@@ -12,6 +12,7 @@ import SwiftUI
struct RoomDetailsScreenCoordinatorParameters {
let roomProxy: JoinedRoomProxyProtocol
let userSession: UserSessionProtocol
let appSettings: AppSettings
let appHooks: AppHooks
let analyticsService: AnalyticsServiceProtocol
let userIndicatorController: UserIndicatorControllerProtocol
@@ -53,6 +54,7 @@ final class RoomDetailsScreenCoordinator: CoordinatorProtocol {
isSpace = parameters.roomProxy.infoPublisher.value.isSpace
viewModel = RoomDetailsScreenViewModel(roomProxy: parameters.roomProxy,
userSession: parameters.userSession,
appSettings: parameters.appSettings,
appHooks: parameters.appHooks,
analyticsService: parameters.analyticsService,
userIndicatorController: parameters.userIndicatorController,
@@ -63,6 +63,7 @@ struct RoomDetailsScreenViewState: BindableState {
var canBanUsers = false
var notificationSettingsState: RoomDetailsNotificationSettingsState = .loading
var isCallingEnabled = true
var isNativeCallingEnabled = false
var canJoinCall = false
var pinnedEventsActionState = RoomDetailsScreenPinnedEventsActionState.loading
@@ -94,7 +95,7 @@ struct RoomDetailsScreenViewState: BindableState {
var shortcuts: [RoomDetailsScreenViewShortcut] {
var shortcuts: [RoomDetailsScreenViewShortcut] = [.mute]
if !ProcessInfo.processInfo.isiOSAppOnMac, isCallingEnabled, canJoinCall {
if !ProcessInfo.processInfo.isiOSAppOnMac || isNativeCallingEnabled, isCallingEnabled, canJoinCall {
if isDirect {
shortcuts.append(.voiceCall)
}
@@ -45,6 +45,7 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
init(roomProxy: JoinedRoomProxyProtocol,
userSession: UserSessionProtocol,
appSettings: AppSettings,
appHooks: AppHooks,
analyticsService: AnalyticsServiceProtocol,
userIndicatorController: UserIndicatorControllerProtocol,
@@ -66,6 +67,7 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
topicSummary: topic?.unattributedStringByReplacingNewlinesWithSpaces(),
joinedMembersCount: roomProxy.infoPublisher.value.joinedMembersCount,
notificationSettingsState: .loading,
isNativeCallingEnabled: appSettings.nativeCallEnabled,
bindings: .init())
super.init(initialViewState: appHooks.roomDetailsScreenHook.update(viewState),
mediaProvider: userSession.mediaProvider)
@@ -441,6 +441,7 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
return .init(roomProxy: roomProxy,
userSession: UserSessionMock(.init()),
appSettings: AppSettings.volatile(),
appHooks: AppHooks(),
analyticsService: AnalyticsServiceMock(.init()),
userIndicatorController: UserIndicatorControllerMock(),
@@ -469,6 +470,7 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
return .init(roomProxy: roomProxy,
userSession: UserSessionMock(.init()),
appSettings: AppSettings.volatile(),
appHooks: AppHooks(),
analyticsService: AnalyticsServiceMock(.init()),
userIndicatorController: UserIndicatorControllerMock(),
@@ -507,6 +509,7 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
return .init(roomProxy: roomProxy,
userSession: UserSessionMock(.init(clientProxy: clientProxyMock)),
appSettings: AppSettings.volatile(),
appHooks: AppHooks(),
analyticsService: AnalyticsServiceMock(.init()),
userIndicatorController: UserIndicatorControllerMock(),
@@ -57,6 +57,8 @@ struct RoomScreenViewState: BindableState {
/// Whether or not starting a call is supported.
var isCallingEnabled = true
/// Whether or not calls are using the experimental native implementation.
var isNativeCallingEnabled = false
/// Whether or not the user is allowed to join calls in this room.
var canJoinCall = false
/// Whether or not this room currently has a call in progress.
@@ -69,6 +69,7 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
let viewState = RoomScreenViewState(roomTitle: roomProxy.infoPublisher.value.displayNameOrID,
roomAvatar: roomProxy.infoPublisher.value.avatar,
isNativeCallingEnabled: appSettings.nativeCallEnabled,
hasOngoingCall: roomProxy.infoPublisher.value.hasRoomCall,
isDM: roomProxy.infoPublisher.value.isDM,
hasSuccessor: roomProxy.infoPublisher.value.successor != nil,
@@ -316,7 +316,7 @@ struct RoomScreen: View {
}
}
if !ProcessInfo.processInfo.isiOSAppOnMac {
if !ProcessInfo.processInfo.isiOSAppOnMac || context.viewState.isNativeCallingEnabled {
if context.viewState.shouldShowCallButton {
RoomCallControlsToolbar(viewState: context.viewState) { isVoiceCall in
context.send(viewAction: .displayCall(isVoiceCall: isVoiceCall))
@@ -132,6 +132,7 @@ struct SpaceSettingsScreen_Previews: PreviewProvider, TestablePreview {
canonicalAlias: "#space:matrix.org",
members: members)),
userSession: UserSessionMock(.init()),
appSettings: AppSettings.volatile(),
appHooks: AppHooks(),
analyticsService: AnalyticsServiceMock(.init()),
userIndicatorController: UserIndicatorControllerMock(),