Remove the CommonSettingsProtocol and use UserSession to carry multiple dependencies. (#6302)

* Remove the CommonSettingsProtocol.

* Replace multiple dependencies with the UserSession when it carries them.
This commit is contained in:
Doug
2026-10-09 10:20:00 +01:00
committed by GitHub
parent a3d170534c
commit 65bab49f39
75 changed files with 212 additions and 369 deletions
@@ -377,7 +377,6 @@ class ChatsTabFlowCoordinator: FlowCoordinatorProtocol {
let parameters = HomeScreenCoordinatorParameters(userSession: userSession,
bugReportService: flowParameters.bugReportService,
selectedRoomPublisher: selectedRoomSubject.asCurrentValuePublisher(),
userSettings: flowParameters.userSettings,
analyticsService: flowParameters.analytics,
notificationManager: flowParameters.notificationManager,
userIndicatorController: flowParameters.userIndicatorController)
@@ -84,7 +84,6 @@ class MediaEventsTimelineFlowCoordinator: FlowCoordinatorProtocol {
userSession: userSession,
mediaPlayerProvider: MediaPlayerProvider(),
appMediator: flowParameters.appMediator,
userSettings: flowParameters.userSettings,
analytics: flowParameters.analytics,
emojiProvider: flowParameters.emojiProvider,
linkMetadataProvider: flowParameters.linkMetadataProvider,
@@ -69,7 +69,7 @@ class OnboardingFlowCoordinator: FlowCoordinatorProtocol {
self.appLockService = appLockService
analyticsService = flowParameters.analytics
appMediator = flowParameters.appMediator
userSettings = flowParameters.userSettings
userSettings = flowParameters.userSession.userSettings
appHooks = flowParameters.appHooks
notificationManager = flowParameters.notificationManager
userIndicatorController = flowParameters.userIndicatorController
@@ -281,8 +281,7 @@ class OnboardingFlowCoordinator: FlowCoordinatorProtocol {
let parameters = SessionVerificationScreenCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationController,
flow: .deviceInitiator,
userSettings: userSettings,
mediaProvider: userSession.mediaProvider)
userSession: userSession)
let coordinator = SessionVerificationScreenCoordinator(parameters: parameters)
@@ -69,7 +69,6 @@ class PinnedEventsTimelineFlowCoordinator: FlowCoordinatorProtocol {
userSession: userSession,
mediaPlayerProvider: MediaPlayerProvider(),
appMediator: flowParameters.appMediator,
userSettings: flowParameters.userSettings,
analytics: flowParameters.analytics,
emojiProvider: flowParameters.emojiProvider,
linkMetadataProvider: flowParameters.linkMetadataProvider,
@@ -107,15 +106,13 @@ class PinnedEventsTimelineFlowCoordinator: FlowCoordinatorProtocol {
let stackCoordinator = NavigationStackCoordinator()
let params = LocationSharingScreenCoordinatorParameters(interactionMode: interactionMode,
mapURLBuilder: flowParameters.userSettings.app.mapTilerConfiguration.publisher.value,
mapURLBuilder: userSession.userSettings.app.mapTilerConfiguration.publisher.value,
roomProxy: roomProxy,
timelineController: timelineController,
liveLocationManager: flowParameters.userSession.liveLocationManager,
userSettings: flowParameters.userSettings,
userSession: userSession,
appMediator: flowParameters.appMediator,
analytics: flowParameters.analytics,
userIndicatorController: flowParameters.userIndicatorController,
mediaProvider: flowParameters.userSession.mediaProvider)
userIndicatorController: flowParameters.userIndicatorController)
let coordinator = LocationSharingScreenCoordinator(parameters: params)
coordinator.actions.sink { [weak self] action in
@@ -238,7 +238,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
defer { hideLoadingIndicator() }
switch await roomProxy.loadOrFetchEventDetails(for: eventID) {
case .success(let event):
if flowParameters.userSettings.app.threadsEnabled, let threadRootEventID = event.threadRootEventId() {
if userSession.userSettings.app.threadsEnabled, let threadRootEventID = event.threadRootEventId() {
if case .thread(threadRootEventID: threadRootEventID, _) = stateMachine.state, let threadCoordinator = childThreadScreenCoordinators.last {
threadCoordinator.focusOnEvent(eventID: eventID)
} else {
@@ -318,7 +318,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
// Otherwise check if the focussed event exists to handle a possible error or theaded event.
switch await roomProxy.loadOrFetchEventDetails(for: focusEvent.eventID) {
case .success(let event):
if flowParameters.userSettings.app.threadsEnabled, let threadRootEventID = event.threadRootEventId() {
if userSession.userSettings.app.threadsEnabled, let threadRootEventID = event.threadRootEventId() {
stateMachine.tryEvent(.presentRoom(presentationAction: .thread(rootEventID: threadRootEventID,
focusEvent: .init(eventID: focusEvent.eventID,
shouldSetPin: focusEvent.shouldSetPin))),
@@ -798,7 +798,6 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
linkMetadataProvider: flowParameters.linkMetadataProvider,
completionSuggestionService: completionSuggestionService,
appMediator: flowParameters.appMediator,
userSettings: flowParameters.userSettings,
analytics: flowParameters.analytics,
composerDraftService: composerDraftService,
timelineControllerFactory: flowParameters.timelineControllerFactory,
@@ -855,8 +854,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
private func presentJoinRoomScreen(via: [String], animated: Bool) {
let coordinator = JoinRoomScreenCoordinator(parameters: .init(source: .generic(roomID: roomID, via: via),
userSession: userSession,
userIndicatorController: flowParameters.userIndicatorController,
userSettings: flowParameters.userSettings))
userIndicatorController: flowParameters.userIndicatorController))
joinRoomScreenCoordinator = coordinator
@@ -939,7 +937,6 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
private func presentRoomDetails(isRoot: Bool, animated: Bool) async {
let params = RoomDetailsScreenCoordinatorParameters(roomProxy: roomProxy,
userSession: userSession,
userSettings: flowParameters.userSettings,
appHooks: flowParameters.appHooks,
analyticsService: flowParameters.analytics,
userIndicatorController: flowParameters.userIndicatorController,
@@ -1019,7 +1016,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
let roomDetailsEditParameters = RoomDetailsEditScreenCoordinatorParameters(roomProxy: roomProxy,
userSession: userSession,
mediaUploadingPreprocessor: MediaUploadingPreprocessor(userSettings: flowParameters.userSettings),
mediaUploadingPreprocessor: MediaUploadingPreprocessor(userSettings: userSession.userSettings),
navigationStackCoordinator: stackCoordinator,
userIndicatorController: flowParameters.userIndicatorController,
orientationManager: flowParameters.appMediator.windowManager)
@@ -1119,9 +1116,9 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
let parameters = MediaUploadPreviewScreenCoordinatorParameters(mediaURLs: mediaURLs,
caption: caption,
title: title,
shouldShowCaptionWarning: flowParameters.userSettings.app.shouldShowMediaCaptionWarning,
galleryEnabled: flowParameters.userSettings.app.galleryEnabled,
mediaUploadingPreprocessor: MediaUploadingPreprocessor(userSettings: flowParameters.userSettings),
shouldShowCaptionWarning: userSession.userSettings.app.shouldShowMediaCaptionWarning,
galleryEnabled: userSession.userSettings.app.galleryEnabled,
mediaUploadingPreprocessor: MediaUploadingPreprocessor(userSettings: userSession.userSettings),
timelineController: timelineController,
clientProxy: userSession.clientProxy,
userIndicatorController: flowParameters.userIndicatorController)
@@ -1176,15 +1173,13 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
let stackCoordinator = NavigationStackCoordinator()
let params = LocationSharingScreenCoordinatorParameters(interactionMode: interactionMode,
mapURLBuilder: flowParameters.userSettings.app.mapTilerConfiguration.publisher.value,
mapURLBuilder: userSession.userSettings.app.mapTilerConfiguration.publisher.value,
roomProxy: roomProxy,
timelineController: timelineController,
liveLocationManager: flowParameters.userSession.liveLocationManager,
userSettings: flowParameters.userSettings,
userSession: userSession,
appMediator: flowParameters.appMediator,
analytics: flowParameters.analytics,
userIndicatorController: flowParameters.userIndicatorController,
mediaProvider: flowParameters.userSession.mediaProvider)
userIndicatorController: flowParameters.userIndicatorController)
let coordinator = LocationSharingScreenCoordinator(parameters: params)
coordinator.actions.sink { [weak self] action in
@@ -1324,8 +1319,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
userSession: userSession,
userNotificationCenter: UNUserNotificationCenter.current(),
userIndicatorController: flowParameters.userIndicatorController,
isModallyPresented: true,
userSettings: flowParameters.userSettings)
isModallyPresented: true)
let coordinator = NotificationSettingsScreenCoordinator(parameters: parameters)
coordinator.actions.sink { [weak self] action in
switch action {
@@ -1418,9 +1412,8 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
private func presentSecurityAndPrivacyScreen() {
let coordinator = SecurityAndPrivacyScreenCoordinator(parameters: .init(roomProxy: roomProxy,
clientProxy: userSession.clientProxy,
userSession: userSession,
userIndicatorController: flowParameters.userIndicatorController,
appSetting: flowParameters.userSettings,
appHooks: flowParameters.appHooks))
coordinator.actionsPublisher.sink { [weak self] action in
@@ -23,6 +23,10 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
private let navigationStackCoordinator: NavigationStackCoordinator
private let flowParameters: CommonFlowParameters
private var userSettings: UserSettings {
flowParameters.userSession.userSettings
}
// periphery:ignore - retaining purpose
private var appLockSetupFlowCoordinator: AppLockSetupFlowCoordinator?
private var bugReportFlowCoordinator: BugReportFlowCoordinator?
@@ -73,7 +77,6 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
private func presentSettingsScreen(animated: Bool) {
let settingsScreenCoordinator = SettingsScreenCoordinator(parameters: .init(userSession: flowParameters.userSession,
userSettings: flowParameters.userSettings,
isBugReportServiceEnabled: flowParameters.bugReportService.isEnabled,
isInSecondaryWindow: isInSecondaryWindow,
userIndicatorController: flowParameters.userIndicatorController))
@@ -139,7 +142,7 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
}
private func presentLabs() {
let coordinator = LabsScreenCoordinator(parameters: .init(userSettings: flowParameters.userSettings))
let coordinator = LabsScreenCoordinator(parameters: .init(userSettings: userSettings))
coordinator.actions
.sink { [weak self] action in
switch action {
@@ -190,7 +193,7 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
private func presentUserDetailsEditScreen() {
let coordinator = UserDetailsEditScreenCoordinator(parameters: .init(orientationManager: flowParameters.windowManager,
userSession: flowParameters.userSession,
mediaUploadingPreprocessor: MediaUploadingPreprocessor(userSettings: flowParameters.userSettings),
mediaUploadingPreprocessor: MediaUploadingPreprocessor(userSettings: userSettings),
navigationStackCoordinator: navigationStackCoordinator,
userIndicatorController: flowParameters.userIndicatorController))
coordinator.actions
@@ -234,7 +237,7 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
}
private func presentAnalyticsScreen() {
let coordinator = AnalyticsSettingsScreenCoordinator(parameters: .init(userSettings: flowParameters.userSettings,
let coordinator = AnalyticsSettingsScreenCoordinator(parameters: .init(userSettings: userSettings,
analytics: flowParameters.analytics))
navigationStackCoordinator.push(coordinator)
}
@@ -260,11 +263,11 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
}
private func presentLegalInformationScreen() {
navigationStackCoordinator.push(LegalInformationScreenCoordinator(userSettings: flowParameters.userSettings))
navigationStackCoordinator.push(LegalInformationScreenCoordinator(userSettings: userSettings))
}
private func presentBlockedUsersScreen() {
let coordinator = BlockedUsersScreenCoordinator(parameters: .init(hideProfiles: flowParameters.userSettings.app.hideIgnoredUserProfiles,
let coordinator = BlockedUsersScreenCoordinator(parameters: .init(hideProfiles: userSettings.app.hideIgnoredUserProfiles,
userSession: flowParameters.userSession,
userIndicatorController: flowParameters.userIndicatorController))
navigationStackCoordinator.push(coordinator)
@@ -275,8 +278,7 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
userSession: flowParameters.userSession,
userNotificationCenter: UNUserNotificationCenter.current(),
userIndicatorController: flowParameters.userIndicatorController,
isModallyPresented: false,
userSettings: flowParameters.userSettings)
isModallyPresented: false)
let coordinator = NotificationSettingsScreenCoordinator(parameters: notificationParameters)
navigationStackCoordinator.push(coordinator)
}
@@ -300,20 +302,20 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
}
private func presentMediaUploadQualitySettings() {
let parameters = MediaUploadQualitySettingsScreenCoordinatorParameters(userSettings: flowParameters.userSettings,
let parameters = MediaUploadQualitySettingsScreenCoordinatorParameters(userSettings: userSettings,
analytics: flowParameters.analytics)
let coordinator = MediaUploadQualitySettingsScreenCoordinator(parameters: parameters)
navigationStackCoordinator.push(coordinator)
}
private func presentLocationSharingSettings() {
let parameters = LocationSharingSettingsScreenCoordinatorParameters(userSettings: flowParameters.userSettings)
let parameters = LocationSharingSettingsScreenCoordinatorParameters(userSettings: userSettings)
let coordinator = LocationSharingSettingsScreenCoordinator(parameters: parameters)
navigationStackCoordinator.push(coordinator)
}
private func presentDeveloperOptions() {
let coordinator = DeveloperOptionsScreenCoordinator(appSettings: flowParameters.userSettings.app,
let coordinator = DeveloperOptionsScreenCoordinator(appSettings: userSettings.app,
appHooks: flowParameters.appHooks,
clientProxy: flowParameters.userSession.clientProxy)
@@ -359,7 +361,7 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
accountSettingsPresenter = OAuthAccountSettingsPresenter(accountURL: url,
presentationAnchor: flowParameters.windowManager.mainWindow,
appMediator: flowParameters.appMediator,
userSettings: flowParameters.userSettings,
userSettings: userSettings,
appHooks: flowParameters.appHooks,
continuation: continuation)
accountSettingsPresenter?.start()
@@ -399,8 +399,7 @@ class SpaceFlowCoordinator: FlowCoordinatorProtocol {
let parameters = JoinRoomScreenCoordinatorParameters(source: .space(spaceServiceRoom),
userSession: flowParameters.userSession,
userIndicatorController: flowParameters.userIndicatorController,
userSettings: flowParameters.userSettings)
userIndicatorController: flowParameters.userIndicatorController)
let coordinator = JoinRoomScreenCoordinator(parameters: parameters)
coordinator.actionsPublisher
.sink { [weak self] action in
@@ -211,7 +211,6 @@ final class SpaceSettingsFlowCoordinator: FlowCoordinatorProtocol {
private func presentSpaceSettings(animated: Bool) {
let coordinator = RoomDetailsScreenCoordinator(parameters: .init(roomProxy: roomProxy,
userSession: flowParameters.userSession,
userSettings: flowParameters.userSettings,
appHooks: flowParameters.appHooks,
analyticsService: flowParameters.analytics,
userIndicatorController: flowParameters.userIndicatorController,
@@ -252,7 +251,7 @@ final class SpaceSettingsFlowCoordinator: FlowCoordinatorProtocol {
let stackCoordinator = NavigationStackCoordinator()
let parameters = RoomDetailsEditScreenCoordinatorParameters(roomProxy: roomProxy,
userSession: flowParameters.userSession,
mediaUploadingPreprocessor: MediaUploadingPreprocessor(userSettings: flowParameters.userSettings),
mediaUploadingPreprocessor: MediaUploadingPreprocessor(userSettings: flowParameters.userSession.userSettings),
navigationStackCoordinator: stackCoordinator,
userIndicatorController: flowParameters.userIndicatorController,
orientationManager: flowParameters.appMediator.windowManager)
@@ -276,9 +275,8 @@ final class SpaceSettingsFlowCoordinator: FlowCoordinatorProtocol {
private func presentSecurityAndPrivacyScreen() {
let coordinator = SecurityAndPrivacyScreenCoordinator(parameters: .init(roomProxy: roomProxy,
clientProxy: flowParameters.userSession.clientProxy,
userSession: flowParameters.userSession,
userIndicatorController: flowParameters.userIndicatorController,
appSetting: flowParameters.userSettings,
appHooks: flowParameters.appHooks))
coordinator.actionsPublisher.sink { [weak self] action in
@@ -214,7 +214,6 @@ class StartChatFlowCoordinator: FlowCoordinatorProtocol {
shouldShowCancelButton: isRoot,
userSession: flowParameters.userSession,
userIndicatorController: flowParameters.userIndicatorController,
userSettings: flowParameters.userSettings,
analytics: flowParameters.analytics,
appHooks: flowParameters.appHooks)
let coordinator = CreateRoomScreenCoordinator(parameters: createParameters)
@@ -82,29 +82,27 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol {
self.appLockService = appLockService
self.flowParameters = flowParameters
presenceService = PresenceService(clientProxy: flowParameters.userSession.clientProxy,
userSettings: flowParameters.userSettings)
userSettings: flowParameters.userSession.userSettings)
navigationTabCoordinator = NavigationTabCoordinator()
navigationRootCoordinator.setRootCoordinator(navigationTabCoordinator)
let chatsSplitCoordinator = NavigationSplitCoordinator(placeholderCoordinator: PlaceholderScreenCoordinator(hideBrandChrome: flowParameters.userSettings.app.hideBrandChrome))
let chatsSplitCoordinator = NavigationSplitCoordinator(placeholderCoordinator: PlaceholderScreenCoordinator(hideBrandChrome: flowParameters.userSession.userSettings.app.hideBrandChrome))
chatsTabFlowCoordinator = ChatsTabFlowCoordinator(navigationSplitCoordinator: chatsSplitCoordinator,
flowParameters: flowParameters)
chatsTabDetails = .init(tag: HomeTab.chats, title: L10n.screenHomeTabChats, icon: \.chat, selectedIcon: \.chatSolid)
chatsTabDetails.navigationSplitCoordinator = chatsSplitCoordinator
let spacesSplitCoordinator = NavigationSplitCoordinator(placeholderCoordinator: PlaceholderScreenCoordinator(hideBrandChrome: flowParameters.userSettings.app.hideBrandChrome))
let spacesSplitCoordinator = NavigationSplitCoordinator(placeholderCoordinator: PlaceholderScreenCoordinator(hideBrandChrome: flowParameters.userSession.userSettings.app.hideBrandChrome))
spacesTabFlowCoordinator = SpacesTabFlowCoordinator(navigationSplitCoordinator: spacesSplitCoordinator,
flowParameters: flowParameters)
spacesTabDetails = .init(tag: HomeTab.spaces, title: L10n.screenHomeTabSpaces, icon: \.space, selectedIcon: \.spaceSolid)
spacesTabDetails.navigationSplitCoordinator = spacesSplitCoordinator
if flowParameters.userSettings.app.globalSearchEnabled, #available(iOS 26.0, *) {
if flowParameters.userSession.userSettings.app.globalSearchEnabled, #available(iOS 26.0, *) {
let searchCoordinator = SearchScreenCoordinator(parameters: .init(roomSummaryProvider: flowParameters.userSession.clientProxy.alternateRoomSummaryProvider,
clientProxy: flowParameters.userSession.clientProxy,
mediaProvider: flowParameters.userSession.mediaProvider,
userIndicatorController: flowParameters.userIndicatorController,
userSettings: flowParameters.userSettings))
userSession: flowParameters.userSession,
userIndicatorController: flowParameters.userIndicatorController))
let searchStackCoordinator = NavigationStackCoordinator()
searchStackCoordinator.setRootCoordinator(searchCoordinator)
@@ -426,8 +424,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol {
let parameters = SessionVerificationScreenCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationController,
flow: flow,
userSettings: flowParameters.userSettings,
mediaProvider: userSession.mediaProvider)
userSession: userSession)
let coordinator = SessionVerificationScreenCoordinator(parameters: parameters)
@@ -464,8 +461,8 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol {
presentCallScreen(configuration: .init(roomProxy: roomProxy,
clientProxy: userSession.clientProxy,
clientID: InfoPlistReader.main.bundleIdentifier,
elementCallBaseURL: flowParameters.userSettings.app.elementCallBaseURL,
elementCallBaseURLOverride: flowParameters.userSettings.app.elementCallBaseURLOverride,
elementCallBaseURL: userSession.userSettings.app.elementCallBaseURL,
elementCallBaseURLOverride: userSession.userSettings.app.elementCallBaseURLOverride,
voiceOnly: voiceOnly,
colorScheme: colorScheme))
}
@@ -487,7 +484,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol {
let callScreenCoordinator = CallScreenCoordinator(parameters: .init(elementCallService: flowParameters.elementCallService,
configuration: configuration,
allowPictureInPicture: true,
userSettings: flowParameters.userSettings,
userSettings: userSession.userSettings,
analytics: flowParameters.analytics))
callScreenCoordinator.actions