diff --git a/AccessibilityTests/Sources/GeneratedAccessibilityTests.swift b/AccessibilityTests/Sources/GeneratedAccessibilityTests.swift index 6ba3a07d8..39c83cc86 100644 --- a/AccessibilityTests/Sources/GeneratedAccessibilityTests.swift +++ b/AccessibilityTests/Sources/GeneratedAccessibilityTests.swift @@ -639,10 +639,6 @@ extension AccessibilityTests { try await performAccessibilityAudit(named: "SpaceHeaderView_Previews") } - func testSpaceListScreen() async throws { - try await performAccessibilityAudit(named: "SpaceListScreen_Previews") - } - func testSpaceRoomCell() async throws { try await performAccessibilityAudit(named: "SpaceRoomCell_Previews") } @@ -659,6 +655,10 @@ extension AccessibilityTests { try await performAccessibilityAudit(named: "SpacesAnnouncementSheetView_Previews") } + func testSpacesScreen() async throws { + try await performAccessibilityAudit(named: "SpacesScreen_Previews") + } + func testSplashScreen() async throws { try await performAccessibilityAudit(named: "SplashScreen_Previews") } diff --git a/ElementX.xcodeproj/project.pbxproj b/ElementX.xcodeproj/project.pbxproj index 1d68a8887..22918ef20 100644 --- a/ElementX.xcodeproj/project.pbxproj +++ b/ElementX.xcodeproj/project.pbxproj @@ -98,6 +98,7 @@ 0E8C480700870BB34A2A360F /* DeviceKit in Frameworks */ = {isa = PBXBuildFile; productRef = 4003BC24B24C9E63D3304177 /* DeviceKit */; }; 0EA6537A07E2DC882AEA5962 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 187853A7E643995EE49FAD43 /* Localizable.stringsdict */; }; 0EBF0A411E1C46D4BFA2B087 /* ManageAuthorizedSpacesScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB9CD3A0A39BC063438E12D4 /* ManageAuthorizedSpacesScreenCoordinator.swift */; }; + 0EC0AF8287D6E698969FC25B /* SpacesAnnouncementSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E9621C742A20AC3D40497F /* SpacesAnnouncementSheetView.swift */; }; 0EE5EBA18BA1FE10254BB489 /* UIFont+AttributedStringBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = E8CA187FE656EE5A3F6C7DE5 /* UIFont+AttributedStringBuilder.m */; }; 0EEC614342F823E5BF966C2C /* AppLockTimerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A5B4CD611DE7E94F5BA87B2 /* AppLockTimerTests.swift */; }; 0F6C8033FA60CFD36F7CA205 /* AppLockSetupPINScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A019A12C866D64CF072024B9 /* AppLockSetupPINScreenViewModel.swift */; }; @@ -281,7 +282,6 @@ 2FEC6652055984389CE1BBEC /* TimelineProxyProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B50F03079F6B5EF9CA005F14 /* TimelineProxyProtocol.swift */; }; 3041EBA2660F28FFB7BDA339 /* EncryptionResetScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0FF9CB3EFA753277291F609 /* EncryptionResetScreenCoordinator.swift */; }; 3042527CB344A9EF1157FC26 /* AudioRecorderStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C55CC239AE12339C565F6C9A /* AudioRecorderStateTests.swift */; }; - 306ADA9D91EE5F0A30B5E500 /* SpaceListScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = F52DA8CCCABA0998C8AA273C /* SpaceListScreen.swift */; }; 308BD9343B95657FAA583FB7 /* GZIP in Frameworks */ = {isa = PBXBuildFile; productRef = 2B788C81F6369D164ADEB917 /* GZIP */; }; 30CC1DB7CE357659C82AA115 /* MediaProviderProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85EB16E7FE59A947CA441531 /* MediaProviderProtocol.swift */; }; 30E5628F74AD3C27A061BF25 /* QRCodeLoginScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BC1B7CB061C9865B2B91B56 /* QRCodeLoginScreenViewModel.swift */; }; @@ -309,7 +309,6 @@ 36206F74DDEBF9BEAF6A6A1F /* ExtensionLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41A8571A8A071FB41778C016 /* ExtensionLogger.swift */; }; 366D5BFE52CB79E804C7D095 /* CallScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAD9547E47C58930E2CE8306 /* CallScreenViewModelTests.swift */; }; 3684AD01C5FCB7616B28F629 /* TimelineMediaPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CDE60FEE95039CCCEEEE3B0 /* TimelineMediaPreviewController.swift */; }; - 368EC173453FB805C677BFEF /* SpaceListScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 893DD588E4D220261A172C30 /* SpaceListScreenViewModelProtocol.swift */; }; 36926D795D6D19177C7812F8 /* EncryptionResetPasswordScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6935A55AB3B0C94BC566DD6 /* EncryptionResetPasswordScreenCoordinator.swift */; }; 369BF960E52BBEE61F8A5BD1 /* BlockedUsersScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED60E4D2CD678E1EBF16F77A /* BlockedUsersScreen.swift */; }; 36AC963F2F04069B7FF1AA0C /* UIConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6D88E8AFFBF2C1D589C0FA /* UIConstants.swift */; }; @@ -343,7 +342,6 @@ 3B5AB5CF8D8163599C5BF19B /* PillViewOnBubblePreviews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2005B4AD70A792340E2694F1 /* PillViewOnBubblePreviews.swift */; }; 3B98049F56025726FB646ABD /* SwipeToReplyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B0E0B55E2EE75AF67029924 /* SwipeToReplyView.swift */; }; 3BEBDCB42BABFA3B456FECA7 /* MapTilerURLBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D262A26713C18BB70C82CA5 /* MapTilerURLBuilderTests.swift */; }; - 3C1E27520258D4C89058839E /* ChatsFlowCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B3BF242C93CD32C4C3E08D /* ChatsFlowCoordinator.swift */; }; 3C312A3AEDE58BB1C9BBB07C /* preview_avatar_room.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 12FD5280AF55AB7F50F8E47D /* preview_avatar_room.jpg */; }; 3C31E1A65EEB61E72E1113B4 /* AudioRecorderProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEC57C204D77908E355EF42 /* AudioRecorderProtocol.swift */; }; 3C549A0BF39F8A854D45D9FD /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = 020597E28A4BC8E1BE8EDF6E /* KeychainAccess */; }; @@ -429,6 +427,7 @@ 4BB282209EA82015D0DF8F89 /* NavigationStackCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C698E30698EC59302A8EEBD /* NavigationStackCoordinatorTests.swift */; }; 4BB51476A29E7E27BC14EA22 /* UserDetailsEditScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 022E6BD64CB4610B9C95FC02 /* UserDetailsEditScreenViewModel.swift */; }; 4BBF6C8E3EFC944B55231B19 /* AppMediatorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05AF58372CA884A789EB9C5A /* AppMediatorProtocol.swift */; }; + 4BD5AB54A6982CF19F5CC7C4 /* ChatsTabFlowCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0328F54E0C3AAEDDF3E05D9D /* ChatsTabFlowCoordinatorTests.swift */; }; 4C356F5CCB4CDC99BFA45185 /* AppLockSetupPINScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7884BD256C091EB511B2EDF /* AppLockSetupPINScreenViewModelProtocol.swift */; }; 4C5A638DAA8AF64565BA4866 /* EncryptedRoomTimelineItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5351EBD7A0B9610548E4B7B2 /* EncryptedRoomTimelineItem.swift */; }; 4C8C0C9FC10BA73AB7780534 /* RoomListFiltersStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AE0C9653870803E4F91F474 /* RoomListFiltersStateTests.swift */; }; @@ -443,7 +442,6 @@ 4DAEE2468669848B6C9F55B4 /* TimelineReadReceiptsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33035418BB35754232985871 /* TimelineReadReceiptsView.swift */; }; 4DEEFB73181C3B023DB42686 /* NetworkMonitorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1575947B7A6FE08C57FE5EE4 /* NetworkMonitorProtocol.swift */; }; 4E0D9E09B52CEC4C0E6211A8 /* MediaPickerScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64F49FB9EE2913234F06CE68 /* MediaPickerScreenCoordinator.swift */; }; - 4E1E13E5B913D35959E6BFCC /* ChatsFlowCoordinatorStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FB9DA81607C2739D8C6A0 /* ChatsFlowCoordinatorStateMachine.swift */; }; 4E36A66E0EDA74BF3A036FD0 /* RoomChangeRolesScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AAD8C633AA57948B34EDCF7 /* RoomChangeRolesScreenViewModelProtocol.swift */; }; 4E4EF97B9F9CEFAC726BA72F /* TimelineProviderMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62EACAFB3F3E017060F9F1C5 /* TimelineProviderMock.swift */; }; 4E8A2A2CFEB212F14E49E1A1 /* AppLockSetupSettingsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5484457C81B325660901B161 /* AppLockSetupSettingsScreen.swift */; }; @@ -498,6 +496,7 @@ 56F0A22972A3BB519DA2261C /* HomeScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F5530B2212862FA4BEFF2D /* HomeScreenViewModelProtocol.swift */; }; 5705511EBE083295EF98F998 /* FrequentlyUsedEmoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A2074C0449B83D5858BD2D7 /* FrequentlyUsedEmoji.swift */; }; 5710AAB27D5D866292C1FE06 /* SessionVerificationScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF848B41DAF1066F3054D4A1 /* SessionVerificationScreenModels.swift */; }; + 572474C7CA4B03FF0B5DF548 /* ChatsTabFlowCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C782FCBBCC9A0CD30453C50 /* ChatsTabFlowCoordinator.swift */; }; 5732395A4F71F51F9C754C5A /* ElementCallService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33AE897D86784CCA5E4E9227 /* ElementCallService.swift */; }; 5780E444F405AA1304E1C23E /* DeveloperOptionsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E521D6C2BF8DF0DFB35146 /* DeveloperOptionsScreen.swift */; }; 583A41A4BE76E2E9E0B97881 /* ResolveVerifiedUserSendFailureScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5AEB5907E24092D741718AF /* ResolveVerifiedUserSendFailureScreenCoordinator.swift */; }; @@ -730,7 +729,6 @@ 7E43FBB918AAC136034F2758 /* test_image.png in Resources */ = {isa = PBXBuildFile; fileRef = 810133CF215075C285FC6F3A /* test_image.png */; }; 7E91BAC17963ED41208F489B /* UserSessionStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E8BDC092D817B68CD9040C5 /* UserSessionStore.swift */; }; 7F0B6EB5CB52D7B7A2BB7D15 /* BannedRoomProxyMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FD7E851E2BA8C5A8D284B2A /* BannedRoomProxyMock.swift */; }; - 7F464E540158C3C6EC24678B /* ChatsFlowCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD6906A41D00178F2FF3C097 /* ChatsFlowCoordinatorTests.swift */; }; 7F61F9ACD5EC9E845EF3EFBF /* BugReportServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFFD3200F9960D4996159F10 /* BugReportServiceTests.swift */; }; 7F7EA51A9A43125A8CB6AC90 /* NotificationSettingsScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46D560DDA3B20C82766ACFAD /* NotificationSettingsScreenViewModel.swift */; }; 7F825CBD857D65DC986087BA /* NoticeRoomTimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F54FA7C5CB7B342EF9B9B2F /* NoticeRoomTimelineView.swift */; }; @@ -744,6 +742,7 @@ 80DEA2A4B20F9E279EAE6B2B /* UserProfile+Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAD01F7FC2BBAC7351948595 /* UserProfile+Mock.swift */; }; 80F6C8EFCA4564B67F0D34B0 /* DeactivateAccountScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77F75B3E9F99864048A422A /* DeactivateAccountScreenViewModelTests.swift */; }; 81A7C020CB5F6232242A8414 /* UserSessionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36C0A6D59717193F49EA986 /* UserSessionTests.swift */; }; + 81D4E550668B230A63B26CFB /* SpacesScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB98BFD8E93C7FCCEDEC46F9 /* SpacesScreenViewModel.swift */; }; 8285FF4B2C2331758C437FF7 /* ReportContentScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 713B48DBF65DE4B0DD445D66 /* ReportContentScreenViewModelProtocol.swift */; }; 828EA5009557C2B9DCD4CA0F /* UserDiscoverySection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D071F86CD47582B9196C9D16 /* UserDiscoverySection.swift */; }; 832A4EA1094B8FE423A08700 /* RoomChangeRolesScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B2A421198FD20AAAED20004 /* RoomChangeRolesScreen.swift */; }; @@ -787,6 +786,7 @@ 88887E40301FF0543ED5B59F /* AppAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FD22AEFFA20065494ED2333 /* AppAppearance.swift */; }; 88A3FBBC3D67996863DB9CAF /* TargetConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D829FD8958376614504B18 /* TargetConfiguration.swift */; }; 88A87AA16CD93F57143623F8 /* ClientBuilderHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC0CD1CAFD3F8B057F9AEA5 /* ClientBuilderHook.swift */; }; + 88C8B87A26D6B4E731F2B5B7 /* SpacesTabFlowCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4930A2674306A2DC9C92009D /* SpacesTabFlowCoordinator.swift */; }; 88CBF1595E39CE697928DE48 /* SFNumberedListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB5FF7A09B79B0C6B528F7C /* SFNumberedListView.swift */; }; 88F348E2CB14FF71CBBB665D /* AudioRoomTimelineItemContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7475C5AE20BA896930907EA8 /* AudioRoomTimelineItemContent.swift */; }; 890F0D453FE388756479AC97 /* AnalyticsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C687844F60BFF532D49A994C /* AnalyticsTests.swift */; }; @@ -796,6 +796,7 @@ 899793EFC63DF93C3E0141E7 /* RoomMemberDetailsScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FA60F848D1C14F873F9621A /* RoomMemberDetailsScreenCoordinator.swift */; }; 89B909AC66B96FA054EF3C14 /* InvitedRoomProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E95B3BDB80531C85CD50AE6 /* InvitedRoomProxy.swift */; }; 89DF67AECBF9D0EE0DDB7737 /* Tracing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83B574805B9812C111D6215D /* Tracing.swift */; }; + 89E6426C6097F848C125E65C /* SpacesScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD297970D7A0F8BAF870F010 /* SpacesScreenModels.swift */; }; 8A0BD60CA4A6004DB06B5403 /* MediaUploadingPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 669F35C505ACE1110589F875 /* MediaUploadingPreprocessor.swift */; }; 8A5064CAC8E5F3B18645621D /* CallNotificationRoomTimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD6E082B0507FB28F966516A /* CallNotificationRoomTimelineView.swift */; }; 8A83D715940378B9BA9F739E /* RoomInviterLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EB58E4E8D6D634C246AD5C2 /* RoomInviterLabel.swift */; }; @@ -817,7 +818,6 @@ 8D24671992A1C1753B211221 /* EncryptionResetTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89BB11A792EF6F70B95B467E /* EncryptionResetTests.swift */; }; 8D3E1FADD78E72504DE0E402 /* UserAgentBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB3B237387B8288A5A938F1B /* UserAgentBuilderTests.swift */; }; 8D71E5E53F372202379BECCE /* BugReportScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 303FCADE77DF1F3670C086ED /* BugReportScreenViewModel.swift */; }; - 8D9A97E32C6C03B884CBD85A /* SpaceExplorerFlowCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A4EF5724C0F894911AF7811 /* SpaceExplorerFlowCoordinator.swift */; }; 8DC176CC5ABA24138EB443DD /* RoomMemberDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = C55679AF67545EF8087E47BE /* RoomMemberDetails.swift */; }; 8DCA1F05C3BA6ED826F1599D /* RoomSelectionScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83B4E3F1265581683E4997B8 /* RoomSelectionScreenViewModel.swift */; }; 8DCD9CC5361FF22A5B2C20F1 /* AppLockSetupSettingsScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D9FCE4D1E3A81AC1CC5CB91 /* AppLockSetupSettingsScreenCoordinator.swift */; }; @@ -896,6 +896,7 @@ 9AC5F8142413862A9E3A2D98 /* DeviceKit in Frameworks */ = {isa = PBXBuildFile; productRef = A7CA6F33C553805035C3B114 /* DeviceKit */; }; 9B03943616A1147539DF7F08 /* RoomChangePermissionsScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D041A857614A9AE13C7795 /* RoomChangePermissionsScreenViewModelTests.swift */; }; 9B356742E035D90A8BB5CABE /* ProposedViewSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DFE0E493FB55E5A62E7852A /* ProposedViewSize.swift */; }; + 9B3589276CA008E38FAAAE91 /* SpacesScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 358528B29FA72ACFD0D9644B /* SpacesScreenCoordinator.swift */; }; 9B84F55288AB98783C11CC49 /* SpaceRoomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0E7B059E84E7E374D3322A2 /* SpaceRoomCell.swift */; }; 9B872FF37DBE6BE054903831 /* MediaUploadPreviewScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = D54E12B98252F6C527E31FEE /* MediaUploadPreviewScreenViewModelProtocol.swift */; }; 9BB91CABB10D8FE90C491BCD /* StaticLocationScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C833673B334A0651AB46F30B /* StaticLocationScreenViewModelTests.swift */; }; @@ -907,7 +908,6 @@ 9D2E03DB175A6AB14589076D /* AsyncAlgorithms in Frameworks */ = {isa = PBXBuildFile; productRef = 416E37E60AAD2933F9191476 /* AsyncAlgorithms */; }; 9D79B94493FB32249F7E472F /* PlaceholderAvatarImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C705E605EF57C19DBE86FFA1 /* PlaceholderAvatarImage.swift */; }; 9D9690D2FD4CD26FF670620F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75EF87651B00A176AB08E97 /* AppDelegate.swift */; }; - 9DB4B303ECC05F0F33582594 /* SpacesAnnouncementSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7DA8FFD31B18324CC04A823 /* SpacesAnnouncementSheetView.swift */; }; 9DBF6524DFD8143A4D6A17F0 /* CreateRoomScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D432771B389EC486E7F90C6 /* CreateRoomScreenModels.swift */; }; 9DD5AA10E85137140FEA86A3 /* MediaProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F17EFA1D3D09FC2F9C5E1CB2 /* MediaProvider.swift */; }; 9DD84E014ADFB2DD813022D5 /* RoomDetailsEditScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00E5B2CBEF8F96424F095508 /* RoomDetailsEditScreenViewModelTests.swift */; }; @@ -1076,6 +1076,7 @@ BB784A02BADB03C820617A46 /* TextRoomTimelineItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A55430639712CFACA34F43 /* TextRoomTimelineItem.swift */; }; BB9B800C6094E34860E89DC5 /* AppLockSetupBiometricsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8CCF9A924521DECA44778C4 /* AppLockSetupBiometricsScreen.swift */; }; BC1222EDFF0C240F14259315 /* BloomModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D152423EE6CF0ECCC84091A /* BloomModifier.swift */; }; + BC5F94B10B40ABEC6046B473 /* ChatsTabFlowCoordinatorStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2B94F1B0B5D9D42B15AA6E8 /* ChatsTabFlowCoordinatorStateMachine.swift */; }; BC7CA1379D7C24F47B1B8B7E /* PaginationIndicatorRoomTimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E7F7A975514E850A834B29F /* PaginationIndicatorRoomTimelineView.swift */; }; BCA5E2157CE27AB6F1D043D3 /* AsyncAlgorithms in Frameworks */ = {isa = PBXBuildFile; productRef = 5A8EF1A5F9629FCA309D4B2A /* AsyncAlgorithms */; }; BCC864190651B3A3CF51E4DF /* MediaFileHandleProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEC1D382565A4E9CAC2F14EA /* MediaFileHandleProxy.swift */; }; @@ -1126,7 +1127,6 @@ C4FE0E11A907C8999F92D5A8 /* TimelineStartRoomTimelineItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8F5F9E02B1AB5350B1815E7 /* TimelineStartRoomTimelineItem.swift */; }; C55A44C99F64A479ABA85B46 /* RoomScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5221DFDF809142A2D6AC82B9 /* RoomScreen.swift */; }; C5627BCC3EBBB96A943B6D93 /* RestorationTokenTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7978C9EFBDD7DE39BD86726 /* RestorationTokenTests.swift */; }; - C586E1B286BCD8A774DA16B8 /* SpaceListScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE2FE435D42E942721ECDA42 /* SpaceListScreenCoordinator.swift */; }; C58E305C380D3ADDF7912180 /* StickerRoomTimelineItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818695BED971753243FEF897 /* StickerRoomTimelineItem.swift */; }; C5A07E2D88BE7D51DCECD166 /* LoginScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D0B159AFFBBD8ECFD0E37FA /* LoginScreenModels.swift */; }; C5E3A4A678B4F8900830B76A /* NavigationTabCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C39B1D3FC8CF41D6C3B054F /* NavigationTabCoordinator.swift */; }; @@ -1186,6 +1186,7 @@ CF4044A8EED5C41BC0ED6ABE /* SoftLogoutScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = D316BB02636AF2174F2580E6 /* SoftLogoutScreenViewModelProtocol.swift */; }; CF638B8C6FDCE920AE061FAE /* StateStoreViewModelV2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A106D76741914F82664959 /* StateStoreViewModelV2.swift */; }; CFEC53440C572CEEABC4A6A0 /* ElementXAttributeScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = C024C151639C4E1B91FCC68B /* ElementXAttributeScope.swift */; }; + D029EBF4C7E519F03DCBFEEF /* SpacesScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70BA17E542757492510664F4 /* SpacesScreenViewModelProtocol.swift */; }; D02AA6208C7ACB9BE6332394 /* UNNotificationContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE148A4FFEE853C5A281500C /* UNNotificationContent.swift */; }; D02DEB36D32A72A1B365E452 /* SessionVerificationScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 796CBD0C56FA0D3AEDAB255B /* SessionVerificationScreenCoordinator.swift */; }; D050D7756E92CA061ED0ABF0 /* SecureBackupLogoutConfirmationScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74E08B8A66948E9690F38B94 /* SecureBackupLogoutConfirmationScreenViewModelProtocol.swift */; }; @@ -1266,6 +1267,7 @@ E02DAD9FD8D62587049FFFEC /* LinkNewDeviceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80F04B12FA231E797B7151A8 /* LinkNewDeviceTests.swift */; }; E0B6A569AC3E81D233B43D60 /* SettingsScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E625B0EB2F86B37C14EF7E6 /* SettingsScreenViewModel.swift */; }; E0C167D41A48EDB30B447DE3 /* VoiceMessageRecordingComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73A5C3F7C9C1DA10CAEC6A98 /* VoiceMessageRecordingComposer.swift */; }; + E1428612B08ED3030EC1FEC3 /* SpacesScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 104B7747499487538483FEAF /* SpacesScreen.swift */; }; E14E469CD97550D0FC58F3CA /* CancellableTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE52983FAFB4E0998C00EE8A /* CancellableTask.swift */; }; E184FFAD32342D3D6E2F89AA /* PinnedEventsTimelineScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D53754227CEBD06358956D7 /* PinnedEventsTimelineScreenCoordinator.swift */; }; E1A0752244567A25E376A2F4 /* AdvancedSettingsScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7A1B80FE6E3BA72F9C748AD /* AdvancedSettingsScreenViewModel.swift */; }; @@ -1378,10 +1380,8 @@ F34D06F86C29E219E7132E87 /* AuthenticationStartScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F71A54CB96DAA1E72C6541D /* AuthenticationStartScreenViewModel.swift */; }; F35FAD1B1B289E221A07D719 /* ManageRoomMemberSheetViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB7B588A06911B455AC0B4C9 /* ManageRoomMemberSheetViewModelProtocol.swift */; }; F37629BAA5E8F50AAF2A131D /* SoftLogoutScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB7BAD55A4E2B8E5828CD64C /* SoftLogoutScreenViewModel.swift */; }; - F38186A943D078D30BFB90DE /* SpaceListScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FAC770857E525B51E277D8C /* SpaceListScreenModels.swift */; }; F382E2FE3AC3719BC1F22D9C /* MapURLs.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB08D1F7C27A8C24EF81073C /* MapURLs.swift */; }; F38D32C1B0232AAFE6A0822C /* ExtensionLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41A8571A8A071FB41778C016 /* ExtensionLogger.swift */; }; - F396470968764E2C3EDA92DA /* SpaceListScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB180B67B452302260AF44B /* SpaceListScreenViewModel.swift */; }; F3C9CAD26FD4D7D6EBACF501 /* HTMLFixtures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27A5FBB74981BF8EFFDAE90D /* HTMLFixtures.swift */; }; F3E2D3F7ACDED65A4E5CD8DE /* RoomMembersListScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECF79FB25E2D4BD6F50CE7C9 /* RoomMembersListScreenViewModel.swift */; }; F3ECA377FF77E81A4F1FA062 /* TimelineItemSendInfoLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753B4C6C0EDDCBF0708DC384 /* TimelineItemSendInfoLabel.swift */; }; @@ -1561,6 +1561,7 @@ 02EE0FABA8ED6D6C1D6CE71D /* ReactionsSummaryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionsSummaryView.swift; sourceTree = ""; }; 0315C328FF40F84276364E66 /* SecurityAndPrivacyScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecurityAndPrivacyScreenViewModelTests.swift; sourceTree = ""; }; 03277E40D0E0DE0712021A71 /* ServerConfirmationScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerConfirmationScreenCoordinator.swift; sourceTree = ""; }; + 0328F54E0C3AAEDDF3E05D9D /* ChatsTabFlowCoordinatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatsTabFlowCoordinatorTests.swift; sourceTree = ""; }; 033DB41C51865A2E83174E87 /* target.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = target.yml; sourceTree = ""; }; 035177BCD8E8308B098AC3C2 /* WindowManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowManager.swift; sourceTree = ""; }; 0367E0AF1163F42292D788BD /* StartChatTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartChatTests.swift; sourceTree = ""; }; @@ -1634,6 +1635,7 @@ 0F793C422BDACE0C60C774F4 /* UserIdentityProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserIdentityProxyProtocol.swift; sourceTree = ""; }; 0FA60F848D1C14F873F9621A /* RoomMemberDetailsScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMemberDetailsScreenCoordinator.swift; sourceTree = ""; }; 0FD22AEFFA20065494ED2333 /* AppAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppAppearance.swift; sourceTree = ""; }; + 104B7747499487538483FEAF /* SpacesScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacesScreen.swift; sourceTree = ""; }; 105429F29096729EDD3152CF /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/SAS.strings; sourceTree = ""; }; 1059E2AE7878CF7820592637 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 105B2A8426404EF66F00CFDB /* RoomTimelineItemFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomTimelineItemFactory.swift; sourceTree = ""; }; @@ -1702,6 +1704,7 @@ 1C21A715237F2B6D6E80998C /* SecureBackupControllerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupControllerProtocol.swift; sourceTree = ""; }; 1C25B6EBEB414431187D73B7 /* TimelineReplyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineReplyView.swift; sourceTree = ""; }; 1C78111573987B1D79ED0868 /* LinkMetadataProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinkMetadataProvider.swift; sourceTree = ""; }; + 1C782FCBBCC9A0CD30453C50 /* ChatsTabFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatsTabFlowCoordinator.swift; sourceTree = ""; }; 1C7F63EB1525E697CAEB002B /* BlankFormCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlankFormCoordinator.swift; sourceTree = ""; }; 1CC575D1895FA62591451A93 /* RoomMemberDetailsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMemberDetailsScreen.swift; sourceTree = ""; }; 1CD7C0A2750998C2D77AD00F /* JoinRoomScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreenViewModel.swift; sourceTree = ""; }; @@ -1842,6 +1845,7 @@ 34ED3AB7E0287552A5648AB3 /* be */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = be; path = be.lproj/InfoPlist.strings; sourceTree = ""; }; 353024006CB726E9F9187B3A /* AnalyticsConsentState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsConsentState.swift; sourceTree = ""; }; 3558A15CFB934F9229301527 /* RestorationToken.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestorationToken.swift; sourceTree = ""; }; + 358528B29FA72ACFD0D9644B /* SpacesScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacesScreenCoordinator.swift; sourceTree = ""; }; 35A057BA9BE0F079784CD061 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 35AFCF4C05DEED04E3DB1A16 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; 36DA824791172B9821EACBED /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; @@ -1955,6 +1959,7 @@ 48FEFF746DB341CDB18D7AAA /* RoomRolesAndPermissionsScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomRolesAndPermissionsScreenViewModelTests.swift; sourceTree = ""; }; 490BEADEFB2D6B7C9F618AE8 /* AppLockTimer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockTimer.swift; sourceTree = ""; }; 49193CB0C248D621A96FB2AA /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = ""; }; + 4930A2674306A2DC9C92009D /* SpacesTabFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacesTabFlowCoordinator.swift; sourceTree = ""; }; 49ABAB186CF00B15C5521D04 /* MenuSheetLabelStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuSheetLabelStyle.swift; sourceTree = ""; }; 49D2C8E66E83EA578A7F318A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 49E6066092ED45E36BB306F7 /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/Localizable.stringsdict"; sourceTree = ""; }; @@ -1979,7 +1984,6 @@ 4F5F0662483ED69791D63B16 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = et; path = et.lproj/Localizable.stringsdict; sourceTree = ""; }; 4F75EF13F49DD2204E760910 /* FileRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileRoomTimelineView.swift; sourceTree = ""; }; 4FA29BAE9B0F2D90E57B261C /* UserSessionFlowCoordinatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSessionFlowCoordinatorTests.swift; sourceTree = ""; }; - 4FAC770857E525B51E277D8C /* SpaceListScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceListScreenModels.swift; sourceTree = ""; }; 4FCB2126C091EEF2454B4D56 /* RoomFlowCoordinatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomFlowCoordinatorTests.swift; sourceTree = ""; }; 4FDD775CFD72DD2D3C8A8390 /* NotificationSettingsProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSettingsProxyProtocol.swift; sourceTree = ""; }; 502F986D57158674172C58E3 /* AppLockSetupSettingsScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockSetupSettingsScreenModels.swift; sourceTree = ""; }; @@ -1987,6 +1991,7 @@ 505ADA084C0B38A0C4AD2574 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 5098DA7799946A61E34A2373 /* FileRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileRoomTimelineItem.swift; sourceTree = ""; }; 50E31AB0E77BB70E2BC77463 /* MatrixUserShareLink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatrixUserShareLink.swift; sourceTree = ""; }; + 50E9621C742A20AC3D40497F /* SpacesAnnouncementSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacesAnnouncementSheetView.swift; sourceTree = ""; }; 510DA63AB273A68D659CEC95 /* ToolbarButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolbarButton.swift; sourceTree = ""; }; 510E89B989477E5EE8E503C0 /* PinnedEventsTimelineScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PinnedEventsTimelineScreenViewModelProtocol.swift; sourceTree = ""; }; 514363244AE7D68080D44C6F /* NotificationSettingsScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSettingsScreenViewModelTests.swift; sourceTree = ""; }; @@ -2014,10 +2019,8 @@ 5530D3541C8832D858EB755A /* SpaceRoomInfoMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceRoomInfoMock.swift; sourceTree = ""; }; 5557DDA438841AF5DC003D0B /* SpaceListScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceListScreenViewModelTests.swift; sourceTree = ""; }; 55AEEF8142DF1B59DB40FB93 /* TimelineItemSender.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineItemSender.swift; sourceTree = ""; }; - 55B3BF242C93CD32C4C3E08D /* ChatsFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatsFlowCoordinator.swift; sourceTree = ""; }; 5644919DB2022397D9D5825A /* MockSoftLogoutScreenState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockSoftLogoutScreenState.swift; sourceTree = ""; }; 565F1B2B300597C616B37888 /* FullscreenDialog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FullscreenDialog.swift; sourceTree = ""; }; - 566FB9DA81607C2739D8C6A0 /* ChatsFlowCoordinatorStateMachine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatsFlowCoordinatorStateMachine.swift; sourceTree = ""; }; 56852036214ABA9D7D305768 /* ResolveVerifiedUserSendFailureScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResolveVerifiedUserSendFailureScreenViewModelProtocol.swift; sourceTree = ""; }; 56D6F88FE35A0979D2821E06 /* AppLockScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockScreen.swift; sourceTree = ""; }; 57084488B03BDB33C7B7CA0E /* ResolveVerifiedUserSendFailureScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResolveVerifiedUserSendFailureScreenViewModelTests.swift; sourceTree = ""; }; @@ -2042,7 +2045,6 @@ 5A2FCA3D0F239B9E911B966B /* SecureBackupRecoveryKeyScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupRecoveryKeyScreen.swift; sourceTree = ""; }; 5A37E2FACFD041CE466223CD /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 5A43964330459965AF048A8C /* LoginScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginScreenViewModelTests.swift; sourceTree = ""; }; - 5A4EF5724C0F894911AF7811 /* SpaceExplorerFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceExplorerFlowCoordinator.swift; sourceTree = ""; }; 5A70B03471F6027C90EE868C /* RoomMembersFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMembersFlowCoordinator.swift; sourceTree = ""; }; 5AEA0B743847CFA5B3C38EE4 /* RoomMembersListScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMembersListScreenCoordinator.swift; sourceTree = ""; }; 5B8F0ED874DF8C9A51B0AB6F /* SettingsScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsScreenCoordinator.swift; sourceTree = ""; }; @@ -2143,6 +2145,7 @@ 6FC8B21E86B137BE4E91F82A /* ElementCallServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ElementCallServiceProtocol.swift; sourceTree = ""; }; 7033218DA395B003F7AB29A2 /* MediaEventsTimelineScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaEventsTimelineScreenModels.swift; sourceTree = ""; }; 7061BE2C0BF427C38AEDEF5E /* SecureBackupRecoveryKeyScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupRecoveryKeyScreenViewModel.swift; sourceTree = ""; }; + 70BA17E542757492510664F4 /* SpacesScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacesScreenViewModelProtocol.swift; sourceTree = ""; }; 70C86696AC9521F8ED88FBEB /* MediaUploadPreviewScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaUploadPreviewScreen.swift; sourceTree = ""; }; 70F8DAEF1A8131BDFD4CDE83 /* eu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = eu; path = eu.lproj/InfoPlist.strings; sourceTree = ""; }; 713B48DBF65DE4B0DD445D66 /* ReportContentScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportContentScreenViewModelProtocol.swift; sourceTree = ""; }; @@ -2225,7 +2228,6 @@ 7EECE8B331CD169790EF284F /* BugReportScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugReportScreenViewModelTests.swift; sourceTree = ""; }; 7F615A00DB223FF3280204D2 /* UserDiscoveryServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDiscoveryServiceProtocol.swift; sourceTree = ""; }; 7F957320D0EB7D7B4E30C79D /* KnockRequestProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KnockRequestProxyMock.swift; sourceTree = ""; }; - 7FB180B67B452302260AF44B /* SpaceListScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceListScreenViewModel.swift; sourceTree = ""; }; 7FB2253D36E81E045E1CB432 /* Duration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Duration.swift; sourceTree = ""; }; 7FDF541AE914059942B575B4 /* IdentityConfirmationScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdentityConfirmationScreenModels.swift; sourceTree = ""; }; 8063E65441E771200108C558 /* ReadReceiptsSummaryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadReceiptsSummaryView.swift; sourceTree = ""; }; @@ -2288,7 +2290,6 @@ 89233612A8632AD7E2803620 /* AudioPlayerStateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioPlayerStateTests.swift; sourceTree = ""; }; 8931C8314C373C8EFAA9EC0C /* uz */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uz; path = uz.lproj/InfoPlist.strings; sourceTree = ""; }; 893777A4997BBDB68079D4F5 /* ArrayTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrayTests.swift; sourceTree = ""; }; - 893DD588E4D220261A172C30 /* SpaceListScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceListScreenViewModelProtocol.swift; sourceTree = ""; }; 894EE8F5B399A165BA2A6634 /* RoomDirectorySearchMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDirectorySearchMock.swift; sourceTree = ""; }; 8977176AB534AA41630395BC /* LegalInformationScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegalInformationScreenViewModelProtocol.swift; sourceTree = ""; }; 897DF5E9A70CE05A632FC8AF /* UTType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UTType.swift; sourceTree = ""; }; @@ -2649,6 +2650,7 @@ CACA846B3E3E9A521D98B178 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; CAD9547E47C58930E2CE8306 /* CallScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallScreenViewModelTests.swift; sourceTree = ""; }; CB7B588A06911B455AC0B4C9 /* ManageRoomMemberSheetViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManageRoomMemberSheetViewModelProtocol.swift; sourceTree = ""; }; + CB98BFD8E93C7FCCEDEC46F9 /* SpacesScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacesScreenViewModel.swift; sourceTree = ""; }; CBBCC6E74774E79B599625D0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; CBF9AEA706926DD0DA2B954C /* JoinedRoomSize+MemberCount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "JoinedRoomSize+MemberCount.swift"; sourceTree = ""; }; CC03209FDE8CE0810617BFFF /* RoomMembersListScreenMemberCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMembersListScreenMemberCell.swift; sourceTree = ""; }; @@ -2738,11 +2740,10 @@ DCAC01A97A43BE07B9E94E43 /* ShareExtensionModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareExtensionModels.swift; sourceTree = ""; }; DCDAB580109C09A6AA97AF7E /* PollFormScreenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollFormScreenTests.swift; sourceTree = ""; }; DCF239C619971FDE48132550 /* SecureBackupLogoutConfirmationScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupLogoutConfirmationScreenModels.swift; sourceTree = ""; }; + DD297970D7A0F8BAF870F010 /* SpacesScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacesScreenModels.swift; sourceTree = ""; }; DD3C65634A34467CB407A061 /* target.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = target.yml; sourceTree = ""; }; - DD6906A41D00178F2FF3C097 /* ChatsFlowCoordinatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatsFlowCoordinatorTests.swift; sourceTree = ""; }; DD955A0380C287C418F1A74D /* PhotoLibraryManagerMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoLibraryManagerMock.swift; sourceTree = ""; }; DD97F9661ABF08CE002054A2 /* AppLockServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockServiceTests.swift; sourceTree = ""; }; - DE2FE435D42E942721ECDA42 /* SpaceListScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceListScreenCoordinator.swift; sourceTree = ""; }; DE5127D6EA05B2E45D0A7D59 /* JoinRoomScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreenViewModelTests.swift; sourceTree = ""; }; DEBB74427E24AF30CDB131B7 /* DeferredFulfillmentTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeferredFulfillmentTests.swift; sourceTree = ""; }; DEC1D382565A4E9CAC2F14EA /* MediaFileHandleProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaFileHandleProxy.swift; sourceTree = ""; }; @@ -2795,7 +2796,6 @@ E7495E1119753B06FF2C2279 /* PhotoLibraryManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoLibraryManager.swift; sourceTree = ""; }; E76A706B3EEA32B882DA5E2D /* BlockedUsersScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockedUsersScreenViewModelProtocol.swift; sourceTree = ""; }; E78FC546F28E045A560F2963 /* EncryptionKeyProviderProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionKeyProviderProtocol.swift; sourceTree = ""; }; - E7DA8FFD31B18324CC04A823 /* SpacesAnnouncementSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacesAnnouncementSheetView.swift; sourceTree = ""; }; E8294DB9E95C0C0630418466 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; E8495F37D6245AD0CFA1F60B /* AppLockTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockTests.swift; sourceTree = ""; }; E8A1F98AE670377B20679FF5 /* MediaPlayerProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaPlayerProvider.swift; sourceTree = ""; }; @@ -2856,6 +2856,7 @@ F1B8500C152BC59445647DA8 /* UnsupportedRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnsupportedRoomTimelineItem.swift; sourceTree = ""; }; F229480685F30BCB96C439EC /* AdvancedSettingsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdvancedSettingsScreen.swift; sourceTree = ""; }; F276F31C1AEC19E52B951B62 /* SendInviteConfirmationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendInviteConfirmationView.swift; sourceTree = ""; }; + F2B94F1B0B5D9D42B15AA6E8 /* ChatsTabFlowCoordinatorStateMachine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatsTabFlowCoordinatorStateMachine.swift; sourceTree = ""; }; F2DC502B1A566E99969D34DD /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; F2E4EF80DFB8FE7C4469B15D /* RoomDirectorySearchScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDirectorySearchScreen.swift; sourceTree = ""; }; F3082001D373607455CB08A1 /* QRCodeErrorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeErrorView.swift; sourceTree = ""; }; @@ -2877,7 +2878,6 @@ F4CEB4590CCF70F0E3C0B171 /* GeneratedAccessibilityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneratedAccessibilityTests.swift; sourceTree = ""; }; F506C6ADB1E1DA6638078E11 /* UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; F51D674A5B5F1FE1B878E20F /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; - F52DA8CCCABA0998C8AA273C /* SpaceListScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceListScreen.swift; sourceTree = ""; }; F5311C989EC15B4C2D699025 /* StaticLocationScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticLocationScreenViewModel.swift; sourceTree = ""; }; F57C8022B8A871A1DCD1750A /* UserIndicatorToastView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserIndicatorToastView.swift; sourceTree = ""; }; F5D1BAA90F3A073D91B4F16B /* RoomNotificationSettingsProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomNotificationSettingsProxyMock.swift; sourceTree = ""; }; @@ -4396,8 +4396,8 @@ 0DBB08A95EFA668F2CF27211 /* AppLockSetupFlowCoordinator.swift */, A9B069D7772DDF6513E0F1B8 /* AuthenticationFlowCoordinator.swift */, 7367B3B9A8CAF902220F31D1 /* BugReportFlowCoordinator.swift */, - 55B3BF242C93CD32C4C3E08D /* ChatsFlowCoordinator.swift */, - 566FB9DA81607C2739D8C6A0 /* ChatsFlowCoordinatorStateMachine.swift */, + 1C782FCBBCC9A0CD30453C50 /* ChatsTabFlowCoordinator.swift */, + F2B94F1B0B5D9D42B15AA6E8 /* ChatsTabFlowCoordinatorStateMachine.swift */, A07B011547B201A836C03052 /* EncryptionResetFlowCoordinator.swift */, ECB836DD8BE31931F51B8AC9 /* EncryptionSettingsFlowCoordinator.swift */, 94EE2C5F0A06F146BBE3A1B1 /* LinkNewDeviceFlowCoordinator.swift */, @@ -4409,9 +4409,9 @@ 5A70B03471F6027C90EE868C /* RoomMembersFlowCoordinator.swift */, 0833F51229E166BCA141D004 /* RoomRolesAndPermissionsFlowCoordinator.swift */, D28F7A6CEEA4A2815B0F0F55 /* SettingsFlowCoordinator.swift */, - 5A4EF5724C0F894911AF7811 /* SpaceExplorerFlowCoordinator.swift */, EDDE826EAB1BAB80C1104980 /* SpaceFlowCoordinator.swift */, BDE3EDEA7E64D68FEB828F83 /* SpaceSettingsFlowCoordinator.swift */, + 4930A2674306A2DC9C92009D /* SpacesTabFlowCoordinator.swift */, 477A8C656B7B26E99C35927F /* StartChatFlowCoordinator.swift */, C99FDEEB71173C4C6FA2734C /* UserSessionFlowCoordinator.swift */, ); @@ -4726,7 +4726,7 @@ 7EECE8B331CD169790EF284F /* BugReportScreenViewModelTests.swift */, EFFD3200F9960D4996159F10 /* BugReportServiceTests.swift */, CAD9547E47C58930E2CE8306 /* CallScreenViewModelTests.swift */, - DD6906A41D00178F2FF3C097 /* ChatsFlowCoordinatorTests.swift */, + 0328F54E0C3AAEDDF3E05D9D /* ChatsTabFlowCoordinatorTests.swift */, D5EA0312A6262484AA393AC9 /* CompletionSuggestionServiceTests.swift */, CA29952595B804DA221A0C1D /* ComposerToolbarViewModelTests.swift */, 69D42EE0102D2857933625DD /* CreateRoomViewModelTests.swift */, @@ -5462,9 +5462,9 @@ BDDD421CD80AD0BCBA035076 /* Common */, EEFCB022372FE5F306ED9199 /* LeaveSpace */, EA9EB1A95977581772ACF99A /* SpaceAddRoomsScreen */, - FCF165F4DDB83F3DECFEB57A /* SpaceListScreen */, C360FCF7418FE3593D5A0CBF /* SpaceScreen */, 55312ACF4155CC5B2054AD75 /* SpaceSettingsScreen */, + B7AAC1DB9CBE8947CC05A0D5 /* SpacesScreen */, ); path = Spaces; sourceTree = ""; @@ -5643,6 +5643,15 @@ path = View; sourceTree = ""; }; + A659ED09DC461E905C1FBD73 /* View */ = { + isa = PBXGroup; + children = ( + 50E9621C742A20AC3D40497F /* SpacesAnnouncementSheetView.swift */, + 104B7747499487538483FEAF /* SpacesScreen.swift */, + ); + path = View; + sourceTree = ""; + }; A6AA0A048CAE428A5CA4CBBB /* LayoutTests */ = { isa = PBXGroup; children = ( @@ -5866,6 +5875,18 @@ path = UserIndicator; sourceTree = ""; }; + B7AAC1DB9CBE8947CC05A0D5 /* SpacesScreen */ = { + isa = PBXGroup; + children = ( + 358528B29FA72ACFD0D9644B /* SpacesScreenCoordinator.swift */, + DD297970D7A0F8BAF870F010 /* SpacesScreenModels.swift */, + CB98BFD8E93C7FCCEDEC46F9 /* SpacesScreenViewModel.swift */, + 70BA17E542757492510664F4 /* SpacesScreenViewModelProtocol.swift */, + A659ED09DC461E905C1FBD73 /* View */, + ); + path = SpacesScreen; + sourceTree = ""; + }; B86CF59E083C82C2A842E4AD /* RoomMemberDetailsScreen */ = { isa = PBXGroup; children = ( @@ -6744,18 +6765,6 @@ path = Audio; sourceTree = ""; }; - FCF165F4DDB83F3DECFEB57A /* SpaceListScreen */ = { - isa = PBXGroup; - children = ( - DE2FE435D42E942721ECDA42 /* SpaceListScreenCoordinator.swift */, - 4FAC770857E525B51E277D8C /* SpaceListScreenModels.swift */, - 7FB180B67B452302260AF44B /* SpaceListScreenViewModel.swift */, - 893DD588E4D220261A172C30 /* SpaceListScreenViewModelProtocol.swift */, - FEBF13A142B9D9FECFFCBF3E /* View */, - ); - path = SpaceListScreen; - sourceTree = ""; - }; FDF04D0E125CB4B5C5DB5191 /* View */ = { isa = PBXGroup; children = ( @@ -6776,15 +6785,6 @@ path = View; sourceTree = ""; }; - FEBF13A142B9D9FECFFCBF3E /* View */ = { - isa = PBXGroup; - children = ( - F52DA8CCCABA0998C8AA273C /* SpaceListScreen.swift */, - E7DA8FFD31B18324CC04A823 /* SpacesAnnouncementSheetView.swift */, - ); - path = View; - sourceTree = ""; - }; FF2C35C46D5B8879A71F0BAC /* AdvancedSettingsScreen */ = { isa = PBXGroup; children = ( @@ -7587,7 +7587,7 @@ 1B2F9F368619FFF8C63C87CC /* BugReportScreenViewModelTests.swift in Sources */, 7F61F9ACD5EC9E845EF3EFBF /* BugReportServiceTests.swift in Sources */, 366D5BFE52CB79E804C7D095 /* CallScreenViewModelTests.swift in Sources */, - 7F464E540158C3C6EC24678B /* ChatsFlowCoordinatorTests.swift in Sources */, + 4BD5AB54A6982CF19F5CC7C4 /* ChatsTabFlowCoordinatorTests.swift in Sources */, B5321A1F5B26A0F3EC54909E /* CollapsibleFlowLayoutTests.swift in Sources */, 3A164187907DA43B7858F9EC /* CompletionSuggestionServiceTests.swift in Sources */, 0C932A5158C1D0604DFC5750 /* ComposerToolbarViewModelTests.swift in Sources */, @@ -7929,8 +7929,8 @@ E14E469CD97550D0FC58F3CA /* CancellableTask.swift in Sources */, DF8F1211F2B0B56F0FCCA5C2 /* CertificateValidatorHook.swift in Sources */, D885B783B95AD7832D4EF5DD /* CharacterSet.swift in Sources */, - 3C1E27520258D4C89058839E /* ChatsFlowCoordinator.swift in Sources */, - 4E1E13E5B913D35959E6BFCC /* ChatsFlowCoordinatorStateMachine.swift in Sources */, + 572474C7CA4B03FF0B5DF548 /* ChatsTabFlowCoordinator.swift in Sources */, + BC5F94B10B40ABEC6046B473 /* ChatsTabFlowCoordinatorStateMachine.swift in Sources */, A52090A4FE0DB826578DFC03 /* Client.swift in Sources */, C80E06ED97CE52704A46C148 /* ClientBuilder.swift in Sources */, 87CEA3E07B602705BC2D2A20 /* ClientBuilderHook.swift in Sources */, @@ -8584,15 +8584,9 @@ 059A6BEDE9BADF3C81AC4146 /* SpaceAddRoomsScreenSelectedItem.swift in Sources */, B5B68C7511DE1E36A89D353A /* SpaceAddRoomsScreenViewModel.swift in Sources */, F9E5FF20B50705EB13137778 /* SpaceAddRoomsScreenViewModelProtocol.swift in Sources */, - 8D9A97E32C6C03B884CBD85A /* SpaceExplorerFlowCoordinator.swift in Sources */, C8E11A335456FCF94A744E6E /* SpaceFlowCoordinator.swift in Sources */, BF523D9E12E3C4AABBA2F6CB /* SpaceHeaderTopicSheetView.swift in Sources */, E9B4742B3D6E103327466513 /* SpaceHeaderView.swift in Sources */, - 306ADA9D91EE5F0A30B5E500 /* SpaceListScreen.swift in Sources */, - C586E1B286BCD8A774DA16B8 /* SpaceListScreenCoordinator.swift in Sources */, - F38186A943D078D30BFB90DE /* SpaceListScreenModels.swift in Sources */, - F396470968764E2C3EDA92DA /* SpaceListScreenViewModel.swift in Sources */, - 368EC173453FB805C677BFEF /* SpaceListScreenViewModelProtocol.swift in Sources */, 9B84F55288AB98783C11CC49 /* SpaceRoomCell.swift in Sources */, 913BCABB99796F82E3D8D93D /* SpaceRoomInfoMock.swift in Sources */, 0DAB08C117E0391F3ADB2031 /* SpaceRoomListProxy.swift in Sources */, @@ -8610,7 +8604,13 @@ F4F29FF972C0C8B38757B2DD /* SpaceServiceRoomProtocol.swift in Sources */, D0E257557DAC8A34C7B52A9F /* SpaceSettingsFlowCoordinator.swift in Sources */, 383063A7924F06D54BA9B24C /* SpaceSettingsScreen.swift in Sources */, - 9DB4B303ECC05F0F33582594 /* SpacesAnnouncementSheetView.swift in Sources */, + 0EC0AF8287D6E698969FC25B /* SpacesAnnouncementSheetView.swift in Sources */, + E1428612B08ED3030EC1FEC3 /* SpacesScreen.swift in Sources */, + 9B3589276CA008E38FAAAE91 /* SpacesScreenCoordinator.swift in Sources */, + 89E6426C6097F848C125E65C /* SpacesScreenModels.swift in Sources */, + 81D4E550668B230A63B26CFB /* SpacesScreenViewModel.swift in Sources */, + D029EBF4C7E519F03DCBFEEF /* SpacesScreenViewModelProtocol.swift in Sources */, + 88C8B87A26D6B4E731F2B5B7 /* SpacesTabFlowCoordinator.swift in Sources */, DF004A5B2EABBD0574D06A04 /* SplashScreenCoordinator.swift in Sources */, E1C67E5D9E22135A8FEBBD60 /* StackedAvatarsView.swift in Sources */, 9FC79DA30AE0E1502DAEBD51 /* StartChatFlowCoordinator.swift in Sources */, diff --git a/ElementX/Sources/FlowCoordinators/ChatsFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/ChatsTabFlowCoordinator.swift similarity index 98% rename from ElementX/Sources/FlowCoordinators/ChatsFlowCoordinator.swift rename to ElementX/Sources/FlowCoordinators/ChatsTabFlowCoordinator.swift index 542359b79..552aaea6e 100644 --- a/ElementX/Sources/FlowCoordinators/ChatsFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/ChatsTabFlowCoordinator.swift @@ -11,7 +11,7 @@ import Combine import MatrixRustSDK import SwiftUI -enum ChatsFlowCoordinatorAction { +enum ChatsTabFlowCoordinatorAction { case switchToChatsTab case showSettings case showChatBackupSettings @@ -21,13 +21,13 @@ enum ChatsFlowCoordinatorAction { case logout } -class ChatsFlowCoordinator: FlowCoordinatorProtocol { +class ChatsTabFlowCoordinator: FlowCoordinatorProtocol { private let navigationSplitCoordinator: NavigationSplitCoordinator private let flowParameters: CommonFlowParameters private var userSession: UserSessionProtocol { flowParameters.userSession } - private let stateMachine: ChatsFlowCoordinatorStateMachine + private let stateMachine: ChatsTabFlowCoordinatorStateMachine // periphery:ignore - retaining purpose private var roomFlowCoordinator: RoomFlowCoordinator? @@ -50,15 +50,15 @@ class ChatsFlowCoordinator: FlowCoordinatorProtocol { private let selectedRoomSubject = CurrentValueSubject(nil) - private let actionsSubject: PassthroughSubject = .init() - var actionsPublisher: AnyPublisher { + private let actionsSubject: PassthroughSubject = .init() + var actionsPublisher: AnyPublisher { actionsSubject.eraseToAnyPublisher() } init(isNewLogin: Bool, navigationSplitCoordinator: NavigationSplitCoordinator, flowParameters: CommonFlowParameters) { - stateMachine = flowParameters.stateMachineFactory.makeChatsFlowStateMachine() + stateMachine = flowParameters.stateMachineFactory.makeChatsTabFlowStateMachine() self.navigationSplitCoordinator = navigationSplitCoordinator self.flowParameters = flowParameters @@ -188,7 +188,7 @@ class ChatsFlowCoordinator: FlowCoordinatorProtocol { stateMachine.addTransitionHandler { [weak self] context in guard let self else { return } - let userInfo = context.userInfo as? ChatsFlowCoordinatorStateMachine.EventUserInfo + let userInfo = context.userInfo as? ChatsTabFlowCoordinatorStateMachine.EventUserInfo let animated = userInfo?.animated ?? true switch (context.fromState, context.event, context.toState) { @@ -289,7 +289,7 @@ class ChatsFlowCoordinator: FlowCoordinatorProtocol { } } - private func handleSelectRoomTransition(roomID: String, via: [String], entryPoint: RoomFlowCoordinatorEntryPoint, detailState: ChatsFlowCoordinatorStateMachine.DetailState?, animated: Bool) { + private func handleSelectRoomTransition(roomID: String, via: [String], entryPoint: RoomFlowCoordinatorEntryPoint, detailState: ChatsTabFlowCoordinatorStateMachine.DetailState?, animated: Bool) { if case .room(roomID) = detailState, !entryPoint.isEventID, // Don't reuse the existing room so the live timeline is hidden while the detached timeline is loading. let roomFlowCoordinator { @@ -798,8 +798,8 @@ class ChatsFlowCoordinator: FlowCoordinatorProtocol { // MARK: Toasts and loading indicators - private static let loadingIndicatorIdentifier = "\(ChatsFlowCoordinator.self)-Loading" - private static let failureIndicatorIdentifier = "\(ChatsFlowCoordinator.self)-Failure" + private static let loadingIndicatorIdentifier = "\(ChatsTabFlowCoordinator.self)-Loading" + private static let failureIndicatorIdentifier = "\(ChatsTabFlowCoordinator.self)-Failure" private func showLoadingIndicator(delay: Duration? = nil) { flowParameters.userIndicatorController.submitIndicator(UserIndicator(id: Self.loadingIndicatorIdentifier, diff --git a/ElementX/Sources/FlowCoordinators/ChatsFlowCoordinatorStateMachine.swift b/ElementX/Sources/FlowCoordinators/ChatsTabFlowCoordinatorStateMachine.swift similarity index 99% rename from ElementX/Sources/FlowCoordinators/ChatsFlowCoordinatorStateMachine.swift rename to ElementX/Sources/FlowCoordinators/ChatsTabFlowCoordinatorStateMachine.swift index 7d8e12d85..f0aa33364 100644 --- a/ElementX/Sources/FlowCoordinators/ChatsFlowCoordinatorStateMachine.swift +++ b/ElementX/Sources/FlowCoordinators/ChatsTabFlowCoordinatorStateMachine.swift @@ -10,7 +10,7 @@ import Combine import Foundation import SwiftState -class ChatsFlowCoordinatorStateMachine { +class ChatsTabFlowCoordinatorStateMachine { enum DetailState: Hashable { case room(roomID: String) case space @@ -138,7 +138,7 @@ class ChatsFlowCoordinatorStateMachine { private let stateMachine: StateMachine - var state: ChatsFlowCoordinatorStateMachine.State { + var state: ChatsTabFlowCoordinatorStateMachine.State { stateMachine.state } diff --git a/ElementX/Sources/FlowCoordinators/SpaceExplorerFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/SpacesTabFlowCoordinator.swift similarity index 81% rename from ElementX/Sources/FlowCoordinators/SpaceExplorerFlowCoordinator.swift rename to ElementX/Sources/FlowCoordinators/SpacesTabFlowCoordinator.swift index 489c9af81..ea5ede1d3 100644 --- a/ElementX/Sources/FlowCoordinators/SpaceExplorerFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/SpacesTabFlowCoordinator.swift @@ -10,13 +10,13 @@ import Combine import Foundation import SwiftState -enum SpaceExplorerFlowCoordinatorAction { +enum SpacesTabFlowCoordinatorAction { case showSettings case presentCallScreen(roomProxy: JoinedRoomProxyProtocol) case verifyUser(userID: String) } -class SpaceExplorerFlowCoordinator: FlowCoordinatorProtocol { +class SpacesTabFlowCoordinator: FlowCoordinatorProtocol { private let userSession: UserSessionProtocol private var flowParameters: CommonFlowParameters @@ -30,7 +30,7 @@ class SpaceExplorerFlowCoordinator: FlowCoordinatorProtocol { /// The state machine hasn't started. case initial /// The root screen for this flow. - case spaceList(selectedSpaceID: String?) + case spacesScreen(selectedSpaceID: String?) } enum Event: EventType { @@ -49,8 +49,8 @@ class SpaceExplorerFlowCoordinator: FlowCoordinatorProtocol { private let selectedSpaceSubject = CurrentValueSubject(nil) - private let actionsSubject: PassthroughSubject = .init() - var actionsPublisher: AnyPublisher { + private let actionsSubject: PassthroughSubject = .init() + var actionsPublisher: AnyPublisher { actionsSubject.eraseToAnyPublisher() } @@ -79,7 +79,7 @@ class SpaceExplorerFlowCoordinator: FlowCoordinatorProtocol { func clearRoute(animated: Bool) { switch stateMachine.state { - case .initial, .spaceList: + case .initial, .spacesScreen: break } } @@ -87,22 +87,22 @@ class SpaceExplorerFlowCoordinator: FlowCoordinatorProtocol { // MARK: - Private private func configureStateMachine() { - stateMachine.addRoutes(event: .start, transitions: [.initial => .spaceList(selectedSpaceID: nil)]) { [weak self] _ in - self?.presentSpaceList() + stateMachine.addRoutes(event: .start, transitions: [.initial => .spacesScreen(selectedSpaceID: nil)]) { [weak self] _ in + self?.presentSpacesScreen() } stateMachine.addRouteMapping { event, fromState, userInfo in - guard event == .selectSpace, case .spaceList = fromState else { return nil } + guard event == .selectSpace, case .spacesScreen = fromState else { return nil } guard let spaceRoomListProxy = userInfo as? SpaceRoomListProxyProtocol else { fatalError("A space proxy must be provided.") } - return .spaceList(selectedSpaceID: spaceRoomListProxy.id) + return .spacesScreen(selectedSpaceID: spaceRoomListProxy.id) } handler: { [weak self] context in guard let self, let spaceRoomListProxy = context.userInfo as? SpaceRoomListProxyProtocol else { return } startSpaceFlow(spaceRoomListProxy: spaceRoomListProxy) } stateMachine.addRouteMapping { event, fromState, _ in - guard event == .deselectSpace, case .spaceList(.some) = fromState else { return nil } - return .spaceList(selectedSpaceID: nil) + guard event == .deselectSpace, case .spacesScreen(.some) = fromState else { return nil } + return .spacesScreen(selectedSpaceID: nil) } handler: { [weak self] _ in guard let self else { return } navigationSplitCoordinator.setDetailCoordinator(nil) // If we forget to do this, the tab bar remains hidden. @@ -115,12 +115,12 @@ class SpaceExplorerFlowCoordinator: FlowCoordinatorProtocol { } } - private func presentSpaceList() { - let parameters = SpaceListScreenCoordinatorParameters(userSession: userSession, - selectedSpacePublisher: selectedSpaceSubject.asCurrentValuePublisher(), - appSettings: flowParameters.appSettings, - userIndicatorController: flowParameters.userIndicatorController) - let coordinator = SpaceListScreenCoordinator(parameters: parameters) + private func presentSpacesScreen() { + let parameters = SpacesScreenCoordinatorParameters(userSession: userSession, + selectedSpacePublisher: selectedSpaceSubject.asCurrentValuePublisher(), + appSettings: flowParameters.appSettings, + userIndicatorController: flowParameters.userIndicatorController) + let coordinator = SpacesScreenCoordinator(parameters: parameters) coordinator.actionsPublisher .sink { [weak self] action in guard let self else { return } diff --git a/ElementX/Sources/FlowCoordinators/UserSessionFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/UserSessionFlowCoordinator.swift index 4638836ee..743e6b586 100644 --- a/ElementX/Sources/FlowCoordinators/UserSessionFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/UserSessionFlowCoordinator.swift @@ -31,9 +31,9 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { private let onboardingFlowCoordinator: OnboardingFlowCoordinator private let onboardingStackCoordinator: NavigationStackCoordinator - private let chatsFlowCoordinator: ChatsFlowCoordinator + private let chatsTabFlowCoordinator: ChatsTabFlowCoordinator private let chatsTabDetails: NavigationTabCoordinator.TabDetails - private let spaceExplorerFlowCoordinator: SpaceExplorerFlowCoordinator + private let spacesTabFlowCoordinator: SpacesTabFlowCoordinator private let spacesTabDetails: NavigationTabCoordinator.TabDetails // periphery:ignore - retaining purpose @@ -78,15 +78,15 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { navigationRootCoordinator.setRootCoordinator(navigationTabCoordinator) let chatsSplitCoordinator = NavigationSplitCoordinator(placeholderCoordinator: PlaceholderScreenCoordinator(hideBrandChrome: flowParameters.appSettings.hideBrandChrome)) - chatsFlowCoordinator = ChatsFlowCoordinator(isNewLogin: isNewLogin, - navigationSplitCoordinator: chatsSplitCoordinator, - flowParameters: flowParameters) + chatsTabFlowCoordinator = ChatsTabFlowCoordinator(isNewLogin: isNewLogin, + navigationSplitCoordinator: chatsSplitCoordinator, + flowParameters: flowParameters) chatsTabDetails = .init(tag: HomeTab.chats, title: L10n.screenHomeTabChats, icon: \.chat, selectedIcon: \.chatSolid) chatsTabDetails.navigationSplitCoordinator = chatsSplitCoordinator let spacesSplitCoordinator = NavigationSplitCoordinator(placeholderCoordinator: PlaceholderScreenCoordinator(hideBrandChrome: flowParameters.appSettings.hideBrandChrome)) - spaceExplorerFlowCoordinator = SpaceExplorerFlowCoordinator(navigationSplitCoordinator: spacesSplitCoordinator, - flowParameters: flowParameters) + spacesTabFlowCoordinator = SpacesTabFlowCoordinator(navigationSplitCoordinator: spacesSplitCoordinator, + flowParameters: flowParameters) spacesTabDetails = .init(tag: HomeTab.spaces, title: L10n.screenHomeTabSpaces, icon: \.space, selectedIcon: \.spaceSolid) spacesTabDetails.navigationSplitCoordinator = spacesSplitCoordinator @@ -112,7 +112,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { } func stop() { - chatsFlowCoordinator.stop() + chatsTabFlowCoordinator.stop() } func handleAppRoute(_ appRoute: AppRoute, animated: Bool) { @@ -133,7 +133,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { .event, .eventOnRoomAlias, .childEvent, .childEventOnRoomAlias, .share, .transferOwnership, .thread: clearPresentedSheets(animated: animated) // Make sure the presented route is visible. - chatsFlowCoordinator.handleAppRoute(appRoute, animated: animated) + chatsTabFlowCoordinator.handleAppRoute(appRoute, animated: animated) if navigationTabCoordinator.selectedTab != .chats { navigationTabCoordinator.selectedTab = .chats } @@ -142,7 +142,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { func clearRoute(animated: Bool) { clearPresentedSheets(animated: animated) - chatsFlowCoordinator.clearRoute(animated: animated) + chatsTabFlowCoordinator.clearRoute(animated: animated) } // Clearing routes is more complicated than it first seems. When passing routes @@ -162,7 +162,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { func isDisplayingRoomScreen(withRoomID roomID: String) -> Bool { guard navigationTabCoordinator.selectedTab == .chats else { return false } - return chatsFlowCoordinator.isDisplayingRoomScreen(withRoomID: roomID) + return chatsTabFlowCoordinator.isDisplayingRoomScreen(withRoomID: roomID) } // MARK: - Private @@ -171,8 +171,8 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { stateMachine.addRoutes(event: .start, transitions: [.initial => .tabBar]) { [weak self] _ in guard let self else { return } - chatsFlowCoordinator.start() - spaceExplorerFlowCoordinator.start() + chatsTabFlowCoordinator.start() + spacesTabFlowCoordinator.start() attemptStartingOnboarding() } @@ -189,7 +189,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { } private func setupObservers() { - chatsFlowCoordinator.actionsPublisher + chatsTabFlowCoordinator.actionsPublisher .sink { [weak self] action in guard let self else { return } switch action { @@ -211,7 +211,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { } .store(in: &cancellables) - spaceExplorerFlowCoordinator.actionsPublisher + spacesTabFlowCoordinator.actionsPublisher .sink { [weak self] action in guard let self else { return } switch action { @@ -499,7 +499,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { primaryButton: .init(title: L10n.screenSignoutConfirmationDialogSubmit, role: .destructive) { [weak self] in self?.actionsSubject.send(.logout) }, secondaryButton: .init(title: L10n.commonSettings, role: .cancel) { [weak self] in - self?.chatsFlowCoordinator.handleAppRoute(.chatBackupSettings, animated: true) + self?.chatsTabFlowCoordinator.handleAppRoute(.chatBackupSettings, animated: true) }) return } @@ -511,7 +511,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { primaryButton: .init(title: L10n.screenSignoutConfirmationDialogSubmit, role: .destructive) { [weak self] in self?.actionsSubject.send(.logout) }, secondaryButton: .init(title: L10n.commonSettings, role: .cancel) { [weak self] in - self?.chatsFlowCoordinator.handleAppRoute(.chatBackupSettings, animated: true) + self?.chatsTabFlowCoordinator.handleAppRoute(.chatBackupSettings, animated: true) }) return } @@ -540,7 +540,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { case .cancel: navigationTabCoordinator.setSheetCoordinator(nil) case .settings: - chatsFlowCoordinator.handleAppRoute(.chatBackupSettings, animated: true) + chatsTabFlowCoordinator.handleAppRoute(.chatBackupSettings, animated: true) navigationTabCoordinator.setSheetCoordinator(nil) case .logout: actionsSubject.send(.logout) diff --git a/ElementX/Sources/Other/AccessibilityIdentifiers.swift b/ElementX/Sources/Other/AccessibilityIdentifiers.swift index d90079e29..828b87efc 100644 --- a/ElementX/Sources/Other/AccessibilityIdentifiers.swift +++ b/ElementX/Sources/Other/AccessibilityIdentifiers.swift @@ -44,7 +44,7 @@ enum A11yIdentifiers { static let pollFormScreen = PollFormScreen() static let roomPollsHistoryScreen = RoomPollsHistoryScreen() static let manageRoomMemberSheet = ManageRoomMemberSheet() - static let spaceListScreen = SpaceListScreen() + static let spacesScreen = SpacesScreen() static let linkNewDeviceScreen = LinkNewDeviceScreen() struct AlertInfo { @@ -307,10 +307,10 @@ enum A11yIdentifiers { let viewProfile = "manage_room_member_sheet-view_profile" } - struct SpaceListScreen { - let userAvatar = "space_list_screen-user_avatar" + struct SpacesScreen { + let userAvatar = "spaces_screen-user_avatar" - let roomNamePrefix = "space_list_screen-room_name" + let roomNamePrefix = "spaces_screen-room_name" func spaceRoomName(_ name: String) -> String { "\(roomNamePrefix):\(name)" } diff --git a/ElementX/Sources/Other/TestablePreview/TestablePreviewsDictionary.swift b/ElementX/Sources/Other/TestablePreview/TestablePreviewsDictionary.swift index 77002e714..c4081573d 100644 --- a/ElementX/Sources/Other/TestablePreview/TestablePreviewsDictionary.swift +++ b/ElementX/Sources/Other/TestablePreview/TestablePreviewsDictionary.swift @@ -167,11 +167,11 @@ enum TestablePreviewsDictionary { "SpaceAddRoomsScreen_Previews" : SpaceAddRoomsScreen_Previews.self, "SpaceHeaderTopicSheetView_Previews" : SpaceHeaderTopicSheetView_Previews.self, "SpaceHeaderView_Previews" : SpaceHeaderView_Previews.self, - "SpaceListScreen_Previews" : SpaceListScreen_Previews.self, "SpaceRoomCell_Previews" : SpaceRoomCell_Previews.self, "SpaceScreen_Previews" : SpaceScreen_Previews.self, "SpaceSettingsScreen_Previews" : SpaceSettingsScreen_Previews.self, "SpacesAnnouncementSheetView_Previews" : SpacesAnnouncementSheetView_Previews.self, + "SpacesScreen_Previews" : SpacesScreen_Previews.self, "SplashScreen_Previews" : SplashScreen_Previews.self, "StackedAvatarsView_Previews" : StackedAvatarsView_Previews.self, "StartChatScreen_Previews" : StartChatScreen_Previews.self, diff --git a/ElementX/Sources/Screens/Spaces/Common/SpaceRoomCell.swift b/ElementX/Sources/Screens/Spaces/Common/SpaceRoomCell.swift index e46326ed9..c38a69151 100644 --- a/ElementX/Sources/Screens/Spaces/Common/SpaceRoomCell.swift +++ b/ElementX/Sources/Screens/Spaces/Common/SpaceRoomCell.swift @@ -74,7 +74,7 @@ struct SpaceRoomCell: View { .accessibilityElement(children: .combine) } .buttonStyle(SpaceRoomCellButtonStyle(isSelected: isSelected)) - .accessibilityIdentifier(A11yIdentifiers.spaceListScreen.spaceRoomName(spaceServiceRoom.name)) + .accessibilityIdentifier(A11yIdentifiers.spacesScreen.spaceRoomName(spaceServiceRoom.name)) } @ViewBuilder @MainActor diff --git a/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenCoordinator.swift b/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenCoordinator.swift similarity index 55% rename from ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenCoordinator.swift rename to ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenCoordinator.swift index c135ff3e6..25b48c742 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenCoordinator.swift +++ b/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenCoordinator.swift @@ -6,41 +6,39 @@ // Please see LICENSE files in the repository root for full details. // -// periphery:ignore:all - this is just a spaceList remove this comment once generating the final file - import Combine import SwiftUI -struct SpaceListScreenCoordinatorParameters { +struct SpacesScreenCoordinatorParameters { let userSession: UserSessionProtocol let selectedSpacePublisher: CurrentValuePublisher let appSettings: AppSettings let userIndicatorController: UserIndicatorControllerProtocol } -enum SpaceListScreenCoordinatorAction { +enum SpacesScreenCoordinatorAction { case selectSpace(SpaceRoomListProxyProtocol) case showSettings } -final class SpaceListScreenCoordinator: CoordinatorProtocol { - private let parameters: SpaceListScreenCoordinatorParameters - private let viewModel: SpaceListScreenViewModelProtocol +final class SpacesScreenCoordinator: CoordinatorProtocol { + private let parameters: SpacesScreenCoordinatorParameters + private let viewModel: SpacesScreenViewModelProtocol private var cancellables = Set() - private let actionsSubject: PassthroughSubject = .init() - var actionsPublisher: AnyPublisher { + private let actionsSubject: PassthroughSubject = .init() + var actionsPublisher: AnyPublisher { actionsSubject.eraseToAnyPublisher() } - init(parameters: SpaceListScreenCoordinatorParameters) { + init(parameters: SpacesScreenCoordinatorParameters) { self.parameters = parameters - viewModel = SpaceListScreenViewModel(userSession: parameters.userSession, - selectedSpacePublisher: parameters.selectedSpacePublisher, - appSettings: parameters.appSettings, - userIndicatorController: parameters.userIndicatorController) + viewModel = SpacesScreenViewModel(userSession: parameters.userSession, + selectedSpacePublisher: parameters.selectedSpacePublisher, + appSettings: parameters.appSettings, + userIndicatorController: parameters.userIndicatorController) } func start() { @@ -59,6 +57,6 @@ final class SpaceListScreenCoordinator: CoordinatorProtocol { } func toPresentable() -> AnyView { - AnyView(SpaceListScreen(context: viewModel.context)) + AnyView(SpacesScreen(context: viewModel.context)) } } diff --git a/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenModels.swift b/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenModels.swift similarity index 77% rename from ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenModels.swift rename to ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenModels.swift index 978eacf5e..2b68805c4 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenModels.swift +++ b/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenModels.swift @@ -8,12 +8,12 @@ import Foundation -enum SpaceListScreenViewModelAction { +enum SpacesScreenViewModelAction { case selectSpace(SpaceRoomListProxyProtocol) case showSettings } -struct SpaceListScreenViewState: BindableState { +struct SpacesScreenViewState: BindableState { let userID: String var userDisplayName: String? var userAvatarURL: URL? @@ -23,14 +23,14 @@ struct SpaceListScreenViewState: BindableState { var isCreateSpaceEnabled: Bool - var bindings: SpaceListScreenViewStateBindings + var bindings: SpacesScreenViewStateBindings } -struct SpaceListScreenViewStateBindings { +struct SpacesScreenViewStateBindings { var isPresentingFeatureAnnouncement = false } -enum SpaceListScreenViewAction { +enum SpacesScreenViewAction { case spaceAction(SpaceRoomCell.Action) case showSettings case screenAppeared diff --git a/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenViewModel.swift b/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenViewModel.swift similarity index 80% rename from ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenViewModel.swift rename to ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenViewModel.swift index 765962f69..6a7ea9b54 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenViewModel.swift +++ b/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenViewModel.swift @@ -9,15 +9,15 @@ import Combine import SwiftUI -typealias SpaceListScreenViewModelType = StateStoreViewModelV2 +typealias SpacesScreenViewModelType = StateStoreViewModelV2 -class SpaceListScreenViewModel: SpaceListScreenViewModelType, SpaceListScreenViewModelProtocol { +class SpacesScreenViewModel: SpacesScreenViewModelType, SpacesScreenViewModelProtocol { private let spaceServiceProxy: SpaceServiceProxyProtocol private let appSettings: AppSettings private let userIndicatorController: UserIndicatorControllerProtocol - private let actionsSubject: PassthroughSubject = .init() - var actionsPublisher: AnyPublisher { + private let actionsSubject: PassthroughSubject = .init() + var actionsPublisher: AnyPublisher { actionsSubject.eraseToAnyPublisher() } @@ -29,10 +29,10 @@ class SpaceListScreenViewModel: SpaceListScreenViewModelType, SpaceListScreenVie self.appSettings = appSettings self.userIndicatorController = userIndicatorController - super.init(initialViewState: SpaceListScreenViewState(userID: userSession.clientProxy.userID, - topLevelSpaces: spaceServiceProxy.topLevelSpacesPublisher.value, - isCreateSpaceEnabled: appSettings.createSpaceEnabled, - bindings: .init()), + super.init(initialViewState: SpacesScreenViewState(userID: userSession.clientProxy.userID, + topLevelSpaces: spaceServiceProxy.topLevelSpacesPublisher.value, + isCreateSpaceEnabled: appSettings.createSpaceEnabled, + bindings: .init()), mediaProvider: userSession.mediaProvider) spaceServiceProxy.topLevelSpacesPublisher @@ -61,7 +61,7 @@ class SpaceListScreenViewModel: SpaceListScreenViewModelType, SpaceListScreenVie // MARK: - Public - override func process(viewAction: SpaceListScreenViewAction) { + override func process(viewAction: SpacesScreenViewAction) { MXLog.info("View model: received view action: \(viewAction)") switch viewAction { diff --git a/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenViewModelProtocol.swift b/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenViewModelProtocol.swift similarity index 57% rename from ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenViewModelProtocol.swift rename to ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenViewModelProtocol.swift index 0df1e4000..fdadb61d9 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenViewModelProtocol.swift +++ b/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenViewModelProtocol.swift @@ -9,7 +9,7 @@ import Combine @MainActor -protocol SpaceListScreenViewModelProtocol { - var actionsPublisher: AnyPublisher { get } - var context: SpaceListScreenViewModelType.Context { get } +protocol SpacesScreenViewModelProtocol { + var actionsPublisher: AnyPublisher { get } + var context: SpacesScreenViewModelType.Context { get } } diff --git a/ElementX/Sources/Screens/Spaces/SpaceListScreen/View/SpacesAnnouncementSheetView.swift b/ElementX/Sources/Screens/Spaces/SpacesScreen/View/SpacesAnnouncementSheetView.swift similarity index 90% rename from ElementX/Sources/Screens/Spaces/SpaceListScreen/View/SpacesAnnouncementSheetView.swift rename to ElementX/Sources/Screens/Spaces/SpacesScreen/View/SpacesAnnouncementSheetView.swift index 061c31f91..44141717d 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceListScreen/View/SpacesAnnouncementSheetView.swift +++ b/ElementX/Sources/Screens/Spaces/SpacesScreen/View/SpacesAnnouncementSheetView.swift @@ -12,7 +12,7 @@ import SwiftUI struct SpacesAnnouncementSheetView: View { @Environment(\.dismiss) private var dismiss - let context: SpaceListScreenViewModel.Context + let context: SpacesScreenViewModel.Context var body: some View { FullscreenDialog(topPadding: 44, horizontalPadding: 24) { @@ -105,10 +105,10 @@ struct SpacesAnnouncementSheetView: View { // MARK: - Previews struct SpacesAnnouncementSheetView_Previews: PreviewProvider, TestablePreview { - static let viewModel = SpaceListScreenViewModel(userSession: UserSessionMock(.init()), - selectedSpacePublisher: .init(nil), - appSettings: ServiceLocator.shared.settings, - userIndicatorController: UserIndicatorControllerMock()) + static let viewModel = SpacesScreenViewModel(userSession: UserSessionMock(.init()), + selectedSpacePublisher: .init(nil), + appSettings: ServiceLocator.shared.settings, + userIndicatorController: UserIndicatorControllerMock()) static var previews: some View { SpacesAnnouncementSheetView(context: viewModel.context) diff --git a/ElementX/Sources/Screens/Spaces/SpaceListScreen/View/SpaceListScreen.swift b/ElementX/Sources/Screens/Spaces/SpacesScreen/View/SpacesScreen.swift similarity index 88% rename from ElementX/Sources/Screens/Spaces/SpaceListScreen/View/SpaceListScreen.swift rename to ElementX/Sources/Screens/Spaces/SpacesScreen/View/SpacesScreen.swift index 985c5d254..e424c71a3 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceListScreen/View/SpaceListScreen.swift +++ b/ElementX/Sources/Screens/Spaces/SpacesScreen/View/SpacesScreen.swift @@ -9,8 +9,8 @@ import Compound import SwiftUI -struct SpaceListScreen: View { - @Bindable var context: SpaceListScreenViewModel.Context +struct SpacesScreen: View { + @Bindable var context: SpacesScreenViewModel.Context var body: some View { mainContent @@ -134,22 +134,22 @@ struct SpaceListScreen: View { // MARK: - Previews -struct SpaceListScreen_Previews: PreviewProvider, TestablePreview { +struct SpacesScreen_Previews: PreviewProvider, TestablePreview { static let viewModel = makeViewModel() static let emptyViewModel = makeViewModel(isEmpty: true) static var previews: some View { NavigationStack { - SpaceListScreen(context: viewModel.context) + SpacesScreen(context: viewModel.context) } NavigationStack { - SpaceListScreen(context: emptyViewModel.context) + SpacesScreen(context: emptyViewModel.context) } .previewDisplayName("Empty") } - static func makeViewModel(isEmpty: Bool = false) -> SpaceListScreenViewModel { + static func makeViewModel(isEmpty: Bool = false) -> SpacesScreenViewModel { AppSettings.resetAllSettings() let appSettings = AppSettings() appSettings.createSpaceEnabled = true @@ -158,10 +158,10 @@ struct SpaceListScreen_Previews: PreviewProvider, TestablePreview { let clientProxy = ClientProxyMock(.init()) clientProxy.spaceService = SpaceServiceProxyMock(.init(topLevelSpaces: isEmpty ? [] : .mockJoinedSpaces)) - let viewModel = SpaceListScreenViewModel(userSession: UserSessionMock(.init(clientProxy: clientProxy)), - selectedSpacePublisher: .init(nil), - appSettings: appSettings, - userIndicatorController: UserIndicatorControllerMock()) + let viewModel = SpacesScreenViewModel(userSession: UserSessionMock(.init(clientProxy: clientProxy)), + selectedSpacePublisher: .init(nil), + appSettings: appSettings, + userIndicatorController: UserIndicatorControllerMock()) return viewModel } diff --git a/ElementX/Sources/Services/StateMachine/StateMachineFactory.swift b/ElementX/Sources/Services/StateMachine/StateMachineFactory.swift index 35a577bac..bcf75d20e 100644 --- a/ElementX/Sources/Services/StateMachine/StateMachineFactory.swift +++ b/ElementX/Sources/Services/StateMachine/StateMachineFactory.swift @@ -12,7 +12,7 @@ import SwiftState protocol StateMachineFactoryProtocol { func makeUserSessionFlowStateMachine(state: UserSessionFlowCoordinator.State) -> StateMachine - func makeChatsFlowStateMachine() -> ChatsFlowCoordinatorStateMachine + func makeChatsTabFlowStateMachine() -> ChatsTabFlowCoordinatorStateMachine func makeMembersFlowStateMachine(state: RoomMembersFlowCoordinator.State) -> StateMachine } @@ -21,7 +21,7 @@ struct StateMachineFactory: StateMachineFactoryProtocol { .init(state: state) } - func makeChatsFlowStateMachine() -> ChatsFlowCoordinatorStateMachine { + func makeChatsTabFlowStateMachine() -> ChatsTabFlowCoordinatorStateMachine { .init() } @@ -45,13 +45,13 @@ class PublishedStateMachineFactory: StateMachineFactoryProtocol { return stateMachine } - // MARK: ChatsFlowCoordinator + // MARK: ChatsTabFlowCoordinator - let chatsFlowStatePublisher = PassthroughSubject() + let chatsTabFlowStatePublisher = PassthroughSubject() - func makeChatsFlowStateMachine() -> ChatsFlowCoordinatorStateMachine { - let stateMachine = baseFactory.makeChatsFlowStateMachine() - stateMachine.addTransitionHandler { [weak self] in self?.chatsFlowStatePublisher.send($0.toState) } + func makeChatsTabFlowStateMachine() -> ChatsTabFlowCoordinatorStateMachine { + let stateMachine = baseFactory.makeChatsTabFlowStateMachine() + stateMachine.addTransitionHandler { [weak self] in self?.chatsTabFlowStatePublisher.send($0.toState) } return stateMachine } diff --git a/ElementX/Sources/UITests/UITestsAppCoordinator.swift b/ElementX/Sources/UITests/UITestsAppCoordinator.swift index 1d80fe0fa..51841abe7 100644 --- a/ElementX/Sources/UITests/UITestsAppCoordinator.swift +++ b/ElementX/Sources/UITests/UITestsAppCoordinator.swift @@ -800,21 +800,21 @@ class MockScreen: Identifiable { mediaProvider: MediaProviderMock(configuration: .init()), appSettings: ServiceLocator.shared.settings) - let flowCoordinator = ChatsFlowCoordinator(isNewLogin: false, - navigationSplitCoordinator: navigationSplitCoordinator, - flowParameters: CommonFlowParameters(userSession: UserSessionMock(.init(clientProxy: clientProxy)), - bugReportService: BugReportServiceMock(.init()), - elementCallService: ElementCallServiceMock(.init()), - timelineControllerFactory: TimelineControllerFactoryMock(.init(timelineController: timelineController)), - emojiProvider: EmojiProvider(appSettings: appSettings), - linkMetadataProvider: LinkMetadataProvider(), - appMediator: AppMediatorMock.default, - appSettings: appSettings, - appHooks: AppHooks(), - analytics: ServiceLocator.shared.analytics, - userIndicatorController: UserIndicatorControllerMock(), - notificationManager: NotificationManagerMock(), - stateMachineFactory: StateMachineFactory())) + let flowCoordinator = ChatsTabFlowCoordinator(isNewLogin: false, + navigationSplitCoordinator: navigationSplitCoordinator, + flowParameters: CommonFlowParameters(userSession: UserSessionMock(.init(clientProxy: clientProxy)), + bugReportService: BugReportServiceMock(.init()), + elementCallService: ElementCallServiceMock(.init()), + timelineControllerFactory: TimelineControllerFactoryMock(.init(timelineController: timelineController)), + emojiProvider: EmojiProvider(appSettings: appSettings), + linkMetadataProvider: LinkMetadataProvider(), + appMediator: AppMediatorMock.default, + appSettings: appSettings, + appHooks: AppHooks(), + analytics: ServiceLocator.shared.analytics, + userIndicatorController: UserIndicatorControllerMock(), + notificationManager: NotificationManagerMock(), + stateMachineFactory: StateMachineFactory())) flowCoordinator.start() diff --git a/PreviewTests/Sources/GeneratedPreviewTests.swift b/PreviewTests/Sources/GeneratedPreviewTests.swift index ce688acf1..930a8bcc7 100644 --- a/PreviewTests/Sources/GeneratedPreviewTests.swift +++ b/PreviewTests/Sources/GeneratedPreviewTests.swift @@ -959,12 +959,6 @@ extension PreviewTests { } } - func testSpaceListScreen() async throws { - for (index, preview) in SpaceListScreen_Previews._allPreviews.enumerated() { - try await assertSnapshots(matching: preview, step: index) - } - } - func testSpaceRoomCell() async throws { for (index, preview) in SpaceRoomCell_Previews._allPreviews.enumerated() { try await assertSnapshots(matching: preview, step: index) @@ -989,6 +983,12 @@ extension PreviewTests { } } + func testSpacesScreen() async throws { + for (index, preview) in SpacesScreen_Previews._allPreviews.enumerated() { + try await assertSnapshots(matching: preview, step: index) + } + } + func testSplashScreen() async throws { for (index, preview) in SplashScreen_Previews._allPreviews.enumerated() { try await assertSnapshots(matching: preview, step: index) diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.Empty-iPad-en-GB.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.Empty-iPad-en-GB.png similarity index 100% rename from PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.Empty-iPad-en-GB.png rename to PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.Empty-iPad-en-GB.png diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.Empty-iPad-pseudo.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.Empty-iPad-pseudo.png similarity index 100% rename from PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.Empty-iPad-pseudo.png rename to PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.Empty-iPad-pseudo.png diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.Empty-iPhone-en-GB.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.Empty-iPhone-en-GB.png similarity index 100% rename from PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.Empty-iPhone-en-GB.png rename to PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.Empty-iPhone-en-GB.png diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.Empty-iPhone-pseudo.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.Empty-iPhone-pseudo.png similarity index 100% rename from PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.Empty-iPhone-pseudo.png rename to PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.Empty-iPhone-pseudo.png diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.iPad-en-GB-0.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.iPad-en-GB-0.png similarity index 100% rename from PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.iPad-en-GB-0.png rename to PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.iPad-en-GB-0.png diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.iPad-pseudo-0.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.iPad-pseudo-0.png similarity index 100% rename from PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.iPad-pseudo-0.png rename to PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.iPad-pseudo-0.png diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.iPhone-en-GB-0.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.iPhone-en-GB-0.png similarity index 100% rename from PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.iPhone-en-GB-0.png rename to PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.iPhone-en-GB-0.png diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.iPhone-pseudo-0.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.iPhone-pseudo-0.png similarity index 100% rename from PreviewTests/Sources/__Snapshots__/PreviewTests/spaceListScreen.iPhone-pseudo-0.png rename to PreviewTests/Sources/__Snapshots__/PreviewTests/spacesScreen.iPhone-pseudo-0.png diff --git a/UITests/Sources/UserSessionScreenTests.swift b/UITests/Sources/UserSessionScreenTests.swift index b87695638..3c288ccd3 100644 --- a/UITests/Sources/UserSessionScreenTests.swift +++ b/UITests/Sources/UserSessionScreenTests.swift @@ -21,8 +21,8 @@ class UserSessionScreenTests: XCTestCase { static let homeScreen = 1 static let roomScreen = 2 static let composerAttachments = 3 - static let spacesTabBar = 4 - static let spaceList = 5 + static let homeScreenWithTabBar = 4 + static let spacesScreen = 5 static let spaceScreen = 6 static let subspaceScreen = 7 static let subspaceRoomScreen = 8 @@ -77,24 +77,24 @@ class UserSessionScreenTests: XCTestCase { app.swipeDown() // Make sure the header shows a large title - try await app.assertScreenshot(step: Step.spacesTabBar) + try await app.assertScreenshot(step: Step.homeScreenWithTabBar) // app.tabBars doesn't work on iPadOS 18 😐 app.buttons["Spaces"].firstMatch.tap(.center) - try await app.assertScreenshot(step: Step.spaceList) + try await app.assertScreenshot(step: Step.spacesScreen) - app.buttons[A11yIdentifiers.spaceListScreen.spaceRoomName(firstSpaceName)].tap() + app.buttons[A11yIdentifiers.spacesScreen.spaceRoomName(firstSpaceName)].tap() XCTAssert(app.staticTexts[firstSpaceName].waitForExistence(timeout: 5.0)) try await Task.sleep(for: .seconds(1)) try await app.assertScreenshot(step: Step.spaceScreen) - app.buttons[A11yIdentifiers.spaceListScreen.spaceRoomName(joinedSubspaceName)].tap() + app.buttons[A11yIdentifiers.spacesScreen.spaceRoomName(joinedSubspaceName)].tap() XCTAssert(app.staticTexts[joinedSubspaceName].waitForExistence(timeout: 5.0)) try await Task.sleep(for: .seconds(1)) try await app.assertScreenshot(step: Step.subspaceScreen) - app.buttons[A11yIdentifiers.spaceListScreen.spaceRoomName(joinedSubspaceRoomName)].tap() + app.buttons[A11yIdentifiers.spacesScreen.spaceRoomName(joinedSubspaceRoomName)].tap() XCTAssert(app.staticTexts[joinedSubspaceRoomName].waitForExistence(timeout: 5.0)) try await Task.sleep(for: .seconds(1)) try await app.assertScreenshot(step: Step.subspaceRoomScreen) @@ -105,7 +105,7 @@ class UserSessionScreenTests: XCTestCase { app.navigationBars.buttons[firstSpaceName].firstMatch.tap(.center) XCTAssert(app.staticTexts[firstSpaceName].waitForExistence(timeout: 5.0)) - app.buttons[A11yIdentifiers.spaceListScreen.spaceRoomName(unjoinedSpaceRoomName)].tap() + app.buttons[A11yIdentifiers.spacesScreen.spaceRoomName(unjoinedSpaceRoomName)].tap() XCTAssert(app.staticTexts[unjoinedSpaceRoomName].waitForExistence(timeout: 5.0)) try await Task.sleep(for: .seconds(1)) try await app.assertScreenshot(step: Step.spaceJoinRoomScreen) @@ -116,7 +116,7 @@ class UserSessionScreenTests: XCTestCase { app.swipeDown() // Make sure the header shows a large title - try await app.assertScreenshot(step: Step.spacesTabBar) + try await app.assertScreenshot(step: Step.homeScreenWithTabBar) // Tap the space invite cell. app.staticTexts[A11yIdentifiers.homeScreen.roomName(spaceInviteName)].tap() diff --git a/UnitTests/Sources/ChatsFlowCoordinatorTests.swift b/UnitTests/Sources/ChatsTabFlowCoordinatorTests.swift similarity index 92% rename from UnitTests/Sources/ChatsFlowCoordinatorTests.swift rename to UnitTests/Sources/ChatsTabFlowCoordinatorTests.swift index b8dd60773..bf949cfd4 100644 --- a/UnitTests/Sources/ChatsFlowCoordinatorTests.swift +++ b/UnitTests/Sources/ChatsTabFlowCoordinatorTests.swift @@ -12,10 +12,10 @@ import Combine @testable import ElementX @MainActor -class ChatsFlowCoordinatorTests: XCTestCase { +class ChatsTabFlowCoordinatorTests: XCTestCase { var clientProxy: ClientProxyMock! var timelineControllerFactory: TimelineControllerFactoryMock! - var chatsFlowCoordinator: ChatsFlowCoordinator! + var chatsTabFlowCoordinator: ChatsTabFlowCoordinator! var splitCoordinator: NavigationSplitCoordinator! var notificationManager: NotificationManagerMock! let stateMachineFactory = PublishedStateMachineFactory() @@ -47,12 +47,12 @@ class ChatsFlowCoordinatorTests: XCTestCase { userIndicatorController: UserIndicatorControllerMock(), notificationManager: notificationManager, stateMachineFactory: stateMachineFactory) - chatsFlowCoordinator = ChatsFlowCoordinator(isNewLogin: false, - navigationSplitCoordinator: splitCoordinator, - flowParameters: flowParameters) + chatsTabFlowCoordinator = ChatsTabFlowCoordinator(isNewLogin: false, + navigationSplitCoordinator: splitCoordinator, + flowParameters: flowParameters) - let deferred = deferFulfillment(stateMachineFactory.chatsFlowStatePublisher) { $0 == .roomList(detailState: nil) } - chatsFlowCoordinator.start() + let deferred = deferFulfillment(stateMachineFactory.chatsTabFlowStatePublisher) { $0 == .roomList(detailState: nil) } + chatsTabFlowCoordinator.start() try await deferred.fulfill() } @@ -133,8 +133,8 @@ class ChatsFlowCoordinatorTests: XCTestCase { XCTAssertTrue(detailNavigationStack?.rootCoordinator is RoomDetailsScreenCoordinator) XCTAssertNotNil(detailCoordinator) - let unexpectedFulfillment = deferFailure(stateMachineFactory.chatsFlowStatePublisher, timeout: 1) { _ in true } - chatsFlowCoordinator.handleAppRoute(.roomDetails(roomID: "1"), animated: true) + let unexpectedFulfillment = deferFailure(stateMachineFactory.chatsTabFlowStatePublisher, timeout: 1) { _ in true } + chatsTabFlowCoordinator.handleAppRoute(.roomDetails(roomID: "1"), animated: true) try await unexpectedFulfillment.fulfill() XCTAssertTrue(detailNavigationStack?.rootCoordinator is RoomDetailsScreenCoordinator) @@ -156,8 +156,8 @@ class ChatsFlowCoordinatorTests: XCTestCase { XCTAssertTrue(detailNavigationStack?.rootCoordinator is RoomScreenCoordinator) XCTAssertNotNil(detailCoordinator) - let unexpectedFulfillment = deferFailure(stateMachineFactory.chatsFlowStatePublisher, timeout: 1) { _ in true } - chatsFlowCoordinator.handleAppRoute(.roomDetails(roomID: "1"), animated: true) + let unexpectedFulfillment = deferFailure(stateMachineFactory.chatsTabFlowStatePublisher, timeout: 1) { _ in true } + chatsTabFlowCoordinator.handleAppRoute(.roomDetails(roomID: "1"), animated: true) try await unexpectedFulfillment.fulfill() XCTAssertTrue(detailNavigationStack?.rootCoordinator is RoomScreenCoordinator) @@ -197,7 +197,7 @@ class ChatsFlowCoordinatorTests: XCTestCase { XCTAssertEqual(detailNavigationStack?.stackCoordinators.count, 0) XCTAssertNotNil(detailCoordinator) - chatsFlowCoordinator.handleAppRoute(.childRoom(roomID: "2", via: []), animated: true) + chatsTabFlowCoordinator.handleAppRoute(.childRoom(roomID: "2", via: []), animated: true) try await Task.sleep(for: .milliseconds(100)) XCTAssertTrue(detailNavigationStack?.rootCoordinator is RoomScreenCoordinator) XCTAssertEqual(detailNavigationStack?.stackCoordinators.count, 1) @@ -220,7 +220,7 @@ class ChatsFlowCoordinatorTests: XCTestCase { XCTAssertEqual(timelineControllerFactory.buildTimelineControllerRoomProxyInitialFocussedEventIDTimelineItemFactoryMediaProviderReceivedArguments?.initialFocussedEventID, "1") // A child event route should push a new room screen onto the stack and focus on the event. - chatsFlowCoordinator.handleAppRoute(.childEvent(eventID: "2", roomID: "2", via: []), animated: true) + chatsTabFlowCoordinator.handleAppRoute(.childEvent(eventID: "2", roomID: "2", via: []), animated: true) try await Task.sleep(for: .milliseconds(100)) XCTAssertTrue(detailNavigationStack?.rootCoordinator is RoomScreenCoordinator) XCTAssertEqual(detailNavigationStack?.stackCoordinators.count, 1) @@ -273,12 +273,12 @@ class ChatsFlowCoordinatorTests: XCTestCase { // MARK: - Private - private func process(route: AppRoute, expectedState: ChatsFlowCoordinatorStateMachine.State) async throws { + private func process(route: AppRoute, expectedState: ChatsTabFlowCoordinatorStateMachine.State) async throws { // Sometimes the state machine's state changes before the coordinators have updated the stack. - let delayedPublisher = stateMachineFactory.chatsFlowStatePublisher.delay(for: .milliseconds(100), scheduler: DispatchQueue.main) + let delayedPublisher = stateMachineFactory.chatsTabFlowStatePublisher.delay(for: .milliseconds(100), scheduler: DispatchQueue.main) let deferred = deferFulfillment(delayedPublisher) { $0 == expectedState } - chatsFlowCoordinator.handleAppRoute(route, animated: true) + chatsTabFlowCoordinator.handleAppRoute(route, animated: true) try await deferred.fulfill() } } diff --git a/UnitTests/Sources/SpaceListScreenViewModelTests.swift b/UnitTests/Sources/SpaceListScreenViewModelTests.swift index 44ea1180e..ee128ae98 100644 --- a/UnitTests/Sources/SpaceListScreenViewModelTests.swift +++ b/UnitTests/Sources/SpaceListScreenViewModelTests.swift @@ -12,14 +12,14 @@ import XCTest @testable import ElementX @MainActor -class SpaceListScreenViewModelTests: XCTestCase { +class SpacesScreenViewModelTests: XCTestCase { var topLevelSpacesSubject: CurrentValueSubject<[SpaceServiceRoomProtocol], Never>! var spaceServiceProxy: SpaceServiceProxyMock! var appSettings: AppSettings! - var viewModel: SpaceListScreenViewModelProtocol! + var viewModel: SpacesScreenViewModelProtocol! - var context: SpaceListScreenViewModelType.Context { + var context: SpacesScreenViewModelType.Context { viewModel.context } @@ -109,9 +109,9 @@ class SpaceListScreenViewModelTests: XCTestCase { } clientProxy.spaceService = spaceServiceProxy - viewModel = SpaceListScreenViewModel(userSession: userSession, - selectedSpacePublisher: .init(nil), - appSettings: ServiceLocator.shared.settings, - userIndicatorController: UserIndicatorControllerMock()) + viewModel = SpacesScreenViewModel(userSession: userSession, + selectedSpacePublisher: .init(nil), + appSettings: ServiceLocator.shared.settings, + userIndicatorController: UserIndicatorControllerMock()) } } diff --git a/UnitTests/Sources/UserSessionFlowCoordinatorTests.swift b/UnitTests/Sources/UserSessionFlowCoordinatorTests.swift index ea9c458a2..b6732598e 100644 --- a/UnitTests/Sources/UserSessionFlowCoordinatorTests.swift +++ b/UnitTests/Sources/UserSessionFlowCoordinatorTests.swift @@ -214,7 +214,7 @@ class UserSessionFlowCoordinatorTests: XCTestCase { private func process(route: AppRoute, expectedUserSessionState: UserSessionFlowCoordinator.State? = nil, - expectedChatsState: ChatsFlowCoordinatorStateMachine.State? = nil) async throws { + expectedChatsState: ChatsTabFlowCoordinatorStateMachine.State? = nil) async throws { let deferredUserSession: DeferredFulfillment? = if let expectedUserSessionState { deferFulfillment(stateMachineFactory.userSessionFlowStatePublisher.delay(for: .milliseconds(100), scheduler: DispatchQueue.main)) { $0 == expectedUserSessionState @@ -224,7 +224,7 @@ class UserSessionFlowCoordinatorTests: XCTestCase { } let deferredChatsState: DeferredFulfillment? = if let expectedChatsState { - deferFulfillment(stateMachineFactory.chatsFlowStatePublisher.delay(for: .milliseconds(100), scheduler: DispatchQueue.main)) { + deferFulfillment(stateMachineFactory.chatsTabFlowStatePublisher.delay(for: .milliseconds(100), scheduler: DispatchQueue.main)) { $0 == expectedChatsState } } else {