mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 19:44:05 +00:00
Lock screen rotation for the camera (#2353)
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 54;
|
objectVersion = 56;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXAggregateTarget section */
|
/* Begin PBXAggregateTarget section */
|
||||||
@@ -657,6 +657,7 @@
|
|||||||
A722F426FD81FC67706BB1E0 /* CustomLayoutLabelStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42236480CF0431535EBE8387 /* CustomLayoutLabelStyle.swift */; };
|
A722F426FD81FC67706BB1E0 /* CustomLayoutLabelStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42236480CF0431535EBE8387 /* CustomLayoutLabelStyle.swift */; };
|
||||||
A743841F91B62B0E56217B04 /* SecureBackupKeyBackupScreenUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58DCB219D7B7B0299358FF81 /* SecureBackupKeyBackupScreenUITests.swift */; };
|
A743841F91B62B0E56217B04 /* SecureBackupKeyBackupScreenUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58DCB219D7B7B0299358FF81 /* SecureBackupKeyBackupScreenUITests.swift */; };
|
||||||
A74438ED16F8683A4B793E6A /* AnalyticsSettingsScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BCE3FAF40932AC7C7639AC4 /* AnalyticsSettingsScreenViewModel.swift */; };
|
A74438ED16F8683A4B793E6A /* AnalyticsSettingsScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BCE3FAF40932AC7C7639AC4 /* AnalyticsSettingsScreenViewModel.swift */; };
|
||||||
|
A7A6452C2B5946940037ABFE /* OrientationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7A6452B2B5946940037ABFE /* OrientationManager.swift */; };
|
||||||
A7D48E44D485B143AADDB77D /* Strings+Untranslated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A18F6CE4D694D21E4EA9B25 /* Strings+Untranslated.swift */; };
|
A7D48E44D485B143AADDB77D /* Strings+Untranslated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A18F6CE4D694D21E4EA9B25 /* Strings+Untranslated.swift */; };
|
||||||
A7FD7B992E6EE6E5A8429197 /* RoomSummaryDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = 142808B69851451AC32A2CEA /* RoomSummaryDetails.swift */; };
|
A7FD7B992E6EE6E5A8429197 /* RoomSummaryDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = 142808B69851451AC32A2CEA /* RoomSummaryDetails.swift */; };
|
||||||
A816F7087C495D85048AC50E /* RoomMemberDetailsScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B6E30BB748F3F480F077969 /* RoomMemberDetailsScreenModels.swift */; };
|
A816F7087C495D85048AC50E /* RoomMemberDetailsScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B6E30BB748F3F480F077969 /* RoomMemberDetailsScreenModels.swift */; };
|
||||||
@@ -1062,7 +1063,7 @@
|
|||||||
033DB41C51865A2E83174E87 /* target.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = target.yml; sourceTree = "<group>"; };
|
033DB41C51865A2E83174E87 /* target.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = target.yml; sourceTree = "<group>"; };
|
||||||
035177BCD8E8308B098AC3C2 /* WindowManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowManager.swift; sourceTree = "<group>"; };
|
035177BCD8E8308B098AC3C2 /* WindowManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowManager.swift; sourceTree = "<group>"; };
|
||||||
0376C429FAB1687C3D905F3E /* MockCoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCoder.swift; sourceTree = "<group>"; };
|
0376C429FAB1687C3D905F3E /* MockCoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCoder.swift; sourceTree = "<group>"; };
|
||||||
0392E3FDE372C9B56FEEED8B /* test_voice_message.m4a */ = {isa = PBXFileReference; path = test_voice_message.m4a; sourceTree = "<group>"; };
|
0392E3FDE372C9B56FEEED8B /* test_voice_message.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = test_voice_message.m4a; sourceTree = "<group>"; };
|
||||||
03DD998E523D4EC93C7ED703 /* RoomNotificationSettingsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomNotificationSettingsScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
03DD998E523D4EC93C7ED703 /* RoomNotificationSettingsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomNotificationSettingsScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
03FABD73FD8086EFAB699F42 /* MediaUploadPreviewScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaUploadPreviewScreenViewModelTests.swift; sourceTree = "<group>"; };
|
03FABD73FD8086EFAB699F42 /* MediaUploadPreviewScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaUploadPreviewScreenViewModelTests.swift; sourceTree = "<group>"; };
|
||||||
044E501B8331B339874D1B96 /* CompoundIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompoundIcon.swift; sourceTree = "<group>"; };
|
044E501B8331B339874D1B96 /* CompoundIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompoundIcon.swift; sourceTree = "<group>"; };
|
||||||
@@ -1122,7 +1123,7 @@
|
|||||||
127C8472672A5BA09EF1ACF8 /* CurrentValuePublisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrentValuePublisher.swift; sourceTree = "<group>"; };
|
127C8472672A5BA09EF1ACF8 /* CurrentValuePublisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrentValuePublisher.swift; sourceTree = "<group>"; };
|
||||||
12EDAFB64FA5F6812D54F39A /* MigrationScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrationScreenViewModel.swift; sourceTree = "<group>"; };
|
12EDAFB64FA5F6812D54F39A /* MigrationScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrationScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
12F1E7F9C2BE8BB751037826 /* WaitlistScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaitlistScreenCoordinator.swift; sourceTree = "<group>"; };
|
12F1E7F9C2BE8BB751037826 /* WaitlistScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaitlistScreenCoordinator.swift; sourceTree = "<group>"; };
|
||||||
1304D9191300873EADA52D6E /* IntegrationTests.xctestplan */ = {isa = PBXFileReference; path = IntegrationTests.xctestplan; sourceTree = "<group>"; };
|
1304D9191300873EADA52D6E /* IntegrationTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = IntegrationTests.xctestplan; sourceTree = "<group>"; };
|
||||||
130ED565A078F7E0B59D9D25 /* UNTextInputNotificationResponse+Creator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UNTextInputNotificationResponse+Creator.swift"; sourceTree = "<group>"; };
|
130ED565A078F7E0B59D9D25 /* UNTextInputNotificationResponse+Creator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UNTextInputNotificationResponse+Creator.swift"; sourceTree = "<group>"; };
|
||||||
13802897C7AFA360EA74C0B0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
13802897C7AFA360EA74C0B0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
||||||
1423AB065857FA546444DB15 /* NotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationManager.swift; sourceTree = "<group>"; };
|
1423AB065857FA546444DB15 /* NotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationManager.swift; sourceTree = "<group>"; };
|
||||||
@@ -1553,7 +1554,7 @@
|
|||||||
8D55702474F279D910D2D162 /* RoomStateEventStringBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomStateEventStringBuilder.swift; sourceTree = "<group>"; };
|
8D55702474F279D910D2D162 /* RoomStateEventStringBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomStateEventStringBuilder.swift; sourceTree = "<group>"; };
|
||||||
8D8169443E5AC5FF71BFB3DB /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
|
8D8169443E5AC5FF71BFB3DB /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
8DC2C9E0E15C79BBDA80F0A2 /* TimelineStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineStyle.swift; sourceTree = "<group>"; };
|
8DC2C9E0E15C79BBDA80F0A2 /* TimelineStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineStyle.swift; sourceTree = "<group>"; };
|
||||||
8E088F2A1B9EC529D3221931 /* UITests.xctestplan */ = {isa = PBXFileReference; path = UITests.xctestplan; sourceTree = "<group>"; };
|
8E088F2A1B9EC529D3221931 /* UITests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = UITests.xctestplan; sourceTree = "<group>"; };
|
||||||
8E1BBA73B611EDEEA6E20E05 /* InvitesScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvitesScreenModels.swift; sourceTree = "<group>"; };
|
8E1BBA73B611EDEEA6E20E05 /* InvitesScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvitesScreenModels.swift; sourceTree = "<group>"; };
|
||||||
8EC57A32ABC80D774CC663DB /* SettingsScreenUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsScreenUITests.swift; sourceTree = "<group>"; };
|
8EC57A32ABC80D774CC663DB /* SettingsScreenUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsScreenUITests.swift; sourceTree = "<group>"; };
|
||||||
8F21ED7205048668BEB44A38 /* AppActivityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppActivityView.swift; sourceTree = "<group>"; };
|
8F21ED7205048668BEB44A38 /* AppActivityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppActivityView.swift; sourceTree = "<group>"; };
|
||||||
@@ -1633,6 +1634,7 @@
|
|||||||
A6B891A6DA826E2461DBB40F /* PHGPostHogConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PHGPostHogConfiguration.swift; sourceTree = "<group>"; };
|
A6B891A6DA826E2461DBB40F /* PHGPostHogConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PHGPostHogConfiguration.swift; sourceTree = "<group>"; };
|
||||||
A6C11AD9813045E44F950410 /* ElementCallWidgetDriverProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ElementCallWidgetDriverProtocol.swift; sourceTree = "<group>"; };
|
A6C11AD9813045E44F950410 /* ElementCallWidgetDriverProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ElementCallWidgetDriverProtocol.swift; sourceTree = "<group>"; };
|
||||||
A73A07BAEDD74C48795A996A /* AsyncSequence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncSequence.swift; sourceTree = "<group>"; };
|
A73A07BAEDD74C48795A996A /* AsyncSequence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncSequence.swift; sourceTree = "<group>"; };
|
||||||
|
A7A6452B2B5946940037ABFE /* OrientationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrientationManager.swift; sourceTree = "<group>"; };
|
||||||
A7C4EA55DA62F9D0F984A2AE /* CollapsibleTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollapsibleTimelineItem.swift; sourceTree = "<group>"; };
|
A7C4EA55DA62F9D0F984A2AE /* CollapsibleTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollapsibleTimelineItem.swift; sourceTree = "<group>"; };
|
||||||
A861DA5932B128FE1DCB5CE2 /* InviteUsersScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InviteUsersScreenCoordinator.swift; sourceTree = "<group>"; };
|
A861DA5932B128FE1DCB5CE2 /* InviteUsersScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InviteUsersScreenCoordinator.swift; sourceTree = "<group>"; };
|
||||||
A8903A9F615BBD0E6D7CD133 /* ApplicationProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationProtocol.swift; sourceTree = "<group>"; };
|
A8903A9F615BBD0E6D7CD133 /* ApplicationProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationProtocol.swift; sourceTree = "<group>"; };
|
||||||
@@ -1691,7 +1693,7 @@
|
|||||||
B50F03079F6B5EF9CA005F14 /* TimelineProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineProxyProtocol.swift; sourceTree = "<group>"; };
|
B50F03079F6B5EF9CA005F14 /* TimelineProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineProxyProtocol.swift; sourceTree = "<group>"; };
|
||||||
B590BD4507D4F0A377FDE01A /* LoadableAvatarImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadableAvatarImage.swift; sourceTree = "<group>"; };
|
B590BD4507D4F0A377FDE01A /* LoadableAvatarImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadableAvatarImage.swift; sourceTree = "<group>"; };
|
||||||
B5B243E7818E5E9F6A4EDC7A /* NoticeRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoticeRoomTimelineView.swift; sourceTree = "<group>"; };
|
B5B243E7818E5E9F6A4EDC7A /* NoticeRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoticeRoomTimelineView.swift; sourceTree = "<group>"; };
|
||||||
B61C339A2FDDBD067FF6635C /* ConfettiScene.scn */ = {isa = PBXFileReference; path = ConfettiScene.scn; sourceTree = "<group>"; };
|
B61C339A2FDDBD067FF6635C /* ConfettiScene.scn */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; path = ConfettiScene.scn; sourceTree = "<group>"; };
|
||||||
B6311F21F911E23BE4DF51B4 /* ReadMarkerRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadMarkerRoomTimelineView.swift; sourceTree = "<group>"; };
|
B6311F21F911E23BE4DF51B4 /* ReadMarkerRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadMarkerRoomTimelineView.swift; sourceTree = "<group>"; };
|
||||||
B63B69F9A2BC74DD40DC75C8 /* AdvancedSettingsScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdvancedSettingsScreenViewModel.swift; sourceTree = "<group>"; };
|
B63B69F9A2BC74DD40DC75C8 /* AdvancedSettingsScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdvancedSettingsScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
B697816AF93DA06EC58C5D70 /* WaitlistScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaitlistScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
B697816AF93DA06EC58C5D70 /* WaitlistScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaitlistScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
@@ -1795,7 +1797,7 @@
|
|||||||
CD95B3714F806AC9CF9A557B /* ComposerToolbarViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposerToolbarViewModel.swift; sourceTree = "<group>"; };
|
CD95B3714F806AC9CF9A557B /* ComposerToolbarViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposerToolbarViewModel.swift; sourceTree = "<group>"; };
|
||||||
CDB3227C7A74B734924942E9 /* RoomSummaryProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSummaryProvider.swift; sourceTree = "<group>"; };
|
CDB3227C7A74B734924942E9 /* RoomSummaryProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSummaryProvider.swift; sourceTree = "<group>"; };
|
||||||
CEE0E6043EFCF6FD2A341861 /* TimelineReplyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineReplyView.swift; sourceTree = "<group>"; };
|
CEE0E6043EFCF6FD2A341861 /* TimelineReplyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineReplyView.swift; sourceTree = "<group>"; };
|
||||||
CEE41494C837AA403A06A5D9 /* UnitTests.xctestplan */ = {isa = PBXFileReference; path = UnitTests.xctestplan; sourceTree = "<group>"; };
|
CEE41494C837AA403A06A5D9 /* UnitTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = UnitTests.xctestplan; sourceTree = "<group>"; };
|
||||||
CF48AF076424DBC1615C74AD /* AuthenticationServiceProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationServiceProxy.swift; sourceTree = "<group>"; };
|
CF48AF076424DBC1615C74AD /* AuthenticationServiceProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationServiceProxy.swift; sourceTree = "<group>"; };
|
||||||
D0140615D2232612C813FD6C /* EncryptedHistoryRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptedHistoryRoomTimelineItem.swift; sourceTree = "<group>"; };
|
D0140615D2232612C813FD6C /* EncryptedHistoryRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptedHistoryRoomTimelineItem.swift; sourceTree = "<group>"; };
|
||||||
D071F86CD47582B9196C9D16 /* UserDiscoverySection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDiscoverySection.swift; sourceTree = "<group>"; };
|
D071F86CD47582B9196C9D16 /* UserDiscoverySection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDiscoverySection.swift; sourceTree = "<group>"; };
|
||||||
@@ -1902,7 +1904,7 @@
|
|||||||
ECF79FB25E2D4BD6F50CE7C9 /* RoomMembersListScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMembersListScreenViewModel.swift; sourceTree = "<group>"; };
|
ECF79FB25E2D4BD6F50CE7C9 /* RoomMembersListScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMembersListScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
ED044D00F2176681CC02CD54 /* HomeScreenRoomCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenRoomCell.swift; sourceTree = "<group>"; };
|
ED044D00F2176681CC02CD54 /* HomeScreenRoomCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenRoomCell.swift; sourceTree = "<group>"; };
|
||||||
ED1D792EB82506A19A72C8DE /* RoomTimelineItemProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomTimelineItemProtocol.swift; sourceTree = "<group>"; };
|
ED1D792EB82506A19A72C8DE /* RoomTimelineItemProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomTimelineItemProtocol.swift; sourceTree = "<group>"; };
|
||||||
ED482057AE39D5C6D9C5F3D8 /* message.caf */ = {isa = PBXFileReference; path = message.caf; sourceTree = "<group>"; };
|
ED482057AE39D5C6D9C5F3D8 /* message.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = message.caf; sourceTree = "<group>"; };
|
||||||
ED983D4DCA5AFA6E1ED96099 /* StateRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StateRoomTimelineView.swift; sourceTree = "<group>"; };
|
ED983D4DCA5AFA6E1ED96099 /* StateRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StateRoomTimelineView.swift; sourceTree = "<group>"; };
|
||||||
EDAA4472821985BF868CC21C /* ServerSelectionViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerSelectionViewModelTests.swift; sourceTree = "<group>"; };
|
EDAA4472821985BF868CC21C /* ServerSelectionViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerSelectionViewModelTests.swift; sourceTree = "<group>"; };
|
||||||
EE378083653EF0C9B5E9D580 /* EmoteRoomTimelineItemContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmoteRoomTimelineItemContent.swift; sourceTree = "<group>"; };
|
EE378083653EF0C9B5E9D580 /* EmoteRoomTimelineItemContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmoteRoomTimelineItemContent.swift; sourceTree = "<group>"; };
|
||||||
@@ -1919,7 +1921,7 @@
|
|||||||
F174A5627CDB3CAF280D1880 /* EmojiPickerScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerScreenModels.swift; sourceTree = "<group>"; };
|
F174A5627CDB3CAF280D1880 /* EmojiPickerScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerScreenModels.swift; sourceTree = "<group>"; };
|
||||||
F17EFA1D3D09FC2F9C5E1CB2 /* MediaProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaProvider.swift; sourceTree = "<group>"; };
|
F17EFA1D3D09FC2F9C5E1CB2 /* MediaProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaProvider.swift; sourceTree = "<group>"; };
|
||||||
F1B8500C152BC59445647DA8 /* UnsupportedRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnsupportedRoomTimelineItem.swift; sourceTree = "<group>"; };
|
F1B8500C152BC59445647DA8 /* UnsupportedRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnsupportedRoomTimelineItem.swift; sourceTree = "<group>"; };
|
||||||
F2D513D2477B57F90E98EEC0 /* portrait_test_video.mp4 */ = {isa = PBXFileReference; path = portrait_test_video.mp4; sourceTree = "<group>"; };
|
F2D513D2477B57F90E98EEC0 /* portrait_test_video.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = portrait_test_video.mp4; sourceTree = "<group>"; };
|
||||||
F31F59030205A6F65B057E1A /* MatrixEntityRegexTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatrixEntityRegexTests.swift; sourceTree = "<group>"; };
|
F31F59030205A6F65B057E1A /* MatrixEntityRegexTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatrixEntityRegexTests.swift; sourceTree = "<group>"; };
|
||||||
F348B5F2C12F9D4F4B4D3884 /* VideoRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoRoomTimelineItem.swift; sourceTree = "<group>"; };
|
F348B5F2C12F9D4F4B4D3884 /* VideoRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoRoomTimelineItem.swift; sourceTree = "<group>"; };
|
||||||
F36C0A6D59717193F49EA986 /* UserSessionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSessionTests.swift; sourceTree = "<group>"; };
|
F36C0A6D59717193F49EA986 /* UserSessionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSessionTests.swift; sourceTree = "<group>"; };
|
||||||
@@ -3188,6 +3190,7 @@
|
|||||||
5A37E2FACFD041CE466223CD /* SceneDelegate.swift */,
|
5A37E2FACFD041CE466223CD /* SceneDelegate.swift */,
|
||||||
035177BCD8E8308B098AC3C2 /* WindowManager.swift */,
|
035177BCD8E8308B098AC3C2 /* WindowManager.swift */,
|
||||||
06F27F588F9059128E17C669 /* WindowManagerProtocol.swift */,
|
06F27F588F9059128E17C669 /* WindowManagerProtocol.swift */,
|
||||||
|
A7A6452B2B5946940037ABFE /* OrientationManager.swift */,
|
||||||
);
|
);
|
||||||
path = Windowing;
|
path = Windowing;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -5831,6 +5834,7 @@
|
|||||||
94A65DD8A353DF112EBEF67A /* SessionVerificationControllerProxyProtocol.swift in Sources */,
|
94A65DD8A353DF112EBEF67A /* SessionVerificationControllerProxyProtocol.swift in Sources */,
|
||||||
7A0A0929556792FB19B812C5 /* SessionVerificationScreen.swift in Sources */,
|
7A0A0929556792FB19B812C5 /* SessionVerificationScreen.swift in Sources */,
|
||||||
E9F148072F9513EC2272AA21 /* SessionVerificationScreenCoordinator.swift in Sources */,
|
E9F148072F9513EC2272AA21 /* SessionVerificationScreenCoordinator.swift in Sources */,
|
||||||
|
A7A6452C2B5946940037ABFE /* OrientationManager.swift in Sources */,
|
||||||
5770C4906668C6D3008A2AC9 /* SessionVerificationScreenModels.swift in Sources */,
|
5770C4906668C6D3008A2AC9 /* SessionVerificationScreenModels.swift in Sources */,
|
||||||
B27D3190784F85916DA1C394 /* SessionVerificationScreenStateMachine.swift in Sources */,
|
B27D3190784F85916DA1C394 /* SessionVerificationScreenStateMachine.swift in Sources */,
|
||||||
F4433EF57B4BB3C077F8B00E /* SessionVerificationScreenViewModel.swift in Sources */,
|
F4433EF57B4BB3C077F8B00E /* SessionVerificationScreenViewModel.swift in Sources */,
|
||||||
@@ -6178,9 +6182,7 @@
|
|||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
||||||
OTHER_SWIFT_FLAGS = (
|
OTHER_SWIFT_FLAGS = "-DIS_NSE";
|
||||||
"-DIS_NSE",
|
|
||||||
);
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.nse";
|
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.nse";
|
||||||
PRODUCT_DISPLAY_NAME = "$(APP_DISPLAY_NAME)";
|
PRODUCT_DISPLAY_NAME = "$(APP_DISPLAY_NAME)";
|
||||||
PRODUCT_NAME = NSE;
|
PRODUCT_NAME = NSE;
|
||||||
@@ -6211,9 +6213,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
||||||
OTHER_SWIFT_FLAGS = (
|
OTHER_SWIFT_FLAGS = "-DIS_MAIN_APP";
|
||||||
"-DIS_MAIN_APP",
|
|
||||||
);
|
|
||||||
PILLS_UT_TYPE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER).pills";
|
PILLS_UT_TYPE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER).pills";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER)";
|
PRODUCT_BUNDLE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER)";
|
||||||
PRODUCT_NAME = "$(APP_NAME)";
|
PRODUCT_NAME = "$(APP_NAME)";
|
||||||
@@ -6239,9 +6239,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
||||||
OTHER_SWIFT_FLAGS = (
|
OTHER_SWIFT_FLAGS = "-DIS_MAIN_APP";
|
||||||
"-DIS_MAIN_APP",
|
|
||||||
);
|
|
||||||
PILLS_UT_TYPE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER).pills";
|
PILLS_UT_TYPE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER).pills";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER)";
|
PRODUCT_BUNDLE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER)";
|
||||||
PRODUCT_NAME = "$(APP_NAME)";
|
PRODUCT_NAME = "$(APP_NAME)";
|
||||||
@@ -6484,9 +6482,7 @@
|
|||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
||||||
OTHER_SWIFT_FLAGS = (
|
OTHER_SWIFT_FLAGS = "-DIS_NSE";
|
||||||
"-DIS_NSE",
|
|
||||||
);
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.nse";
|
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.nse";
|
||||||
PRODUCT_DISPLAY_NAME = "$(APP_DISPLAY_NAME)";
|
PRODUCT_DISPLAY_NAME = "$(APP_DISPLAY_NAME)";
|
||||||
PRODUCT_NAME = NSE;
|
PRODUCT_NAME = NSE;
|
||||||
|
|||||||
@@ -57,13 +57,14 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationCoordinatorDelegate,
|
|||||||
private var clientProxyObserver: AnyCancellable?
|
private var clientProxyObserver: AnyCancellable?
|
||||||
private var cancellables = Set<AnyCancellable>()
|
private var cancellables = Set<AnyCancellable>()
|
||||||
|
|
||||||
let windowManager: WindowManagerProtocol = WindowManager()
|
let windowManager: WindowManagerProtocol
|
||||||
let notificationManager: NotificationManagerProtocol
|
let notificationManager: NotificationManagerProtocol
|
||||||
|
|
||||||
private let appRouteURLParser: AppRouteURLParser
|
private let appRouteURLParser: AppRouteURLParser
|
||||||
@Consumable private var storedAppRoute: AppRoute?
|
@Consumable private var storedAppRoute: AppRoute?
|
||||||
|
|
||||||
init(appDelegate: AppDelegate) {
|
init(appDelegate: AppDelegate) {
|
||||||
|
windowManager = WindowManager(appDelegate: appDelegate)
|
||||||
Self.setupEnvironmentVariables()
|
Self.setupEnvironmentVariables()
|
||||||
|
|
||||||
let appSettings = AppSettings()
|
let appSettings = AppSettings()
|
||||||
|
|||||||
@@ -22,8 +22,9 @@ enum AppDelegateCallback {
|
|||||||
case failedToRegisteredNotifications(error: Error)
|
case failedToRegisteredNotifications(error: Error)
|
||||||
}
|
}
|
||||||
|
|
||||||
class AppDelegate: NSObject, UIApplicationDelegate {
|
final class AppDelegate: NSObject, UIApplicationDelegate {
|
||||||
let callbacks = PassthroughSubject<AppDelegateCallback, Never>()
|
let callbacks = PassthroughSubject<AppDelegateCallback, Never>()
|
||||||
|
var orientationLock = UIInterfaceOrientationMask.all
|
||||||
|
|
||||||
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
|
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
|
||||||
// Add a SceneDelegate to the SwiftUI scene so that we can connect up the WindowManager.
|
// Add a SceneDelegate to the SwiftUI scene so that we can connect up the WindowManager.
|
||||||
@@ -44,4 +45,8 @@ class AppDelegate: NSObject, UIApplicationDelegate {
|
|||||||
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
|
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
|
||||||
callbacks.send(.failedToRegisteredNotifications(error: error))
|
callbacks.send(.failedToRegisteredNotifications(error: error))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
|
||||||
|
orientationLock
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,9 +25,9 @@ struct Application: App {
|
|||||||
|
|
||||||
init() {
|
init() {
|
||||||
if ProcessInfo.isRunningUITests {
|
if ProcessInfo.isRunningUITests {
|
||||||
appCoordinator = UITestsAppCoordinator()
|
appCoordinator = UITestsAppCoordinator(appDelegate: appDelegate)
|
||||||
} else if ProcessInfo.isRunningUnitTests {
|
} else if ProcessInfo.isRunningUnitTests {
|
||||||
appCoordinator = UnitTestsAppCoordinator()
|
appCoordinator = UnitTestsAppCoordinator(appDelegate: appDelegate)
|
||||||
} else {
|
} else {
|
||||||
appCoordinator = AppCoordinator(appDelegate: appDelegate)
|
appCoordinator = AppCoordinator(appDelegate: appDelegate)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// Copyright 2024 New Vector Ltd
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
// sourcery: AutoMockable
|
||||||
|
protocol OrientationManagerProtocol {
|
||||||
|
/// Forces the current orientation for the main window, works only on iOS
|
||||||
|
func setOrientation(_ orientation: UIInterfaceOrientationMask)
|
||||||
|
|
||||||
|
/// Locks the current orientation for the main window, works only on iOS
|
||||||
|
func lockOrientation(_ orientation: UIInterfaceOrientationMask)
|
||||||
|
}
|
||||||
@@ -18,6 +18,8 @@ import Combine
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
class WindowManager: WindowManagerProtocol {
|
class WindowManager: WindowManagerProtocol {
|
||||||
|
private let appDelegate: AppDelegate
|
||||||
|
weak var windowScene: UIWindowScene?
|
||||||
weak var delegate: WindowManagerDelegate?
|
weak var delegate: WindowManagerDelegate?
|
||||||
|
|
||||||
private(set) var mainWindow: UIWindow!
|
private(set) var mainWindow: UIWindow!
|
||||||
@@ -34,7 +36,12 @@ class WindowManager: WindowManagerProtocol {
|
|||||||
/// A duration that allows window switching to wait a couple of frames to avoid a transition through black.
|
/// A duration that allows window switching to wait a couple of frames to avoid a transition through black.
|
||||||
private let windowHideDelay = Duration.milliseconds(33)
|
private let windowHideDelay = Duration.milliseconds(33)
|
||||||
|
|
||||||
|
init(appDelegate: AppDelegate) {
|
||||||
|
self.appDelegate = appDelegate
|
||||||
|
}
|
||||||
|
|
||||||
func configure(with windowScene: UIWindowScene) {
|
func configure(with windowScene: UIWindowScene) {
|
||||||
|
self.windowScene = windowScene
|
||||||
mainWindow = windowScene.keyWindow
|
mainWindow = windowScene.keyWindow
|
||||||
mainWindow.tintColor = .compound.textActionPrimary
|
mainWindow.tintColor = .compound.textActionPrimary
|
||||||
|
|
||||||
@@ -80,6 +87,14 @@ class WindowManager: WindowManagerProtocol {
|
|||||||
mainWindow.isHidden = true
|
mainWindow.isHidden = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setOrientation(_ orientation: UIInterfaceOrientationMask) {
|
||||||
|
windowScene?.requestGeometryUpdate(.iOS(interfaceOrientations: orientation))
|
||||||
|
}
|
||||||
|
|
||||||
|
func lockOrientation(_ orientation: UIInterfaceOrientationMask) {
|
||||||
|
appDelegate.orientationLock = orientation
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class PassthroughWindow: UIWindow {
|
private class PassthroughWindow: UIWindow {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ protocol WindowManagerDelegate: AnyObject {
|
|||||||
/// A window manager that supports switching between a main app window with an overlay and
|
/// A window manager that supports switching between a main app window with an overlay and
|
||||||
/// an alternate window to switch contexts whilst also preserving the main view hierarchy.
|
/// an alternate window to switch contexts whilst also preserving the main view hierarchy.
|
||||||
/// Heavily inspired by https://www.fivestars.blog/articles/swiftui-windows/
|
/// Heavily inspired by https://www.fivestars.blog/articles/swiftui-windows/
|
||||||
protocol WindowManagerProtocol: AnyObject {
|
protocol WindowManagerProtocol: AnyObject, OrientationManagerProtocol {
|
||||||
var delegate: WindowManagerDelegate? { get set }
|
var delegate: WindowManagerDelegate? { get set }
|
||||||
|
|
||||||
/// The app's main window (we only support a single scene).
|
/// The app's main window (we only support a single scene).
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ enum RoomFlowCoordinatorAction: Equatable {
|
|||||||
|
|
||||||
// swiftlint:disable file_length
|
// swiftlint:disable file_length
|
||||||
class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
||||||
|
private let orientationManager: OrientationManagerProtocol
|
||||||
private let userSession: UserSessionProtocol
|
private let userSession: UserSessionProtocol
|
||||||
private let roomTimelineControllerFactory: RoomTimelineControllerFactoryProtocol
|
private let roomTimelineControllerFactory: RoomTimelineControllerFactoryProtocol
|
||||||
private let navigationStackCoordinator: NavigationStackCoordinator
|
private let navigationStackCoordinator: NavigationStackCoordinator
|
||||||
@@ -73,7 +74,8 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
emojiProvider: EmojiProviderProtocol,
|
emojiProvider: EmojiProviderProtocol,
|
||||||
appSettings: AppSettings,
|
appSettings: AppSettings,
|
||||||
analytics: AnalyticsService,
|
analytics: AnalyticsService,
|
||||||
userIndicatorController: UserIndicatorControllerProtocol) {
|
userIndicatorController: UserIndicatorControllerProtocol,
|
||||||
|
orientationManager: OrientationManagerProtocol) {
|
||||||
self.userSession = userSession
|
self.userSession = userSession
|
||||||
self.roomTimelineControllerFactory = roomTimelineControllerFactory
|
self.roomTimelineControllerFactory = roomTimelineControllerFactory
|
||||||
self.navigationStackCoordinator = navigationStackCoordinator
|
self.navigationStackCoordinator = navigationStackCoordinator
|
||||||
@@ -82,6 +84,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
self.appSettings = appSettings
|
self.appSettings = appSettings
|
||||||
self.analytics = analytics
|
self.analytics = analytics
|
||||||
self.userIndicatorController = userIndicatorController
|
self.userIndicatorController = userIndicatorController
|
||||||
|
self.orientationManager = orientationManager
|
||||||
|
|
||||||
setupStateMachine()
|
setupStateMachine()
|
||||||
}
|
}
|
||||||
@@ -606,7 +609,8 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
mediaProvider: userSession.mediaProvider,
|
mediaProvider: userSession.mediaProvider,
|
||||||
navigationStackCoordinator: stackCoordinator,
|
navigationStackCoordinator: stackCoordinator,
|
||||||
roomProxy: roomProxy,
|
roomProxy: roomProxy,
|
||||||
userIndicatorController: userIndicatorController)
|
userIndicatorController: userIndicatorController,
|
||||||
|
orientationManager: orientationManager)
|
||||||
let roomDetailsEditCoordinator = RoomDetailsEditScreenCoordinator(parameters: roomDetailsEditParameters)
|
let roomDetailsEditCoordinator = RoomDetailsEditScreenCoordinator(parameters: roomDetailsEditParameters)
|
||||||
|
|
||||||
roomDetailsEditCoordinator.actions.sink { [weak self] action in
|
roomDetailsEditCoordinator.actions.sink { [weak self] action in
|
||||||
@@ -660,12 +664,17 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
private func presentMediaUploadPickerWithSource(_ source: MediaPickerScreenSource) {
|
private func presentMediaUploadPickerWithSource(_ source: MediaPickerScreenSource) {
|
||||||
let stackCoordinator = NavigationStackCoordinator()
|
let stackCoordinator = NavigationStackCoordinator()
|
||||||
|
|
||||||
let mediaPickerCoordinator = MediaPickerScreenCoordinator(userIndicatorController: userIndicatorController, source: source) { [weak self] action in
|
let mediaPickerCoordinator = MediaPickerScreenCoordinator(userIndicatorController: userIndicatorController,
|
||||||
|
source: source,
|
||||||
|
orientationManager: orientationManager) { [weak self] action in
|
||||||
|
guard let self else {
|
||||||
|
return
|
||||||
|
}
|
||||||
switch action {
|
switch action {
|
||||||
case .cancel:
|
case .cancel:
|
||||||
self?.navigationStackCoordinator.setSheetCoordinator(nil)
|
navigationStackCoordinator.setSheetCoordinator(nil)
|
||||||
case .selectMediaAtURL(let url):
|
case .selectMediaAtURL(let url):
|
||||||
self?.stateMachine.tryEvent(.presentMediaUploadPreview(fileURL: url))
|
stateMachine.tryEvent(.presentMediaUploadPreview(fileURL: url))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -152,7 +152,8 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func presentUserDetailsEditScreen() {
|
private func presentUserDetailsEditScreen() {
|
||||||
let coordinator = UserDetailsEditScreenCoordinator(parameters: .init(clientProxy: parameters.userSession.clientProxy,
|
let coordinator = UserDetailsEditScreenCoordinator(parameters: .init(orientationManager: parameters.windowManager,
|
||||||
|
clientProxy: parameters.userSession.clientProxy,
|
||||||
mediaProvider: parameters.userSession.mediaProvider,
|
mediaProvider: parameters.userSession.mediaProvider,
|
||||||
navigationStackCoordinator: navigationStackCoordinator,
|
navigationStackCoordinator: navigationStackCoordinator,
|
||||||
userIndicatorController: parameters.userIndicatorController))
|
userIndicatorController: parameters.userIndicatorController))
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ enum UserSessionFlowCoordinatorAction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class UserSessionFlowCoordinator: FlowCoordinatorProtocol {
|
class UserSessionFlowCoordinator: FlowCoordinatorProtocol {
|
||||||
|
private let windowManager: WindowManagerProtocol
|
||||||
private let userSession: UserSessionProtocol
|
private let userSession: UserSessionProtocol
|
||||||
private let navigationSplitCoordinator: NavigationSplitCoordinator
|
private let navigationSplitCoordinator: NavigationSplitCoordinator
|
||||||
private let bugReportService: BugReportServiceProtocol
|
private let bugReportService: BugReportServiceProtocol
|
||||||
@@ -60,6 +61,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
self.navigationSplitCoordinator = navigationSplitCoordinator
|
self.navigationSplitCoordinator = navigationSplitCoordinator
|
||||||
self.bugReportService = bugReportService
|
self.bugReportService = bugReportService
|
||||||
self.appSettings = appSettings
|
self.appSettings = appSettings
|
||||||
|
self.windowManager = windowManager
|
||||||
|
|
||||||
sidebarNavigationStackCoordinator = NavigationStackCoordinator(navigationSplitCoordinator: navigationSplitCoordinator)
|
sidebarNavigationStackCoordinator = NavigationStackCoordinator(navigationSplitCoordinator: navigationSplitCoordinator)
|
||||||
detailNavigationStackCoordinator = NavigationStackCoordinator(navigationSplitCoordinator: navigationSplitCoordinator)
|
detailNavigationStackCoordinator = NavigationStackCoordinator(navigationSplitCoordinator: navigationSplitCoordinator)
|
||||||
@@ -73,7 +75,8 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
emojiProvider: EmojiProvider(),
|
emojiProvider: EmojiProvider(),
|
||||||
appSettings: appSettings,
|
appSettings: appSettings,
|
||||||
analytics: analytics,
|
analytics: analytics,
|
||||||
userIndicatorController: ServiceLocator.shared.userIndicatorController)
|
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
||||||
|
orientationManager: windowManager)
|
||||||
|
|
||||||
settingsFlowCoordinator = SettingsFlowCoordinator(parameters: .init(userSession: userSession,
|
settingsFlowCoordinator = SettingsFlowCoordinator(parameters: .init(userSession: userSession,
|
||||||
windowManager: windowManager,
|
windowManager: windowManager,
|
||||||
@@ -455,7 +458,8 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
let startChatNavigationStackCoordinator = NavigationStackCoordinator()
|
let startChatNavigationStackCoordinator = NavigationStackCoordinator()
|
||||||
|
|
||||||
let userDiscoveryService = UserDiscoveryService(clientProxy: userSession.clientProxy)
|
let userDiscoveryService = UserDiscoveryService(clientProxy: userSession.clientProxy)
|
||||||
let parameters = StartChatScreenCoordinatorParameters(userSession: userSession,
|
let parameters = StartChatScreenCoordinatorParameters(orientationManager: windowManager,
|
||||||
|
userSession: userSession,
|
||||||
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
||||||
navigationStackCoordinator: startChatNavigationStackCoordinator,
|
navigationStackCoordinator: startChatNavigationStackCoordinator,
|
||||||
userDiscoveryService: userDiscoveryService)
|
userDiscoveryService: userDiscoveryService)
|
||||||
|
|||||||
@@ -1632,6 +1632,41 @@ class NotificationSettingsProxyMock: NotificationSettingsProxyProtocol {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
class OrientationManagerMock: OrientationManagerProtocol {
|
||||||
|
|
||||||
|
//MARK: - setOrientation
|
||||||
|
|
||||||
|
var setOrientationCallsCount = 0
|
||||||
|
var setOrientationCalled: Bool {
|
||||||
|
return setOrientationCallsCount > 0
|
||||||
|
}
|
||||||
|
var setOrientationReceivedOrientation: UIInterfaceOrientationMask?
|
||||||
|
var setOrientationReceivedInvocations: [UIInterfaceOrientationMask] = []
|
||||||
|
var setOrientationClosure: ((UIInterfaceOrientationMask) -> Void)?
|
||||||
|
|
||||||
|
func setOrientation(_ orientation: UIInterfaceOrientationMask) {
|
||||||
|
setOrientationCallsCount += 1
|
||||||
|
setOrientationReceivedOrientation = orientation
|
||||||
|
setOrientationReceivedInvocations.append(orientation)
|
||||||
|
setOrientationClosure?(orientation)
|
||||||
|
}
|
||||||
|
//MARK: - lockOrientation
|
||||||
|
|
||||||
|
var lockOrientationCallsCount = 0
|
||||||
|
var lockOrientationCalled: Bool {
|
||||||
|
return lockOrientationCallsCount > 0
|
||||||
|
}
|
||||||
|
var lockOrientationReceivedOrientation: UIInterfaceOrientationMask?
|
||||||
|
var lockOrientationReceivedInvocations: [UIInterfaceOrientationMask] = []
|
||||||
|
var lockOrientationClosure: ((UIInterfaceOrientationMask) -> Void)?
|
||||||
|
|
||||||
|
func lockOrientation(_ orientation: UIInterfaceOrientationMask) {
|
||||||
|
lockOrientationCallsCount += 1
|
||||||
|
lockOrientationReceivedOrientation = orientation
|
||||||
|
lockOrientationReceivedInvocations.append(orientation)
|
||||||
|
lockOrientationClosure?(orientation)
|
||||||
|
}
|
||||||
|
}
|
||||||
class PollInteractionHandlerMock: PollInteractionHandlerProtocol {
|
class PollInteractionHandlerMock: PollInteractionHandlerProtocol {
|
||||||
|
|
||||||
//MARK: - sendPollResponse
|
//MARK: - sendPollResponse
|
||||||
|
|||||||
@@ -28,13 +28,18 @@ enum MediaPickerScreenCoordinatorAction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class MediaPickerScreenCoordinator: CoordinatorProtocol {
|
class MediaPickerScreenCoordinator: CoordinatorProtocol {
|
||||||
|
private let orientationManager: OrientationManagerProtocol
|
||||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
private let source: MediaPickerScreenSource
|
private let source: MediaPickerScreenSource
|
||||||
private let callback: ((MediaPickerScreenCoordinatorAction) -> Void)?
|
private let callback: (MediaPickerScreenCoordinatorAction) -> Void
|
||||||
|
|
||||||
init(userIndicatorController: UserIndicatorControllerProtocol, source: MediaPickerScreenSource, callback: @escaping (MediaPickerScreenCoordinatorAction) -> Void) {
|
init(userIndicatorController: UserIndicatorControllerProtocol,
|
||||||
|
source: MediaPickerScreenSource,
|
||||||
|
orientationManager: OrientationManagerProtocol,
|
||||||
|
callback: @escaping (MediaPickerScreenCoordinatorAction) -> Void) {
|
||||||
self.userIndicatorController = userIndicatorController
|
self.userIndicatorController = userIndicatorController
|
||||||
self.source = source
|
self.source = source
|
||||||
|
self.orientationManager = orientationManager
|
||||||
self.callback = callback
|
self.callback = callback
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,6 +47,23 @@ class MediaPickerScreenCoordinator: CoordinatorProtocol {
|
|||||||
AnyView(mediaPicker)
|
AnyView(mediaPicker)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
guard source == .camera else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
orientationManager.setOrientation(.portrait)
|
||||||
|
orientationManager.lockOrientation(.portrait)
|
||||||
|
}
|
||||||
|
|
||||||
|
func stop() {
|
||||||
|
guard source == .camera else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
orientationManager.lockOrientation(.all)
|
||||||
|
}
|
||||||
|
|
||||||
@ViewBuilder
|
@ViewBuilder
|
||||||
private var mediaPicker: some View {
|
private var mediaPicker: some View {
|
||||||
switch source {
|
switch source {
|
||||||
@@ -51,12 +73,12 @@ class MediaPickerScreenCoordinator: CoordinatorProtocol {
|
|||||||
PhotoLibraryPicker(userIndicatorController: userIndicatorController) { [weak self] action in
|
PhotoLibraryPicker(userIndicatorController: userIndicatorController) { [weak self] action in
|
||||||
switch action {
|
switch action {
|
||||||
case .cancel:
|
case .cancel:
|
||||||
self?.callback?(.cancel)
|
self?.callback(.cancel)
|
||||||
case .error(let error):
|
case .error(let error):
|
||||||
MXLog.error("Failed selecting media from the photo library with error: \(error)")
|
MXLog.error("Failed selecting media from the photo library with error: \(error)")
|
||||||
self?.showError()
|
self?.showError()
|
||||||
case .selectFile(let url):
|
case .selectFile(let url):
|
||||||
self?.callback?(.selectMediaAtURL(url))
|
self?.callback(.selectMediaAtURL(url))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case .documents:
|
case .documents:
|
||||||
@@ -65,12 +87,12 @@ class MediaPickerScreenCoordinator: CoordinatorProtocol {
|
|||||||
DocumentPicker(userIndicatorController: userIndicatorController) { action in
|
DocumentPicker(userIndicatorController: userIndicatorController) { action in
|
||||||
switch action {
|
switch action {
|
||||||
case .cancel:
|
case .cancel:
|
||||||
self.callback?(.cancel)
|
self.callback(.cancel)
|
||||||
case .error(let error):
|
case .error(let error):
|
||||||
MXLog.error("Failed selecting media from the document picker with error: \(error)")
|
MXLog.error("Failed selecting media from the document picker with error: \(error)")
|
||||||
self.showError()
|
self.showError()
|
||||||
case .selectFile(let url):
|
case .selectFile(let url):
|
||||||
self.callback?(.selectMediaAtURL(url))
|
self.callback(.selectMediaAtURL(url))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -80,12 +102,12 @@ class MediaPickerScreenCoordinator: CoordinatorProtocol {
|
|||||||
CameraPicker(userIndicatorController: userIndicatorController) { [weak self] action in
|
CameraPicker(userIndicatorController: userIndicatorController) { [weak self] action in
|
||||||
switch action {
|
switch action {
|
||||||
case .cancel:
|
case .cancel:
|
||||||
self?.callback?(.cancel)
|
self?.callback(.cancel)
|
||||||
case .error(let error):
|
case .error(let error):
|
||||||
MXLog.error("Failed selecting media from the camera picker with error: \(error)")
|
MXLog.error("Failed selecting media from the camera picker with error: \(error)")
|
||||||
self?.showError()
|
self?.showError()
|
||||||
case .selectFile(let url):
|
case .selectFile(let url):
|
||||||
self?.callback?(.selectMediaAtURL(url))
|
self?.callback(.selectMediaAtURL(url))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.background(.black, ignoresSafeAreaEdges: .bottom)
|
.background(.black, ignoresSafeAreaEdges: .bottom)
|
||||||
|
|||||||
+4
-1
@@ -23,6 +23,7 @@ struct RoomDetailsEditScreenCoordinatorParameters {
|
|||||||
weak var navigationStackCoordinator: NavigationStackCoordinator?
|
weak var navigationStackCoordinator: NavigationStackCoordinator?
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: RoomProxyProtocol
|
||||||
let userIndicatorController: UserIndicatorControllerProtocol
|
let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
|
let orientationManager: OrientationManagerProtocol
|
||||||
}
|
}
|
||||||
|
|
||||||
enum RoomDetailsEditScreenCoordinatorAction {
|
enum RoomDetailsEditScreenCoordinatorAction {
|
||||||
@@ -72,7 +73,9 @@ final class RoomDetailsEditScreenCoordinator: CoordinatorProtocol {
|
|||||||
private func displayMediaPickerWithSource(_ source: MediaPickerScreenSource) {
|
private func displayMediaPickerWithSource(_ source: MediaPickerScreenSource) {
|
||||||
let stackCoordinator = NavigationStackCoordinator()
|
let stackCoordinator = NavigationStackCoordinator()
|
||||||
|
|
||||||
let mediaPickerCoordinator = MediaPickerScreenCoordinator(userIndicatorController: parameters.userIndicatorController, source: source) { [weak self] action in
|
let mediaPickerCoordinator = MediaPickerScreenCoordinator(userIndicatorController: parameters.userIndicatorController,
|
||||||
|
source: source,
|
||||||
|
orientationManager: parameters.orientationManager) { [weak self] action in
|
||||||
guard let self else { return }
|
guard let self else { return }
|
||||||
switch action {
|
switch action {
|
||||||
case .cancel:
|
case .cancel:
|
||||||
|
|||||||
+2
-1
@@ -18,6 +18,7 @@ import Combine
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct UserDetailsEditScreenCoordinatorParameters {
|
struct UserDetailsEditScreenCoordinatorParameters {
|
||||||
|
let orientationManager: OrientationManagerProtocol
|
||||||
let clientProxy: ClientProxyProtocol
|
let clientProxy: ClientProxyProtocol
|
||||||
let mediaProvider: MediaProviderProtocol
|
let mediaProvider: MediaProviderProtocol
|
||||||
weak var navigationStackCoordinator: NavigationStackCoordinator?
|
weak var navigationStackCoordinator: NavigationStackCoordinator?
|
||||||
@@ -61,7 +62,7 @@ final class UserDetailsEditScreenCoordinator: CoordinatorProtocol {
|
|||||||
private func displayMediaPickerWithSource(_ source: MediaPickerScreenSource) {
|
private func displayMediaPickerWithSource(_ source: MediaPickerScreenSource) {
|
||||||
let stackCoordinator = NavigationStackCoordinator()
|
let stackCoordinator = NavigationStackCoordinator()
|
||||||
|
|
||||||
let mediaPickerCoordinator = MediaPickerScreenCoordinator(userIndicatorController: parameters.userIndicatorController, source: source) { [weak self] action in
|
let mediaPickerCoordinator = MediaPickerScreenCoordinator(userIndicatorController: parameters.userIndicatorController, source: source, orientationManager: parameters.orientationManager) { [weak self] action in
|
||||||
guard let self else { return }
|
guard let self else { return }
|
||||||
switch action {
|
switch action {
|
||||||
case .cancel:
|
case .cancel:
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import Combine
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct StartChatScreenCoordinatorParameters {
|
struct StartChatScreenCoordinatorParameters {
|
||||||
|
let orientationManager: OrientationManagerProtocol
|
||||||
let userSession: UserSessionProtocol
|
let userSession: UserSessionProtocol
|
||||||
let userIndicatorController: UserIndicatorControllerProtocol
|
let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
weak var navigationStackCoordinator: NavigationStackCoordinator?
|
weak var navigationStackCoordinator: NavigationStackCoordinator?
|
||||||
@@ -146,7 +147,7 @@ final class StartChatScreenCoordinator: CoordinatorProtocol {
|
|||||||
private func displayMediaPickerWithSource(_ source: MediaPickerScreenSource) {
|
private func displayMediaPickerWithSource(_ source: MediaPickerScreenSource) {
|
||||||
let stackCoordinator = NavigationStackCoordinator()
|
let stackCoordinator = NavigationStackCoordinator()
|
||||||
|
|
||||||
let mediaPickerCoordinator = MediaPickerScreenCoordinator(userIndicatorController: parameters.userIndicatorController, source: source) { [weak self] action in
|
let mediaPickerCoordinator = MediaPickerScreenCoordinator(userIndicatorController: parameters.userIndicatorController, source: source, orientationManager: parameters.orientationManager) { [weak self] action in
|
||||||
guard let self else { return }
|
guard let self else { return }
|
||||||
switch action {
|
switch action {
|
||||||
case .cancel:
|
case .cancel:
|
||||||
|
|||||||
@@ -28,9 +28,10 @@ class UITestsAppCoordinator: AppCoordinatorProtocol, WindowManagerDelegate {
|
|||||||
// periphery:ignore - retaining purpose
|
// periphery:ignore - retaining purpose
|
||||||
private var alternateWindowMockScreen: MockScreen?
|
private var alternateWindowMockScreen: MockScreen?
|
||||||
|
|
||||||
let windowManager: WindowManagerProtocol = WindowManager()
|
let windowManager: WindowManagerProtocol
|
||||||
|
|
||||||
init() {
|
init(appDelegate: AppDelegate) {
|
||||||
|
windowManager = WindowManager(appDelegate: appDelegate)
|
||||||
// disabling View animations
|
// disabling View animations
|
||||||
UIView.setAnimationsEnabled(false)
|
UIView.setAnimationsEnabled(false)
|
||||||
|
|
||||||
@@ -685,7 +686,8 @@ class MockScreen: Identifiable {
|
|||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
navigationStackCoordinator: navigationStackCoordinator,
|
navigationStackCoordinator: navigationStackCoordinator,
|
||||||
roomProxy: roomProxy,
|
roomProxy: roomProxy,
|
||||||
userIndicatorController: ServiceLocator.shared.userIndicatorController))
|
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
||||||
|
orientationManager: OrientationManagerMock()))
|
||||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||||
return navigationStackCoordinator
|
return navigationStackCoordinator
|
||||||
case .roomMembersListScreen:
|
case .roomMembersListScreen:
|
||||||
@@ -735,7 +737,8 @@ class MockScreen: Identifiable {
|
|||||||
userDiscoveryMock.fetchSuggestionsReturnValue = .success([.mockAlice, .mockBob, .mockCharlie])
|
userDiscoveryMock.fetchSuggestionsReturnValue = .success([.mockAlice, .mockBob, .mockCharlie])
|
||||||
userDiscoveryMock.searchProfilesWithReturnValue = .success([])
|
userDiscoveryMock.searchProfilesWithReturnValue = .success([])
|
||||||
let userSession = MockUserSession(clientProxy: MockClientProxy(userID: "@mock:client.com"), mediaProvider: MockMediaProvider(), voiceMessageMediaManager: VoiceMessageMediaManagerMock())
|
let userSession = MockUserSession(clientProxy: MockClientProxy(userID: "@mock:client.com"), mediaProvider: MockMediaProvider(), voiceMessageMediaManager: VoiceMessageMediaManagerMock())
|
||||||
let parameters: StartChatScreenCoordinatorParameters = .init(userSession: userSession,
|
let parameters: StartChatScreenCoordinatorParameters = .init(orientationManager: OrientationManagerMock(),
|
||||||
|
userSession: userSession,
|
||||||
userIndicatorController: UserIndicatorControllerMock(),
|
userIndicatorController: UserIndicatorControllerMock(),
|
||||||
navigationStackCoordinator: navigationStackCoordinator,
|
navigationStackCoordinator: navigationStackCoordinator,
|
||||||
userDiscoveryService: userDiscoveryMock)
|
userDiscoveryService: userDiscoveryMock)
|
||||||
@@ -749,7 +752,8 @@ class MockScreen: Identifiable {
|
|||||||
userDiscoveryMock.fetchSuggestionsReturnValue = .success([])
|
userDiscoveryMock.fetchSuggestionsReturnValue = .success([])
|
||||||
userDiscoveryMock.searchProfilesWithReturnValue = .success([.mockBob, .mockBobby])
|
userDiscoveryMock.searchProfilesWithReturnValue = .success([.mockBob, .mockBobby])
|
||||||
let userSession = MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider(), voiceMessageMediaManager: VoiceMessageMediaManagerMock())
|
let userSession = MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider(), voiceMessageMediaManager: VoiceMessageMediaManagerMock())
|
||||||
let coordinator = StartChatScreenCoordinator(parameters: .init(userSession: userSession,
|
let coordinator = StartChatScreenCoordinator(parameters: .init(orientationManager: OrientationManagerMock(),
|
||||||
|
userSession: userSession,
|
||||||
userIndicatorController: UserIndicatorControllerMock(),
|
userIndicatorController: UserIndicatorControllerMock(),
|
||||||
navigationStackCoordinator: navigationStackCoordinator,
|
navigationStackCoordinator: navigationStackCoordinator,
|
||||||
userDiscoveryService: userDiscoveryMock))
|
userDiscoveryService: userDiscoveryMock))
|
||||||
|
|||||||
@@ -17,9 +17,10 @@
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
class UnitTestsAppCoordinator: AppCoordinatorProtocol {
|
class UnitTestsAppCoordinator: AppCoordinatorProtocol {
|
||||||
let windowManager: WindowManagerProtocol = WindowManager()
|
let windowManager: WindowManagerProtocol
|
||||||
|
|
||||||
init() {
|
init(appDelegate: AppDelegate) {
|
||||||
|
windowManager = WindowManager(appDelegate: appDelegate)
|
||||||
ServiceLocator.shared.register(userIndicatorController: UserIndicatorControllerMock.default)
|
ServiceLocator.shared.register(userIndicatorController: UserIndicatorControllerMock.default)
|
||||||
|
|
||||||
AppSettings.configureWithSuiteName("io.element.elementx.unittests")
|
AppSettings.configureWithSuiteName("io.element.elementx.unittests")
|
||||||
|
|||||||
@@ -45,7 +45,8 @@ class RoomFlowCoordinatorTests: XCTestCase {
|
|||||||
emojiProvider: EmojiProvider(),
|
emojiProvider: EmojiProvider(),
|
||||||
appSettings: ServiceLocator.shared.settings,
|
appSettings: ServiceLocator.shared.settings,
|
||||||
analytics: ServiceLocator.shared.analytics,
|
analytics: ServiceLocator.shared.analytics,
|
||||||
userIndicatorController: ServiceLocator.shared.userIndicatorController)
|
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
||||||
|
orientationManager: OrientationManagerMock())
|
||||||
}
|
}
|
||||||
|
|
||||||
func testRoomPresentation() async throws {
|
func testRoomPresentation() async throws {
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
Is now possible to take photos in landscape mode.
|
||||||
Reference in New Issue
Block a user