From b9cd938756025479651a5323cc20356a6c992342 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Mon, 24 Apr 2023 18:48:07 +0300 Subject: [PATCH] Rename screens (#826) * Rename: AnalyticsPrompt -> AnalyticsPromptScreen * Rename: AnalyticsSettings -> AnalyticsSettingsScreen * Rename: Settings -> SettingsScreen * Rename: SessionVerification -> SessionVerificationScreen * Rename: BugReport -> BugReportScreen * Rename: FilePreview -> FilePreviewScreen * Rename: AnalyticsPrompt -> AnalyticsPromptScreen * Rename: Invites -> InvitesScreen * Rename: InviteUsers -> InviteUsersScreen * Rename: MediaPicker -> MediaPickerScreen * Delete unused UIActivityViewControllerWrapper * Rename: ReportContent -> ReportContentScreen * Rename: RoomDetails -> RoomDetailsScreen * Rename: RoomMemberDetails -> RoomMemberDetailsScreen * Rename: RoomMemberList -> RoomMemberListScreen * Rename: Cleanup * Renaming missed items * Low effort attempt at fixing the flakey unit tests --- .../SwiftUI/Views}/UserProfileCell.swift | 0 .../AnalyticsPromptScreenCoordinator.swift} | 8 +- .../AnalyticsPromptScreenModels.swift} | 10 +-- .../AnalyticsPromptScreenViewModel.swift} | 12 +-- ...lyticsPromptScreenViewModelProtocol.swift} | 6 +- .../View/AnalyticsPromptScreen.swift} | 16 ++-- .../AnalyticsPromptScreenCheckmarkItem.swift} | 14 ++-- .../AnalyticsSettingsScreenCoordinator.swift | 0 .../AnalyticsSettingsScreenModels.swift | 0 .../AnalyticsSettingsScreenViewModel.swift | 0 ...yticsSettingsScreenViewModelProtocol.swift | 0 .../View/AnalyticsSettingsScreen.swift | 0 .../AuthenticationCoordinator.swift | 2 +- .../BugReportScreenCoordinator.swift} | 26 +++---- .../BugReportScreenModels.swift} | 10 +-- .../BugReportScreenViewModel.swift} | 22 +++--- .../BugReportScreenViewModelProtocol.swift} | 6 +- .../View/BugReportScreen.swift | 32 ++++---- .../View/EmojiPickerScreen.swift | 2 +- ...wift => EmojiPickerScreenHeaderView.swift} | 6 +- .../FilePreviewScreenCoordinator.swift} | 16 ++-- .../FilePreviewScreenModels.swift} | 6 +- .../FilePreviewScreenViewModel.swift} | 10 +-- .../FilePreviewScreenViewModelProtocol.swift} | 6 +- .../View/FilePreviewScreen.swift | 8 +- .../InviteUsersScreenCoordinator.swift} | 18 ++--- .../InviteUsersScreenModels.swift} | 14 ++-- .../InviteUsersScreenViewModel.swift} | 12 +-- .../InviteUsersScreenViewModelProtocol.swift} | 6 +- .../View/InviteUsersScreen.swift | 6 +- .../View/InviteUsersScreenSelectedItem.swift} | 6 +- .../InvitesScreenCoordinator.swift} | 18 ++--- .../InvitesScreenModels.swift} | 18 ++--- .../InvitesScreenViewModel.swift} | 22 +++--- .../InvitesScreenViewModelProtocol.swift} | 6 +- .../View/InvitesScreen.swift | 16 ++-- .../View/InvitesScreenCell.swift | 8 +- .../CameraPicker.swift | 0 .../DocumentPicker.swift | 0 .../MediaPickerScreenCoordinator.swift} | 12 +-- .../PhotoLibraryPicker.swift | 0 .../UIActivityViewControllerWrapper.swift | 28 ------- .../ReportContentScreenCoordinator.swift} | 16 ++-- .../ReportContentScreenModels.swift} | 10 +-- .../ReportContentScreenViewModel.swift} | 12 +-- ...eportContentScreenViewModelProtocol.swift} | 6 +- .../View/ReportContentScreen.swift | 10 +-- .../RoomDetailsScreenCoordinator.swift} | 28 +++---- .../RoomDetailsScreenModels.swift} | 16 ++-- .../RoomDetailsScreenViewModel.swift} | 8 +- .../RoomDetailsScreenViewModelProtocol.swift} | 6 +- .../View/RoomDetailsScreen.swift | 22 +++--- .../RoomMemberDetailsScreenCoordinator.swift} | 16 ++-- .../RoomMemberDetailsScreenModels.swift} | 12 +-- .../RoomMemberDetailsScreenViewModel.swift} | 16 ++-- ...emberDetailsScreenViewModelProtocol.swift} | 6 +- .../View/RoomMemberDetailsScreen.swift | 16 ++-- .../RoomMembersListScreenCoordinator.swift} | 24 +++--- .../RoomMembersListScreenModels.swift} | 12 +-- .../RoomMembersListScreenViewModel.swift} | 8 +- ...mMembersListScreenViewModelProtocol.swift} | 6 +- .../View/RoomMembersListScreen.swift | 10 +-- .../RoomMembersListScreenMemberCell.swift} | 10 +-- .../RoomScreen/RoomScreenCoordinator.swift | 28 +++---- ...essionVerificationScreenCoordinator.swift} | 12 +-- .../SessionVerificationScreenModels.swift} | 8 +- ...ssionVerificationScreenStateMachine.swift} | 2 +- .../SessionVerificationScreenViewModel.swift} | 14 ++-- ...VerificationScreenViewModelProtocol.swift} | 4 +- .../View/SessionVerificationScreen.swift | 8 +- .../SettingsScreenCoordinator.swift | 18 ++--- .../SettingsScreenModels.swift | 0 .../SettingsScreenViewModel.swift | 0 .../SettingsScreenViewModelProtocol.swift | 0 .../View/SettingsScreen.swift | 0 .../StartChat/StartChatCoordinator.swift | 4 +- .../UserSessionFlowCoordinator.swift | 24 +++--- .../Users/UserDiscoverySection.swift} | 0 .../UITests/UITestsAppCoordinator.swift | 74 +++++++++---------- .../Sources/BugReportViewModelTests.swift | 48 ++++++------ .../Sources/FilePreviewViewModelTests.swift | 6 +- .../Sources/InviteUsersViewModelTests.swift | 6 +- UnitTests/Sources/InvitesViewModelTests.swift | 8 +- .../Sources/ReportContentViewModelTests.swift | 12 +-- .../Sources/RoomDetailsViewModelTests.swift | 24 +++--- .../RoomMemberDetailsViewModelTests.swift | 26 +++---- ...SessionVerificationStateMachineTests.swift | 4 +- .../SessionVerificationViewModelTests.swift | 4 +- 88 files changed, 492 insertions(+), 520 deletions(-) rename ElementX/Sources/{Screens/UserDiscoverySection => Other/SwiftUI/Views}/UserProfileCell.swift (100%) rename ElementX/Sources/Screens/{AnalyticsPrompt/AnalyticsPromptCoordinator.swift => AnalyticsPromptScreen/AnalyticsPromptScreenCoordinator.swift} (83%) rename ElementX/Sources/Screens/{AnalyticsPrompt/AnalyticsPromptModels.swift => AnalyticsPromptScreen/AnalyticsPromptScreenModels.swift} (89%) rename ElementX/Sources/Screens/{AnalyticsPrompt/AnalyticsPromptViewModel.swift => AnalyticsPromptScreen/AnalyticsPromptScreenViewModel.swift} (59%) rename ElementX/Sources/Screens/{AnalyticsPrompt/AnalyticsPromptViewModelProtocol.swift => AnalyticsPromptScreen/AnalyticsPromptScreenViewModelProtocol.swift} (74%) rename ElementX/Sources/Screens/{AnalyticsPrompt/View/AnalyticsPrompt.swift => AnalyticsPromptScreen/View/AnalyticsPromptScreen.swift} (87%) rename ElementX/Sources/Screens/{AnalyticsPrompt/View/AnalyticsPromptCheckmarkItem.swift => AnalyticsPromptScreen/View/AnalyticsPromptScreenCheckmarkItem.swift} (62%) rename ElementX/Sources/Screens/{AnalyticsSettings => AnalyticsSettingsScreen}/AnalyticsSettingsScreenCoordinator.swift (100%) rename ElementX/Sources/Screens/{AnalyticsSettings => AnalyticsSettingsScreen}/AnalyticsSettingsScreenModels.swift (100%) rename ElementX/Sources/Screens/{AnalyticsSettings => AnalyticsSettingsScreen}/AnalyticsSettingsScreenViewModel.swift (100%) rename ElementX/Sources/Screens/{AnalyticsSettings => AnalyticsSettingsScreen}/AnalyticsSettingsScreenViewModelProtocol.swift (100%) rename ElementX/Sources/Screens/{AnalyticsSettings => AnalyticsSettingsScreen}/View/AnalyticsSettingsScreen.swift (100%) rename ElementX/Sources/Screens/{BugReport/BugReportCoordinator.swift => BugReportScreen/BugReportScreenCoordinator.swift} (77%) rename ElementX/Sources/Screens/{BugReport/BugReportModels.swift => BugReportScreen/BugReportScreenModels.swift} (82%) rename ElementX/Sources/Screens/{BugReport/BugReportViewModel.swift => BugReportScreen/BugReportScreenViewModel.swift} (77%) rename ElementX/Sources/Screens/{Invites/InvitesViewModelProtocol.swift => BugReportScreen/BugReportScreenViewModelProtocol.swift} (77%) rename ElementX/Sources/Screens/{BugReport => BugReportScreen}/View/BugReportScreen.swift (78%) rename ElementX/Sources/Screens/EmojiPickerScreen/View/{EmojiPickerHeaderView.swift => EmojiPickerScreenHeaderView.swift} (86%) rename ElementX/Sources/Screens/{FilePreview/FilePreviewCoordinator.swift => FilePreviewScreen/FilePreviewScreenCoordinator.swift} (69%) rename ElementX/Sources/Screens/{FilePreview/FilePreviewModels.swift => FilePreviewScreen/FilePreviewScreenModels.swift} (85%) rename ElementX/Sources/Screens/{FilePreview/FilePreviewViewModel.swift => FilePreviewScreen/FilePreviewScreenViewModel.swift} (63%) rename ElementX/Sources/Screens/{RoomMemberDetails/RoomMemberDetailsViewModelProtocol.swift => FilePreviewScreen/FilePreviewScreenViewModelProtocol.swift} (78%) rename ElementX/Sources/Screens/{FilePreview => FilePreviewScreen}/View/FilePreviewScreen.swift (89%) rename ElementX/Sources/Screens/{InviteUsers/InviteUsersCoordinator.swift => InviteUsersScreen/InviteUsersScreenCoordinator.swift} (66%) rename ElementX/Sources/Screens/{InviteUsers/InviteUsersModels.swift => InviteUsersScreen/InviteUsersScreenModels.swift} (80%) rename ElementX/Sources/Screens/{InviteUsers/InviteUsersViewModel.swift => InviteUsersScreen/InviteUsersScreenViewModel.swift} (85%) rename ElementX/Sources/Screens/{InviteUsers/InviteUsersViewModelProtocol.swift => InviteUsersScreen/InviteUsersScreenViewModelProtocol.swift} (76%) rename ElementX/Sources/Screens/{InviteUsers => InviteUsersScreen}/View/InviteUsersScreen.swift (94%) rename ElementX/Sources/Screens/{InviteUsers/View/InviteUsersSelectedItem.swift => InviteUsersScreen/View/InviteUsersScreenSelectedItem.swift} (88%) rename ElementX/Sources/Screens/{Invites/InvitesCoordinator.swift => InvitesScreen/InvitesScreenCoordinator.swift} (70%) rename ElementX/Sources/Screens/{Invites/InvitesModels.swift => InvitesScreen/InvitesScreenModels.swift} (69%) rename ElementX/Sources/Screens/{Invites/InvitesViewModel.swift => InvitesScreen/InvitesScreenViewModel.swift} (86%) rename ElementX/Sources/Screens/{BugReport/BugReportViewModelProtocol.swift => InvitesScreen/InvitesScreenViewModelProtocol.swift} (77%) rename ElementX/Sources/Screens/{Invites => InvitesScreen}/View/InvitesScreen.swift (84%) rename ElementX/Sources/Screens/{Invites => InvitesScreen}/View/InvitesScreenCell.swift (97%) rename ElementX/Sources/Screens/{MediaPicker => MediaPickerScreen}/CameraPicker.swift (100%) rename ElementX/Sources/Screens/{MediaPicker => MediaPickerScreen}/DocumentPicker.swift (100%) rename ElementX/Sources/Screens/{MediaPicker/MediaPickerCoordinator.swift => MediaPickerScreen/MediaPickerScreenCoordinator.swift} (87%) rename ElementX/Sources/Screens/{MediaPicker => MediaPickerScreen}/PhotoLibraryPicker.swift (100%) delete mode 100644 ElementX/Sources/Screens/Other/UIActivityViewControllerWrapper.swift rename ElementX/Sources/Screens/{ReportContent/ReportContentCoordinator.swift => ReportContentScreen/ReportContentScreenCoordinator.swift} (81%) rename ElementX/Sources/Screens/{ReportContent/ReportContentModels.swift => ReportContentScreen/ReportContentScreenModels.swift} (77%) rename ElementX/Sources/Screens/{ReportContent/ReportContentViewModel.swift => ReportContentScreen/ReportContentScreenViewModel.swift} (78%) rename ElementX/Sources/Screens/{ReportContent/ReportContentViewModelProtocol.swift => ReportContentScreen/ReportContentScreenViewModelProtocol.swift} (76%) rename ElementX/Sources/Screens/{ReportContent => ReportContentScreen}/View/ReportContentScreen.swift (87%) rename ElementX/Sources/Screens/{RoomDetails/RoomDetailsCoordinator.swift => RoomDetailsScreen/RoomDetailsScreenCoordinator.swift} (63%) rename ElementX/Sources/Screens/{RoomDetails/RoomDetailsModels.swift => RoomDetailsScreen/RoomDetailsScreenModels.swift} (89%) rename ElementX/Sources/Screens/{RoomDetails/RoomDetailsViewModel.swift => RoomDetailsScreen/RoomDetailsScreenViewModel.swift} (93%) rename ElementX/Sources/Screens/{RoomMembers/RoomMembersListViewModelProtocol.swift => RoomDetailsScreen/RoomDetailsScreenViewModelProtocol.swift} (77%) rename ElementX/Sources/Screens/{RoomDetails => RoomDetailsScreen}/View/RoomDetailsScreen.swift (93%) rename ElementX/Sources/Screens/{RoomMemberDetails/RoomMemberDetailsCoordinator.swift => RoomMemberDetailsScreen/RoomMemberDetailsScreenCoordinator.swift} (59%) rename ElementX/Sources/Screens/{RoomMemberDetails/RoomMemberDetailsModels.swift => RoomMemberDetailsScreen/RoomMemberDetailsScreenModels.swift} (86%) rename ElementX/Sources/Screens/{RoomMemberDetails/RoomMemberDetailsViewModel.swift => RoomMemberDetailsScreen/RoomMemberDetailsScreenViewModel.swift} (77%) rename ElementX/Sources/Screens/{RoomDetails/RoomDetailsViewModelProtocol.swift => RoomMemberDetailsScreen/RoomMemberDetailsScreenViewModelProtocol.swift} (75%) rename ElementX/Sources/Screens/{RoomMemberDetails => RoomMemberDetailsScreen}/View/RoomMemberDetailsScreen.swift (86%) rename ElementX/Sources/Screens/{RoomMembers/RoomMembersListCoordinator.swift => RoomMemberListScreen/RoomMembersListScreenCoordinator.swift} (63%) rename ElementX/Sources/Screens/{RoomMembers/RoomMembersListModels.swift => RoomMemberListScreen/RoomMembersListScreenModels.swift} (80%) rename ElementX/Sources/Screens/{RoomMembers/RoomMembersListViewModel.swift => RoomMemberListScreen/RoomMembersListScreenViewModel.swift} (78%) rename ElementX/Sources/Screens/{FilePreview/FilePreviewViewModelProtocol.swift => RoomMemberListScreen/RoomMembersListScreenViewModelProtocol.swift} (75%) rename ElementX/Sources/Screens/{RoomMembers => RoomMemberListScreen}/View/RoomMembersListScreen.swift (84%) rename ElementX/Sources/Screens/{RoomMembers/View/RoomMembersListMemberCell.swift => RoomMemberListScreen/View/RoomMembersListScreenMemberCell.swift} (83%) rename ElementX/Sources/Screens/{SessionVerification/SessionVerificationCoordinator.swift => SessionVerificationScreen/SessionVerificationScreenCoordinator.swift} (71%) rename ElementX/Sources/Screens/{SessionVerification/SessionVerificationModels.swift => SessionVerificationScreen/SessionVerificationScreenModels.swift} (92%) rename ElementX/Sources/Screens/{SessionVerification/SessionVerificationStateMachine.swift => SessionVerificationScreen/SessionVerificationScreenStateMachine.swift} (99%) rename ElementX/Sources/Screens/{SessionVerification/SessionVerificationViewModel.swift => SessionVerificationScreen/SessionVerificationScreenViewModel.swift} (91%) rename ElementX/Sources/Screens/{SessionVerification/SessionVerificationViewModelProtocol.swift => SessionVerificationScreen/SessionVerificationScreenViewModelProtocol.swift} (83%) rename ElementX/Sources/Screens/{SessionVerification => SessionVerificationScreen}/View/SessionVerificationScreen.swift (95%) rename ElementX/Sources/Screens/{Settings => SettingsScreen}/SettingsScreenCoordinator.swift (80%) rename ElementX/Sources/Screens/{Settings => SettingsScreen}/SettingsScreenModels.swift (100%) rename ElementX/Sources/Screens/{Settings => SettingsScreen}/SettingsScreenViewModel.swift (100%) rename ElementX/Sources/Screens/{Settings => SettingsScreen}/SettingsScreenViewModelProtocol.swift (100%) rename ElementX/Sources/Screens/{Settings => SettingsScreen}/View/SettingsScreen.swift (100%) rename ElementX/Sources/{Screens/UserDiscoverySection/SearchUsersSection.swift => Services/Users/UserDiscoverySection.swift} (100%) diff --git a/ElementX/Sources/Screens/UserDiscoverySection/UserProfileCell.swift b/ElementX/Sources/Other/SwiftUI/Views/UserProfileCell.swift similarity index 100% rename from ElementX/Sources/Screens/UserDiscoverySection/UserProfileCell.swift rename to ElementX/Sources/Other/SwiftUI/Views/UserProfileCell.swift diff --git a/ElementX/Sources/Screens/AnalyticsPrompt/AnalyticsPromptCoordinator.swift b/ElementX/Sources/Screens/AnalyticsPromptScreen/AnalyticsPromptScreenCoordinator.swift similarity index 83% rename from ElementX/Sources/Screens/AnalyticsPrompt/AnalyticsPromptCoordinator.swift rename to ElementX/Sources/Screens/AnalyticsPromptScreen/AnalyticsPromptScreenCoordinator.swift index b728a47a8..f53243759 100644 --- a/ElementX/Sources/Screens/AnalyticsPrompt/AnalyticsPromptCoordinator.swift +++ b/ElementX/Sources/Screens/AnalyticsPromptScreen/AnalyticsPromptScreenCoordinator.swift @@ -16,13 +16,13 @@ import SwiftUI -final class AnalyticsPromptCoordinator: CoordinatorProtocol { - private var viewModel: AnalyticsPromptViewModel +final class AnalyticsPromptScreenCoordinator: CoordinatorProtocol { + private var viewModel: AnalyticsPromptScreenViewModel var callback: (@MainActor () -> Void)? init() { - viewModel = AnalyticsPromptViewModel() + viewModel = AnalyticsPromptScreenViewModel() } // MARK: - Public @@ -45,6 +45,6 @@ final class AnalyticsPromptCoordinator: CoordinatorProtocol { } func toPresentable() -> AnyView { - AnyView(AnalyticsPrompt(context: viewModel.context)) + AnyView(AnalyticsPromptScreen(context: viewModel.context)) } } diff --git a/ElementX/Sources/Screens/AnalyticsPrompt/AnalyticsPromptModels.swift b/ElementX/Sources/Screens/AnalyticsPromptScreen/AnalyticsPromptScreenModels.swift similarity index 89% rename from ElementX/Sources/Screens/AnalyticsPrompt/AnalyticsPromptModels.swift rename to ElementX/Sources/Screens/AnalyticsPromptScreen/AnalyticsPromptScreenModels.swift index cd709a9d1..2987e00e0 100644 --- a/ElementX/Sources/Screens/AnalyticsPrompt/AnalyticsPromptModels.swift +++ b/ElementX/Sources/Screens/AnalyticsPromptScreen/AnalyticsPromptScreenModels.swift @@ -16,27 +16,27 @@ import Foundation -enum AnalyticsPromptViewAction { +enum AnalyticsPromptScreenViewAction { /// Enable analytics. case enable /// Disable analytics. case disable } -enum AnalyticsPromptViewModelAction { +enum AnalyticsPromptScreenViewModelAction { /// Enable analytics. case enable /// Disable analytics. case disable } -struct AnalyticsPromptViewState: BindableState { +struct AnalyticsPromptScreenViewState: BindableState { /// Attributed strings created from localized HTML. - let strings: AnalyticsPromptStrings + let strings: AnalyticsPromptScreenStrings } /// A collection of strings for the UI that need to be parsed from HTML -struct AnalyticsPromptStrings { +struct AnalyticsPromptScreenStrings { let optInContent: AttributedString let point1 = AttributedStringBuilder().fromHTML(L10n.screenAnalyticsPromptDataUsage) ?? AttributedString(L10n.screenAnalyticsPromptDataUsage) let point2 = AttributedStringBuilder().fromHTML(L10n.screenAnalyticsPromptThirdPartySharing) ?? AttributedString(L10n.screenAnalyticsPromptThirdPartySharing) diff --git a/ElementX/Sources/Screens/AnalyticsPrompt/AnalyticsPromptViewModel.swift b/ElementX/Sources/Screens/AnalyticsPromptScreen/AnalyticsPromptScreenViewModel.swift similarity index 59% rename from ElementX/Sources/Screens/AnalyticsPrompt/AnalyticsPromptViewModel.swift rename to ElementX/Sources/Screens/AnalyticsPromptScreen/AnalyticsPromptScreenViewModel.swift index 4267de849..1c15f4f9e 100644 --- a/ElementX/Sources/Screens/AnalyticsPrompt/AnalyticsPromptViewModel.swift +++ b/ElementX/Sources/Screens/AnalyticsPromptScreen/AnalyticsPromptScreenViewModel.swift @@ -17,20 +17,20 @@ import Combine import SwiftUI -typealias AnalyticsPromptViewModelType = StateStoreViewModel +typealias AnalyticsPromptScreenViewModelType = StateStoreViewModel -class AnalyticsPromptViewModel: AnalyticsPromptViewModelType, AnalyticsPromptViewModelProtocol { - var callback: (@MainActor (AnalyticsPromptViewModelAction) -> Void)? +class AnalyticsPromptScreenViewModel: AnalyticsPromptScreenViewModelType, AnalyticsPromptScreenViewModelProtocol { + var callback: (@MainActor (AnalyticsPromptScreenViewModelAction) -> Void)? /// Initialize a view model with the specified prompt type and app display name. init() { - let promptStrings = AnalyticsPromptStrings(termsURL: ServiceLocator.shared.settings.analyticsConfiguration.termsURL) - super.init(initialViewState: AnalyticsPromptViewState(strings: promptStrings)) + let promptStrings = AnalyticsPromptScreenStrings(termsURL: ServiceLocator.shared.settings.analyticsConfiguration.termsURL) + super.init(initialViewState: AnalyticsPromptScreenViewState(strings: promptStrings)) } // MARK: - Public - override func process(viewAction: AnalyticsPromptViewAction) { + override func process(viewAction: AnalyticsPromptScreenViewAction) { switch viewAction { case .enable: callback?(.enable) diff --git a/ElementX/Sources/Screens/AnalyticsPrompt/AnalyticsPromptViewModelProtocol.swift b/ElementX/Sources/Screens/AnalyticsPromptScreen/AnalyticsPromptScreenViewModelProtocol.swift similarity index 74% rename from ElementX/Sources/Screens/AnalyticsPrompt/AnalyticsPromptViewModelProtocol.swift rename to ElementX/Sources/Screens/AnalyticsPromptScreen/AnalyticsPromptScreenViewModelProtocol.swift index 483b764c7..39c044ce9 100644 --- a/ElementX/Sources/Screens/AnalyticsPrompt/AnalyticsPromptViewModelProtocol.swift +++ b/ElementX/Sources/Screens/AnalyticsPromptScreen/AnalyticsPromptScreenViewModelProtocol.swift @@ -17,7 +17,7 @@ import Foundation @MainActor -protocol AnalyticsPromptViewModelProtocol { - var callback: (@MainActor (AnalyticsPromptViewModelAction) -> Void)? { get set } - var context: AnalyticsPromptViewModelType.Context { get } +protocol AnalyticsPromptScreenViewModelProtocol { + var callback: (@MainActor (AnalyticsPromptScreenViewModelAction) -> Void)? { get set } + var context: AnalyticsPromptScreenViewModelType.Context { get } } diff --git a/ElementX/Sources/Screens/AnalyticsPrompt/View/AnalyticsPrompt.swift b/ElementX/Sources/Screens/AnalyticsPromptScreen/View/AnalyticsPromptScreen.swift similarity index 87% rename from ElementX/Sources/Screens/AnalyticsPrompt/View/AnalyticsPrompt.swift rename to ElementX/Sources/Screens/AnalyticsPromptScreen/View/AnalyticsPromptScreen.swift index 40b879511..f939f8714 100644 --- a/ElementX/Sources/Screens/AnalyticsPrompt/View/AnalyticsPrompt.swift +++ b/ElementX/Sources/Screens/AnalyticsPromptScreen/View/AnalyticsPromptScreen.swift @@ -17,10 +17,10 @@ import SwiftUI /// A prompt that asks the user whether they would like to enable Analytics or not. -struct AnalyticsPrompt: View { +struct AnalyticsPromptScreen: View { private let horizontalPadding: CGFloat = 16 - @ObservedObject var context: AnalyticsPromptViewModel.Context + @ObservedObject var context: AnalyticsPromptScreenViewModel.Context var body: some View { GeometryReader { geometry in @@ -83,9 +83,9 @@ struct AnalyticsPrompt: View { /// The list of re-assurances about analytics. private var checkmarkList: some View { VStack(alignment: .leading, spacing: 8) { - AnalyticsPromptCheckmarkItem(attributedString: context.viewState.strings.point1) - AnalyticsPromptCheckmarkItem(attributedString: context.viewState.strings.point2) - AnalyticsPromptCheckmarkItem(string: context.viewState.strings.point3) + AnalyticsPromptScreenCheckmarkItem(attributedString: context.viewState.strings.point1) + AnalyticsPromptScreenCheckmarkItem(attributedString: context.viewState.strings.point2) + AnalyticsPromptScreenCheckmarkItem(string: context.viewState.strings.point3) } .fixedSize(horizontal: false, vertical: true) .font(.element.body) @@ -115,9 +115,9 @@ struct AnalyticsPrompt: View { // MARK: - Previews -struct AnalyticsPrompt_Previews: PreviewProvider { - static let viewModel = AnalyticsPromptViewModel() +struct AnalyticsPromptScreen_Previews: PreviewProvider { + static let viewModel = AnalyticsPromptScreenViewModel() static var previews: some View { - AnalyticsPrompt(context: viewModel.context) + AnalyticsPromptScreen(context: viewModel.context) } } diff --git a/ElementX/Sources/Screens/AnalyticsPrompt/View/AnalyticsPromptCheckmarkItem.swift b/ElementX/Sources/Screens/AnalyticsPromptScreen/View/AnalyticsPromptScreenCheckmarkItem.swift similarity index 62% rename from ElementX/Sources/Screens/AnalyticsPrompt/View/AnalyticsPromptCheckmarkItem.swift rename to ElementX/Sources/Screens/AnalyticsPromptScreen/View/AnalyticsPromptScreenCheckmarkItem.swift index e90f06458..47ed1d4d2 100644 --- a/ElementX/Sources/Screens/AnalyticsPrompt/View/AnalyticsPromptCheckmarkItem.swift +++ b/ElementX/Sources/Screens/AnalyticsPromptScreen/View/AnalyticsPromptScreenCheckmarkItem.swift @@ -16,7 +16,7 @@ import SwiftUI -struct AnalyticsPromptCheckmarkItem: View { +struct AnalyticsPromptScreenCheckmarkItem: View { private let attributedString: AttributedString init(attributedString: AttributedString) { @@ -37,15 +37,15 @@ struct AnalyticsPromptCheckmarkItem: View { // MARK: - Previews -struct AnalyticsPromptCheckmarkItem_Previews: PreviewProvider { - static let strings = AnalyticsPromptStrings(termsURL: ServiceLocator.shared.settings.analyticsConfiguration.termsURL) +struct AnalyticsPromptScreenCheckmarkItem_Previews: PreviewProvider { + static let strings = AnalyticsPromptScreenStrings(termsURL: ServiceLocator.shared.settings.analyticsConfiguration.termsURL) static var previews: some View { VStack(alignment: .leading) { - AnalyticsPromptCheckmarkItem(attributedString: strings.point1) - AnalyticsPromptCheckmarkItem(attributedString: strings.point2) - AnalyticsPromptCheckmarkItem(attributedString: AttributedString("This is a short string.")) - AnalyticsPromptCheckmarkItem(attributedString: AttributedString("This is a very long string that will be used to test the layout over multiple lines of text to ensure everything is correct.")) + AnalyticsPromptScreenCheckmarkItem(attributedString: strings.point1) + AnalyticsPromptScreenCheckmarkItem(attributedString: strings.point2) + AnalyticsPromptScreenCheckmarkItem(attributedString: AttributedString("This is a short string.")) + AnalyticsPromptScreenCheckmarkItem(attributedString: AttributedString("This is a very long string that will be used to test the layout over multiple lines of text to ensure everything is correct.")) } .padding() } diff --git a/ElementX/Sources/Screens/AnalyticsSettings/AnalyticsSettingsScreenCoordinator.swift b/ElementX/Sources/Screens/AnalyticsSettingsScreen/AnalyticsSettingsScreenCoordinator.swift similarity index 100% rename from ElementX/Sources/Screens/AnalyticsSettings/AnalyticsSettingsScreenCoordinator.swift rename to ElementX/Sources/Screens/AnalyticsSettingsScreen/AnalyticsSettingsScreenCoordinator.swift diff --git a/ElementX/Sources/Screens/AnalyticsSettings/AnalyticsSettingsScreenModels.swift b/ElementX/Sources/Screens/AnalyticsSettingsScreen/AnalyticsSettingsScreenModels.swift similarity index 100% rename from ElementX/Sources/Screens/AnalyticsSettings/AnalyticsSettingsScreenModels.swift rename to ElementX/Sources/Screens/AnalyticsSettingsScreen/AnalyticsSettingsScreenModels.swift diff --git a/ElementX/Sources/Screens/AnalyticsSettings/AnalyticsSettingsScreenViewModel.swift b/ElementX/Sources/Screens/AnalyticsSettingsScreen/AnalyticsSettingsScreenViewModel.swift similarity index 100% rename from ElementX/Sources/Screens/AnalyticsSettings/AnalyticsSettingsScreenViewModel.swift rename to ElementX/Sources/Screens/AnalyticsSettingsScreen/AnalyticsSettingsScreenViewModel.swift diff --git a/ElementX/Sources/Screens/AnalyticsSettings/AnalyticsSettingsScreenViewModelProtocol.swift b/ElementX/Sources/Screens/AnalyticsSettingsScreen/AnalyticsSettingsScreenViewModelProtocol.swift similarity index 100% rename from ElementX/Sources/Screens/AnalyticsSettings/AnalyticsSettingsScreenViewModelProtocol.swift rename to ElementX/Sources/Screens/AnalyticsSettingsScreen/AnalyticsSettingsScreenViewModelProtocol.swift diff --git a/ElementX/Sources/Screens/AnalyticsSettings/View/AnalyticsSettingsScreen.swift b/ElementX/Sources/Screens/AnalyticsSettingsScreen/View/AnalyticsSettingsScreen.swift similarity index 100% rename from ElementX/Sources/Screens/AnalyticsSettings/View/AnalyticsSettingsScreen.swift rename to ElementX/Sources/Screens/AnalyticsSettingsScreen/View/AnalyticsSettingsScreen.swift diff --git a/ElementX/Sources/Screens/Authentication/AuthenticationCoordinator.swift b/ElementX/Sources/Screens/Authentication/AuthenticationCoordinator.swift index 67386617c..3b6a877d5 100644 --- a/ElementX/Sources/Screens/Authentication/AuthenticationCoordinator.swift +++ b/ElementX/Sources/Screens/Authentication/AuthenticationCoordinator.swift @@ -120,7 +120,7 @@ class AuthenticationCoordinator: CoordinatorProtocol { completion() return } - let coordinator = AnalyticsPromptCoordinator() + let coordinator = AnalyticsPromptScreenCoordinator() coordinator.callback = { completion() } diff --git a/ElementX/Sources/Screens/BugReport/BugReportCoordinator.swift b/ElementX/Sources/Screens/BugReportScreen/BugReportScreenCoordinator.swift similarity index 77% rename from ElementX/Sources/Screens/BugReport/BugReportCoordinator.swift rename to ElementX/Sources/Screens/BugReportScreen/BugReportScreenCoordinator.swift index 416ab676d..cd3d50c6e 100644 --- a/ElementX/Sources/Screens/BugReport/BugReportCoordinator.swift +++ b/ElementX/Sources/Screens/BugReportScreen/BugReportScreenCoordinator.swift @@ -17,12 +17,12 @@ import Combine import SwiftUI -enum BugReportCoordinatorResult { +enum BugReportScreenCoordinatorResult { case cancel case finish } -struct BugReportCoordinatorParameters { +struct BugReportScreenCoordinatorParameters { let bugReportService: BugReportServiceProtocol let userID: String let deviceID: String? @@ -32,21 +32,21 @@ struct BugReportCoordinatorParameters { let isModallyPresented: Bool } -final class BugReportCoordinator: CoordinatorProtocol { - private let parameters: BugReportCoordinatorParameters - private var viewModel: BugReportViewModelProtocol +final class BugReportScreenCoordinator: CoordinatorProtocol { + private let parameters: BugReportScreenCoordinatorParameters + private var viewModel: BugReportScreenViewModelProtocol private var cancellables: Set = .init() - - var completion: ((BugReportCoordinatorResult) -> Void)? - init(parameters: BugReportCoordinatorParameters) { + var completion: ((BugReportScreenCoordinatorResult) -> Void)? + + init(parameters: BugReportScreenCoordinatorParameters) { self.parameters = parameters - viewModel = BugReportViewModel(bugReportService: parameters.bugReportService, - userID: parameters.userID, - deviceID: parameters.deviceID, - screenshot: parameters.screenshot, - isModallyPresented: parameters.isModallyPresented) + viewModel = BugReportScreenViewModel(bugReportService: parameters.bugReportService, + userID: parameters.userID, + deviceID: parameters.deviceID, + screenshot: parameters.screenshot, + isModallyPresented: parameters.isModallyPresented) } // MARK: - Public diff --git a/ElementX/Sources/Screens/BugReport/BugReportModels.swift b/ElementX/Sources/Screens/BugReportScreen/BugReportScreenModels.swift similarity index 82% rename from ElementX/Sources/Screens/BugReport/BugReportModels.swift rename to ElementX/Sources/Screens/BugReportScreen/BugReportScreenModels.swift index 2e01eee6f..0ad0b17ee 100644 --- a/ElementX/Sources/Screens/BugReport/BugReportModels.swift +++ b/ElementX/Sources/Screens/BugReportScreen/BugReportScreenModels.swift @@ -17,25 +17,25 @@ import Foundation import UIKit -enum BugReportViewModelAction { +enum BugReportScreenViewModelAction { case cancel case submitStarted(progressTracker: ProgressTracker) case submitFinished case submitFailed(error: Error) } -struct BugReportViewState: BindableState { +struct BugReportScreenViewState: BindableState { var screenshot: UIImage? - var bindings: BugReportViewStateBindings + var bindings: BugReportScreenViewStateBindings let isModallyPresented: Bool } -struct BugReportViewStateBindings { +struct BugReportScreenViewStateBindings { var reportText: String var sendingLogsEnabled: Bool } -enum BugReportViewAction { +enum BugReportScreenViewAction { case cancel case submit case removeScreenshot diff --git a/ElementX/Sources/Screens/BugReport/BugReportViewModel.swift b/ElementX/Sources/Screens/BugReportScreen/BugReportScreenViewModel.swift similarity index 77% rename from ElementX/Sources/Screens/BugReport/BugReportViewModel.swift rename to ElementX/Sources/Screens/BugReportScreen/BugReportScreenViewModel.swift index 1482f0095..9cf862d30 100644 --- a/ElementX/Sources/Screens/BugReport/BugReportViewModel.swift +++ b/ElementX/Sources/Screens/BugReportScreen/BugReportScreenViewModel.swift @@ -17,15 +17,15 @@ import Combine import SwiftUI -typealias BugReportViewModelType = StateStoreViewModel +typealias BugReportScreenViewModelType = StateStoreViewModel -class BugReportViewModel: BugReportViewModelType, BugReportViewModelProtocol { +class BugReportScreenViewModel: BugReportScreenViewModelType, BugReportScreenViewModelProtocol { private let bugReportService: BugReportServiceProtocol private let userID: String private let deviceID: String? - private let actionsSubject: PassthroughSubject = .init() + private let actionsSubject: PassthroughSubject = .init() - var actions: AnyPublisher { + var actions: AnyPublisher { actionsSubject.eraseToAnyPublisher() } @@ -38,15 +38,15 @@ class BugReportViewModel: BugReportViewModelType, BugReportViewModelProtocol { self.userID = userID self.deviceID = deviceID - let bindings = BugReportViewStateBindings(reportText: "", sendingLogsEnabled: true) - super.init(initialViewState: BugReportViewState(screenshot: screenshot, - bindings: bindings, - isModallyPresented: isModallyPresented)) + let bindings = BugReportScreenViewStateBindings(reportText: "", sendingLogsEnabled: true) + super.init(initialViewState: BugReportScreenViewState(screenshot: screenshot, + bindings: bindings, + isModallyPresented: isModallyPresented)) } - + // MARK: - Public - - override func process(viewAction: BugReportViewAction) { + + override func process(viewAction: BugReportScreenViewAction) { switch viewAction { case .cancel: actionsSubject.send(.cancel) diff --git a/ElementX/Sources/Screens/Invites/InvitesViewModelProtocol.swift b/ElementX/Sources/Screens/BugReportScreen/BugReportScreenViewModelProtocol.swift similarity index 77% rename from ElementX/Sources/Screens/Invites/InvitesViewModelProtocol.swift rename to ElementX/Sources/Screens/BugReportScreen/BugReportScreenViewModelProtocol.swift index 674a4f752..300306b04 100644 --- a/ElementX/Sources/Screens/Invites/InvitesViewModelProtocol.swift +++ b/ElementX/Sources/Screens/BugReportScreen/BugReportScreenViewModelProtocol.swift @@ -17,7 +17,7 @@ import Combine @MainActor -protocol InvitesViewModelProtocol { - var actions: AnyPublisher { get } - var context: InvitesViewModelType.Context { get } +protocol BugReportScreenViewModelProtocol { + var actions: AnyPublisher { get } + var context: BugReportScreenViewModelType.Context { get } } diff --git a/ElementX/Sources/Screens/BugReport/View/BugReportScreen.swift b/ElementX/Sources/Screens/BugReportScreen/View/BugReportScreen.swift similarity index 78% rename from ElementX/Sources/Screens/BugReport/View/BugReportScreen.swift rename to ElementX/Sources/Screens/BugReportScreen/View/BugReportScreen.swift index 65907006a..2a860b74e 100644 --- a/ElementX/Sources/Screens/BugReport/View/BugReportScreen.swift +++ b/ElementX/Sources/Screens/BugReportScreen/View/BugReportScreen.swift @@ -21,7 +21,7 @@ import SwiftUI struct BugReportScreen: View { @State private var selectedScreenshot: PhotosPickerItem? - @ObservedObject var context: BugReportViewModel.Context + @ObservedObject var context: BugReportScreenViewModel.Context var body: some View { Form { @@ -131,28 +131,28 @@ struct BugReportScreen: View { // MARK: - Previews struct BugReport_Previews: PreviewProvider { - static let viewModel = BugReportViewModel(bugReportService: BugReportServiceMock(), - userID: "@mock.client.com", - deviceID: nil, - screenshot: nil, - isModallyPresented: false) + static let viewModel = BugReportScreenViewModel(bugReportService: BugReportServiceMock(), + userID: "@mock.client.com", + deviceID: nil, + screenshot: nil, + isModallyPresented: false) static var previews: some View { NavigationStack { - BugReportScreen(context: BugReportViewModel(bugReportService: BugReportServiceMock(), - userID: "@mock.client.com", - deviceID: nil, - screenshot: nil, - isModallyPresented: false).context) + BugReportScreen(context: BugReportScreenViewModel(bugReportService: BugReportServiceMock(), + userID: "@mock.client.com", + deviceID: nil, + screenshot: nil, + isModallyPresented: false).context) .previewDisplayName("Without Screenshot") } NavigationStack { - BugReportScreen(context: BugReportViewModel(bugReportService: BugReportServiceMock(), - userID: "@mock.client.com", - deviceID: nil, - screenshot: Asset.Images.appLogo.image, - isModallyPresented: false).context) + BugReportScreen(context: BugReportScreenViewModel(bugReportService: BugReportServiceMock(), + userID: "@mock.client.com", + deviceID: nil, + screenshot: Asset.Images.appLogo.image, + isModallyPresented: false).context) .previewDisplayName("With Screenshot") } } diff --git a/ElementX/Sources/Screens/EmojiPickerScreen/View/EmojiPickerScreen.swift b/ElementX/Sources/Screens/EmojiPickerScreen/View/EmojiPickerScreen.swift index 9612a0781..815c800d3 100644 --- a/ElementX/Sources/Screens/EmojiPickerScreen/View/EmojiPickerScreen.swift +++ b/ElementX/Sources/Screens/EmojiPickerScreen/View/EmojiPickerScreen.swift @@ -25,7 +25,7 @@ struct EmojiPickerScreen: View { ScrollView { LazyVGrid(columns: [GridItem(.adaptive(minimum: minimumWidth))], spacing: 16) { ForEach(context.viewState.categories) { category in - Section(header: EmojiPickerHeaderView(title: category.name) + Section(header: EmojiPickerScreenHeaderView(title: category.name) .padding(.horizontal, 13) .padding(.top, 10)) { ForEach(category.emojis) { emoji in diff --git a/ElementX/Sources/Screens/EmojiPickerScreen/View/EmojiPickerHeaderView.swift b/ElementX/Sources/Screens/EmojiPickerScreen/View/EmojiPickerScreenHeaderView.swift similarity index 86% rename from ElementX/Sources/Screens/EmojiPickerScreen/View/EmojiPickerHeaderView.swift rename to ElementX/Sources/Screens/EmojiPickerScreen/View/EmojiPickerScreenHeaderView.swift index 60ab75718..03208065f 100644 --- a/ElementX/Sources/Screens/EmojiPickerScreen/View/EmojiPickerHeaderView.swift +++ b/ElementX/Sources/Screens/EmojiPickerScreen/View/EmojiPickerScreenHeaderView.swift @@ -16,7 +16,7 @@ import SwiftUI -struct EmojiPickerHeaderView: View { +struct EmojiPickerScreenHeaderView: View { let title: String var body: some View { @@ -29,10 +29,10 @@ struct EmojiPickerHeaderView: View { } } -struct EmojiPickerHeaderView_Previews: PreviewProvider { +struct EmojiPickerScreenHeaderView_Previews: PreviewProvider { static var previews: some View { Group { - EmojiPickerHeaderView(title: "") + EmojiPickerScreenHeaderView(title: "") } } } diff --git a/ElementX/Sources/Screens/FilePreview/FilePreviewCoordinator.swift b/ElementX/Sources/Screens/FilePreviewScreen/FilePreviewScreenCoordinator.swift similarity index 69% rename from ElementX/Sources/Screens/FilePreview/FilePreviewCoordinator.swift rename to ElementX/Sources/Screens/FilePreviewScreen/FilePreviewScreenCoordinator.swift index 16e5cd60c..07e4be9fe 100644 --- a/ElementX/Sources/Screens/FilePreview/FilePreviewCoordinator.swift +++ b/ElementX/Sources/Screens/FilePreviewScreen/FilePreviewScreenCoordinator.swift @@ -16,25 +16,25 @@ import SwiftUI -struct FilePreviewCoordinatorParameters { +struct FilePreviewScreenCoordinatorParameters { let mediaFile: MediaFileHandleProxy let title: String? } -enum FilePreviewCoordinatorAction { +enum FilePreviewScreenCoordinatorAction { case cancel } -final class FilePreviewCoordinator: CoordinatorProtocol { - private let parameters: FilePreviewCoordinatorParameters - private var viewModel: FilePreviewViewModelProtocol +final class FilePreviewScreenCoordinator: CoordinatorProtocol { + private let parameters: FilePreviewScreenCoordinatorParameters + private var viewModel: FilePreviewScreenViewModelProtocol - var callback: ((FilePreviewCoordinatorAction) -> Void)? + var callback: ((FilePreviewScreenCoordinatorAction) -> Void)? - init(parameters: FilePreviewCoordinatorParameters) { + init(parameters: FilePreviewScreenCoordinatorParameters) { self.parameters = parameters - viewModel = FilePreviewViewModel(mediaFile: parameters.mediaFile, title: parameters.title) + viewModel = FilePreviewScreenViewModel(mediaFile: parameters.mediaFile, title: parameters.title) } // MARK: - Public diff --git a/ElementX/Sources/Screens/FilePreview/FilePreviewModels.swift b/ElementX/Sources/Screens/FilePreviewScreen/FilePreviewScreenModels.swift similarity index 85% rename from ElementX/Sources/Screens/FilePreview/FilePreviewModels.swift rename to ElementX/Sources/Screens/FilePreviewScreen/FilePreviewScreenModels.swift index 70cc0f4f1..8401b4d91 100644 --- a/ElementX/Sources/Screens/FilePreview/FilePreviewModels.swift +++ b/ElementX/Sources/Screens/FilePreviewScreen/FilePreviewScreenModels.swift @@ -16,15 +16,15 @@ import Foundation -enum FilePreviewViewModelAction { +enum FilePreviewScreenViewModelAction { case cancel } -struct FilePreviewViewState: BindableState { +struct FilePreviewScreenViewState: BindableState { let mediaFile: MediaFileHandleProxy let title: String? } -enum FilePreviewViewAction { +enum FilePreviewScreenViewAction { case cancel } diff --git a/ElementX/Sources/Screens/FilePreview/FilePreviewViewModel.swift b/ElementX/Sources/Screens/FilePreviewScreen/FilePreviewScreenViewModel.swift similarity index 63% rename from ElementX/Sources/Screens/FilePreview/FilePreviewViewModel.swift rename to ElementX/Sources/Screens/FilePreviewScreen/FilePreviewScreenViewModel.swift index b4448d42d..530751dd2 100644 --- a/ElementX/Sources/Screens/FilePreview/FilePreviewViewModel.swift +++ b/ElementX/Sources/Screens/FilePreviewScreen/FilePreviewScreenViewModel.swift @@ -16,16 +16,16 @@ import SwiftUI -typealias FilePreviewViewModelType = StateStoreViewModel +typealias FilePreviewScreenViewModelType = StateStoreViewModel -class FilePreviewViewModel: FilePreviewViewModelType, FilePreviewViewModelProtocol { - var callback: ((FilePreviewViewModelAction) -> Void)? +class FilePreviewScreenViewModel: FilePreviewScreenViewModelType, FilePreviewScreenViewModelProtocol { + var callback: ((FilePreviewScreenViewModelAction) -> Void)? init(mediaFile: MediaFileHandleProxy, title: String? = nil) { - super.init(initialViewState: FilePreviewViewState(mediaFile: mediaFile, title: title)) + super.init(initialViewState: FilePreviewScreenViewState(mediaFile: mediaFile, title: title)) } - override func process(viewAction: FilePreviewViewAction) { + override func process(viewAction: FilePreviewScreenViewAction) { switch viewAction { case .cancel: callback?(.cancel) diff --git a/ElementX/Sources/Screens/RoomMemberDetails/RoomMemberDetailsViewModelProtocol.swift b/ElementX/Sources/Screens/FilePreviewScreen/FilePreviewScreenViewModelProtocol.swift similarity index 78% rename from ElementX/Sources/Screens/RoomMemberDetails/RoomMemberDetailsViewModelProtocol.swift rename to ElementX/Sources/Screens/FilePreviewScreen/FilePreviewScreenViewModelProtocol.swift index b7be98fdf..4e7b3c03f 100644 --- a/ElementX/Sources/Screens/RoomMemberDetails/RoomMemberDetailsViewModelProtocol.swift +++ b/ElementX/Sources/Screens/FilePreviewScreen/FilePreviewScreenViewModelProtocol.swift @@ -17,7 +17,7 @@ import Foundation @MainActor -protocol RoomMemberDetailsViewModelProtocol { - var callback: ((RoomMemberDetailsViewModelAction) -> Void)? { get set } - var context: RoomMemberDetailsViewModelType.Context { get } +protocol FilePreviewScreenViewModelProtocol { + var callback: ((FilePreviewScreenViewModelAction) -> Void)? { get set } + var context: FilePreviewScreenViewModelType.Context { get } } diff --git a/ElementX/Sources/Screens/FilePreview/View/FilePreviewScreen.swift b/ElementX/Sources/Screens/FilePreviewScreen/View/FilePreviewScreen.swift similarity index 89% rename from ElementX/Sources/Screens/FilePreview/View/FilePreviewScreen.swift rename to ElementX/Sources/Screens/FilePreviewScreen/View/FilePreviewScreen.swift index dca43107b..f583b1a79 100644 --- a/ElementX/Sources/Screens/FilePreview/View/FilePreviewScreen.swift +++ b/ElementX/Sources/Screens/FilePreviewScreen/View/FilePreviewScreen.swift @@ -19,7 +19,7 @@ import SwiftUI import UIKit struct FilePreviewScreen: View { - @ObservedObject var context: FilePreviewViewModel.Context + @ObservedObject var context: FilePreviewScreenViewModel.Context var body: some View { ZStack(alignment: .leading) { @@ -40,7 +40,7 @@ struct FilePreviewScreen: View { } private struct PreviewView: UIViewControllerRepresentable { - let context: FilePreviewViewModel.Context + let context: FilePreviewScreenViewModel.Context let fileURL: URL let title: String? @@ -92,8 +92,8 @@ private class PreviewItem: NSObject, QLPreviewItem { // MARK: - Previews -struct FilePreview_Previews: PreviewProvider { - static let viewModel = FilePreviewViewModel(mediaFile: .unmanaged(url: URL(staticString: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"))) +struct FilePreviewScreen_Previews: PreviewProvider { + static let viewModel = FilePreviewScreenViewModel(mediaFile: .unmanaged(url: URL(staticString: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"))) static var previews: some View { FilePreviewScreen(context: viewModel.context) diff --git a/ElementX/Sources/Screens/InviteUsers/InviteUsersCoordinator.swift b/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenCoordinator.swift similarity index 66% rename from ElementX/Sources/Screens/InviteUsers/InviteUsersCoordinator.swift rename to ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenCoordinator.swift index ef779506a..f64ee59d7 100644 --- a/ElementX/Sources/Screens/InviteUsers/InviteUsersCoordinator.swift +++ b/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenCoordinator.swift @@ -17,29 +17,29 @@ import Combine import SwiftUI -struct InviteUsersCoordinatorParameters { +struct InviteUsersScreenCoordinatorParameters { let userSession: UserSessionProtocol let userDiscoveryService: UserDiscoveryServiceProtocol } -enum InviteUsersCoordinatorAction { +enum InviteUsersScreenCoordinatorAction { case close } -final class InviteUsersCoordinator: CoordinatorProtocol { - private let parameters: InviteUsersCoordinatorParameters - private let viewModel: InviteUsersViewModelProtocol - private let actionsSubject: PassthroughSubject = .init() +final class InviteUsersScreenCoordinator: CoordinatorProtocol { + private let parameters: InviteUsersScreenCoordinatorParameters + private let viewModel: InviteUsersScreenViewModelProtocol + private let actionsSubject: PassthroughSubject = .init() private var cancellables: Set = .init() - var actions: AnyPublisher { + var actions: AnyPublisher { actionsSubject.eraseToAnyPublisher() } - init(parameters: InviteUsersCoordinatorParameters) { + init(parameters: InviteUsersScreenCoordinatorParameters) { self.parameters = parameters - viewModel = InviteUsersViewModel(userSession: parameters.userSession, userDiscoveryService: parameters.userDiscoveryService) + viewModel = InviteUsersScreenViewModel(userSession: parameters.userSession, userDiscoveryService: parameters.userDiscoveryService) } func start() { diff --git a/ElementX/Sources/Screens/InviteUsers/InviteUsersModels.swift b/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenModels.swift similarity index 80% rename from ElementX/Sources/Screens/InviteUsers/InviteUsersModels.swift rename to ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenModels.swift index fca15b325..f0c13e6c6 100644 --- a/ElementX/Sources/Screens/InviteUsers/InviteUsersModels.swift +++ b/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenModels.swift @@ -16,16 +16,16 @@ import Foundation -enum InviteUsersErrorType: Error { +enum InviteUsersScreenErrorType: Error { case unknown } -enum InviteUsersViewModelAction { +enum InviteUsersScreenViewModelAction { case close } -struct InviteUsersViewState: BindableState { - var bindings = InviteUsersViewStateBindings() +struct InviteUsersScreenViewState: BindableState { + var bindings = InviteUsersScreenViewStateBindings() var usersSection: UserDiscoverySection = .init(type: .suggestions, users: []) var selectedUsers: [UserProfile] = [] @@ -45,14 +45,14 @@ struct InviteUsersViewState: BindableState { } } -struct InviteUsersViewStateBindings { +struct InviteUsersScreenViewStateBindings { var searchQuery = "" /// Information describing the currently displayed alert. - var alertInfo: AlertInfo? + var alertInfo: AlertInfo? } -enum InviteUsersViewAction { +enum InviteUsersScreenViewAction { case close case proceed case tapUser(UserProfile) diff --git a/ElementX/Sources/Screens/InviteUsers/InviteUsersViewModel.swift b/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenViewModel.swift similarity index 85% rename from ElementX/Sources/Screens/InviteUsers/InviteUsersViewModel.swift rename to ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenViewModel.swift index 8137546ab..6d559bafd 100644 --- a/ElementX/Sources/Screens/InviteUsers/InviteUsersViewModel.swift +++ b/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenViewModel.swift @@ -17,28 +17,28 @@ import Combine import SwiftUI -typealias InviteUsersViewModelType = StateStoreViewModel +typealias InviteUsersScreenViewModelType = StateStoreViewModel -class InviteUsersViewModel: InviteUsersViewModelType, InviteUsersViewModelProtocol { +class InviteUsersScreenViewModel: InviteUsersScreenViewModelType, InviteUsersScreenViewModelProtocol { private let userSession: UserSessionProtocol private let userDiscoveryService: UserDiscoveryServiceProtocol - private let actionsSubject: PassthroughSubject = .init() + private let actionsSubject: PassthroughSubject = .init() - var actions: AnyPublisher { + var actions: AnyPublisher { actionsSubject.eraseToAnyPublisher() } init(userSession: UserSessionProtocol, userDiscoveryService: UserDiscoveryServiceProtocol) { self.userSession = userSession self.userDiscoveryService = userDiscoveryService - super.init(initialViewState: InviteUsersViewState(), imageProvider: userSession.mediaProvider) + super.init(initialViewState: InviteUsersScreenViewState(), imageProvider: userSession.mediaProvider) setupSubscriptions() } // MARK: - Public - override func process(viewAction: InviteUsersViewAction) { + override func process(viewAction: InviteUsersScreenViewAction) { switch viewAction { case .close: actionsSubject.send(.close) diff --git a/ElementX/Sources/Screens/InviteUsers/InviteUsersViewModelProtocol.swift b/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenViewModelProtocol.swift similarity index 76% rename from ElementX/Sources/Screens/InviteUsers/InviteUsersViewModelProtocol.swift rename to ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenViewModelProtocol.swift index 67d440b37..cb576ff5c 100644 --- a/ElementX/Sources/Screens/InviteUsers/InviteUsersViewModelProtocol.swift +++ b/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenViewModelProtocol.swift @@ -17,7 +17,7 @@ import Combine @MainActor -protocol InviteUsersViewModelProtocol { - var actions: AnyPublisher { get } - var context: InviteUsersViewModelType.Context { get } +protocol InviteUsersScreenViewModelProtocol { + var actions: AnyPublisher { get } + var context: InviteUsersScreenViewModelType.Context { get } } diff --git a/ElementX/Sources/Screens/InviteUsers/View/InviteUsersScreen.swift b/ElementX/Sources/Screens/InviteUsersScreen/View/InviteUsersScreen.swift similarity index 94% rename from ElementX/Sources/Screens/InviteUsers/View/InviteUsersScreen.swift rename to ElementX/Sources/Screens/InviteUsersScreen/View/InviteUsersScreen.swift index d18d2f286..a1813f4d8 100644 --- a/ElementX/Sources/Screens/InviteUsers/View/InviteUsersScreen.swift +++ b/ElementX/Sources/Screens/InviteUsersScreen/View/InviteUsersScreen.swift @@ -17,7 +17,7 @@ import SwiftUI struct InviteUsersScreen: View { - @ObservedObject var context: InviteUsersViewModel.Context + @ObservedObject var context: InviteUsersScreenViewModel.Context var body: some View { VStack { @@ -86,7 +86,7 @@ struct InviteUsersScreen: View { ScrollViewReader { scrollView in HStack(spacing: 28) { ForEach(context.viewState.selectedUsers, id: \.userID) { user in - InviteUsersSelectedItem(user: user, imageProvider: context.imageProvider) { + InviteUsersScreenSelectedItem(user: user, imageProvider: context.imageProvider) { deselect(user) } .frame(width: cellWidth) @@ -123,7 +123,7 @@ struct InviteUsersScreen_Previews: PreviewProvider { let userDiscoveryService = UserDiscoveryServiceMock() userDiscoveryService.fetchSuggestionsReturnValue = .success([.mockAlice]) userDiscoveryService.searchProfilesWithReturnValue = .success([.mockAlice]) - return InviteUsersViewModel(userSession: userSession, userDiscoveryService: userDiscoveryService) + return InviteUsersScreenViewModel(userSession: userSession, userDiscoveryService: userDiscoveryService) }() static var previews: some View { diff --git a/ElementX/Sources/Screens/InviteUsers/View/InviteUsersSelectedItem.swift b/ElementX/Sources/Screens/InviteUsersScreen/View/InviteUsersScreenSelectedItem.swift similarity index 88% rename from ElementX/Sources/Screens/InviteUsers/View/InviteUsersSelectedItem.swift rename to ElementX/Sources/Screens/InviteUsersScreen/View/InviteUsersScreenSelectedItem.swift index 26488bb6f..bca54fe2d 100644 --- a/ElementX/Sources/Screens/InviteUsers/View/InviteUsersSelectedItem.swift +++ b/ElementX/Sources/Screens/InviteUsersScreen/View/InviteUsersScreenSelectedItem.swift @@ -16,7 +16,7 @@ import SwiftUI -struct InviteUsersSelectedItem: View { +struct InviteUsersScreenSelectedItem: View { let user: UserProfile let imageProvider: ImageProviderProtocol? let dismissAction: () -> Void @@ -43,8 +43,8 @@ struct InviteUsersSelectedItem: View { } } -struct InviteUsersSelectedItem_Previews: PreviewProvider { +struct InviteUsersScreenSelectedItem_Previews: PreviewProvider { static var previews: some View { - InviteUsersSelectedItem(user: .mockAlice, imageProvider: MockMediaProvider(), dismissAction: { }) + InviteUsersScreenSelectedItem(user: .mockAlice, imageProvider: MockMediaProvider(), dismissAction: { }) } } diff --git a/ElementX/Sources/Screens/Invites/InvitesCoordinator.swift b/ElementX/Sources/Screens/InvitesScreen/InvitesScreenCoordinator.swift similarity index 70% rename from ElementX/Sources/Screens/Invites/InvitesCoordinator.swift rename to ElementX/Sources/Screens/InvitesScreen/InvitesScreenCoordinator.swift index 06152e44d..38b8ac87e 100644 --- a/ElementX/Sources/Screens/Invites/InvitesCoordinator.swift +++ b/ElementX/Sources/Screens/InvitesScreen/InvitesScreenCoordinator.swift @@ -17,27 +17,27 @@ import Combine import SwiftUI -struct InvitesCoordinatorParameters { +struct InvitesScreenCoordinatorParameters { let userSession: UserSessionProtocol } -enum InvitesCoordinatorAction { +enum InvitesScreenCoordinatorAction { case openRoom(withIdentifier: String) } -final class InvitesCoordinator: CoordinatorProtocol { - private let parameters: InvitesCoordinatorParameters - private var viewModel: InvitesViewModelProtocol - private let actionsSubject: PassthroughSubject = .init() +final class InvitesScreenCoordinator: CoordinatorProtocol { + private let parameters: InvitesScreenCoordinatorParameters + private var viewModel: InvitesScreenViewModelProtocol + private let actionsSubject: PassthroughSubject = .init() private var cancellables: Set = .init() - var actions: AnyPublisher { + var actions: AnyPublisher { actionsSubject.eraseToAnyPublisher() } - init(parameters: InvitesCoordinatorParameters) { + init(parameters: InvitesScreenCoordinatorParameters) { self.parameters = parameters - viewModel = InvitesViewModel(userSession: parameters.userSession) + viewModel = InvitesScreenViewModel(userSession: parameters.userSession) } func start() { diff --git a/ElementX/Sources/Screens/Invites/InvitesModels.swift b/ElementX/Sources/Screens/InvitesScreen/InvitesScreenModels.swift similarity index 69% rename from ElementX/Sources/Screens/Invites/InvitesModels.swift rename to ElementX/Sources/Screens/InvitesScreen/InvitesScreenModels.swift index d8f5ba324..8e2a7aa14 100644 --- a/ElementX/Sources/Screens/Invites/InvitesModels.swift +++ b/ElementX/Sources/Screens/InvitesScreen/InvitesScreenModels.swift @@ -14,20 +14,20 @@ // limitations under the License. // -enum InvitesViewModelAction { +enum InvitesScreenViewModelAction { case openRoom(withIdentifier: String) } -struct InvitesViewState: BindableState { - var invites: [InvitesRoomDetails]? - var bindings: InvitesViewStateBindings = .init() +struct InvitesScreenViewState: BindableState { + var invites: [InvitesScreenRoomDetails]? + var bindings: InvitesScreenViewStateBindings = .init() } -struct InvitesViewStateBindings { +struct InvitesScreenViewStateBindings { var alertInfo: AlertInfo? } -struct InvitesRoomDetails { +struct InvitesScreenRoomDetails { let roomDetails: RoomSummaryDetails var inviter: RoomMemberProxyProtocol? var isUnread: Bool @@ -37,7 +37,7 @@ struct InvitesRoomDetails { } } -enum InvitesViewAction { - case accept(InvitesRoomDetails) - case decline(InvitesRoomDetails) +enum InvitesScreenViewAction { + case accept(InvitesScreenRoomDetails) + case decline(InvitesScreenRoomDetails) } diff --git a/ElementX/Sources/Screens/Invites/InvitesViewModel.swift b/ElementX/Sources/Screens/InvitesScreen/InvitesScreenViewModel.swift similarity index 86% rename from ElementX/Sources/Screens/Invites/InvitesViewModel.swift rename to ElementX/Sources/Screens/InvitesScreen/InvitesScreenViewModel.swift index a1b9caab3..d45cfc576 100644 --- a/ElementX/Sources/Screens/Invites/InvitesViewModel.swift +++ b/ElementX/Sources/Screens/InvitesScreen/InvitesScreenViewModel.swift @@ -17,27 +17,27 @@ import Combine import SwiftUI -typealias InvitesViewModelType = StateStoreViewModel +typealias InvitesScreenViewModelType = StateStoreViewModel -class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol { - private var actionsSubject: PassthroughSubject = .init() +class InvitesScreenViewModel: InvitesScreenViewModelType, InvitesScreenViewModelProtocol { + private var actionsSubject: PassthroughSubject = .init() private let userSession: UserSessionProtocol private let previouslySeenInvites: Set - var actions: AnyPublisher { + var actions: AnyPublisher { actionsSubject.eraseToAnyPublisher() } init(userSession: UserSessionProtocol) { self.userSession = userSession previouslySeenInvites = ServiceLocator.shared.settings.seenInvites - super.init(initialViewState: InvitesViewState(), imageProvider: userSession.mediaProvider) + super.init(initialViewState: InvitesScreenViewState(), imageProvider: userSession.mediaProvider) setupSubscriptions() } // MARK: - Public - override func process(viewAction: InvitesViewAction) { + override func process(viewAction: InvitesScreenViewAction) { switch viewAction { case .accept(let invite): accept(invite: invite) @@ -78,12 +78,12 @@ class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol { .store(in: &cancellables) } - private func buildInvites(from summaries: [RoomSummary]) -> [InvitesRoomDetails] { + private func buildInvites(from summaries: [RoomSummary]) -> [InvitesScreenRoomDetails] { summaries.compactMap { summary in guard case .filled(let details) = summary else { return nil } - return InvitesRoomDetails(roomDetails: details, isUnread: !previouslySeenInvites.contains(details.id)) + return InvitesScreenRoomDetails(roomDetails: details, isUnread: !previouslySeenInvites.contains(details.id)) } } @@ -103,7 +103,7 @@ class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol { } } - private func startDeclineFlow(invite: InvitesRoomDetails) { + private func startDeclineFlow(invite: InvitesScreenRoomDetails) { let roomPlaceholder = invite.isDirect ? (invite.inviter?.displayName ?? invite.roomDetails.name) : invite.roomDetails.name let title = invite.isDirect ? L10n.screenInvitesDeclineDirectChatTitle : L10n.screenInvitesDeclineChatTitle let message = invite.isDirect ? L10n.screenInvitesDeclineDirectChatMessage(roomPlaceholder) : L10n.screenInvitesDeclineChatMessage(roomPlaceholder) @@ -115,7 +115,7 @@ class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol { secondaryButton: .init(title: L10n.actionDecline, role: .destructive, action: { self.decline(invite: invite) })) } - private func accept(invite: InvitesRoomDetails) { + private func accept(invite: InvitesScreenRoomDetails) { Task { let roomID = invite.roomDetails.id defer { @@ -138,7 +138,7 @@ class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol { } } - private func decline(invite: InvitesRoomDetails) { + private func decline(invite: InvitesScreenRoomDetails) { Task { let roomID = invite.roomDetails.id defer { diff --git a/ElementX/Sources/Screens/BugReport/BugReportViewModelProtocol.swift b/ElementX/Sources/Screens/InvitesScreen/InvitesScreenViewModelProtocol.swift similarity index 77% rename from ElementX/Sources/Screens/BugReport/BugReportViewModelProtocol.swift rename to ElementX/Sources/Screens/InvitesScreen/InvitesScreenViewModelProtocol.swift index db0474618..fbb3d2a3f 100644 --- a/ElementX/Sources/Screens/BugReport/BugReportViewModelProtocol.swift +++ b/ElementX/Sources/Screens/InvitesScreen/InvitesScreenViewModelProtocol.swift @@ -17,7 +17,7 @@ import Combine @MainActor -protocol BugReportViewModelProtocol { - var actions: AnyPublisher { get } - var context: BugReportViewModelType.Context { get } +protocol InvitesScreenViewModelProtocol { + var actions: AnyPublisher { get } + var context: InvitesScreenViewModelType.Context { get } } diff --git a/ElementX/Sources/Screens/Invites/View/InvitesScreen.swift b/ElementX/Sources/Screens/InvitesScreen/View/InvitesScreen.swift similarity index 84% rename from ElementX/Sources/Screens/Invites/View/InvitesScreen.swift rename to ElementX/Sources/Screens/InvitesScreen/View/InvitesScreen.swift index 0291fbc71..b4c434f7b 100644 --- a/ElementX/Sources/Screens/Invites/View/InvitesScreen.swift +++ b/ElementX/Sources/Screens/InvitesScreen/View/InvitesScreen.swift @@ -17,7 +17,7 @@ import SwiftUI struct InvitesScreen: View { - @ObservedObject var context: InvitesViewModel.Context + @ObservedObject var context: InvitesScreenViewModel.Context var body: some View { ScrollView { @@ -56,32 +56,32 @@ struct InvitesScreen: View { struct InvitesScreen_Previews: PreviewProvider { static var previews: some View { NavigationView { - InvitesScreen(context: InvitesViewModel.noInvites.context) + InvitesScreen(context: InvitesScreenViewModel.noInvites.context) } .previewDisplayName("No Invites") NavigationView { - InvitesScreen(context: InvitesViewModel.someInvite.context) + InvitesScreen(context: InvitesScreenViewModel.someInvite.context) } .previewDisplayName("Some Invite") } } -private extension InvitesViewModel { - static let noInvites: InvitesViewModel = { +private extension InvitesScreenViewModel { + static let noInvites: InvitesScreenViewModel = { let userSession = MockUserSession(clientProxy: MockClientProxy(userID: "@userid:example.com"), mediaProvider: MockMediaProvider()) - let regularViewModel = InvitesViewModel(userSession: userSession) + let regularViewModel = InvitesScreenViewModel(userSession: userSession) return regularViewModel }() - static let someInvite: InvitesViewModel = { + static let someInvite: InvitesScreenViewModel = { let clientProxy = MockClientProxy(userID: "@userid:example.com") clientProxy.invitesSummaryProvider = MockRoomSummaryProvider(state: .loaded(.mockInvites)) clientProxy.visibleRoomsSummaryProvider = MockRoomSummaryProvider(state: .loaded(.mockInvites)) let userSession = MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider()) - let regularViewModel = InvitesViewModel(userSession: userSession) + let regularViewModel = InvitesScreenViewModel(userSession: userSession) return regularViewModel }() } diff --git a/ElementX/Sources/Screens/Invites/View/InvitesScreenCell.swift b/ElementX/Sources/Screens/InvitesScreen/View/InvitesScreenCell.swift similarity index 97% rename from ElementX/Sources/Screens/Invites/View/InvitesScreenCell.swift rename to ElementX/Sources/Screens/InvitesScreen/View/InvitesScreenCell.swift index fa26075cd..4adc1f175 100644 --- a/ElementX/Sources/Screens/Invites/View/InvitesScreenCell.swift +++ b/ElementX/Sources/Screens/InvitesScreen/View/InvitesScreenCell.swift @@ -18,7 +18,7 @@ import SwiftUI @MainActor struct InvitesScreenCell: View { - let invite: InvitesRoomDetails + let invite: InvitesScreenRoomDetails let imageProvider: ImageProviderProtocol? let acceptAction: () -> Void let declineAction: () -> Void @@ -169,8 +169,8 @@ struct InvitesScreenCell_Previews: PreviewProvider { } @MainActor -private extension InvitesRoomDetails { - static var dm: InvitesRoomDetails { +private extension InvitesScreenRoomDetails { + static var dm: InvitesScreenRoomDetails { let dmRoom = RoomSummaryDetails(id: "@someone:somewhere.com", name: "Some Guy", isDirect: true, @@ -186,7 +186,7 @@ private extension InvitesRoomDetails { return .init(roomDetails: dmRoom, inviter: inviter, isUnread: false) } - static func room(alias: String?) -> InvitesRoomDetails { + static func room(alias: String?) -> InvitesScreenRoomDetails { let dmRoom = RoomSummaryDetails(id: "@someone:somewhere.com", name: "Awesome Room", isDirect: false, diff --git a/ElementX/Sources/Screens/MediaPicker/CameraPicker.swift b/ElementX/Sources/Screens/MediaPickerScreen/CameraPicker.swift similarity index 100% rename from ElementX/Sources/Screens/MediaPicker/CameraPicker.swift rename to ElementX/Sources/Screens/MediaPickerScreen/CameraPicker.swift diff --git a/ElementX/Sources/Screens/MediaPicker/DocumentPicker.swift b/ElementX/Sources/Screens/MediaPickerScreen/DocumentPicker.swift similarity index 100% rename from ElementX/Sources/Screens/MediaPicker/DocumentPicker.swift rename to ElementX/Sources/Screens/MediaPickerScreen/DocumentPicker.swift diff --git a/ElementX/Sources/Screens/MediaPicker/MediaPickerCoordinator.swift b/ElementX/Sources/Screens/MediaPickerScreen/MediaPickerScreenCoordinator.swift similarity index 87% rename from ElementX/Sources/Screens/MediaPicker/MediaPickerCoordinator.swift rename to ElementX/Sources/Screens/MediaPickerScreen/MediaPickerScreenCoordinator.swift index 062cdd9c6..21c3ad970 100644 --- a/ElementX/Sources/Screens/MediaPicker/MediaPickerCoordinator.swift +++ b/ElementX/Sources/Screens/MediaPickerScreen/MediaPickerScreenCoordinator.swift @@ -16,23 +16,23 @@ import SwiftUI -enum MediaPickerSource { +enum MediaPickerScreenSource { case camera case photoLibrary case documents } -enum MediaPickerCoordinatorAction { +enum MediaPickerScreenCoordinatorAction { case selectMediaAtURL(URL) case cancel case error(Error?) } -class MediaPickerCoordinator: CoordinatorProtocol { - private let source: MediaPickerSource - private let callback: ((MediaPickerCoordinatorAction) -> Void)? +class MediaPickerScreenCoordinator: CoordinatorProtocol { + private let source: MediaPickerScreenSource + private let callback: ((MediaPickerScreenCoordinatorAction) -> Void)? - init(source: MediaPickerSource, callback: @escaping (MediaPickerCoordinatorAction) -> Void) { + init(source: MediaPickerScreenSource, callback: @escaping (MediaPickerScreenCoordinatorAction) -> Void) { self.source = source self.callback = callback } diff --git a/ElementX/Sources/Screens/MediaPicker/PhotoLibraryPicker.swift b/ElementX/Sources/Screens/MediaPickerScreen/PhotoLibraryPicker.swift similarity index 100% rename from ElementX/Sources/Screens/MediaPicker/PhotoLibraryPicker.swift rename to ElementX/Sources/Screens/MediaPickerScreen/PhotoLibraryPicker.swift diff --git a/ElementX/Sources/Screens/Other/UIActivityViewControllerWrapper.swift b/ElementX/Sources/Screens/Other/UIActivityViewControllerWrapper.swift deleted file mode 100644 index 6960af316..000000000 --- a/ElementX/Sources/Screens/Other/UIActivityViewControllerWrapper.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// Copyright 2022 New Vector Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import SwiftUI - -struct UIActivityViewControllerWrapper: UIViewControllerRepresentable { - var activityItems: [Any] - var applicationActivities: [UIActivity]? - - func makeUIViewController(context: UIViewControllerRepresentableContext) -> UIActivityViewController { - UIActivityViewController(activityItems: activityItems, applicationActivities: applicationActivities) - } - - func updateUIViewController(_ uiViewController: UIActivityViewController, context: UIViewControllerRepresentableContext) { } -} diff --git a/ElementX/Sources/Screens/ReportContent/ReportContentCoordinator.swift b/ElementX/Sources/Screens/ReportContentScreen/ReportContentScreenCoordinator.swift similarity index 81% rename from ElementX/Sources/Screens/ReportContent/ReportContentCoordinator.swift rename to ElementX/Sources/Screens/ReportContentScreen/ReportContentScreenCoordinator.swift index 4e2bbe852..4b4700825 100644 --- a/ElementX/Sources/Screens/ReportContent/ReportContentCoordinator.swift +++ b/ElementX/Sources/Screens/ReportContentScreen/ReportContentScreenCoordinator.swift @@ -17,29 +17,29 @@ import Combine import SwiftUI -struct ReportContentCoordinatorParameters { +struct ReportContentScreenCoordinatorParameters { let itemID: String let senderID: String let roomProxy: RoomProxyProtocol weak var userIndicatorController: UserIndicatorControllerProtocol? } -enum ReportContentCoordinatorAction { +enum ReportContentScreenCoordinatorAction { case cancel case finish } -final class ReportContentCoordinator: CoordinatorProtocol { - private let parameters: ReportContentCoordinatorParameters - private var viewModel: ReportContentViewModelProtocol +final class ReportContentScreenCoordinator: CoordinatorProtocol { + private let parameters: ReportContentScreenCoordinatorParameters + private var viewModel: ReportContentScreenViewModelProtocol private var cancellables: Set = .init() - var callback: ((ReportContentCoordinatorAction) -> Void)? + var callback: ((ReportContentScreenCoordinatorAction) -> Void)? - init(parameters: ReportContentCoordinatorParameters) { + init(parameters: ReportContentScreenCoordinatorParameters) { self.parameters = parameters - viewModel = ReportContentViewModel(itemID: parameters.itemID, senderID: parameters.senderID, roomProxy: parameters.roomProxy) + viewModel = ReportContentScreenViewModel(itemID: parameters.itemID, senderID: parameters.senderID, roomProxy: parameters.roomProxy) } // MARK: - Public diff --git a/ElementX/Sources/Screens/ReportContent/ReportContentModels.swift b/ElementX/Sources/Screens/ReportContentScreen/ReportContentScreenModels.swift similarity index 77% rename from ElementX/Sources/Screens/ReportContent/ReportContentModels.swift rename to ElementX/Sources/Screens/ReportContentScreen/ReportContentScreenModels.swift index 44c04c188..5678348c5 100644 --- a/ElementX/Sources/Screens/ReportContent/ReportContentModels.swift +++ b/ElementX/Sources/Screens/ReportContentScreen/ReportContentScreenModels.swift @@ -16,23 +16,23 @@ import Foundation -enum ReportContentViewModelAction { +enum ReportContentScreenViewModelAction { case cancel case submitStarted case submitFinished case submitFailed(error: Error) } -struct ReportContentViewState: BindableState { - var bindings: ReportContentViewStateBindings +struct ReportContentScreenViewState: BindableState { + var bindings: ReportContentScreenViewStateBindings } -struct ReportContentViewStateBindings { +struct ReportContentScreenViewStateBindings { var reasonText: String var ignoreUser: Bool } -enum ReportContentViewAction { +enum ReportContentScreenViewAction { case cancel case submit } diff --git a/ElementX/Sources/Screens/ReportContent/ReportContentViewModel.swift b/ElementX/Sources/Screens/ReportContentScreen/ReportContentScreenViewModel.swift similarity index 78% rename from ElementX/Sources/Screens/ReportContent/ReportContentViewModel.swift rename to ElementX/Sources/Screens/ReportContentScreen/ReportContentScreenViewModel.swift index 0793d56d2..91825bc9b 100644 --- a/ElementX/Sources/Screens/ReportContent/ReportContentViewModel.swift +++ b/ElementX/Sources/Screens/ReportContentScreen/ReportContentScreenViewModel.swift @@ -17,15 +17,15 @@ import Combine import SwiftUI -typealias ReportContentViewModelType = StateStoreViewModel +typealias ReportContentScreenViewModelType = StateStoreViewModel -class ReportContentViewModel: ReportContentViewModelType, ReportContentViewModelProtocol { +class ReportContentScreenViewModel: ReportContentScreenViewModelType, ReportContentScreenViewModelProtocol { private let itemID: String private let senderID: String private let roomProxy: RoomProxyProtocol - private let actionsSubject: PassthroughSubject = .init() + private let actionsSubject: PassthroughSubject = .init() - var actions: AnyPublisher { + var actions: AnyPublisher { actionsSubject.eraseToAnyPublisher() } @@ -34,12 +34,12 @@ class ReportContentViewModel: ReportContentViewModelType, ReportContentViewModel self.senderID = senderID self.roomProxy = roomProxy - super.init(initialViewState: ReportContentViewState(bindings: ReportContentViewStateBindings(reasonText: "", ignoreUser: false))) + super.init(initialViewState: ReportContentScreenViewState(bindings: ReportContentScreenViewStateBindings(reasonText: "", ignoreUser: false))) } // MARK: - Public - override func process(viewAction: ReportContentViewAction) { + override func process(viewAction: ReportContentScreenViewAction) { switch viewAction { case .cancel: actionsSubject.send(.cancel) diff --git a/ElementX/Sources/Screens/ReportContent/ReportContentViewModelProtocol.swift b/ElementX/Sources/Screens/ReportContentScreen/ReportContentScreenViewModelProtocol.swift similarity index 76% rename from ElementX/Sources/Screens/ReportContent/ReportContentViewModelProtocol.swift rename to ElementX/Sources/Screens/ReportContentScreen/ReportContentScreenViewModelProtocol.swift index 5b030f3c7..dd69da3ea 100644 --- a/ElementX/Sources/Screens/ReportContent/ReportContentViewModelProtocol.swift +++ b/ElementX/Sources/Screens/ReportContentScreen/ReportContentScreenViewModelProtocol.swift @@ -18,7 +18,7 @@ import Combine import Foundation @MainActor -protocol ReportContentViewModelProtocol { - var actions: AnyPublisher { get } - var context: ReportContentViewModelType.Context { get } +protocol ReportContentScreenViewModelProtocol { + var actions: AnyPublisher { get } + var context: ReportContentScreenViewModelType.Context { get } } diff --git a/ElementX/Sources/Screens/ReportContent/View/ReportContentScreen.swift b/ElementX/Sources/Screens/ReportContentScreen/View/ReportContentScreen.swift similarity index 87% rename from ElementX/Sources/Screens/ReportContent/View/ReportContentScreen.swift rename to ElementX/Sources/Screens/ReportContentScreen/View/ReportContentScreen.swift index 8e1eaf750..51e734fa4 100644 --- a/ElementX/Sources/Screens/ReportContent/View/ReportContentScreen.swift +++ b/ElementX/Sources/Screens/ReportContentScreen/View/ReportContentScreen.swift @@ -19,7 +19,7 @@ import SwiftUI struct ReportContentScreen: View { @Environment(\.horizontalSizeClass) private var horizontalSizeClass - @ObservedObject var context: ReportContentViewModel.Context + @ObservedObject var context: ReportContentScreenViewModel.Context private var horizontalPadding: CGFloat { horizontalSizeClass == .regular ? 50 : 16 @@ -83,10 +83,10 @@ struct ReportContentScreen: View { // MARK: - Previews -struct ReportContent_Previews: PreviewProvider { - static let viewModel = ReportContentViewModel(itemID: "", - senderID: "", - roomProxy: RoomProxyMock(with: .init(displayName: nil))) +struct ReportContentScreen_Previews: PreviewProvider { + static let viewModel = ReportContentScreenViewModel(itemID: "", + senderID: "", + roomProxy: RoomProxyMock(with: .init(displayName: nil))) static var previews: some View { NavigationStack { diff --git a/ElementX/Sources/Screens/RoomDetails/RoomDetailsCoordinator.swift b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenCoordinator.swift similarity index 63% rename from ElementX/Sources/Screens/RoomDetails/RoomDetailsCoordinator.swift rename to ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenCoordinator.swift index d94f1aba3..ca131a106 100644 --- a/ElementX/Sources/Screens/RoomDetails/RoomDetailsCoordinator.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenCoordinator.swift @@ -16,29 +16,29 @@ import SwiftUI -struct RoomDetailsCoordinatorParameters { +struct RoomDetailsScreenCoordinatorParameters { let navigationStackCoordinator: NavigationStackCoordinator let roomProxy: RoomProxyProtocol let mediaProvider: MediaProviderProtocol } -enum RoomDetailsCoordinatorAction { +enum RoomDetailsScreenCoordinatorAction { case cancel case leftRoom } -final class RoomDetailsCoordinator: CoordinatorProtocol { - private let parameters: RoomDetailsCoordinatorParameters - private var viewModel: RoomDetailsViewModelProtocol +final class RoomDetailsScreenCoordinator: CoordinatorProtocol { + private let parameters: RoomDetailsScreenCoordinatorParameters + private var viewModel: RoomDetailsScreenViewModelProtocol private var navigationStackCoordinator: NavigationStackCoordinator { parameters.navigationStackCoordinator } - var callback: ((RoomDetailsCoordinatorAction) -> Void)? + var callback: ((RoomDetailsScreenCoordinatorAction) -> Void)? - init(parameters: RoomDetailsCoordinatorParameters) { + init(parameters: RoomDetailsScreenCoordinatorParameters) { self.parameters = parameters - viewModel = RoomDetailsViewModel(roomProxy: parameters.roomProxy, - mediaProvider: parameters.mediaProvider) + viewModel = RoomDetailsScreenViewModel(roomProxy: parameters.roomProxy, + mediaProvider: parameters.mediaProvider) } // MARK: - Public @@ -57,16 +57,16 @@ final class RoomDetailsCoordinator: CoordinatorProtocol { } } } - + func toPresentable() -> AnyView { AnyView(RoomDetailsScreen(context: viewModel.context)) } private func presentRoomMembersList(_ members: [RoomMemberProxyProtocol]) { - let params = RoomMembersListCoordinatorParameters(navigationStackCoordinator: navigationStackCoordinator, - mediaProvider: parameters.mediaProvider, - members: members) - let coordinator = RoomMembersListCoordinator(parameters: params) + let params = RoomMembersListScreenCoordinatorParameters(navigationStackCoordinator: navigationStackCoordinator, + mediaProvider: parameters.mediaProvider, + members: members) + let coordinator = RoomMembersListScreenCoordinator(parameters: params) navigationStackCoordinator.push(coordinator) } diff --git a/ElementX/Sources/Screens/RoomDetails/RoomDetailsModels.swift b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenModels.swift similarity index 89% rename from ElementX/Sources/Screens/RoomDetails/RoomDetailsModels.swift rename to ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenModels.swift index e28e0b510..6a342c474 100644 --- a/ElementX/Sources/Screens/RoomDetails/RoomDetailsModels.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenModels.swift @@ -21,7 +21,7 @@ import UIKit // MARK: View model -enum RoomDetailsViewModelAction { +enum RoomDetailsScreenViewModelAction { case requestMemberDetailsPresentation([RoomMemberProxyProtocol]) case leftRoom case cancel @@ -29,7 +29,7 @@ enum RoomDetailsViewModelAction { // MARK: View -struct RoomDetailsViewState: BindableState { +struct RoomDetailsScreenViewState: BindableState { let roomId: String let canonicalAlias: String? let isEncrypted: Bool @@ -45,7 +45,7 @@ struct RoomDetailsViewState: BindableState { members.isEmpty } - var bindings: RoomDetailsViewStateBindings + var bindings: RoomDetailsScreenViewStateBindings var dmRecipient: RoomMemberDetails? @@ -54,7 +54,7 @@ struct RoomDetailsViewState: BindableState { } } -struct RoomDetailsViewStateBindings { +struct RoomDetailsScreenViewStateBindings { struct IgnoreUserAlertItem: AlertItem, Equatable { enum Action { case ignore @@ -85,7 +85,7 @@ struct RoomDetailsViewStateBindings { } } - var viewAction: RoomDetailsViewAction { + var viewAction: RoomDetailsScreenViewAction { switch action { case .ignore: return .ignoreConfirmed case .unignore: return .unignoreConfirmed @@ -94,7 +94,7 @@ struct RoomDetailsViewStateBindings { } /// Information describing the currently displayed alert. - var alertInfo: AlertInfo? + var alertInfo: AlertInfo? var leaveRoomAlertItem: LeaveRoomAlertItem? var ignoreUserRoomAlertItem: IgnoreUserAlertItem? } @@ -120,7 +120,7 @@ struct LeaveRoomAlertItem: AlertItem { } } -enum RoomDetailsViewAction { +enum RoomDetailsScreenViewAction { case processTapPeople case processTapLeave case processTapIgnore @@ -130,7 +130,7 @@ enum RoomDetailsViewAction { case unignoreConfirmed } -enum RoomDetailsErrorType: Hashable { +enum RoomDetailsScreenErrorType: Hashable { /// A specific error message shown in an alert. case alert(String) /// Leaving room has failed.. diff --git a/ElementX/Sources/Screens/RoomDetails/RoomDetailsViewModel.swift b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift similarity index 93% rename from ElementX/Sources/Screens/RoomDetails/RoomDetailsViewModel.swift rename to ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift index 640fb2339..fa38d398a 100644 --- a/ElementX/Sources/Screens/RoomDetails/RoomDetailsViewModel.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift @@ -17,9 +17,9 @@ import Combine import SwiftUI -typealias RoomDetailsViewModelType = StateStoreViewModel +typealias RoomDetailsScreenViewModelType = StateStoreViewModel -class RoomDetailsViewModel: RoomDetailsViewModelType, RoomDetailsViewModelProtocol { +class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScreenViewModelProtocol { private let roomProxy: RoomProxyProtocol private var members: [RoomMemberProxyProtocol] = [] { didSet { @@ -42,7 +42,7 @@ class RoomDetailsViewModel: RoomDetailsViewModelType, RoomDetailsViewModelProtoc } } - var callback: ((RoomDetailsViewModelAction) -> Void)? + var callback: ((RoomDetailsScreenViewModelAction) -> Void)? init(roomProxy: RoomProxyProtocol, mediaProvider: MediaProviderProtocol) { @@ -70,7 +70,7 @@ class RoomDetailsViewModel: RoomDetailsViewModelType, RoomDetailsViewModelProtoc // MARK: - Public - override func process(viewAction: RoomDetailsViewAction) { + override func process(viewAction: RoomDetailsScreenViewAction) { switch viewAction { case .processTapPeople: callback?(.requestMemberDetailsPresentation(members)) diff --git a/ElementX/Sources/Screens/RoomMembers/RoomMembersListViewModelProtocol.swift b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModelProtocol.swift similarity index 77% rename from ElementX/Sources/Screens/RoomMembers/RoomMembersListViewModelProtocol.swift rename to ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModelProtocol.swift index 79ca038ce..8d4d4e2bc 100644 --- a/ElementX/Sources/Screens/RoomMembers/RoomMembersListViewModelProtocol.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModelProtocol.swift @@ -17,7 +17,7 @@ import Foundation @MainActor -protocol RoomMembersListViewModelProtocol { - var callback: ((RoomMembersListViewModelAction) -> Void)? { get set } - var context: RoomMembersListViewModelType.Context { get } +protocol RoomDetailsScreenViewModelProtocol { + var callback: ((RoomDetailsScreenViewModelAction) -> Void)? { get set } + var context: RoomDetailsScreenViewModelType.Context { get } } diff --git a/ElementX/Sources/Screens/RoomDetails/View/RoomDetailsScreen.swift b/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift similarity index 93% rename from ElementX/Sources/Screens/RoomDetails/View/RoomDetailsScreen.swift rename to ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift index ec4ba2508..ef2ddf007 100644 --- a/ElementX/Sources/Screens/RoomDetails/View/RoomDetailsScreen.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift @@ -17,7 +17,7 @@ import SwiftUI struct RoomDetailsScreen: View { - @ObservedObject var context: RoomDetailsViewModel.Context + @ObservedObject var context: RoomDetailsScreenViewModel.Context var body: some View { Form { @@ -199,7 +199,7 @@ struct RoomDetailsScreen: View { } @ViewBuilder - private func blockUserAlertActions(_ item: RoomDetailsViewStateBindings.IgnoreUserAlertItem) -> some View { + private func blockUserAlertActions(_ item: RoomDetailsScreenViewStateBindings.IgnoreUserAlertItem) -> some View { Button(item.cancelTitle, role: .cancel) { } Button(item.confirmationTitle, role: item.action == .ignore ? .destructive : nil) { @@ -207,14 +207,14 @@ struct RoomDetailsScreen: View { } } - private func blockUserAlertMessage(_ item: RoomDetailsViewStateBindings.IgnoreUserAlertItem) -> some View { + private func blockUserAlertMessage(_ item: RoomDetailsScreenViewStateBindings.IgnoreUserAlertItem) -> some View { Text(item.description) } } // MARK: - Previews -struct RoomDetails_Previews: PreviewProvider { +struct RoomDetailsScreen_Previews: PreviewProvider { static let genericRoomViewModel = { let members: [RoomMemberProxyMock] = [ .mockAlice, @@ -228,25 +228,25 @@ struct RoomDetails_Previews: PreviewProvider { canonicalAlias: "#alias:domain.com", members: members)) - return RoomDetailsViewModel(roomProxy: roomProxy, - mediaProvider: MockMediaProvider()) + return RoomDetailsScreenViewModel(roomProxy: roomProxy, + mediaProvider: MockMediaProvider()) }() - + static let dmRoomViewModel = { let members: [RoomMemberProxyMock] = [ .mockMe, .mockDan ] - + let roomProxy = RoomProxyMock(with: .init(displayName: "DM Room", topic: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", isDirect: true, isEncrypted: true, canonicalAlias: "#alias:domain.com", members: members)) - - return RoomDetailsViewModel(roomProxy: roomProxy, - mediaProvider: MockMediaProvider()) + + return RoomDetailsScreenViewModel(roomProxy: roomProxy, + mediaProvider: MockMediaProvider()) }() static var previews: some View { diff --git a/ElementX/Sources/Screens/RoomMemberDetails/RoomMemberDetailsCoordinator.swift b/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenCoordinator.swift similarity index 59% rename from ElementX/Sources/Screens/RoomMemberDetails/RoomMemberDetailsCoordinator.swift rename to ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenCoordinator.swift index b28ca07c9..3697c543d 100644 --- a/ElementX/Sources/Screens/RoomMemberDetails/RoomMemberDetailsCoordinator.swift +++ b/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenCoordinator.swift @@ -16,23 +16,23 @@ import SwiftUI -struct RoomMemberDetailsCoordinatorParameters { +struct RoomMemberDetailsScreenCoordinatorParameters { let roomMemberProxy: RoomMemberProxyProtocol let mediaProvider: MediaProviderProtocol } -enum RoomMemberDetailsCoordinatorAction { } +enum RoomMemberDetailsScreenCoordinatorAction { } -final class RoomMemberDetailsCoordinator: CoordinatorProtocol { - private let parameters: RoomMemberDetailsCoordinatorParameters - private var viewModel: RoomMemberDetailsViewModelProtocol +final class RoomMemberDetailsScreenCoordinator: CoordinatorProtocol { + private let parameters: RoomMemberDetailsScreenCoordinatorParameters + private var viewModel: RoomMemberDetailsScreenViewModelProtocol - var callback: ((RoomMemberDetailsCoordinatorAction) -> Void)? + var callback: ((RoomMemberDetailsScreenCoordinatorAction) -> Void)? - init(parameters: RoomMemberDetailsCoordinatorParameters) { + init(parameters: RoomMemberDetailsScreenCoordinatorParameters) { self.parameters = parameters - viewModel = RoomMemberDetailsViewModel(roomMemberProxy: parameters.roomMemberProxy, mediaProvider: parameters.mediaProvider) + viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: parameters.roomMemberProxy, mediaProvider: parameters.mediaProvider) } func start() { } diff --git a/ElementX/Sources/Screens/RoomMemberDetails/RoomMemberDetailsModels.swift b/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenModels.swift similarity index 86% rename from ElementX/Sources/Screens/RoomMemberDetails/RoomMemberDetailsModels.swift rename to ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenModels.swift index 9980037fb..ef07ac2dd 100644 --- a/ElementX/Sources/Screens/RoomMemberDetails/RoomMemberDetailsModels.swift +++ b/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenModels.swift @@ -16,16 +16,16 @@ import Foundation -enum RoomMemberDetailsViewModelAction { } +enum RoomMemberDetailsScreenViewModelAction { } -struct RoomMemberDetailsViewState: BindableState { +struct RoomMemberDetailsScreenViewState: BindableState { var details: RoomMemberDetails var isProcessingIgnoreRequest = false - var bindings: RoomMemberDetailsViewStateBindings + var bindings: RoomMemberDetailsScreenViewStateBindings } -struct RoomMemberDetailsViewStateBindings { +struct RoomMemberDetailsScreenViewStateBindings { struct IgnoreUserAlertItem: AlertItem, Equatable { enum Action { case ignore @@ -56,7 +56,7 @@ struct RoomMemberDetailsViewStateBindings { } } - var viewAction: RoomMemberDetailsViewAction { + var viewAction: RoomMemberDetailsScreenViewAction { switch action { case .ignore: return .ignoreConfirmed case .unignore: return .unignoreConfirmed @@ -68,7 +68,7 @@ struct RoomMemberDetailsViewStateBindings { var errorAlert: ErrorAlertItem? } -enum RoomMemberDetailsViewAction { +enum RoomMemberDetailsScreenViewAction { case showUnignoreAlert case showIgnoreAlert case ignoreConfirmed diff --git a/ElementX/Sources/Screens/RoomMemberDetails/RoomMemberDetailsViewModel.swift b/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenViewModel.swift similarity index 77% rename from ElementX/Sources/Screens/RoomMemberDetails/RoomMemberDetailsViewModel.swift rename to ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenViewModel.swift index 605d8216e..2b1ff59e4 100644 --- a/ElementX/Sources/Screens/RoomMemberDetails/RoomMemberDetailsViewModel.swift +++ b/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenViewModel.swift @@ -16,23 +16,23 @@ import SwiftUI -typealias RoomMemberDetailsViewModelType = StateStoreViewModel +typealias RoomMemberDetailsScreenViewModelType = StateStoreViewModel -class RoomMemberDetailsViewModel: RoomMemberDetailsViewModelType, RoomMemberDetailsViewModelProtocol { +class RoomMemberDetailsScreenViewModel: RoomMemberDetailsScreenViewModelType, RoomMemberDetailsScreenViewModelProtocol { let roomMemberProxy: RoomMemberProxyProtocol - - var callback: ((RoomMemberDetailsViewModelAction) -> Void)? - + + var callback: ((RoomMemberDetailsScreenViewModelAction) -> Void)? + init(roomMemberProxy: RoomMemberProxyProtocol, mediaProvider: MediaProviderProtocol) { self.roomMemberProxy = roomMemberProxy - let initialViewState = RoomMemberDetailsViewState(details: RoomMemberDetails(withProxy: roomMemberProxy), - bindings: .init()) + let initialViewState = RoomMemberDetailsScreenViewState(details: RoomMemberDetails(withProxy: roomMemberProxy), + bindings: .init()) super.init(initialViewState: initialViewState, imageProvider: mediaProvider) } // MARK: - Public - override func process(viewAction: RoomMemberDetailsViewAction) { + override func process(viewAction: RoomMemberDetailsScreenViewAction) { switch viewAction { case .showUnignoreAlert: state.bindings.ignoreUserAlert = .init(action: .unignore) diff --git a/ElementX/Sources/Screens/RoomDetails/RoomDetailsViewModelProtocol.swift b/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenViewModelProtocol.swift similarity index 75% rename from ElementX/Sources/Screens/RoomDetails/RoomDetailsViewModelProtocol.swift rename to ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenViewModelProtocol.swift index 0d4abc7f2..a06876f0b 100644 --- a/ElementX/Sources/Screens/RoomDetails/RoomDetailsViewModelProtocol.swift +++ b/ElementX/Sources/Screens/RoomMemberDetailsScreen/RoomMemberDetailsScreenViewModelProtocol.swift @@ -17,7 +17,7 @@ import Foundation @MainActor -protocol RoomDetailsViewModelProtocol { - var callback: ((RoomDetailsViewModelAction) -> Void)? { get set } - var context: RoomDetailsViewModelType.Context { get } +protocol RoomMemberDetailsScreenViewModelProtocol { + var callback: ((RoomMemberDetailsScreenViewModelAction) -> Void)? { get set } + var context: RoomMemberDetailsScreenViewModelType.Context { get } } diff --git a/ElementX/Sources/Screens/RoomMemberDetails/View/RoomMemberDetailsScreen.swift b/ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift similarity index 86% rename from ElementX/Sources/Screens/RoomMemberDetails/View/RoomMemberDetailsScreen.swift rename to ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift index 1bd63feea..063b38409 100644 --- a/ElementX/Sources/Screens/RoomMemberDetails/View/RoomMemberDetailsScreen.swift +++ b/ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift @@ -17,7 +17,7 @@ import SwiftUI struct RoomMemberDetailsScreen: View { - @ObservedObject var context: RoomMemberDetailsViewModel.Context + @ObservedObject var context: RoomMemberDetailsScreenViewModel.Context var body: some View { Form { @@ -69,7 +69,7 @@ struct RoomMemberDetailsScreen: View { .formSectionStyle() } - private var blockUserButtonAction: RoomMemberDetailsViewAction { + private var blockUserButtonAction: RoomMemberDetailsScreenViewAction { context.viewState.details.isIgnored ? .showUnignoreAlert : .showIgnoreAlert } @@ -82,7 +82,7 @@ struct RoomMemberDetailsScreen: View { } @ViewBuilder - private func blockUserAlertActions(_ item: RoomMemberDetailsViewStateBindings.IgnoreUserAlertItem) -> some View { + private func blockUserAlertActions(_ item: RoomMemberDetailsScreenViewStateBindings.IgnoreUserAlertItem) -> some View { Button(item.cancelTitle, role: .cancel) { } Button(item.confirmationTitle, role: item.action == .ignore ? .destructive : nil) { @@ -90,27 +90,27 @@ struct RoomMemberDetailsScreen: View { } } - private func blockUserAlertMessage(_ item: RoomMemberDetailsViewStateBindings.IgnoreUserAlertItem) -> some View { + private func blockUserAlertMessage(_ item: RoomMemberDetailsScreenViewStateBindings.IgnoreUserAlertItem) -> some View { Text(item.description) } } // MARK: - Previews -struct RoomMemberDetails_Previews: PreviewProvider { +struct RoomMemberDetailsScreen_Previews: PreviewProvider { static let otherUserViewModel = { let member = RoomMemberProxyMock.mockDan - return RoomMemberDetailsViewModel(roomMemberProxy: member, mediaProvider: MockMediaProvider()) + return RoomMemberDetailsScreenViewModel(roomMemberProxy: member, mediaProvider: MockMediaProvider()) }() static let accountOwnerViewModel = { let member = RoomMemberProxyMock.mockMe - return RoomMemberDetailsViewModel(roomMemberProxy: member, mediaProvider: MockMediaProvider()) + return RoomMemberDetailsScreenViewModel(roomMemberProxy: member, mediaProvider: MockMediaProvider()) }() static let ignoredUserViewModel = { let member = RoomMemberProxyMock.mockIgnored - return RoomMemberDetailsViewModel(roomMemberProxy: member, mediaProvider: MockMediaProvider()) + return RoomMemberDetailsScreenViewModel(roomMemberProxy: member, mediaProvider: MockMediaProvider()) }() static var previews: some View { diff --git a/ElementX/Sources/Screens/RoomMembers/RoomMembersListCoordinator.swift b/ElementX/Sources/Screens/RoomMemberListScreen/RoomMembersListScreenCoordinator.swift similarity index 63% rename from ElementX/Sources/Screens/RoomMembers/RoomMembersListCoordinator.swift rename to ElementX/Sources/Screens/RoomMemberListScreen/RoomMembersListScreenCoordinator.swift index d88e0ab42..af9291449 100644 --- a/ElementX/Sources/Screens/RoomMembers/RoomMembersListCoordinator.swift +++ b/ElementX/Sources/Screens/RoomMemberListScreen/RoomMembersListScreenCoordinator.swift @@ -16,26 +16,26 @@ import SwiftUI -struct RoomMembersListCoordinatorParameters { +struct RoomMembersListScreenCoordinatorParameters { let navigationStackCoordinator: NavigationStackCoordinator let mediaProvider: MediaProviderProtocol let members: [RoomMemberProxyProtocol] } -enum RoomMembersListCoordinatorAction { } +enum RoomMembersListScreenCoordinatorAction { } -final class RoomMembersListCoordinator: CoordinatorProtocol { - private let parameters: RoomMembersListCoordinatorParameters - private var viewModel: RoomMembersListViewModelProtocol +final class RoomMembersListScreenCoordinator: CoordinatorProtocol { + private let parameters: RoomMembersListScreenCoordinatorParameters + private var viewModel: RoomMembersListScreenViewModelProtocol private var navigationStackCoordinator: NavigationStackCoordinator { parameters.navigationStackCoordinator } - var callback: ((RoomMembersListCoordinatorAction) -> Void)? + var callback: ((RoomMembersListScreenCoordinatorAction) -> Void)? - init(parameters: RoomMembersListCoordinatorParameters) { + init(parameters: RoomMembersListScreenCoordinatorParameters) { self.parameters = parameters - - viewModel = RoomMembersListViewModel(mediaProvider: parameters.mediaProvider, - members: parameters.members) + + viewModel = RoomMembersListScreenViewModel(mediaProvider: parameters.mediaProvider, + members: parameters.members) } func start() { @@ -56,8 +56,8 @@ final class RoomMembersListCoordinator: CoordinatorProtocol { // MARK: - Private private func selectMember(_ member: RoomMemberProxyProtocol) { - let parameters = RoomMemberDetailsCoordinatorParameters(roomMemberProxy: member, mediaProvider: parameters.mediaProvider) - let coordinator = RoomMemberDetailsCoordinator(parameters: parameters) + let parameters = RoomMemberDetailsScreenCoordinatorParameters(roomMemberProxy: member, mediaProvider: parameters.mediaProvider) + let coordinator = RoomMemberDetailsScreenCoordinator(parameters: parameters) navigationStackCoordinator.push(coordinator) } diff --git a/ElementX/Sources/Screens/RoomMembers/RoomMembersListModels.swift b/ElementX/Sources/Screens/RoomMemberListScreen/RoomMembersListScreenModels.swift similarity index 80% rename from ElementX/Sources/Screens/RoomMembers/RoomMembersListModels.swift rename to ElementX/Sources/Screens/RoomMemberListScreen/RoomMembersListScreenModels.swift index dbc4359a3..59ec1ec6d 100644 --- a/ElementX/Sources/Screens/RoomMembers/RoomMembersListModels.swift +++ b/ElementX/Sources/Screens/RoomMemberListScreen/RoomMembersListScreenModels.swift @@ -16,14 +16,14 @@ import Foundation -enum RoomMembersListViewModelAction { +enum RoomMembersListScreenViewModelAction { case selectMember(_ member: RoomMemberProxyProtocol) } -struct RoomMembersListViewState: BindableState { +struct RoomMembersListScreenViewState: BindableState { var members: [RoomMemberDetails] - var bindings: RoomMembersListViewStateBindings + var bindings: RoomMembersListScreenViewStateBindings var visibleMembers: [RoomMemberDetails] { if bindings.searchQuery.isEmpty { @@ -37,13 +37,13 @@ struct RoomMembersListViewState: BindableState { } } -struct RoomMembersListViewStateBindings { +struct RoomMembersListScreenViewStateBindings { var searchQuery = "" /// Information describing the currently displayed alert. - var alertInfo: AlertInfo? + var alertInfo: AlertInfo? } -enum RoomMembersListViewAction { +enum RoomMembersListScreenViewAction { case selectMember(id: String) } diff --git a/ElementX/Sources/Screens/RoomMembers/RoomMembersListViewModel.swift b/ElementX/Sources/Screens/RoomMemberListScreen/RoomMembersListScreenViewModel.swift similarity index 78% rename from ElementX/Sources/Screens/RoomMembers/RoomMembersListViewModel.swift rename to ElementX/Sources/Screens/RoomMemberListScreen/RoomMembersListScreenViewModel.swift index 085b94225..286aa0511 100644 --- a/ElementX/Sources/Screens/RoomMembers/RoomMembersListViewModel.swift +++ b/ElementX/Sources/Screens/RoomMemberListScreen/RoomMembersListScreenViewModel.swift @@ -16,13 +16,13 @@ import SwiftUI -typealias RoomMembersListViewModelType = StateStoreViewModel +typealias RoomMembersListScreenViewModelType = StateStoreViewModel -class RoomMembersListViewModel: RoomMembersListViewModelType, RoomMembersListViewModelProtocol { +class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMembersListScreenViewModelProtocol { private let mediaProvider: MediaProviderProtocol private let members: [RoomMemberProxyProtocol] - var callback: ((RoomMembersListViewModelAction) -> Void)? + var callback: ((RoomMembersListScreenViewModelAction) -> Void)? init(mediaProvider: MediaProviderProtocol, members: [RoomMemberProxyProtocol]) { @@ -35,7 +35,7 @@ class RoomMembersListViewModel: RoomMembersListViewModelType, RoomMembersListVie // MARK: - Public - override func process(viewAction: RoomMembersListViewAction) { + override func process(viewAction: RoomMembersListScreenViewAction) { switch viewAction { case .selectMember(let id): guard let member = members.first(where: { $0.userID == id }) else { diff --git a/ElementX/Sources/Screens/FilePreview/FilePreviewViewModelProtocol.swift b/ElementX/Sources/Screens/RoomMemberListScreen/RoomMembersListScreenViewModelProtocol.swift similarity index 75% rename from ElementX/Sources/Screens/FilePreview/FilePreviewViewModelProtocol.swift rename to ElementX/Sources/Screens/RoomMemberListScreen/RoomMembersListScreenViewModelProtocol.swift index 2bcef048a..5c66a7850 100644 --- a/ElementX/Sources/Screens/FilePreview/FilePreviewViewModelProtocol.swift +++ b/ElementX/Sources/Screens/RoomMemberListScreen/RoomMembersListScreenViewModelProtocol.swift @@ -17,7 +17,7 @@ import Foundation @MainActor -protocol FilePreviewViewModelProtocol { - var callback: ((FilePreviewViewModelAction) -> Void)? { get set } - var context: FilePreviewViewModelType.Context { get } +protocol RoomMembersListScreenViewModelProtocol { + var callback: ((RoomMembersListScreenViewModelAction) -> Void)? { get set } + var context: RoomMembersListScreenViewModelType.Context { get } } diff --git a/ElementX/Sources/Screens/RoomMembers/View/RoomMembersListScreen.swift b/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift similarity index 84% rename from ElementX/Sources/Screens/RoomMembers/View/RoomMembersListScreen.swift rename to ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift index f4ef20ec6..de4faaa1c 100644 --- a/ElementX/Sources/Screens/RoomMembers/View/RoomMembersListScreen.swift +++ b/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift @@ -19,14 +19,14 @@ import SwiftUI struct RoomMembersListScreen: View { @Environment(\.colorScheme) private var colorScheme - @ObservedObject var context: RoomMembersListViewModel.Context + @ObservedObject var context: RoomMembersListScreenViewModel.Context var body: some View { ScrollView { LazyVStack(alignment: .leading) { Section { ForEach(context.viewState.visibleMembers) { member in - RoomMembersListMemberCell(member: member, context: context) + RoomMembersListScreenMemberCell(member: member, context: context) .id(member.id) } } header: { @@ -48,15 +48,15 @@ struct RoomMembersListScreen: View { // MARK: - Previews -struct RoomMembersList_Previews: PreviewProvider { +struct RoomMembersListScreen_Previews: PreviewProvider { static let viewModel = { let members: [RoomMemberProxyMock] = [ .mockAlice, .mockBob, .mockCharlie ] - return RoomMembersListViewModel(mediaProvider: MockMediaProvider(), - members: members) + return RoomMembersListScreenViewModel(mediaProvider: MockMediaProvider(), + members: members) }() static var previews: some View { diff --git a/ElementX/Sources/Screens/RoomMembers/View/RoomMembersListMemberCell.swift b/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreenMemberCell.swift similarity index 83% rename from ElementX/Sources/Screens/RoomMembers/View/RoomMembersListMemberCell.swift rename to ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreenMemberCell.swift index 5d9ecab66..60eb745d2 100644 --- a/ElementX/Sources/Screens/RoomMembers/View/RoomMembersListMemberCell.swift +++ b/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreenMemberCell.swift @@ -16,11 +16,11 @@ import SwiftUI -struct RoomMembersListMemberCell: View { +struct RoomMembersListScreenMemberCell: View { @ScaledMetric private var avatarSize = AvatarSize.user(on: .roomDetails).value let member: RoomMemberDetails - let context: RoomMembersListViewModel.Context + let context: RoomMembersListScreenViewModel.Context var body: some View { Button { @@ -53,12 +53,12 @@ struct RoomMembersListMemberCell_Previews: PreviewProvider { .mockBob, .mockCharlie ] - let viewModel = RoomMembersListViewModel(mediaProvider: MockMediaProvider(), - members: members) + let viewModel = RoomMembersListScreenViewModel(mediaProvider: MockMediaProvider(), + members: members) return VStack { ForEach(members, id: \.userID) { member in - RoomMembersListMemberCell(member: .init(withProxy: member), context: viewModel.context) + RoomMembersListScreenMemberCell(member: .init(withProxy: member), context: viewModel.context) } } } diff --git a/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift b/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift index 96f756c26..02c25bb75 100644 --- a/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift +++ b/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift @@ -83,8 +83,8 @@ final class RoomScreenCoordinator: CoordinatorProtocol { // MARK: - Private - private func displayMediaPickerWithSource(_ source: MediaPickerSource) { - let mediaPickerCoordinator = MediaPickerCoordinator(source: source) { [weak self] action in + private func displayMediaPickerWithSource(_ source: MediaPickerScreenSource) { + let mediaPickerCoordinator = MediaPickerScreenCoordinator(source: source) { [weak self] action in switch action { case .cancel: self?.navigationStackCoordinator.setSheetCoordinator(nil) @@ -125,8 +125,8 @@ final class RoomScreenCoordinator: CoordinatorProtocol { } private func displayFilePreview(for file: MediaFileHandleProxy, with title: String?) { - let params = FilePreviewCoordinatorParameters(mediaFile: file, title: title) - let coordinator = FilePreviewCoordinator(parameters: params) + let params = FilePreviewScreenCoordinatorParameters(mediaFile: file, title: title) + let coordinator = FilePreviewScreenCoordinator(parameters: params) coordinator.callback = { [weak self] _ in self?.navigationStackCoordinator.pop() } @@ -160,10 +160,10 @@ final class RoomScreenCoordinator: CoordinatorProtocol { } private func displayRoomDetails() { - let params = RoomDetailsCoordinatorParameters(navigationStackCoordinator: navigationStackCoordinator, - roomProxy: parameters.roomProxy, - mediaProvider: parameters.mediaProvider) - let coordinator = RoomDetailsCoordinator(parameters: params) + let params = RoomDetailsScreenCoordinatorParameters(navigationStackCoordinator: navigationStackCoordinator, + roomProxy: parameters.roomProxy, + mediaProvider: parameters.mediaProvider) + let coordinator = RoomDetailsScreenCoordinator(parameters: params) coordinator.callback = { [weak self] action in switch action { case .cancel: @@ -175,15 +175,15 @@ final class RoomScreenCoordinator: CoordinatorProtocol { navigationStackCoordinator.push(coordinator) } - + private func displayReportContent(for itemID: String, from senderID: String) { let navigationCoordinator = NavigationStackCoordinator() let userIndicatorController = UserIndicatorController(rootCoordinator: navigationCoordinator) - let parameters = ReportContentCoordinatorParameters(itemID: itemID, - senderID: senderID, - roomProxy: parameters.roomProxy, - userIndicatorController: userIndicatorController) - let coordinator = ReportContentCoordinator(parameters: parameters) + let parameters = ReportContentScreenCoordinatorParameters(itemID: itemID, + senderID: senderID, + roomProxy: parameters.roomProxy, + userIndicatorController: userIndicatorController) + let coordinator = ReportContentScreenCoordinator(parameters: parameters) coordinator.callback = { [weak self] completion in self?.navigationStackCoordinator.setSheetCoordinator(nil) switch completion { diff --git a/ElementX/Sources/Screens/SessionVerification/SessionVerificationCoordinator.swift b/ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenCoordinator.swift similarity index 71% rename from ElementX/Sources/Screens/SessionVerification/SessionVerificationCoordinator.swift rename to ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenCoordinator.swift index 48cd7ea30..33b9cd20f 100644 --- a/ElementX/Sources/Screens/SessionVerification/SessionVerificationCoordinator.swift +++ b/ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenCoordinator.swift @@ -16,20 +16,20 @@ import SwiftUI -struct SessionVerificationCoordinatorParameters { +struct SessionVerificationScreenCoordinatorParameters { let sessionVerificationControllerProxy: SessionVerificationControllerProxyProtocol } -final class SessionVerificationCoordinator: CoordinatorProtocol { - private let parameters: SessionVerificationCoordinatorParameters - private var viewModel: SessionVerificationViewModelProtocol +final class SessionVerificationScreenCoordinator: CoordinatorProtocol { + private let parameters: SessionVerificationScreenCoordinatorParameters + private var viewModel: SessionVerificationScreenViewModelProtocol var callback: (() -> Void)? - init(parameters: SessionVerificationCoordinatorParameters) { + init(parameters: SessionVerificationScreenCoordinatorParameters) { self.parameters = parameters - viewModel = SessionVerificationViewModel(sessionVerificationControllerProxy: parameters.sessionVerificationControllerProxy) + viewModel = SessionVerificationScreenViewModel(sessionVerificationControllerProxy: parameters.sessionVerificationControllerProxy) } // MARK: - Public diff --git a/ElementX/Sources/Screens/SessionVerification/SessionVerificationModels.swift b/ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenModels.swift similarity index 92% rename from ElementX/Sources/Screens/SessionVerification/SessionVerificationModels.swift rename to ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenModels.swift index 3a6e124fa..fbea0ec87 100644 --- a/ElementX/Sources/Screens/SessionVerification/SessionVerificationModels.swift +++ b/ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenModels.swift @@ -16,12 +16,12 @@ import Foundation -enum SessionVerificationViewModelAction { +enum SessionVerificationScreenViewModelAction { case finished } -struct SessionVerificationViewState: BindableState { - var verificationState: SessionVerificationStateMachine.State = .initial +struct SessionVerificationScreenViewState: BindableState { + var verificationState: SessionVerificationScreenStateMachine.State = .initial var title: String? { switch verificationState { @@ -78,7 +78,7 @@ struct SessionVerificationViewState: BindableState { } } -enum SessionVerificationViewAction { +enum SessionVerificationScreenViewAction { case requestVerification case startSasVerification case restart diff --git a/ElementX/Sources/Screens/SessionVerification/SessionVerificationStateMachine.swift b/ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenStateMachine.swift similarity index 99% rename from ElementX/Sources/Screens/SessionVerification/SessionVerificationStateMachine.swift rename to ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenStateMachine.swift index dcd966fe4..1f2e102a2 100644 --- a/ElementX/Sources/Screens/SessionVerification/SessionVerificationStateMachine.swift +++ b/ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenStateMachine.swift @@ -17,7 +17,7 @@ import Foundation import SwiftState -class SessionVerificationStateMachine { +class SessionVerificationScreenStateMachine { /// States the SessionVerificationViewModel can find itself in enum State: StateType { /// The initial state, before verification started diff --git a/ElementX/Sources/Screens/SessionVerification/SessionVerificationViewModel.swift b/ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenViewModel.swift similarity index 91% rename from ElementX/Sources/Screens/SessionVerification/SessionVerificationViewModel.swift rename to ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenViewModel.swift index 1768fa125..d804d5161 100644 --- a/ElementX/Sources/Screens/SessionVerification/SessionVerificationViewModel.swift +++ b/ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenViewModel.swift @@ -16,20 +16,20 @@ import SwiftUI -typealias SessionVerificationViewModelType = StateStoreViewModel +typealias SessionVerificationViewModelType = StateStoreViewModel -class SessionVerificationViewModel: SessionVerificationViewModelType, SessionVerificationViewModelProtocol { +class SessionVerificationScreenViewModel: SessionVerificationViewModelType, SessionVerificationScreenViewModelProtocol { private let sessionVerificationControllerProxy: SessionVerificationControllerProxyProtocol - private var stateMachine: SessionVerificationStateMachine + private var stateMachine: SessionVerificationScreenStateMachine - var callback: ((SessionVerificationViewModelAction) -> Void)? + var callback: ((SessionVerificationScreenViewModelAction) -> Void)? init(sessionVerificationControllerProxy: SessionVerificationControllerProxyProtocol, - initialState: SessionVerificationViewState = SessionVerificationViewState()) { + initialState: SessionVerificationScreenViewState = SessionVerificationScreenViewState()) { self.sessionVerificationControllerProxy = sessionVerificationControllerProxy - stateMachine = SessionVerificationStateMachine() + stateMachine = SessionVerificationScreenStateMachine() super.init(initialViewState: initialState) @@ -63,7 +63,7 @@ class SessionVerificationViewModel: SessionVerificationViewModelType, SessionVer .store(in: &cancellables) } - override func process(viewAction: SessionVerificationViewAction) { + override func process(viewAction: SessionVerificationScreenViewAction) { switch viewAction { case .requestVerification: stateMachine.processEvent(.requestVerification) diff --git a/ElementX/Sources/Screens/SessionVerification/SessionVerificationViewModelProtocol.swift b/ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenViewModelProtocol.swift similarity index 83% rename from ElementX/Sources/Screens/SessionVerification/SessionVerificationViewModelProtocol.swift rename to ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenViewModelProtocol.swift index 2aa2e4238..9c1ebb74f 100644 --- a/ElementX/Sources/Screens/SessionVerification/SessionVerificationViewModelProtocol.swift +++ b/ElementX/Sources/Screens/SessionVerificationScreen/SessionVerificationScreenViewModelProtocol.swift @@ -17,7 +17,7 @@ import Foundation @MainActor -protocol SessionVerificationViewModelProtocol { - var callback: ((SessionVerificationViewModelAction) -> Void)? { get set } +protocol SessionVerificationScreenViewModelProtocol { + var callback: ((SessionVerificationScreenViewModelAction) -> Void)? { get set } var context: SessionVerificationViewModelType.Context { get } } diff --git a/ElementX/Sources/Screens/SessionVerification/View/SessionVerificationScreen.swift b/ElementX/Sources/Screens/SessionVerificationScreen/View/SessionVerificationScreen.swift similarity index 95% rename from ElementX/Sources/Screens/SessionVerification/View/SessionVerificationScreen.swift rename to ElementX/Sources/Screens/SessionVerificationScreen/View/SessionVerificationScreen.swift index 08f63e025..7015f38b0 100644 --- a/ElementX/Sources/Screens/SessionVerification/View/SessionVerificationScreen.swift +++ b/ElementX/Sources/Screens/SessionVerificationScreen/View/SessionVerificationScreen.swift @@ -17,7 +17,7 @@ import SwiftUI struct SessionVerificationScreen: View { - @ObservedObject var context: SessionVerificationViewModel.Context + @ObservedObject var context: SessionVerificationScreenViewModel.Context var body: some View { NavigationStack { @@ -245,9 +245,9 @@ struct SessionVerification_Previews: PreviewProvider { .previewDisplayName("Verified") } - static func sessionVerificationScreen(state: SessionVerificationStateMachine.State) -> some View { - let viewModel = SessionVerificationViewModel(sessionVerificationControllerProxy: SessionVerificationControllerProxyMock.configureMock(), - initialState: SessionVerificationViewState(verificationState: state)) + static func sessionVerificationScreen(state: SessionVerificationScreenStateMachine.State) -> some View { + let viewModel = SessionVerificationScreenViewModel(sessionVerificationControllerProxy: SessionVerificationControllerProxyMock.configureMock(), + initialState: SessionVerificationScreenViewState(verificationState: state)) return SessionVerificationScreen(context: viewModel.context) } diff --git a/ElementX/Sources/Screens/Settings/SettingsScreenCoordinator.swift b/ElementX/Sources/Screens/SettingsScreen/SettingsScreenCoordinator.swift similarity index 80% rename from ElementX/Sources/Screens/Settings/SettingsScreenCoordinator.swift rename to ElementX/Sources/Screens/SettingsScreen/SettingsScreenCoordinator.swift index 1f9f2aa50..ed7534590 100644 --- a/ElementX/Sources/Screens/Settings/SettingsScreenCoordinator.swift +++ b/ElementX/Sources/Screens/SettingsScreen/SettingsScreenCoordinator.swift @@ -74,13 +74,13 @@ final class SettingsScreenCoordinator: CoordinatorProtocol { } private func presentBugReportScreen() { - let params = BugReportCoordinatorParameters(bugReportService: parameters.bugReportService, - userID: parameters.userSession.userID, - deviceID: parameters.userSession.deviceID, - userIndicatorController: parameters.userIndicatorController, - screenshot: nil, - isModallyPresented: false) - let coordinator = BugReportCoordinator(parameters: params) + let params = BugReportScreenCoordinatorParameters(bugReportService: parameters.bugReportService, + userID: parameters.userSession.userID, + deviceID: parameters.userSession.deviceID, + userIndicatorController: parameters.userIndicatorController, + screenshot: nil, + isModallyPresented: false) + let coordinator = BugReportScreenCoordinator(parameters: params) coordinator.completion = { [weak self] result in switch result { case .finish: @@ -100,8 +100,8 @@ final class SettingsScreenCoordinator: CoordinatorProtocol { fatalError("The sessionVerificationController should aways be valid at this point") } - let verificationParameters = SessionVerificationCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationController) - let coordinator = SessionVerificationCoordinator(parameters: verificationParameters) + let verificationParameters = SessionVerificationScreenCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationController) + let coordinator = SessionVerificationScreenCoordinator(parameters: verificationParameters) coordinator.callback = { [weak self] in self?.parameters.navigationStackCoordinator?.setSheetCoordinator(nil) diff --git a/ElementX/Sources/Screens/Settings/SettingsScreenModels.swift b/ElementX/Sources/Screens/SettingsScreen/SettingsScreenModels.swift similarity index 100% rename from ElementX/Sources/Screens/Settings/SettingsScreenModels.swift rename to ElementX/Sources/Screens/SettingsScreen/SettingsScreenModels.swift diff --git a/ElementX/Sources/Screens/Settings/SettingsScreenViewModel.swift b/ElementX/Sources/Screens/SettingsScreen/SettingsScreenViewModel.swift similarity index 100% rename from ElementX/Sources/Screens/Settings/SettingsScreenViewModel.swift rename to ElementX/Sources/Screens/SettingsScreen/SettingsScreenViewModel.swift diff --git a/ElementX/Sources/Screens/Settings/SettingsScreenViewModelProtocol.swift b/ElementX/Sources/Screens/SettingsScreen/SettingsScreenViewModelProtocol.swift similarity index 100% rename from ElementX/Sources/Screens/Settings/SettingsScreenViewModelProtocol.swift rename to ElementX/Sources/Screens/SettingsScreen/SettingsScreenViewModelProtocol.swift diff --git a/ElementX/Sources/Screens/Settings/View/SettingsScreen.swift b/ElementX/Sources/Screens/SettingsScreen/View/SettingsScreen.swift similarity index 100% rename from ElementX/Sources/Screens/Settings/View/SettingsScreen.swift rename to ElementX/Sources/Screens/SettingsScreen/View/SettingsScreen.swift diff --git a/ElementX/Sources/Screens/StartChat/StartChatCoordinator.swift b/ElementX/Sources/Screens/StartChat/StartChatCoordinator.swift index cfcd7fc00..ea896e991 100644 --- a/ElementX/Sources/Screens/StartChat/StartChatCoordinator.swift +++ b/ElementX/Sources/Screens/StartChat/StartChatCoordinator.swift @@ -70,8 +70,8 @@ final class StartChatCoordinator: CoordinatorProtocol { // MARK: - Private private func presentInviteUsersScreen() { - let inviteParameters = InviteUsersCoordinatorParameters(userSession: parameters.userSession, userDiscoveryService: parameters.userDiscoveryService) - let coordinator = InviteUsersCoordinator(parameters: inviteParameters) + let inviteParameters = InviteUsersScreenCoordinatorParameters(userSession: parameters.userSession, userDiscoveryService: parameters.userDiscoveryService) + let coordinator = InviteUsersScreenCoordinator(parameters: inviteParameters) coordinator.actions.sink { [weak self] result in switch result { case .close: diff --git a/ElementX/Sources/Services/UserSession/UserSessionFlowCoordinator.swift b/ElementX/Sources/Services/UserSession/UserSessionFlowCoordinator.swift index a4d4238d6..0f837229d 100644 --- a/ElementX/Sources/Services/UserSession/UserSessionFlowCoordinator.swift +++ b/ElementX/Sources/Services/UserSession/UserSessionFlowCoordinator.swift @@ -269,9 +269,9 @@ class UserSessionFlowCoordinator: CoordinatorProtocol { fatalError("The sessionVerificationController should aways be valid at this point") } - let parameters = SessionVerificationCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationController) + let parameters = SessionVerificationScreenCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationController) - let coordinator = SessionVerificationCoordinator(parameters: parameters) + let coordinator = SessionVerificationScreenCoordinator(parameters: parameters) coordinator.callback = { [weak self] in self?.navigationSplitCoordinator.setSheetCoordinator(nil) @@ -309,7 +309,7 @@ class UserSessionFlowCoordinator: CoordinatorProtocol { self?.stateMachine.processEvent(.dismissedStartChatScreen) } } - + // MARK: Bug reporting private func presentFeedbackScreen(animated: Bool, for image: UIImage? = nil) { @@ -317,13 +317,13 @@ class UserSessionFlowCoordinator: CoordinatorProtocol { let userIndicatorController = UserIndicatorController(rootCoordinator: feedbackNavigationStackCoordinator) - let parameters = BugReportCoordinatorParameters(bugReportService: bugReportService, - userID: userSession.userID, - deviceID: userSession.deviceID, - userIndicatorController: userIndicatorController, - screenshot: image, - isModallyPresented: true) - let coordinator = BugReportCoordinator(parameters: parameters) + let parameters = BugReportScreenCoordinatorParameters(bugReportService: bugReportService, + userID: userSession.userID, + deviceID: userSession.deviceID, + userIndicatorController: userIndicatorController, + screenshot: image, + isModallyPresented: true) + let coordinator = BugReportScreenCoordinator(parameters: parameters) coordinator.completion = { [weak self] _ in self?.navigationSplitCoordinator.setSheetCoordinator(nil) } @@ -338,8 +338,8 @@ class UserSessionFlowCoordinator: CoordinatorProtocol { // MARK: Invites list private func presentInvitesList(animated: Bool) { - let parameters = InvitesCoordinatorParameters(userSession: userSession) - let coordinator = InvitesCoordinator(parameters: parameters) + let parameters = InvitesScreenCoordinatorParameters(userSession: userSession) + let coordinator = InvitesScreenCoordinator(parameters: parameters) coordinator.actions .sink { [weak self] action in diff --git a/ElementX/Sources/Screens/UserDiscoverySection/SearchUsersSection.swift b/ElementX/Sources/Services/Users/UserDiscoverySection.swift similarity index 100% rename from ElementX/Sources/Screens/UserDiscoverySection/SearchUsersSection.swift rename to ElementX/Sources/Services/Users/UserDiscoverySection.swift diff --git a/ElementX/Sources/UITests/UITestsAppCoordinator.swift b/ElementX/Sources/UITests/UITestsAppCoordinator.swift index b725bc62c..5dd0f61e5 100644 --- a/ElementX/Sources/UITests/UITestsAppCoordinator.swift +++ b/ElementX/Sources/UITests/UITestsAppCoordinator.swift @@ -78,7 +78,7 @@ class MockScreen: Identifiable { userIndicatorController: MockUserIndicatorController(), isModallyPresented: false)) case .analyticsPrompt: - return AnalyticsPromptCoordinator() + return AnalyticsPromptScreenCoordinator() case .analyticsSettingsScreen: let navigationStackCoordinator = NavigationStackCoordinator() let coordinator = AnalyticsSettingsScreenCoordinator() @@ -124,22 +124,22 @@ class MockScreen: Identifiable { return navigationStackCoordinator case .bugReport: let navigationStackCoordinator = NavigationStackCoordinator() - let coordinator = BugReportCoordinator(parameters: .init(bugReportService: BugReportServiceMock(), - userID: "@mock:client.com", - deviceID: nil, - userIndicatorController: nil, - screenshot: nil, - isModallyPresented: true)) + let coordinator = BugReportScreenCoordinator(parameters: .init(bugReportService: BugReportServiceMock(), + userID: "@mock:client.com", + deviceID: nil, + userIndicatorController: nil, + screenshot: nil, + isModallyPresented: true)) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator case .bugReportWithScreenshot: let navigationStackCoordinator = NavigationStackCoordinator() - let coordinator = BugReportCoordinator(parameters: .init(bugReportService: BugReportServiceMock(), - userID: "@mock:client.com", - deviceID: nil, - userIndicatorController: nil, - screenshot: Asset.Images.appLogo.image, - isModallyPresented: false)) + let coordinator = BugReportScreenCoordinator(parameters: .init(bugReportService: BugReportServiceMock(), + userID: "@mock:client.com", + deviceID: nil, + userIndicatorController: nil, + screenshot: Asset.Images.appLogo.image, + isModallyPresented: false)) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator case .onboarding: @@ -255,8 +255,8 @@ class MockScreen: Identifiable { return navigationStackCoordinator case .sessionVerification: var sessionVerificationControllerProxy = SessionVerificationControllerProxyMock.configureMock(requestDelay: .seconds(2)) - let parameters = SessionVerificationCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationControllerProxy) - return SessionVerificationCoordinator(parameters: parameters) + let parameters = SessionVerificationScreenCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationControllerProxy) + return SessionVerificationScreenCoordinator(parameters: parameters) case .userSessionScreen: let navigationSplitCoordinator = NavigationSplitCoordinator(placeholderCoordinator: SplashScreenCoordinator()) @@ -279,9 +279,9 @@ class MockScreen: Identifiable { displayName: "Room", isEncrypted: true, members: members)) - let coordinator = RoomDetailsCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator, - roomProxy: roomProxy, - mediaProvider: MockMediaProvider())) + let coordinator = RoomDetailsScreenCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator, + roomProxy: roomProxy, + mediaProvider: MockMediaProvider())) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator case .roomDetailsScreenWithRoomAvatar: @@ -294,24 +294,24 @@ class MockScreen: Identifiable { isEncrypted: true, canonicalAlias: "#mock:room.org", members: members)) - let coordinator = RoomDetailsCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator, - roomProxy: roomProxy, - mediaProvider: MockMediaProvider())) + let coordinator = RoomDetailsScreenCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator, + roomProxy: roomProxy, + mediaProvider: MockMediaProvider())) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator case .roomMembersListScreen: let navigationStackCoordinator = NavigationStackCoordinator() let members: [RoomMemberProxyMock] = [.mockAlice, .mockBob, .mockCharlie] - let coordinator = RoomMembersListCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator, - mediaProvider: MockMediaProvider(), - members: members)) + let coordinator = RoomMembersListScreenCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator, + mediaProvider: MockMediaProvider(), + members: members)) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator case .reportContent: let navigationStackCoordinator = NavigationStackCoordinator() - let coordinator = ReportContentCoordinator(parameters: .init(itemID: "test", - senderID: RoomMemberProxyMock.mockAlice.userID, - roomProxy: RoomProxyMock(with: .init(displayName: "test")))) + let coordinator = ReportContentScreenCoordinator(parameters: .init(itemID: "test", + senderID: RoomMemberProxyMock.mockAlice.userID, + roomProxy: RoomProxyMock(with: .init(displayName: "test")))) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator case .startChat: @@ -337,17 +337,17 @@ class MockScreen: Identifiable { return navigationStackCoordinator case .roomMemberDetailsAccountOwner: let navigationStackCoordinator = NavigationStackCoordinator() - let coordinator = RoomMemberDetailsCoordinator(parameters: .init(roomMemberProxy: RoomMemberProxyMock.mockMe, mediaProvider: MockMediaProvider())) + let coordinator = RoomMemberDetailsScreenCoordinator(parameters: .init(roomMemberProxy: RoomMemberProxyMock.mockMe, mediaProvider: MockMediaProvider())) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator case .roomMemberDetails: let navigationStackCoordinator = NavigationStackCoordinator() - let coordinator = RoomMemberDetailsCoordinator(parameters: .init(roomMemberProxy: RoomMemberProxyMock.mockAlice, mediaProvider: MockMediaProvider())) + let coordinator = RoomMemberDetailsScreenCoordinator(parameters: .init(roomMemberProxy: RoomMemberProxyMock.mockAlice, mediaProvider: MockMediaProvider())) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator case .roomMemberDetailsIgnoredUser: let navigationStackCoordinator = NavigationStackCoordinator() - let coordinator = RoomMemberDetailsCoordinator(parameters: .init(roomMemberProxy: RoomMemberProxyMock.mockIgnored, mediaProvider: MockMediaProvider())) + let coordinator = RoomMemberDetailsScreenCoordinator(parameters: .init(roomMemberProxy: RoomMemberProxyMock.mockIgnored, mediaProvider: MockMediaProvider())) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator case .roomDetailsScreenDmDetails: @@ -359,9 +359,9 @@ class MockScreen: Identifiable { isDirect: true, isEncrypted: true, members: members)) - let coordinator = RoomDetailsCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator, - roomProxy: roomProxy, - mediaProvider: MockMediaProvider())) + let coordinator = RoomDetailsScreenCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator, + roomProxy: roomProxy, + mediaProvider: MockMediaProvider())) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator case .invitesWithBadges: @@ -373,7 +373,7 @@ class MockScreen: Identifiable { clientProxy.visibleRoomsSummaryProvider = summaryProvider clientProxy.invitesSummaryProvider = summaryProvider - let coordinator = InvitesCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider()))) + let coordinator = InvitesScreenCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider()))) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator case .invites: @@ -385,13 +385,13 @@ class MockScreen: Identifiable { clientProxy.visibleRoomsSummaryProvider = summaryProvider clientProxy.invitesSummaryProvider = summaryProvider - let coordinator = InvitesCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider()))) + let coordinator = InvitesScreenCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider()))) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator case .invitesNoInvites: let navigationStackCoordinator = NavigationStackCoordinator() let clientProxy = MockClientProxy(userID: "@mock:client.com") - let coordinator = InvitesCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider()))) + let coordinator = InvitesScreenCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider()))) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator case .inviteUsers: @@ -400,7 +400,7 @@ class MockScreen: Identifiable { let userDiscoveryMock = UserDiscoveryServiceMock() userDiscoveryMock.fetchSuggestionsReturnValue = .success([.mockAlice, .mockBob, .mockCharlie]) userDiscoveryMock.searchProfilesWithReturnValue = .success([]) - let coordinator = InviteUsersCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: MockClientProxy(userID: "@mock:client.com"), mediaProvider: MockMediaProvider()), userDiscoveryService: userDiscoveryMock)) + let coordinator = InviteUsersScreenCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: MockClientProxy(userID: "@mock:client.com"), mediaProvider: MockMediaProvider()), userDiscoveryService: userDiscoveryMock)) navigationStackCoordinator.setRootCoordinator(coordinator) return navigationStackCoordinator } diff --git a/UnitTests/Sources/BugReportViewModelTests.swift b/UnitTests/Sources/BugReportViewModelTests.swift index 878f8e6ac..cba8f1b24 100644 --- a/UnitTests/Sources/BugReportViewModelTests.swift +++ b/UnitTests/Sources/BugReportViewModelTests.swift @@ -23,13 +23,13 @@ class BugReportViewModelTests: XCTestCase { enum TestError: Error { case testError } - + func testInitialState() { - let viewModel = BugReportViewModel(bugReportService: BugReportServiceMock(), - userID: "@mock.client.com", - deviceID: nil, - screenshot: nil, - isModallyPresented: false) + let viewModel = BugReportScreenViewModel(bugReportService: BugReportServiceMock(), + userID: "@mock.client.com", + deviceID: nil, + screenshot: nil, + isModallyPresented: false) let context = viewModel.context XCTAssertEqual(context.reportText, "") @@ -38,11 +38,11 @@ class BugReportViewModelTests: XCTestCase { } func testClearScreenshot() async throws { - let viewModel = BugReportViewModel(bugReportService: BugReportServiceMock(), - userID: "@mock.client.com", - deviceID: nil, - screenshot: UIImage.actions, - isModallyPresented: false) + let viewModel = BugReportScreenViewModel(bugReportService: BugReportServiceMock(), + userID: "@mock.client.com", + deviceID: nil, + screenshot: UIImage.actions, + isModallyPresented: false) let context = viewModel.context context.send(viewAction: .removeScreenshot) @@ -50,23 +50,23 @@ class BugReportViewModelTests: XCTestCase { } func testAttachScreenshot() async throws { - let viewModel = BugReportViewModel(bugReportService: BugReportServiceMock(), - userID: "@mock.client.com", - deviceID: nil, - screenshot: nil, isModallyPresented: false) + let viewModel = BugReportScreenViewModel(bugReportService: BugReportServiceMock(), + userID: "@mock.client.com", + deviceID: nil, + screenshot: nil, isModallyPresented: false) let context = viewModel.context XCTAssertNil(context.viewState.screenshot) context.send(viewAction: .attachScreenshot(UIImage.actions)) XCTAssert(context.viewState.screenshot == UIImage.actions) } - + func testSendReportWithSuccess() async throws { let mockService = BugReportServiceMock() mockService.submitBugReportProgressListenerReturnValue = SubmitBugReportResponse(reportUrl: "https://test.test") - let viewModel = BugReportViewModel(bugReportService: mockService, - userID: "@mock.client.com", - deviceID: nil, - screenshot: nil, isModallyPresented: false) + let viewModel = BugReportScreenViewModel(bugReportService: mockService, + userID: "@mock.client.com", + deviceID: nil, + screenshot: nil, isModallyPresented: false) let context = viewModel.context context.send(viewAction: .submit) @@ -89,10 +89,10 @@ class BugReportViewModelTests: XCTestCase { mockService.submitBugReportProgressListenerClosure = { _, _ in throw TestError.testError } - let viewModel = BugReportViewModel(bugReportService: mockService, - userID: "@mock.client.com", - deviceID: nil, - screenshot: nil, isModallyPresented: false) + let viewModel = BugReportScreenViewModel(bugReportService: mockService, + userID: "@mock.client.com", + deviceID: nil, + screenshot: nil, isModallyPresented: false) let context = viewModel.context context.send(viewAction: .submit) diff --git a/UnitTests/Sources/FilePreviewViewModelTests.swift b/UnitTests/Sources/FilePreviewViewModelTests.swift index d5a5f1978..ef9fc20db 100644 --- a/UnitTests/Sources/FilePreviewViewModelTests.swift +++ b/UnitTests/Sources/FilePreviewViewModelTests.swift @@ -20,11 +20,11 @@ import XCTest @MainActor class FilePreviewScreenViewModelTests: XCTestCase { - var viewModel: FilePreviewViewModelProtocol! - var context: FilePreviewViewModelType.Context! + var viewModel: FilePreviewScreenViewModelProtocol! + var context: FilePreviewScreenViewModelType.Context! override func setUpWithError() throws { - viewModel = FilePreviewViewModel(mediaFile: .unmanaged(url: URL(staticString: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"))) + viewModel = FilePreviewScreenViewModel(mediaFile: .unmanaged(url: URL(staticString: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"))) context = viewModel.context } diff --git a/UnitTests/Sources/InviteUsersViewModelTests.swift b/UnitTests/Sources/InviteUsersViewModelTests.swift index 487c93d7e..8930a6a67 100644 --- a/UnitTests/Sources/InviteUsersViewModelTests.swift +++ b/UnitTests/Sources/InviteUsersViewModelTests.swift @@ -20,11 +20,11 @@ import XCTest @MainActor class InviteUsersScreenViewModelTests: XCTestCase { - var viewModel: InviteUsersViewModelProtocol! + var viewModel: InviteUsersScreenViewModelProtocol! var clientProxy: MockClientProxy! var userDiscoveryService: UserDiscoveryServiceMock! - var context: InviteUsersViewModel.Context { + var context: InviteUsersScreenViewModel.Context { viewModel.context } @@ -34,7 +34,7 @@ class InviteUsersScreenViewModelTests: XCTestCase { userDiscoveryService.fetchSuggestionsReturnValue = .success([]) userDiscoveryService.searchProfilesWithReturnValue = .success([]) let userSession = MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider()) - let viewModel = InviteUsersViewModel(userSession: userSession, userDiscoveryService: userDiscoveryService) + let viewModel = InviteUsersScreenViewModel(userSession: userSession, userDiscoveryService: userDiscoveryService) viewModel.state.usersSection = .init(type: .suggestions, users: [.mockAlice, .mockBob, .mockCharlie]) self.viewModel = viewModel } diff --git a/UnitTests/Sources/InvitesViewModelTests.swift b/UnitTests/Sources/InvitesViewModelTests.swift index 7cbfb87da..3ecdc648b 100644 --- a/UnitTests/Sources/InvitesViewModelTests.swift +++ b/UnitTests/Sources/InvitesViewModelTests.swift @@ -19,11 +19,11 @@ import XCTest @MainActor class InvitesViewModelTests: XCTestCase { - var viewModel: InvitesViewModelProtocol! + var viewModel: InvitesScreenViewModelProtocol! var clientProxy: MockClientProxy! var userSession: MockUserSession! - var context: InvitesViewModelType.Context { + var context: InvitesScreenViewModelType.Context { viewModel.context } @@ -54,7 +54,7 @@ class InvitesViewModelTests: XCTestCase { } setupViewModel(roomSummaries: invites) context.send(viewAction: .accept(.init(roomDetails: details, isUnread: false))) - let action: InvitesViewModelAction? = await viewModel.actions.values.first() + let action: InvitesScreenViewModelAction? = await viewModel.actions.values.first() guard case .openRoom(let roomID) = action else { XCTFail("Wrong view model action") return @@ -82,6 +82,6 @@ class InvitesViewModelTests: XCTestCase { clientProxy.visibleRoomsSummaryProvider = summaryProvider } - viewModel = InvitesViewModel(userSession: userSession) + viewModel = InvitesScreenViewModel(userSession: userSession) } } diff --git a/UnitTests/Sources/ReportContentViewModelTests.swift b/UnitTests/Sources/ReportContentViewModelTests.swift index 193d40b6c..66fbc9b7c 100644 --- a/UnitTests/Sources/ReportContentViewModelTests.swift +++ b/UnitTests/Sources/ReportContentViewModelTests.swift @@ -28,9 +28,9 @@ class ReportContentScreenViewModelTests: XCTestCase { // Given the report content view for some content. let roomProxy = RoomProxyMock(with: .init(displayName: "test")) roomProxy.reportContentReasonReturnValue = .success(()) - let viewModel = ReportContentViewModel(itemID: itemID, - senderID: senderID, - roomProxy: roomProxy) + let viewModel = ReportContentScreenViewModel(itemID: itemID, + senderID: senderID, + roomProxy: roomProxy) // When reporting the content without ignoring the user. viewModel.state.bindings.reasonText = reportReason @@ -52,9 +52,9 @@ class ReportContentScreenViewModelTests: XCTestCase { let roomProxy = RoomProxyMock(with: .init(displayName: "test")) roomProxy.reportContentReasonReturnValue = .success(()) roomProxy.ignoreUserReturnValue = .success(()) - let viewModel = ReportContentViewModel(itemID: itemID, - senderID: senderID, - roomProxy: roomProxy) + let viewModel = ReportContentScreenViewModel(itemID: itemID, + senderID: senderID, + roomProxy: roomProxy) // When reporting the content and also ignoring the user. viewModel.state.bindings.reasonText = reportReason diff --git a/UnitTests/Sources/RoomDetailsViewModelTests.swift b/UnitTests/Sources/RoomDetailsViewModelTests.swift index c2a1e2db3..092712c90 100644 --- a/UnitTests/Sources/RoomDetailsViewModelTests.swift +++ b/UnitTests/Sources/RoomDetailsViewModelTests.swift @@ -20,19 +20,19 @@ import XCTest @MainActor class RoomDetailsScreenViewModelTests: XCTestCase { - var viewModel: RoomDetailsViewModelProtocol! + var viewModel: RoomDetailsScreenViewModelProtocol! var roomProxyMock: RoomProxyMock! - var context: RoomDetailsViewModelType.Context { viewModel.context } + var context: RoomDetailsScreenViewModelType.Context { viewModel.context } override func setUp() { roomProxyMock = RoomProxyMock(with: .init(displayName: "Test")) - viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) } func testLeaveRoomTappedWhenPublic() async { let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice] roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: true, members: mockedMembers)) - viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) context.send(viewAction: .processTapLeave) XCTAssertEqual(context.leaveRoomAlertItem?.state, .public) XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertSubtitle) @@ -41,7 +41,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { func testLeaveRoomTappedWhenRoomNotPublic() async { let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice] roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: false, members: mockedMembers)) - viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) context.send(viewAction: .processTapLeave) XCTAssertEqual(context.leaveRoomAlertItem?.state, .private) XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertPrivateSubtitle) @@ -84,19 +84,19 @@ class RoomDetailsScreenViewModelTests: XCTestCase { let recipient = RoomMemberProxyMock.mockDan let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient] roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) - viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient)) } func testIgnoreSuccess() async throws { let recipient = RoomMemberProxyMock.mockDan recipient.ignoreUserClosure = { - try? await Task.sleep(for: .milliseconds(10)) + try? await Task.sleep(for: .milliseconds(100)) return .success(()) } let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient] roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) - viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient)) context.send(viewAction: .ignoreConfirmed) @@ -116,7 +116,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { } let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient] roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) - viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient)) context.send(viewAction: .ignoreConfirmed) @@ -137,7 +137,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { } let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient] roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) - viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient)) context.send(viewAction: .unignoreConfirmed) @@ -152,12 +152,12 @@ class RoomDetailsScreenViewModelTests: XCTestCase { func testUnignoreFailure() async throws { let recipient = RoomMemberProxyMock.mockIgnored recipient.unignoreUserClosure = { - try? await Task.sleep(for: .milliseconds(10)) + try? await Task.sleep(for: .milliseconds(100)) return .failure(.unignoreUserFailed) } let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient] roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) - viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider()) XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient)) context.send(viewAction: .unignoreConfirmed) diff --git a/UnitTests/Sources/RoomMemberDetailsViewModelTests.swift b/UnitTests/Sources/RoomMemberDetailsViewModelTests.swift index f88569175..7e7fd177f 100644 --- a/UnitTests/Sources/RoomMemberDetailsViewModelTests.swift +++ b/UnitTests/Sources/RoomMemberDetailsViewModelTests.swift @@ -20,13 +20,13 @@ import XCTest @MainActor class RoomMemberDetailsViewModelTests: XCTestCase { - var viewModel: RoomMemberDetailsViewModelProtocol! + var viewModel: RoomMemberDetailsScreenViewModelProtocol! var roomMemberProxyMock: RoomMemberProxyMock! - var context: RoomMemberDetailsViewModelType.Context { viewModel.context } + var context: RoomMemberDetailsScreenViewModelType.Context { viewModel.context } func testInitialState() async { roomMemberProxyMock = RoomMemberProxyMock.mockAlice - viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider()) XCTAssertEqual(context.viewState.details, RoomMemberDetails(withProxy: roomMemberProxyMock)) XCTAssertNil(context.ignoreUserAlert) @@ -36,10 +36,10 @@ class RoomMemberDetailsViewModelTests: XCTestCase { func testIgnoreSuccess() async throws { roomMemberProxyMock = RoomMemberProxyMock.mockAlice roomMemberProxyMock.ignoreUserClosure = { - try? await Task.sleep(for: .milliseconds(10)) + try? await Task.sleep(for: .milliseconds(100)) return .success(()) } - viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider()) context.send(viewAction: .showIgnoreAlert) XCTAssertEqual(context.ignoreUserAlert, .init(action: .ignore)) @@ -56,10 +56,10 @@ class RoomMemberDetailsViewModelTests: XCTestCase { func testIgnoreFailure() async throws { roomMemberProxyMock = RoomMemberProxyMock.mockAlice roomMemberProxyMock.ignoreUserClosure = { - try? await Task.sleep(for: .milliseconds(10)) + try? await Task.sleep(for: .milliseconds(100)) return .failure(.ignoreUserFailed) } - viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider()) context.send(viewAction: .showIgnoreAlert) XCTAssertEqual(context.ignoreUserAlert, .init(action: .ignore)) @@ -76,10 +76,10 @@ class RoomMemberDetailsViewModelTests: XCTestCase { func testUnignoreSuccess() async throws { roomMemberProxyMock = RoomMemberProxyMock.mockIgnored roomMemberProxyMock.unignoreUserClosure = { - try? await Task.sleep(for: .milliseconds(10)) + try? await Task.sleep(for: .milliseconds(100)) return .success(()) } - viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider()) context.send(viewAction: .showUnignoreAlert) XCTAssertEqual(context.ignoreUserAlert, .init(action: .unignore)) @@ -96,10 +96,10 @@ class RoomMemberDetailsViewModelTests: XCTestCase { func testUnignoreFailure() async throws { roomMemberProxyMock = RoomMemberProxyMock.mockIgnored roomMemberProxyMock.unignoreUserClosure = { - try? await Task.sleep(for: .milliseconds(10)) + try? await Task.sleep(for: .milliseconds(100)) return .failure(.unignoreUserFailed) } - viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider()) context.send(viewAction: .showUnignoreAlert) XCTAssertEqual(context.ignoreUserAlert, .init(action: .unignore)) @@ -116,7 +116,7 @@ class RoomMemberDetailsViewModelTests: XCTestCase { func testInitialStateAccountOwner() async { roomMemberProxyMock = RoomMemberProxyMock.mockMe - viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider()) XCTAssertEqual(context.viewState.details, RoomMemberDetails(withProxy: roomMemberProxyMock)) XCTAssertNil(context.ignoreUserAlert) @@ -125,7 +125,7 @@ class RoomMemberDetailsViewModelTests: XCTestCase { func testInitialStateIgnoredUser() async { roomMemberProxyMock = RoomMemberProxyMock.mockIgnored - viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider()) + viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider()) XCTAssertEqual(context.viewState.details, RoomMemberDetails(withProxy: roomMemberProxyMock)) XCTAssertNil(context.ignoreUserAlert) diff --git a/UnitTests/Sources/SessionVerificationStateMachineTests.swift b/UnitTests/Sources/SessionVerificationStateMachineTests.swift index 99e6a4556..07b829b88 100644 --- a/UnitTests/Sources/SessionVerificationStateMachineTests.swift +++ b/UnitTests/Sources/SessionVerificationStateMachineTests.swift @@ -20,11 +20,11 @@ import XCTest @MainActor class SessionVerificationStateMachineTests: XCTestCase { - private var stateMachine: SessionVerificationStateMachine! + private var stateMachine: SessionVerificationScreenStateMachine! @MainActor override func setUpWithError() throws { - stateMachine = SessionVerificationStateMachine() + stateMachine = SessionVerificationScreenStateMachine() } func testAcceptChallenge() { diff --git a/UnitTests/Sources/SessionVerificationViewModelTests.swift b/UnitTests/Sources/SessionVerificationViewModelTests.swift index a20f82eff..f65677ade 100644 --- a/UnitTests/Sources/SessionVerificationViewModelTests.swift +++ b/UnitTests/Sources/SessionVerificationViewModelTests.swift @@ -21,13 +21,13 @@ import XCTest @MainActor class SessionVerificationViewModelTests: XCTestCase { - var viewModel: SessionVerificationViewModelProtocol! + var viewModel: SessionVerificationScreenViewModelProtocol! var context: SessionVerificationViewModelType.Context! var sessionVerificationController: SessionVerificationControllerProxyMock! override func setUpWithError() throws { sessionVerificationController = SessionVerificationControllerProxyMock.configureMock() - viewModel = SessionVerificationViewModel(sessionVerificationControllerProxy: sessionVerificationController) + viewModel = SessionVerificationScreenViewModel(sessionVerificationControllerProxy: sessionVerificationController) context = viewModel.context }