From b6ccbbc6c315932d3b5b50b670bdc7d25e5d3518 Mon Sep 17 00:00:00 2001 From: Doug <6060466+pixlwave@users.noreply.github.com> Date: Thu, 15 Oct 2026 10:49:27 +0100 Subject: [PATCH] Add a new `UserHooks` container and move some `AppHooks`. (#6332) * Add a UserHooks system with just the CreateRoomScreenHook for now. * Move more hooks into UserHooks. * Pass the ClientProxy to makeUserHooks instead of calling AppHooks.configure(with:). * Update the Enterprise submodule. --- ElementX.xcodeproj/project.pbxproj | 4 +++ ElementX/Sources/AppHooks/AppHooks.swift | 25 -------------- .../AppHooks/Hooks/UserSessionHook.swift | 6 ++-- ElementX/Sources/AppHooks/UserHooks.swift | 34 +++++++++++++++++++ .../Sources/Application/AppCoordinator.swift | 1 - .../ChatsTabFlowCoordinator.swift | 5 ++- .../EncryptionSettingsFlowCoordinator.swift | 7 ++-- .../OnboardingFlowCoordinator.swift | 4 +-- .../RoomFlowCoordinator.swift | 5 +-- .../RoomMembersFlowCoordinator.swift | 2 -- .../SettingsFlowCoordinator.swift | 1 - .../SpaceSettingsFlowCoordinator.swift | 4 +-- .../StartChatFlowCoordinator.swift | 3 +- .../Mocks/Generated/GeneratedMocks.swift | 5 +++ ElementX/Sources/Mocks/UserSessionMock.swift | 2 ++ .../CreateRoomScreenCoordinator.swift | 4 +-- .../CreateRoomScreenViewModel.swift | 5 ++- .../View/CreateRoomScreen.swift | 3 +- .../View/CreateRoomSpaceSelectionSheet.swift | 3 +- .../RoomDetailsScreenCoordinator.swift | 2 -- .../RoomDetailsScreenViewModel.swift | 3 +- .../View/RoomDetailsScreen.swift | 3 -- .../RoomMemberDetailsScreenCoordinator.swift | 2 -- .../RoomMemberDetailsScreenViewModel.swift | 3 +- .../View/RoomMemberDetailsScreen.swift | 1 - .../RoomScreen/RoomScreenCoordinator.swift | 2 -- .../RoomScreen/RoomScreenViewModel.swift | 9 ++--- .../SecurityAndPrivacyScreenCoordinator.swift | 4 +-- .../SecurityAndPrivacyScreenViewModel.swift | 5 ++- .../View/SecurityAndPrivacyScreen.swift | 27 +++++---------- .../View/SpaceSettingsScreen.swift | 1 - .../UserProfileScreenCoordinator.swift | 2 -- .../UserProfileScreenViewModel.swift | 3 +- .../View/UserProfileScreen.swift | 1 - .../Services/Session/UserSession.swift | 3 ++ .../Session/UserSessionProtocol.swift | 1 + .../UserSession/UserSessionStore.swift | 1 + .../UITests/UITestsAppCoordinator.swift | 14 -------- Enterprise | 2 +- .../Sources/CreateRoomViewModelTests.swift | 6 ++-- .../RoomDetailsScreenViewModelTests.swift | 22 ------------ .../RoomMemberDetailsViewModelTests.swift | 1 - .../Sources/RoomScreenViewModelTests.swift | 11 ------ ...curityAndPrivacyScreenViewModelTests.swift | 3 +- .../UserProfileScreenViewModelTests.swift | 3 -- 45 files changed, 90 insertions(+), 168 deletions(-) create mode 100644 ElementX/Sources/AppHooks/UserHooks.swift diff --git a/ElementX.xcodeproj/project.pbxproj b/ElementX.xcodeproj/project.pbxproj index 166e5914c..db034e69a 100644 --- a/ElementX.xcodeproj/project.pbxproj +++ b/ElementX.xcodeproj/project.pbxproj @@ -1305,6 +1305,7 @@ C9F5B48D15B9BCAE1F8D564E /* RoomNotificationModeProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1511766C534367700C8DD75 /* RoomNotificationModeProxy.swift */; }; CA12AE0DCD57D49CD96C699A /* WaveformCursorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB9EABCA9348DFA27439A809 /* WaveformCursorView.swift */; }; CA2BFC5504AD91A028CFA45B /* AnalyticsConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2397174D0DC3918A7A8A7B /* AnalyticsConfiguration.swift */; }; + CAE95F41108DF289D892C964 /* UserHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7306256B613AC4A972378E09 /* UserHooks.swift */; }; CAEE1AF71E8C13756D572CF4 /* DSWaveformImageViews in Frameworks */ = {isa = PBXBuildFile; productRef = 2A4106A0A96DC4C273128AA5 /* DSWaveformImageViews */; }; CB07184D37D5D65327A5A693 /* AuthenticationFlowCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37F46CC4FD89ECF4CF26391A /* AuthenticationFlowCoordinatorTests.swift */; }; CB137BFB3E083C33E398A6CB /* DeviceKit in Frameworks */ = {isa = PBXBuildFile; productRef = A7CA6F33C553805035C3B114 /* DeviceKit */; }; @@ -2486,6 +2487,7 @@ 72C4A2D279386A811BDC6DAE /* LinkNewDeviceScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinkNewDeviceScreen.swift; sourceTree = ""; }; 72D03D36422177EF01905D20 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = ""; }; 72F37B5DA798C9AE436F2C2C /* AttributedStringBuilderProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttributedStringBuilderProtocol.swift; sourceTree = ""; }; + 7306256B613AC4A972378E09 /* UserHooks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserHooks.swift; sourceTree = ""; }; 7310D8DFE01AF45F0689C3AA /* Publisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Publisher.swift; sourceTree = ""; }; 7349B71A67B765AA86002723 /* sound_01.caf */ = {isa = PBXFileReference; path = sound_01.caf; sourceTree = ""; }; 7367B3B9A8CAF902220F31D1 /* BugReportFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugReportFlowCoordinator.swift; sourceTree = ""; }; @@ -3843,6 +3845,7 @@ isa = PBXGroup; children = ( B6E4AB573FAEBB7B853DD04C /* AppHooks.swift */, + 7306256B613AC4A972378E09 /* UserHooks.swift */, 2ED530A4DD98266D31E5D8E1 /* Hooks */, ); path = AppHooks; @@ -9814,6 +9817,7 @@ 828EA5009557C2B9DCD4CA0F /* UserDiscoverySection.swift in Sources */, 044DD8F80231BC30570F7965 /* UserDiscoveryService.swift in Sources */, 1C409A26A99F0371C47AFA51 /* UserDiscoveryServiceProtocol.swift in Sources */, + CAE95F41108DF289D892C964 /* UserHooks.swift in Sources */, 7A495A5F3E5522DD7928CF8F /* UserIdentityProxy.swift in Sources */, 12AF926E783E40BFB32A2D84 /* UserIdentityProxyMock.swift in Sources */, 4E9782D683660463804C2DC3 /* UserIdentityProxyProtocol.swift in Sources */, diff --git a/ElementX/Sources/AppHooks/AppHooks.swift b/ElementX/Sources/AppHooks/AppHooks.swift index 6a8b67ba1..f10400fd6 100644 --- a/ElementX/Sources/AppHooks/AppHooks.swift +++ b/ElementX/Sources/AppHooks/AppHooks.swift @@ -12,10 +12,6 @@ import Synchronization final nonisolated class AppHooks: AppHooksProtocol { #if IS_MAIN_APP - func configure(with userSession: UserSessionProtocol?) async { - await userSessionHook.configure(with: userSession) - } - @AppHook(default: DefaultAppSettingsHook()) var appSettingsHook: AppSettingsHookProtocol @@ -28,29 +24,8 @@ final nonisolated class AppHooks: AppHooksProtocol { @AppHook(default: DefaultOAuthPresenterHook()) var oAuthPresenterHook: OAuthPresenterHookProtocol - @AppHook(default: DefaultRoomScreenHook()) - var roomScreenHook: RoomScreenHookProtocol - - @AppHook(default: DefaultRoomDetailsScreenHook()) - var roomDetailsScreenHook: RoomDetailsScreenHookProtocol - - @AppHook(default: DefaultRoomMemberDetailsScreenHook()) - var roomMemberDetailsScreenHook: RoomMemberDetailsScreenHookProtocol - - @AppHook(default: DefaultUserProfileScreenHook()) - var userProfileScreenHook: UserProfileScreenHookProtocol - @AppHook(default: DefaultDeveloperOptionsScreenHook()) var developerOptionsScreenHook: DeveloperOptionsScreenHookProtocol - - @AppHook(default: DefaultRecoveryKeyScreenHook()) - var recoveryKeyScreenHook: RecoveryKeyScreenHookProtocol - - @AppHook(default: DefaultCreateRoomScreenHook()) - var createRoomScreenHook: CreateRoomScreenHookProtocol - - @AppHook(default: DefaultSecurityAndPrivacyScreenHook()) - var securityAndPrivacyScreenHook: SecurityAndPrivacyScreenHookProtocol #endif @AppHook(default: DefaultTracingHook()) diff --git a/ElementX/Sources/AppHooks/Hooks/UserSessionHook.swift b/ElementX/Sources/AppHooks/Hooks/UserSessionHook.swift index 0ce449992..a50ed4c4a 100644 --- a/ElementX/Sources/AppHooks/Hooks/UserSessionHook.swift +++ b/ElementX/Sources/AppHooks/Hooks/UserSessionHook.swift @@ -9,7 +9,7 @@ import MatrixRustSDK nonisolated protocol UserSessionHookProtocol: Sendable { #if IS_MAIN_APP - func configure(with userSession: UserSessionProtocol?) async + @MainActor func makeUserHooks(for clientProxy: ClientProxyProtocol) -> UserHooks #endif func configure(_ userSettings: UserSettings, forHomeserver homeserver: String) -> UserSettings @@ -17,7 +17,9 @@ nonisolated protocol UserSessionHookProtocol: Sendable { nonisolated struct DefaultUserSessionHook: UserSessionHookProtocol { #if IS_MAIN_APP - func configure(with userSession: UserSessionProtocol?) async { } + func makeUserHooks(for clientProxy: ClientProxyProtocol) -> UserHooks { + UserHooks() + } #endif func configure(_ userSettings: UserSettings, forHomeserver homeserver: String) -> UserSettings { diff --git a/ElementX/Sources/AppHooks/UserHooks.swift b/ElementX/Sources/AppHooks/UserHooks.swift new file mode 100644 index 000000000..eefa93e6a --- /dev/null +++ b/ElementX/Sources/AppHooks/UserHooks.swift @@ -0,0 +1,34 @@ +// +// 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 + +nonisolated struct UserHooks: Sendable { + let roomScreenHook: RoomScreenHookProtocol + let roomDetailsScreenHook: RoomDetailsScreenHookProtocol + let roomMemberDetailsScreenHook: RoomMemberDetailsScreenHookProtocol + let userProfileScreenHook: UserProfileScreenHookProtocol + let recoveryKeyScreenHook: RecoveryKeyScreenHookProtocol + let createRoomScreenHook: CreateRoomScreenHookProtocol + let securityAndPrivacyScreenHook: SecurityAndPrivacyScreenHookProtocol + + init(roomScreenHook: RoomScreenHookProtocol = DefaultRoomScreenHook(), + roomDetailsScreenHook: RoomDetailsScreenHookProtocol = DefaultRoomDetailsScreenHook(), + roomMemberDetailsScreenHook: RoomMemberDetailsScreenHookProtocol = DefaultRoomMemberDetailsScreenHook(), + userProfileScreenHook: UserProfileScreenHookProtocol = DefaultUserProfileScreenHook(), + recoveryKeyScreenHook: RecoveryKeyScreenHookProtocol = DefaultRecoveryKeyScreenHook(), + createRoomScreenHook: CreateRoomScreenHookProtocol = DefaultCreateRoomScreenHook(), + securityAndPrivacyScreenHook: SecurityAndPrivacyScreenHookProtocol = DefaultSecurityAndPrivacyScreenHook()) { + self.roomScreenHook = roomScreenHook + self.roomDetailsScreenHook = roomDetailsScreenHook + self.roomMemberDetailsScreenHook = roomMemberDetailsScreenHook + self.userProfileScreenHook = userProfileScreenHook + self.recoveryKeyScreenHook = recoveryKeyScreenHook + self.createRoomScreenHook = createRoomScreenHook + self.securityAndPrivacyScreenHook = securityAndPrivacyScreenHook + } +} diff --git a/ElementX/Sources/Application/AppCoordinator.swift b/ElementX/Sources/Application/AppCoordinator.swift index 17fe92d66..ef8ee4d67 100644 --- a/ElementX/Sources/Application/AppCoordinator.swift +++ b/ElementX/Sources/Application/AppCoordinator.swift @@ -980,7 +980,6 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg configureNotificationManager(for: userSession) Task { await resumeClientServices() - await appHooks.configure(with: userSession) } } diff --git a/ElementX/Sources/FlowCoordinators/ChatsTabFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/ChatsTabFlowCoordinator.swift index e337fb724..1742f772e 100644 --- a/ElementX/Sources/FlowCoordinators/ChatsTabFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/ChatsTabFlowCoordinator.swift @@ -659,8 +659,8 @@ class ChatsTabFlowCoordinator: FlowCoordinatorProtocol { userIndicatorController: flowParameters.userIndicatorController, isModallyPresented: true) - let coordinator = flowParameters.appHooks.recoveryKeyScreenHook.makeCoordinator(parameters: parameters, - homeserver: userSession.clientProxy.homeserver) + let coordinator = userSession.userHooks.recoveryKeyScreenHook.makeCoordinator(parameters: parameters, + homeserver: userSession.clientProxy.homeserver) coordinator.actions.sink { [weak self] action in guard let self else { return } switch action { @@ -744,7 +744,6 @@ class ChatsTabFlowCoordinator: FlowCoordinatorProtocol { let parameters = UserProfileScreenCoordinatorParameters(userID: userID, isPresentedModally: true, userSession: userSession, - appHooks: flowParameters.appHooks, analytics: flowParameters.analytics, userIndicatorController: flowParameters.userIndicatorController) let coordinator = UserProfileScreenCoordinator(parameters: parameters) diff --git a/ElementX/Sources/FlowCoordinators/EncryptionSettingsFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/EncryptionSettingsFlowCoordinator.swift index 144cef938..4ecc67640 100644 --- a/ElementX/Sources/FlowCoordinators/EncryptionSettingsFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/EncryptionSettingsFlowCoordinator.swift @@ -17,7 +17,6 @@ enum EncryptionSettingsFlowCoordinatorAction: Equatable { struct EncryptionSettingsFlowCoordinatorParameters { let userSession: UserSessionProtocol - let appHooks: AppHooks let userIndicatorController: UserIndicatorControllerProtocol let navigationStackCoordinator: NavigationStackCoordinator } @@ -25,7 +24,6 @@ struct EncryptionSettingsFlowCoordinatorParameters { class EncryptionSettingsFlowCoordinator: FlowCoordinatorProtocol { private let userSession: UserSessionProtocol private let userSettings: UserSettings - private let appHooks: AppHooks private let userIndicatorController: UserIndicatorControllerProtocol private let navigationStackCoordinator: NavigationStackCoordinator @@ -66,7 +64,6 @@ class EncryptionSettingsFlowCoordinator: FlowCoordinatorProtocol { init(parameters: EncryptionSettingsFlowCoordinatorParameters) { userSession = parameters.userSession userSettings = parameters.userSession.userSettings - appHooks = parameters.appHooks userIndicatorController = parameters.userIndicatorController navigationStackCoordinator = parameters.navigationStackCoordinator @@ -163,8 +160,8 @@ class EncryptionSettingsFlowCoordinator: FlowCoordinatorProtocol { let parameters = SecureBackupRecoveryKeyScreenCoordinatorParameters(secureBackupController: userSession.clientProxy.secureBackupController, userIndicatorController: userIndicatorController, isModallyPresented: true) - let coordinator = appHooks.recoveryKeyScreenHook.makeCoordinator(parameters: parameters, - homeserver: userSession.clientProxy.homeserver) + let coordinator = userSession.userHooks.recoveryKeyScreenHook.makeCoordinator(parameters: parameters, + homeserver: userSession.clientProxy.homeserver) coordinator.actions.sink { [weak self] action in guard let self else { return } diff --git a/ElementX/Sources/FlowCoordinators/OnboardingFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/OnboardingFlowCoordinator.swift index 1014a980e..1eeaef49d 100644 --- a/ElementX/Sources/FlowCoordinators/OnboardingFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/OnboardingFlowCoordinator.swift @@ -302,8 +302,8 @@ class OnboardingFlowCoordinator: FlowCoordinatorProtocol { userIndicatorController: userIndicatorController, isModallyPresented: false) - let coordinator = appHooks.recoveryKeyScreenHook.makeCoordinator(parameters: parameters, - homeserver: userSession.clientProxy.homeserver) + let coordinator = userSession.userHooks.recoveryKeyScreenHook.makeCoordinator(parameters: parameters, + homeserver: userSession.clientProxy.homeserver) coordinator.actions .sink { action in diff --git a/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift index 1fe18f22f..c5097e570 100644 --- a/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift @@ -681,7 +681,6 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { completionSuggestionService: completionSuggestionService, ongoingCallRoomIDPublisher: flowParameters.ongoingCallRoomIDPublisher, appMediator: flowParameters.appMediator, - appHooks: flowParameters.appHooks, analytics: flowParameters.analytics, composerDraftService: composerDraftService, timelineControllerFactory: flowParameters.timelineControllerFactory, @@ -937,7 +936,6 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { private func presentRoomDetails(isRoot: Bool, animated: Bool) async { let params = RoomDetailsScreenCoordinatorParameters(roomProxy: roomProxy, userSession: userSession, - appHooks: flowParameters.appHooks, analyticsService: flowParameters.analytics, userIndicatorController: flowParameters.userIndicatorController, notificationSettings: userSession.clientProxy.notificationSettings, @@ -1413,8 +1411,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { private func presentSecurityAndPrivacyScreen() { let coordinator = SecurityAndPrivacyScreenCoordinator(parameters: .init(roomProxy: roomProxy, userSession: userSession, - userIndicatorController: flowParameters.userIndicatorController, - appHooks: flowParameters.appHooks)) + userIndicatorController: flowParameters.userIndicatorController)) coordinator.actionsPublisher.sink { [weak self] action in guard let self else { return } diff --git a/ElementX/Sources/FlowCoordinators/RoomMembersFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/RoomMembersFlowCoordinator.swift index 6f223d7c1..e436a4e15 100644 --- a/ElementX/Sources/FlowCoordinators/RoomMembersFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/RoomMembersFlowCoordinator.swift @@ -231,7 +231,6 @@ final class RoomMembersFlowCoordinator: FlowCoordinatorProtocol { let params = RoomMemberDetailsScreenCoordinatorParameters(userID: userID, roomProxy: roomProxy, userSession: flowParameters.userSession, - appHooks: flowParameters.appHooks, analytics: flowParameters.analytics, userIndicatorController: flowParameters.userIndicatorController) let coordinator = RoomMemberDetailsScreenCoordinator(parameters: params) @@ -288,7 +287,6 @@ final class RoomMembersFlowCoordinator: FlowCoordinatorProtocol { let parameters = UserProfileScreenCoordinatorParameters(userID: userID, isPresentedModally: false, userSession: flowParameters.userSession, - appHooks: flowParameters.appHooks, analytics: flowParameters.analytics, userIndicatorController: flowParameters.userIndicatorController) let coordinator = UserProfileScreenCoordinator(parameters: parameters) diff --git a/ElementX/Sources/FlowCoordinators/SettingsFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/SettingsFlowCoordinator.swift index 1df3020c4..15d370af5 100644 --- a/ElementX/Sources/FlowCoordinators/SettingsFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/SettingsFlowCoordinator.swift @@ -157,7 +157,6 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol { private func startEncryptionSettingsFlow() { let coordinator = EncryptionSettingsFlowCoordinator(parameters: .init(userSession: flowParameters.userSession, - appHooks: flowParameters.appHooks, userIndicatorController: flowParameters.userIndicatorController, navigationStackCoordinator: navigationStackCoordinator)) coordinator.actionsPublisher.sink { [weak self] action in diff --git a/ElementX/Sources/FlowCoordinators/SpaceSettingsFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/SpaceSettingsFlowCoordinator.swift index 702756561..5e0ee73de 100644 --- a/ElementX/Sources/FlowCoordinators/SpaceSettingsFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/SpaceSettingsFlowCoordinator.swift @@ -211,7 +211,6 @@ final class SpaceSettingsFlowCoordinator: FlowCoordinatorProtocol { private func presentSpaceSettings(animated: Bool) { let coordinator = RoomDetailsScreenCoordinator(parameters: .init(roomProxy: roomProxy, userSession: flowParameters.userSession, - appHooks: flowParameters.appHooks, analyticsService: flowParameters.analytics, userIndicatorController: flowParameters.userIndicatorController, notificationSettings: flowParameters.userSession.clientProxy.notificationSettings, @@ -276,8 +275,7 @@ final class SpaceSettingsFlowCoordinator: FlowCoordinatorProtocol { private func presentSecurityAndPrivacyScreen() { let coordinator = SecurityAndPrivacyScreenCoordinator(parameters: .init(roomProxy: roomProxy, userSession: flowParameters.userSession, - userIndicatorController: flowParameters.userIndicatorController, - appHooks: flowParameters.appHooks)) + userIndicatorController: flowParameters.userIndicatorController)) coordinator.actionsPublisher.sink { [weak self] action in guard let self else { return } diff --git a/ElementX/Sources/FlowCoordinators/StartChatFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/StartChatFlowCoordinator.swift index 2f1094660..d62bf5eba 100644 --- a/ElementX/Sources/FlowCoordinators/StartChatFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/StartChatFlowCoordinator.swift @@ -214,8 +214,7 @@ class StartChatFlowCoordinator: FlowCoordinatorProtocol { shouldShowCancelButton: isRoot, userSession: flowParameters.userSession, userIndicatorController: flowParameters.userIndicatorController, - analytics: flowParameters.analytics, - appHooks: flowParameters.appHooks) + analytics: flowParameters.analytics) let coordinator = CreateRoomScreenCoordinator(parameters: createParameters) coordinator.actions.sink { [weak self] action in guard let self else { return } diff --git a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift index 57482b9f0..c0961a605 100644 --- a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift +++ b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift @@ -15175,6 +15175,11 @@ nonisolated class UserSessionMock: UserSessionProtocol, @unchecked Sendable { set(value) { underlyingUserSettings = value } } nonisolated(unsafe) var underlyingUserSettings: UserSettings! + var userHooks: UserHooks { + get { return underlyingUserHooks } + set(value) { underlyingUserHooks = value } + } + nonisolated(unsafe) var underlyingUserHooks: UserHooks! var mediaProvider: MediaProviderProtocol { get { return underlyingMediaProvider } set(value) { underlyingMediaProvider = value } diff --git a/ElementX/Sources/Mocks/UserSessionMock.swift b/ElementX/Sources/Mocks/UserSessionMock.swift index 93602cb2f..df8da1b8e 100644 --- a/ElementX/Sources/Mocks/UserSessionMock.swift +++ b/ElementX/Sources/Mocks/UserSessionMock.swift @@ -12,6 +12,7 @@ import Foundation struct UserSessionMockConfiguration { var clientProxy: ClientProxyProtocol = ClientProxyMock(.init()) var userSettings: UserSettings = .mock() + var userHooks = UserHooks() var contentScannerService: ContentScannerServiceProtocol? var liveLocationManager: LiveLocationManagerProtocol = LiveLocationManagerMock(.init()) } @@ -22,6 +23,7 @@ struct UserSessionMockConfiguration { clientProxy = configuration.clientProxy userSettings = configuration.userSettings + userHooks = configuration.userHooks callbacks = .init() mediaProvider = MediaProviderMock(.init()) diff --git a/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenCoordinator.swift b/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenCoordinator.swift index 7e43a5eb3..ebb78e390 100644 --- a/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenCoordinator.swift +++ b/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenCoordinator.swift @@ -16,7 +16,6 @@ struct CreateRoomScreenCoordinatorParameters { let userSession: UserSessionProtocol let userIndicatorController: UserIndicatorControllerProtocol let analytics: AnalyticsServiceProtocol - let appHooks: AppHooks } enum CreateRoomScreenCoordinatorAction { @@ -40,8 +39,7 @@ final class CreateRoomScreenCoordinator: CoordinatorProtocol { shouldShowCancelButton: parameters.shouldShowCancelButton, userSession: parameters.userSession, analytics: parameters.analytics, - userIndicatorController: parameters.userIndicatorController, - appHooks: parameters.appHooks) + userIndicatorController: parameters.userIndicatorController) } func start() { diff --git a/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenViewModel.swift b/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenViewModel.swift index c16f5e600..89ee2259b 100644 --- a/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenViewModel.swift +++ b/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenViewModel.swift @@ -32,8 +32,7 @@ class CreateRoomScreenViewModel: CreateRoomScreenViewModelType, CreateRoomScreen shouldShowCancelButton: Bool, userSession: UserSessionProtocol, analytics: AnalyticsServiceProtocol, - userIndicatorController: UserIndicatorControllerProtocol, - appHooks: AppHooks) { + userIndicatorController: UserIndicatorControllerProtocol) { self.userSession = userSession mediaUploadingPreprocessor = MediaUploadingPreprocessor(userSettings: userSession.userSettings) self.analytics = analytics @@ -68,7 +67,7 @@ class CreateRoomScreenViewModel: CreateRoomScreenViewModelType, CreateRoomScreen aliasLocalPart: roomAliasNameFromRoomDisplayName(roomName: ""), bindings: bindings) - super.init(initialViewState: appHooks.createRoomScreenHook.update(viewState, homeserver: userSession.clientProxy.homeserver), + super.init(initialViewState: userSession.userHooks.createRoomScreenHook.update(viewState, homeserver: userSession.clientProxy.homeserver), mediaProvider: userSession.mediaProvider) setupBindings() diff --git a/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomScreen.swift b/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomScreen.swift index 98cf307bb..e98493404 100644 --- a/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomScreen.swift +++ b/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomScreen.swift @@ -466,7 +466,6 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview { shouldShowCancelButton: isSpace, userSession: userSession, analytics: AnalyticsServiceMock(.init()), - userIndicatorController: UserIndicatorControllerMock(), - appHooks: AppHooks()) + userIndicatorController: UserIndicatorControllerMock()) } } diff --git a/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomSpaceSelectionSheet.swift b/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomSpaceSelectionSheet.swift index c82d00289..655103b3f 100644 --- a/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomSpaceSelectionSheet.swift +++ b/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomSpaceSelectionSheet.swift @@ -70,8 +70,7 @@ struct CreateRoomSpaceSelectionSheet_Previews: PreviewProvider, TestablePreview shouldShowCancelButton: false, userSession: userSession, analytics: AnalyticsServiceMock(.init()), - userIndicatorController: UserIndicatorControllerMock(), - appHooks: AppHooks()) + userIndicatorController: UserIndicatorControllerMock()) }() static var previews: some View { diff --git a/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenCoordinator.swift b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenCoordinator.swift index 16774e69e..8006c3d06 100644 --- a/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenCoordinator.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenCoordinator.swift @@ -12,7 +12,6 @@ import SwiftUI struct RoomDetailsScreenCoordinatorParameters { let roomProxy: JoinedRoomProxyProtocol let userSession: UserSessionProtocol - let appHooks: AppHooks let analyticsService: AnalyticsServiceProtocol let userIndicatorController: UserIndicatorControllerProtocol let notificationSettings: NotificationSettingsProxyProtocol @@ -53,7 +52,6 @@ final class RoomDetailsScreenCoordinator: CoordinatorProtocol { isSpace = parameters.roomProxy.infoPublisher.value.isSpace viewModel = RoomDetailsScreenViewModel(roomProxy: parameters.roomProxy, userSession: parameters.userSession, - appHooks: parameters.appHooks, analyticsService: parameters.analyticsService, userIndicatorController: parameters.userIndicatorController, notificationSettingsProxy: parameters.notificationSettings, diff --git a/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift index 51dc60627..2c3346055 100644 --- a/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift @@ -45,7 +45,6 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr init(roomProxy: JoinedRoomProxyProtocol, userSession: UserSessionProtocol, - appHooks: AppHooks, analyticsService: AnalyticsServiceProtocol, userIndicatorController: UserIndicatorControllerProtocol, notificationSettingsProxy: NotificationSettingsProxyProtocol, @@ -68,7 +67,7 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr notificationSettingsState: .loading, isNativeCallingEnabled: userSession.userSettings.app.nativeCallEnabled, bindings: .init()) - super.init(initialViewState: appHooks.roomDetailsScreenHook.update(viewState), + super.init(initialViewState: userSession.userHooks.roomDetailsScreenHook.update(viewState), mediaProvider: userSession.mediaProvider) Task { diff --git a/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift b/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift index ec8529e8e..7e3a78218 100644 --- a/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift @@ -441,7 +441,6 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview { return .init(roomProxy: roomProxy, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: notificationSettingsProxy, @@ -469,7 +468,6 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview { return .init(roomProxy: roomProxy, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: notificationSettingsProxy, @@ -507,7 +505,6 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview { return .init(roomProxy: roomProxy, userSession: UserSessionMock(.init(clientProxy: clientProxyMock)), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: notificationSettingsProxy, diff --git a/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenCoordinator.swift b/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenCoordinator.swift index ee894a8d5..7f4efc1f5 100644 --- a/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenCoordinator.swift +++ b/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenCoordinator.swift @@ -13,7 +13,6 @@ struct RoomMemberDetailsScreenCoordinatorParameters { let userID: String let roomProxy: JoinedRoomProxyProtocol let userSession: UserSessionProtocol - let appHooks: AppHooks let analytics: AnalyticsServiceProtocol let userIndicatorController: UserIndicatorControllerProtocol } @@ -39,7 +38,6 @@ final class RoomMemberDetailsScreenCoordinator: CoordinatorProtocol { viewModel = RoomMemberDetailsScreenViewModel(userID: parameters.userID, roomProxy: parameters.roomProxy, userSession: parameters.userSession, - appHooks: parameters.appHooks, analytics: parameters.analytics, userIndicatorController: parameters.userIndicatorController) } diff --git a/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenViewModel.swift b/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenViewModel.swift index c13304c34..b943d15e0 100644 --- a/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenViewModel.swift +++ b/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenViewModel.swift @@ -28,7 +28,6 @@ class RoomMemberDetailsScreenViewModel: RoomMemberDetailsScreenViewModelType, Ro init(userID: String, roomProxy: JoinedRoomProxyProtocol, userSession: UserSessionProtocol, - appHooks: AppHooks, analytics: AnalyticsServiceProtocol, userIndicatorController: UserIndicatorControllerProtocol) { self.roomProxy = roomProxy @@ -38,7 +37,7 @@ class RoomMemberDetailsScreenViewModel: RoomMemberDetailsScreenViewModelType, Ro let initialViewState = RoomMemberDetailsScreenViewState(userID: userID, bindings: .init()) - super.init(initialViewState: appHooks.roomMemberDetailsScreenHook.update(initialViewState), + super.init(initialViewState: userSession.userHooks.roomMemberDetailsScreenHook.update(initialViewState), mediaProvider: userSession.mediaProvider) showMemberLoadingIndicator() diff --git a/ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift b/ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift index 1519b06d3..3eccd3f4a 100644 --- a/ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift +++ b/ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift @@ -239,7 +239,6 @@ struct RoomMemberDetailsScreen_Previews: PreviewProvider, TestablePreview { return RoomMemberDetailsScreenViewModel(userID: member.userID, roomProxy: roomProxyMock, userSession: UserSessionMock(.init(clientProxy: clientProxyMock)), - appHooks: AppHooks(), analytics: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) } diff --git a/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift b/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift index d9a8ed2fe..86e9960b2 100644 --- a/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift +++ b/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift @@ -24,7 +24,6 @@ struct RoomScreenCoordinatorParameters { let completionSuggestionService: CompletionSuggestionServiceProtocol let ongoingCallRoomIDPublisher: CurrentValuePublisher let appMediator: AppMediatorProtocol - let appHooks: AppHooks let analytics: AnalyticsServiceProtocol let composerDraftService: ComposerDraftServiceProtocol let timelineControllerFactory: TimelineControllerFactoryProtocol @@ -77,7 +76,6 @@ final class RoomScreenCoordinator: CoordinatorProtocol { roomProxy: parameters.roomProxy, initialSelectedPinnedEventID: selectedPinnedEventID, ongoingCallRoomIDPublisher: parameters.ongoingCallRoomIDPublisher, - appHooks: parameters.appHooks, analyticsService: parameters.analytics, userIndicatorController: parameters.userIndicatorController) diff --git a/ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift b/ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift index 52f30847d..5bba53e20 100644 --- a/ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift +++ b/ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift @@ -54,7 +54,6 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol roomProxy: JoinedRoomProxyProtocol, initialSelectedPinnedEventID: String?, ongoingCallRoomIDPublisher: CurrentValuePublisher, - appHooks: AppHooks, analyticsService: AnalyticsServiceProtocol, userIndicatorController: UserIndicatorControllerProtocol) { clientProxy = userSession.clientProxy @@ -73,7 +72,7 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol isDM: roomProxy.infoPublisher.value.isDM, hasSuccessor: roomProxy.infoPublisher.value.successor != nil, roomHistorySharingState: roomProxy.infoPublisher.value.historySharingState) - super.init(initialViewState: appHooks.roomScreenHook.update(viewState), + super.init(initialViewState: userSession.userHooks.roomScreenHook.update(viewState), mediaProvider: userSession.mediaProvider) updateRoomInfo(roomProxy.infoPublisher.value) @@ -459,13 +458,11 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol extension RoomScreenViewModel { static func mock(roomProxyMock: JoinedRoomProxyMock, - clientProxyMock: ClientProxyMock = ClientProxyMock(.init()), - appHooks: AppHooks = AppHooks()) -> RoomScreenViewModel { - RoomScreenViewModel(userSession: UserSessionMock(.init(clientProxy: clientProxyMock)), + userSession: UserSessionProtocol = UserSessionMock(.init())) -> RoomScreenViewModel { + RoomScreenViewModel(userSession: userSession, roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, ongoingCallRoomIDPublisher: .init(.init(nil)), - appHooks: appHooks, analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) } diff --git a/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenCoordinator.swift b/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenCoordinator.swift index 9a72fd795..7f62b75f1 100644 --- a/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenCoordinator.swift +++ b/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenCoordinator.swift @@ -13,7 +13,6 @@ struct SecurityAndPrivacyScreenCoordinatorParameters { let roomProxy: JoinedRoomProxyProtocol let userSession: UserSessionProtocol let userIndicatorController: UserIndicatorControllerProtocol - let appHooks: AppHooks } enum SecurityAndPrivacyScreenCoordinatorAction { @@ -35,8 +34,7 @@ final class SecurityAndPrivacyScreenCoordinator: CoordinatorProtocol { init(parameters: SecurityAndPrivacyScreenCoordinatorParameters) { viewModel = SecurityAndPrivacyScreenViewModel(roomProxy: parameters.roomProxy, userSession: parameters.userSession, - userIndicatorController: parameters.userIndicatorController, - appHooks: parameters.appHooks) + userIndicatorController: parameters.userIndicatorController) } func start() { diff --git a/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenViewModel.swift b/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenViewModel.swift index fcc6eda01..e166db03a 100644 --- a/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenViewModel.swift +++ b/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenViewModel.swift @@ -25,8 +25,7 @@ class SecurityAndPrivacyScreenViewModel: SecurityAndPrivacyScreenViewModelType, init(roomProxy: JoinedRoomProxyProtocol, userSession: UserSessionProtocol, - userIndicatorController: UserIndicatorControllerProtocol, - appHooks: AppHooks) { + userIndicatorController: UserIndicatorControllerProtocol) { self.roomProxy = roomProxy clientProxy = userSession.clientProxy self.userIndicatorController = userIndicatorController @@ -39,7 +38,7 @@ class SecurityAndPrivacyScreenViewModel: SecurityAndPrivacyScreenViewModelType, isKnockingEnabled: userSettings.app.knockingEnabled, historySharingDetailsURL: userSettings.app.historySharingDetailsURL) - super.init(initialViewState: appHooks.securityAndPrivacyScreenHook.update(viewState, homeserver: clientProxy.homeserver)) + super.init(initialViewState: userSession.userHooks.securityAndPrivacyScreenHook.update(viewState, homeserver: clientProxy.homeserver)) if let powerLevels = roomProxy.infoPublisher.value.powerLevels { setupPermissions(powerLevels: powerLevels) diff --git a/ElementX/Sources/Screens/SecurityAndPrivacyScreen/View/SecurityAndPrivacyScreen.swift b/ElementX/Sources/Screens/SecurityAndPrivacyScreen/View/SecurityAndPrivacyScreen.swift index 5d792b384..f9052f6be 100644 --- a/ElementX/Sources/Screens/SecurityAndPrivacyScreen/View/SecurityAndPrivacyScreen.swift +++ b/ElementX/Sources/Screens/SecurityAndPrivacyScreen/View/SecurityAndPrivacyScreen.swift @@ -234,8 +234,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview { static let inviteOnlyViewModel = SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(members: .allMembersAsCreator, joinRule: .invite)), userSession: UserSessionMock(.init()), - userIndicatorController: UserIndicatorControllerMock(), - appHooks: AppHooks()) + userIndicatorController: UserIndicatorControllerMock()) static let publicViewModel = SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false, canonicalAlias: "#room:matrix.org", @@ -243,15 +242,13 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview { joinRule: .public, isVisibleInPublicDirectory: true)), userSession: UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org")))), - userIndicatorController: UserIndicatorControllerMock(), - appHooks: AppHooks()) + userIndicatorController: UserIndicatorControllerMock()) static let publicNoAddressViewModel = SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false, members: .allMembersAsCreator, joinRule: .public)), userSession: UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org")))), - userIndicatorController: UserIndicatorControllerMock(), - appHooks: AppHooks()) + userIndicatorController: UserIndicatorControllerMock()) static let singleSpaceMembersViewModel = { let space = [SpaceServiceRoom].mockSingleRoom[0] @@ -263,8 +260,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview { isVisibleInPublicDirectory: true)), userSession: UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org", spaceServiceConfiguration: .init(joinedParentSpaces: [space]))))), - userIndicatorController: UserIndicatorControllerMock(), - appHooks: AppHooks()) + userIndicatorController: UserIndicatorControllerMock()) }() static let multipleSpacesMembersViewModel = { @@ -277,8 +273,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview { isVisibleInPublicDirectory: true)), userSession: UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org", spaceServiceConfiguration: .init(joinedParentSpaces: spaces))))), - userIndicatorController: UserIndicatorControllerMock(), - appHooks: AppHooks()) + userIndicatorController: UserIndicatorControllerMock()) }() static let askToJoinViewModel = { @@ -292,8 +287,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview { isVisibleInPublicDirectory: true)), userSession: UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org")), userSettings: userSettings)), - userIndicatorController: UserIndicatorControllerMock(), - appHooks: AppHooks()) + userIndicatorController: UserIndicatorControllerMock()) }() static let singleAskToJoinSpaceMembersViewModel = { @@ -310,8 +304,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview { userSession: UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org", spaceServiceConfiguration: .init(joinedParentSpaces: [space]))), userSettings: userSettings)), - userIndicatorController: UserIndicatorControllerMock(), - appHooks: AppHooks()) + userIndicatorController: UserIndicatorControllerMock()) }() static let multipleAskToJoinSpacesMembersViewModel = { @@ -328,8 +321,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview { userSession: UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org", spaceServiceConfiguration: .init(joinedParentSpaces: spaces))), userSettings: userSettings)), - userIndicatorController: UserIndicatorControllerMock(), - appHooks: AppHooks()) + userIndicatorController: UserIndicatorControllerMock()) }() static let publicSpaceViewModel = SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isSpace: true, @@ -339,8 +331,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview { joinRule: .public, isVisibleInPublicDirectory: true)), userSession: UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userIDServerName: "matrix.org")))), - userIndicatorController: UserIndicatorControllerMock(), - appHooks: AppHooks()) + userIndicatorController: UserIndicatorControllerMock()) static var previews: some View { ElementNavigationStack { diff --git a/ElementX/Sources/Screens/Spaces/SpaceSettingsScreen/View/SpaceSettingsScreen.swift b/ElementX/Sources/Screens/Spaces/SpaceSettingsScreen/View/SpaceSettingsScreen.swift index 0a864ab1d..72dc7e0b8 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceSettingsScreen/View/SpaceSettingsScreen.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceSettingsScreen/View/SpaceSettingsScreen.swift @@ -132,7 +132,6 @@ struct SpaceSettingsScreen_Previews: PreviewProvider, TestablePreview { canonicalAlias: "#space:matrix.org", members: members)), userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), diff --git a/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenCoordinator.swift b/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenCoordinator.swift index 7318717c0..9be33783d 100644 --- a/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenCoordinator.swift +++ b/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenCoordinator.swift @@ -13,7 +13,6 @@ struct UserProfileScreenCoordinatorParameters { let userID: String let isPresentedModally: Bool let userSession: UserSessionProtocol - let appHooks: AppHooks let analytics: AnalyticsServiceProtocol let userIndicatorController: UserIndicatorControllerProtocol } @@ -38,7 +37,6 @@ final class UserProfileScreenCoordinator: CoordinatorProtocol { viewModel = UserProfileScreenViewModel(userID: parameters.userID, isPresentedModally: parameters.isPresentedModally, userSession: parameters.userSession, - appHooks: parameters.appHooks, analytics: parameters.analytics, userIndicatorController: parameters.userIndicatorController) } diff --git a/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenViewModel.swift b/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenViewModel.swift index d78442eb4..03d9767cb 100644 --- a/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenViewModel.swift +++ b/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenViewModel.swift @@ -25,7 +25,6 @@ class UserProfileScreenViewModel: UserProfileScreenViewModelType, UserProfileScr init(userID: String, isPresentedModally: Bool, userSession: UserSessionProtocol, - appHooks: AppHooks, analytics: AnalyticsServiceProtocol, userIndicatorController: UserIndicatorControllerProtocol) { self.userSession = userSession @@ -37,7 +36,7 @@ class UserProfileScreenViewModel: UserProfileScreenViewModelType, UserProfileScr isPresentedModally: isPresentedModally, bindings: .init()) - super.init(initialViewState: appHooks.userProfileScreenHook.update(initialViewState), + super.init(initialViewState: userSession.userHooks.userProfileScreenHook.update(initialViewState), mediaProvider: userSession.mediaProvider) showLoadingIndicator(allowsInteraction: true) diff --git a/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift b/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift index 26a2ee990..14dbb13f5 100644 --- a/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift +++ b/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift @@ -147,7 +147,6 @@ struct UserProfileScreen_Previews: PreviewProvider, TestablePreview { return UserProfileScreenViewModel(userID: userID, isPresentedModally: false, userSession: UserSessionMock(.init(clientProxy: clientProxyMock)), - appHooks: AppHooks(), analytics: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) } diff --git a/ElementX/Sources/Services/Session/UserSession.swift b/ElementX/Sources/Services/Session/UserSession.swift index 58ce52364..839cbbb96 100644 --- a/ElementX/Sources/Services/Session/UserSession.swift +++ b/ElementX/Sources/Services/Session/UserSession.swift @@ -16,6 +16,7 @@ class UserSession: UserSessionProtocol { let clientProxy: ClientProxyProtocol let userSettings: UserSettings + let userHooks: UserHooks let mediaProvider: MediaProviderProtocol let voiceMessageMediaManager: VoiceMessageMediaManagerProtocol @@ -32,11 +33,13 @@ class UserSession: UserSessionProtocol { init(clientProxy: ClientProxyProtocol, userSettings: UserSettings, + userHooks: UserHooks, mediaProvider: MediaProviderProtocol, voiceMessageMediaManager: VoiceMessageMediaManagerProtocol, liveLocationManager: LiveLocationManagerProtocol) { self.clientProxy = clientProxy self.userSettings = userSettings + self.userHooks = userHooks self.mediaProvider = mediaProvider self.voiceMessageMediaManager = voiceMessageMediaManager diff --git a/ElementX/Sources/Services/Session/UserSessionProtocol.swift b/ElementX/Sources/Services/Session/UserSessionProtocol.swift index 7ea8bf32c..fb4bfed31 100644 --- a/ElementX/Sources/Services/Session/UserSessionProtocol.swift +++ b/ElementX/Sources/Services/Session/UserSessionProtocol.swift @@ -22,6 +22,7 @@ struct SessionSecurityState: Equatable { protocol UserSessionProtocol: Sendable { var clientProxy: ClientProxyProtocol { get } var userSettings: UserSettings { get } + var userHooks: UserHooks { get } var mediaProvider: MediaProviderProtocol { get } var voiceMessageMediaManager: VoiceMessageMediaManagerProtocol { get } diff --git a/ElementX/Sources/Services/UserSession/UserSessionStore.swift b/ElementX/Sources/Services/UserSession/UserSessionStore.swift index f669fe946..7b608c020 100644 --- a/ElementX/Sources/Services/UserSession/UserSessionStore.swift +++ b/ElementX/Sources/Services/UserSession/UserSessionStore.swift @@ -126,6 +126,7 @@ class UserSessionStore: UserSessionStoreProtocol { return UserSession(clientProxy: clientProxy, userSettings: userSettings, + userHooks: appHooks.userSessionHook.makeUserHooks(for: clientProxy), mediaProvider: mediaProvider, voiceMessageMediaManager: voiceMessageMediaManager, liveLocationManager: liveLocationManager) diff --git a/ElementX/Sources/UITests/UITestsAppCoordinator.swift b/ElementX/Sources/UITests/UITestsAppCoordinator.swift index 516f25620..1a5dcd0a2 100644 --- a/ElementX/Sources/UITests/UITestsAppCoordinator.swift +++ b/ElementX/Sources/UITests/UITestsAppCoordinator.swift @@ -303,7 +303,6 @@ class MockScreen: Identifiable { completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock(.init()), - appHooks: AppHooks(), analytics: analytics, composerDraftService: ComposerDraftServiceMock(.init()), timelineControllerFactory: TimelineControllerFactoryMock(.init()), @@ -323,7 +322,6 @@ class MockScreen: Identifiable { completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock(.init()), - appHooks: AppHooks(), analytics: analytics, composerDraftService: ComposerDraftServiceMock(.init()), timelineControllerFactory: TimelineControllerFactoryMock(.init()), @@ -343,7 +341,6 @@ class MockScreen: Identifiable { completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock(.init()), - appHooks: AppHooks(), analytics: analytics, composerDraftService: ComposerDraftServiceMock(.init()), timelineControllerFactory: TimelineControllerFactoryMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -362,7 +359,6 @@ class MockScreen: Identifiable { completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock(.init()), - appHooks: AppHooks(), analytics: analytics, composerDraftService: ComposerDraftServiceMock(.init()), timelineControllerFactory: TimelineControllerFactoryMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -387,7 +383,6 @@ class MockScreen: Identifiable { completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock(.init()), - appHooks: AppHooks(), analytics: analytics, composerDraftService: ComposerDraftServiceMock(.init()), timelineControllerFactory: TimelineControllerFactoryMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -412,7 +407,6 @@ class MockScreen: Identifiable { completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock(.init()), - appHooks: AppHooks(), analytics: analytics, composerDraftService: ComposerDraftServiceMock(.init()), timelineControllerFactory: TimelineControllerFactoryMock(.init()), userIndicatorController: UserIndicatorControllerMock()) let coordinator = RoomScreenCoordinator(parameters: parameters) @@ -436,7 +430,6 @@ class MockScreen: Identifiable { completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock(.init()), - appHooks: AppHooks(), analytics: analytics, composerDraftService: ComposerDraftServiceMock(.init()), timelineControllerFactory: TimelineControllerFactoryMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -462,7 +455,6 @@ class MockScreen: Identifiable { completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock(.init()), - appHooks: AppHooks(), analytics: analytics, composerDraftService: ComposerDraftServiceMock(.init()), timelineControllerFactory: TimelineControllerFactoryMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -487,7 +479,6 @@ class MockScreen: Identifiable { completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock(.init()), - appHooks: AppHooks(), analytics: analytics, composerDraftService: ComposerDraftServiceMock(.init()), timelineControllerFactory: TimelineControllerFactoryMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -508,7 +499,6 @@ class MockScreen: Identifiable { completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock(.init()), - appHooks: AppHooks(), analytics: analytics, composerDraftService: ComposerDraftServiceMock(.init()), timelineControllerFactory: TimelineControllerFactoryMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -542,7 +532,6 @@ class MockScreen: Identifiable { completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock(.init()), - appHooks: AppHooks(), analytics: analytics, composerDraftService: ComposerDraftServiceMock(.init()), timelineControllerFactory: TimelineControllerFactoryMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -563,7 +552,6 @@ class MockScreen: Identifiable { completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock(.init()), - appHooks: AppHooks(), analytics: analytics, composerDraftService: ComposerDraftServiceMock(.init()), timelineControllerFactory: TimelineControllerFactoryMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -584,7 +572,6 @@ class MockScreen: Identifiable { completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock(.init()), - appHooks: AppHooks(), analytics: analytics, composerDraftService: ComposerDraftServiceMock(.init()), timelineControllerFactory: TimelineControllerFactoryMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -741,7 +728,6 @@ class MockScreen: Identifiable { navigationStackCoordinator.setRootCoordinator(BlankFormCoordinator()) let coordinator = EncryptionSettingsFlowCoordinator(parameters: .init(userSession: userSession, - appHooks: AppHooks(), userIndicatorController: UserIndicatorControllerMock(), navigationStackCoordinator: navigationStackCoordinator)) retainedState.append(coordinator) diff --git a/Enterprise b/Enterprise index 38e089a53..8b65ca7f1 160000 --- a/Enterprise +++ b/Enterprise @@ -1 +1 @@ -Subproject commit 38e089a531e8e733ad00bdc7d595a45c2ee87682 +Subproject commit 8b65ca7f1334e3d696fe01f2ad071cc5d9db9326 diff --git a/UnitTests/Sources/CreateRoomViewModelTests.swift b/UnitTests/Sources/CreateRoomViewModelTests.swift index 425353aa1..b88bf50de 100644 --- a/UnitTests/Sources/CreateRoomViewModelTests.swift +++ b/UnitTests/Sources/CreateRoomViewModelTests.swift @@ -91,8 +91,7 @@ final class CreateRoomScreenViewModelTests { shouldShowCancelButton: false, userSession: userSession, analytics: AnalyticsServiceMock(.init()), - userIndicatorController: UserIndicatorControllerMock(), - appHooks: AppHooks()) + userIndicatorController: UserIndicatorControllerMock()) self.viewModel = viewModel // Given a form with a blank topic. @@ -341,8 +340,7 @@ final class CreateRoomScreenViewModelTests { shouldShowCancelButton: false, userSession: userSession, analytics: AnalyticsServiceMock(.init()), - userIndicatorController: UserIndicatorControllerMock(), - appHooks: AppHooks()) + userIndicatorController: UserIndicatorControllerMock()) self.viewModel = viewModel } } diff --git a/UnitTests/Sources/RoomDetailsScreenViewModelTests.swift b/UnitTests/Sources/RoomDetailsScreenViewModelTests.swift index 9ebbfeb77..dbca317f4 100644 --- a/UnitTests/Sources/RoomDetailsScreenViewModelTests.swift +++ b/UnitTests/Sources/RoomDetailsScreenViewModelTests.swift @@ -30,7 +30,6 @@ struct RoomDetailsScreenViewModelTests { notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: notificationSettingsProxyMock, @@ -43,7 +42,6 @@ struct RoomDetailsScreenViewModelTests { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", members: mockedMembers, joinRule: .public)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -63,7 +61,6 @@ struct RoomDetailsScreenViewModelTests { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -84,7 +81,6 @@ struct RoomDetailsScreenViewModelTests { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -142,7 +138,6 @@ struct RoomDetailsScreenViewModelTests { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -163,7 +158,6 @@ struct RoomDetailsScreenViewModelTests { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -195,7 +189,6 @@ struct RoomDetailsScreenViewModelTests { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init(clientProxy: clientProxy)), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -226,7 +219,6 @@ struct RoomDetailsScreenViewModelTests { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -258,7 +250,6 @@ struct RoomDetailsScreenViewModelTests { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init(clientProxy: clientProxy)), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -291,7 +282,6 @@ struct RoomDetailsScreenViewModelTests { powerLevelsConfiguration: .init(canUserInvite: false))) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -308,7 +298,6 @@ struct RoomDetailsScreenViewModelTests { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", members: mockedMembers, joinRule: .public)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -356,7 +345,6 @@ struct RoomDetailsScreenViewModelTests { viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -391,7 +379,6 @@ struct RoomDetailsScreenViewModelTests { viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -426,7 +413,6 @@ struct RoomDetailsScreenViewModelTests { viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -446,7 +432,6 @@ struct RoomDetailsScreenViewModelTests { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -466,7 +451,6 @@ struct RoomDetailsScreenViewModelTests { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -484,7 +468,6 @@ struct RoomDetailsScreenViewModelTests { notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneThrowableError = NotificationSettingsError.Generic(msg: "error") viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: notificationSettingsProxyMock, @@ -692,7 +675,6 @@ struct RoomDetailsScreenViewModelTests { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, knockRequestsState: .loaded(mockedRequests), joinRule: .knock)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: notificationSettingsProxyMock, @@ -713,7 +695,6 @@ struct RoomDetailsScreenViewModelTests { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, knockRequestsState: .loading, joinRule: .knock)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: notificationSettingsProxyMock, @@ -736,7 +717,6 @@ struct RoomDetailsScreenViewModelTests { powerLevelsConfiguration: .init(canUserInvite: false))) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: notificationSettingsProxyMock, @@ -759,7 +739,6 @@ struct RoomDetailsScreenViewModelTests { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, members: mockedMembers, knockRequestsState: .loaded(mockedRequests), joinRule: .knock)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: notificationSettingsProxyMock, @@ -786,7 +765,6 @@ struct RoomDetailsScreenViewModelTests { viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, userSession: UserSessionMock(.init()), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock(), notificationSettingsProxy: notificationSettingsProxyMock, diff --git a/UnitTests/Sources/RoomMemberDetailsViewModelTests.swift b/UnitTests/Sources/RoomMemberDetailsViewModelTests.swift index e40ab24f3..5ce6daaa5 100644 --- a/UnitTests/Sources/RoomMemberDetailsViewModelTests.swift +++ b/UnitTests/Sources/RoomMemberDetailsViewModelTests.swift @@ -210,7 +210,6 @@ struct RoomMemberDetailsViewModelTests { viewModel = RoomMemberDetailsScreenViewModel(userID: roomMemberProxyMock.userID, roomProxy: roomProxyMock, userSession: userSession, - appHooks: AppHooks(), analytics: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) } diff --git a/UnitTests/Sources/RoomScreenViewModelTests.swift b/UnitTests/Sources/RoomScreenViewModelTests.swift index 3620b8c07..4bc225d5e 100644 --- a/UnitTests/Sources/RoomScreenViewModelTests.swift +++ b/UnitTests/Sources/RoomScreenViewModelTests.swift @@ -36,7 +36,6 @@ final class RoomScreenViewModelTests { roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, ongoingCallRoomIDPublisher: .init(.init(nil)), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -115,7 +114,6 @@ final class RoomScreenViewModelTests { roomProxy: roomProxyMock, initialSelectedPinnedEventID: "test1", ongoingCallRoomIDPublisher: .init(.init(nil)), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -176,7 +174,6 @@ final class RoomScreenViewModelTests { roomProxy: roomProxyMock, initialSelectedPinnedEventID: "test1", ongoingCallRoomIDPublisher: .init(.init(nil)), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -231,7 +228,6 @@ final class RoomScreenViewModelTests { roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, ongoingCallRoomIDPublisher: .init(.init(nil)), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -265,7 +261,6 @@ final class RoomScreenViewModelTests { roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, ongoingCallRoomIDPublisher: ongoingCallRoomIDSubject.asCurrentValuePublisher(), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) #expect(viewModel.state.shouldShowCallButton) @@ -311,7 +306,6 @@ final class RoomScreenViewModelTests { roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, ongoingCallRoomIDPublisher: .init(.init(nil)), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) viewModel.stop() @@ -332,7 +326,6 @@ final class RoomScreenViewModelTests { roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, ongoingCallRoomIDPublisher: .init(.init(nil)), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -364,7 +357,6 @@ final class RoomScreenViewModelTests { roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, ongoingCallRoomIDPublisher: .init(.init(nil)), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -391,7 +383,6 @@ final class RoomScreenViewModelTests { roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, ongoingCallRoomIDPublisher: .init(.init(nil)), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -409,7 +400,6 @@ final class RoomScreenViewModelTests { roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, ongoingCallRoomIDPublisher: .init(.init(nil)), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) @@ -434,7 +424,6 @@ final class RoomScreenViewModelTests { roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, ongoingCallRoomIDPublisher: .init(.init(nil)), - appHooks: AppHooks(), analyticsService: AnalyticsServiceMock(.init()), userIndicatorController: UserIndicatorControllerMock()) diff --git a/UnitTests/Sources/SecurityAndPrivacyScreenViewModelTests.swift b/UnitTests/Sources/SecurityAndPrivacyScreenViewModelTests.swift index cfdb6282e..4b37995cd 100644 --- a/UnitTests/Sources/SecurityAndPrivacyScreenViewModelTests.swift +++ b/UnitTests/Sources/SecurityAndPrivacyScreenViewModelTests.swift @@ -474,7 +474,6 @@ final class SecurityAndPrivacyScreenViewModelTests { viewModel = SecurityAndPrivacyScreenViewModel(roomProxy: roomProxy, userSession: UserSessionMock(.init(clientProxy: clientProxy, userSettings: userSettings)), - userIndicatorController: UserIndicatorControllerMock(), - appHooks: AppHooks()) + userIndicatorController: UserIndicatorControllerMock()) } } diff --git a/UnitTests/Sources/UserProfileScreenViewModelTests.swift b/UnitTests/Sources/UserProfileScreenViewModelTests.swift index c41528c36..b9f96cbd1 100644 --- a/UnitTests/Sources/UserProfileScreenViewModelTests.swift +++ b/UnitTests/Sources/UserProfileScreenViewModelTests.swift @@ -22,7 +22,6 @@ struct UserProfileScreenViewModelTests { let viewModel = UserProfileScreenViewModel(userID: profile.id, isPresentedModally: false, userSession: UserSessionMock(.init(clientProxy: clientProxy)), - appHooks: AppHooks(), analytics: AnalyticsServiceMock(.init()), userIndicatorController: userIndicatorController) let context = viewModel.context @@ -46,7 +45,6 @@ struct UserProfileScreenViewModelTests { let viewModel = UserProfileScreenViewModel(userID: profile.id, isPresentedModally: false, userSession: UserSessionMock(.init(clientProxy: clientProxy)), - appHooks: AppHooks(), analytics: AnalyticsServiceMock(.init()), userIndicatorController: userIndicatorController) let context = viewModel.context @@ -72,7 +70,6 @@ struct UserProfileScreenViewModelTests { let viewModel = UserProfileScreenViewModel(userID: profile.id, isPresentedModally: false, userSession: UserSessionMock(.init(clientProxy: clientProxy)), - appHooks: AppHooks(), analytics: AnalyticsServiceMock(.init()), userIndicatorController: userIndicatorController)