Move call presentation from the chats flow into the user session flow. (#4459)

This commit is contained in:
Doug
2025-09-03 17:01:07 +01:00
committed by GitHub
parent eda37eb626
commit c48580aeb4
16 changed files with 299 additions and 260 deletions
@@ -18,7 +18,7 @@ struct UserProfileScreenCoordinatorParameters {
enum UserProfileScreenCoordinatorAction {
case openDirectChat(roomID: String)
case startCall(roomID: String)
case startCall(roomProxy: JoinedRoomProxyProtocol)
case dismiss
}
@@ -47,8 +47,8 @@ final class UserProfileScreenCoordinator: CoordinatorProtocol {
switch action {
case .openDirectChat(let roomID):
actionsSubject.send(.openDirectChat(roomID: roomID))
case .startCall(let roomID):
actionsSubject.send(.startCall(roomID: roomID))
case .startCall(let roomProxy):
actionsSubject.send(.startCall(roomProxy: roomProxy))
case .dismiss:
actionsSubject.send(.dismiss)
}
@@ -9,7 +9,7 @@ import Foundation
enum UserProfileScreenViewModelAction {
case openDirectChat(roomID: String)
case startCall(roomID: String)
case startCall(roomProxy: JoinedRoomProxyProtocol)
case dismiss
}
@@ -62,7 +62,7 @@ class UserProfileScreenViewModel: UserProfileScreenViewModelType, UserProfileScr
case .createDirectChat:
Task { await createDirectChat() }
case .startCall(let roomID):
actionsSubject.send(.startCall(roomID: roomID))
Task { await startCall(roomID: roomID) }
case .dismiss:
actionsSubject.send(.dismiss)
}
@@ -143,12 +143,21 @@ class UserProfileScreenViewModel: UserProfileScreenViewModelType, UserProfileScr
}
}
// MARK: Loading indicator
private func startCall(roomID: String) async {
guard case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(roomID) else {
showErrorIndicator()
return
}
actionsSubject.send(.startCall(roomProxy: roomProxy))
}
private static let loadingIndicatorIdentifier = "\(UserProfileScreenViewModel.self)-Loading"
// MARK: User Indicators
private var loadingIndicatorIdentifier: String { "\(Self.self)-Loading" }
private var statusIndicatorIdentifier: String { "\(Self.self)-Status" }
private func showLoadingIndicator(allowsInteraction: Bool) {
userIndicatorController.submitIndicator(UserIndicator(id: Self.loadingIndicatorIdentifier,
userIndicatorController.submitIndicator(UserIndicator(id: loadingIndicatorIdentifier,
type: .modal(progress: .indeterminate, interactiveDismissDisabled: false, allowsInteraction: allowsInteraction),
title: L10n.commonLoading,
persistent: true),
@@ -156,6 +165,13 @@ class UserProfileScreenViewModel: UserProfileScreenViewModelType, UserProfileScr
}
private func hideLoadingIndicator() {
userIndicatorController.retractIndicatorWithId(Self.loadingIndicatorIdentifier)
userIndicatorController.retractIndicatorWithId(loadingIndicatorIdentifier)
}
private func showErrorIndicator() {
userIndicatorController.submitIndicator(UserIndicator(id: statusIndicatorIdentifier,
type: .toast,
title: L10n.errorUnknown,
iconName: "xmark"))
}
}