mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 10:33:45 +00:00
implementing static location sheet
This commit is contained in:
@@ -299,6 +299,10 @@ extension AccessibilityTests {
|
|||||||
try await performAccessibilityAudit(named: "LocationMarkerView_Previews")
|
try await performAccessibilityAudit(named: "LocationMarkerView_Previews")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testLocationPickerSheet() async throws {
|
||||||
|
try await performAccessibilityAudit(named: "LocationPickerSheet_Previews")
|
||||||
|
}
|
||||||
|
|
||||||
func testLocationRoomTimelineView() async throws {
|
func testLocationRoomTimelineView() async throws {
|
||||||
try await performAccessibilityAudit(named: "LocationRoomTimelineView_Previews")
|
try await performAccessibilityAudit(named: "LocationRoomTimelineView_Previews")
|
||||||
}
|
}
|
||||||
@@ -699,6 +703,10 @@ extension AccessibilityTests {
|
|||||||
try await performAccessibilityAudit(named: "StateRoomTimelineView_Previews")
|
try await performAccessibilityAudit(named: "StateRoomTimelineView_Previews")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testStaticLocationSheet() async throws {
|
||||||
|
try await performAccessibilityAudit(named: "StaticLocationSheet_Previews")
|
||||||
|
}
|
||||||
|
|
||||||
func testStickerRoomTimelineView() async throws {
|
func testStickerRoomTimelineView() async throws {
|
||||||
try await performAccessibilityAudit(named: "StickerRoomTimelineView_Previews")
|
try await performAccessibilityAudit(named: "StickerRoomTimelineView_Previews")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 77;
|
objectVersion = 63;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXAggregateTarget section */
|
/* Begin PBXAggregateTarget section */
|
||||||
@@ -149,6 +149,7 @@
|
|||||||
16E4F1B8B9BFE1367F96DDA7 /* CompletionSuggestionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 989FC684408B31A677F5538B /* CompletionSuggestionView.swift */; };
|
16E4F1B8B9BFE1367F96DDA7 /* CompletionSuggestionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 989FC684408B31A677F5538B /* CompletionSuggestionView.swift */; };
|
||||||
1702981A8085BE4FB0EC001B /* Application.swift in Sources */ = {isa = PBXBuildFile; fileRef = D33116993D54FADC0C721C1F /* Application.swift */; };
|
1702981A8085BE4FB0EC001B /* Application.swift in Sources */ = {isa = PBXBuildFile; fileRef = D33116993D54FADC0C721C1F /* Application.swift */; };
|
||||||
172E6E9A612ADCF10A62CF13 /* BugReportServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A68BCE6438873D2661D93D0 /* BugReportServiceProtocol.swift */; };
|
172E6E9A612ADCF10A62CF13 /* BugReportServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A68BCE6438873D2661D93D0 /* BugReportServiceProtocol.swift */; };
|
||||||
|
1743EAB45DA264AAFABDD3EF /* StaticLocationSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECE03E834CC8C2721899E6AC /* StaticLocationSheet.swift */; };
|
||||||
1795EA6A6C4942CAE0459DF0 /* SecureBackupKeyBackupScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82B612853BFB68373249777B /* SecureBackupKeyBackupScreenViewModel.swift */; };
|
1795EA6A6C4942CAE0459DF0 /* SecureBackupKeyBackupScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82B612853BFB68373249777B /* SecureBackupKeyBackupScreenViewModel.swift */; };
|
||||||
17BC15DA08A52587466698C5 /* RoomMessageEventStringBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E815FF3CC5E5A355E3A25E /* RoomMessageEventStringBuilder.swift */; };
|
17BC15DA08A52587466698C5 /* RoomMessageEventStringBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E815FF3CC5E5A355E3A25E /* RoomMessageEventStringBuilder.swift */; };
|
||||||
1801F1467ABCEA080419E150 /* preview_avatar_user.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 87FC42213E86E8182CFD3A49 /* preview_avatar_user.jpg */; };
|
1801F1467ABCEA080419E150 /* preview_avatar_user.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 87FC42213E86E8182CFD3A49 /* preview_avatar_user.jpg */; };
|
||||||
@@ -976,6 +977,7 @@
|
|||||||
A6FFC4C5154C446BAD6B40D8 /* TimelineItemProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8520AFD6680CBAD388F6D927 /* TimelineItemProvider.swift */; };
|
A6FFC4C5154C446BAD6B40D8 /* TimelineItemProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8520AFD6680CBAD388F6D927 /* TimelineItemProvider.swift */; };
|
||||||
A722F426FD81FC67706BB1E0 /* CustomLayoutLabelStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42236480CF0431535EBE8387 /* CustomLayoutLabelStyle.swift */; };
|
A722F426FD81FC67706BB1E0 /* CustomLayoutLabelStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42236480CF0431535EBE8387 /* CustomLayoutLabelStyle.swift */; };
|
||||||
A74438ED16F8683A4B793E6A /* AnalyticsSettingsScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BCE3FAF40932AC7C7639AC4 /* AnalyticsSettingsScreenViewModel.swift */; };
|
A74438ED16F8683A4B793E6A /* AnalyticsSettingsScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BCE3FAF40932AC7C7639AC4 /* AnalyticsSettingsScreenViewModel.swift */; };
|
||||||
|
A7455F6B2F5AF7DD00E8D8BB /* LocationPickerSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7455F6A2F5AF7D400E8D8BB /* LocationPickerSheet.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 */; };
|
||||||
A7DB75E090542331F6668A23 /* CreateRoomScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF19027E7FFA5E63D148873A /* CreateRoomScreenViewModel.swift */; };
|
A7DB75E090542331F6668A23 /* CreateRoomScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF19027E7FFA5E63D148873A /* CreateRoomScreenViewModel.swift */; };
|
||||||
A808DC3F72D15C6C5A52317E /* TimelineItemDebugView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCDA016D05107DED3B9495CB /* TimelineItemDebugView.swift */; };
|
A808DC3F72D15C6C5A52317E /* TimelineItemDebugView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCDA016D05107DED3B9495CB /* TimelineItemDebugView.swift */; };
|
||||||
@@ -1580,7 +1582,7 @@
|
|||||||
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>"; };
|
||||||
045253F9967A535EE5B16691 /* Label.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Label.swift; sourceTree = "<group>"; };
|
045253F9967A535EE5B16691 /* Label.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Label.swift; sourceTree = "<group>"; };
|
||||||
046C0D3F53B0B5EF0A1F5BEA /* RoomSummaryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSummaryTests.swift; sourceTree = "<group>"; };
|
046C0D3F53B0B5EF0A1F5BEA /* RoomSummaryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSummaryTests.swift; sourceTree = "<group>"; };
|
||||||
048A21188AB19349D026BECD /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
048A21188AB19349D026BECD /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
||||||
04BB8DDE245ED86C489BA983 /* AccessibilityIdentifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityIdentifiers.swift; sourceTree = "<group>"; };
|
04BB8DDE245ED86C489BA983 /* AccessibilityIdentifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityIdentifiers.swift; sourceTree = "<group>"; };
|
||||||
04DF593C3F7AF4B2FBAEB05D /* FileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileManager.swift; sourceTree = "<group>"; };
|
04DF593C3F7AF4B2FBAEB05D /* FileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileManager.swift; sourceTree = "<group>"; };
|
||||||
0516C69708D5CBDE1A8E77EC /* RoomDirectorySearchProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDirectorySearchProxyProtocol.swift; sourceTree = "<group>"; };
|
0516C69708D5CBDE1A8E77EC /* RoomDirectorySearchProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDirectorySearchProxyProtocol.swift; sourceTree = "<group>"; };
|
||||||
@@ -1665,7 +1667,7 @@
|
|||||||
128501375217576AF0FE3E92 /* RoomAttachmentPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomAttachmentPicker.swift; sourceTree = "<group>"; };
|
128501375217576AF0FE3E92 /* RoomAttachmentPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomAttachmentPicker.swift; sourceTree = "<group>"; };
|
||||||
12B09A94C519227264A41208 /* RoomMembershipDetailsProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMembershipDetailsProxy.swift; sourceTree = "<group>"; };
|
12B09A94C519227264A41208 /* RoomMembershipDetailsProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMembershipDetailsProxy.swift; sourceTree = "<group>"; };
|
||||||
12FD5280AF55AB7F50F8E47D /* preview_avatar_room.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = preview_avatar_room.jpg; sourceTree = "<group>"; };
|
12FD5280AF55AB7F50F8E47D /* preview_avatar_room.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = preview_avatar_room.jpg; 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>"; };
|
||||||
136F80A613B55BDD071DCEA5 /* JoinRoomScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreenModels.swift; sourceTree = "<group>"; };
|
136F80A613B55BDD071DCEA5 /* JoinRoomScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreenModels.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>"; };
|
||||||
@@ -1686,7 +1688,7 @@
|
|||||||
16D09C79746BDCD9173EB3A7 /* RoomDetailsEditScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetailsEditScreenModels.swift; sourceTree = "<group>"; };
|
16D09C79746BDCD9173EB3A7 /* RoomDetailsEditScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetailsEditScreenModels.swift; sourceTree = "<group>"; };
|
||||||
16D353E10A64172D863769BF /* TombstonedAvatarImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TombstonedAvatarImage.swift; sourceTree = "<group>"; };
|
16D353E10A64172D863769BF /* TombstonedAvatarImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TombstonedAvatarImage.swift; sourceTree = "<group>"; };
|
||||||
1715E3D7F53C0748AA50C91C /* PostHogAnalyticsClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostHogAnalyticsClient.swift; sourceTree = "<group>"; };
|
1715E3D7F53C0748AA50C91C /* PostHogAnalyticsClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostHogAnalyticsClient.swift; sourceTree = "<group>"; };
|
||||||
174E4AEF3DED300AA81046EC /* compound-ios */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "compound-ios"; path = "compound-ios"; sourceTree = SOURCE_ROOT; };
|
174E4AEF3DED300AA81046EC /* compound-ios */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "compound-ios"; sourceTree = SOURCE_ROOT; };
|
||||||
17A8AA0DFA06012A9DAB951E /* TimelineProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineProxyMock.swift; sourceTree = "<group>"; };
|
17A8AA0DFA06012A9DAB951E /* TimelineProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineProxyMock.swift; sourceTree = "<group>"; };
|
||||||
17BAE25A0E9E9F2F1BBA8930 /* DeactivateAccountScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeactivateAccountScreenViewModel.swift; sourceTree = "<group>"; };
|
17BAE25A0E9E9F2F1BBA8930 /* DeactivateAccountScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeactivateAccountScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
181CF280BC8E3F335AFCB4B8 /* RemotePreferenceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemotePreferenceTests.swift; sourceTree = "<group>"; };
|
181CF280BC8E3F335AFCB4B8 /* RemotePreferenceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemotePreferenceTests.swift; sourceTree = "<group>"; };
|
||||||
@@ -1777,7 +1779,7 @@
|
|||||||
25E7E9B7FEAB6169D960C206 /* QRCodeLoginScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeLoginScreenViewModelTests.swift; sourceTree = "<group>"; };
|
25E7E9B7FEAB6169D960C206 /* QRCodeLoginScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeLoginScreenViewModelTests.swift; sourceTree = "<group>"; };
|
||||||
25F8664F1FB95AF3C4202478 /* PollFormScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollFormScreenCoordinator.swift; sourceTree = "<group>"; };
|
25F8664F1FB95AF3C4202478 /* PollFormScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollFormScreenCoordinator.swift; sourceTree = "<group>"; };
|
||||||
260004737C573A56FA01E86E /* Encodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Encodable.swift; sourceTree = "<group>"; };
|
260004737C573A56FA01E86E /* Encodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Encodable.swift; sourceTree = "<group>"; };
|
||||||
267BB1D5B08A9511F894CB57 /* PreviewTests.xctestplan */ = {isa = PBXFileReference; path = PreviewTests.xctestplan; sourceTree = "<group>"; };
|
267BB1D5B08A9511F894CB57 /* PreviewTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = PreviewTests.xctestplan; sourceTree = "<group>"; };
|
||||||
26B0A96B8FE4849227945067 /* VoiceMessageRecorder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceMessageRecorder.swift; sourceTree = "<group>"; };
|
26B0A96B8FE4849227945067 /* VoiceMessageRecorder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceMessageRecorder.swift; sourceTree = "<group>"; };
|
||||||
26EAAB54C6CE91D64B69A9F8 /* AppLockServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockServiceProtocol.swift; sourceTree = "<group>"; };
|
26EAAB54C6CE91D64B69A9F8 /* AppLockServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockServiceProtocol.swift; sourceTree = "<group>"; };
|
||||||
2711E5996016ABD6EAAEB58A /* LogLevel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogLevel.swift; sourceTree = "<group>"; };
|
2711E5996016ABD6EAAEB58A /* LogLevel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogLevel.swift; sourceTree = "<group>"; };
|
||||||
@@ -1859,7 +1861,7 @@
|
|||||||
358528B29FA72ACFD0D9644B /* SpacesScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacesScreenCoordinator.swift; sourceTree = "<group>"; };
|
358528B29FA72ACFD0D9644B /* SpacesScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacesScreenCoordinator.swift; sourceTree = "<group>"; };
|
||||||
35A057BA9BE0F079784CD061 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
35A057BA9BE0F079784CD061 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
||||||
35AFCF4C05DEED04E3DB1A16 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
|
35AFCF4C05DEED04E3DB1A16 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
36DA824791172B9821EACBED /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
36DA824791172B9821EACBED /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
||||||
36FD673E24FBFCFDF398716A /* RoomMemberProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMemberProxyMock.swift; sourceTree = "<group>"; };
|
36FD673E24FBFCFDF398716A /* RoomMemberProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMemberProxyMock.swift; sourceTree = "<group>"; };
|
||||||
3747C96188856006F784BF49 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ko; path = ko.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
3747C96188856006F784BF49 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ko; path = ko.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
||||||
37A63A59BFDDC494B1C20119 /* CallScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallScreenViewModel.swift; sourceTree = "<group>"; };
|
37A63A59BFDDC494B1C20119 /* CallScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
@@ -1977,7 +1979,7 @@
|
|||||||
4A2B5274C1D3D2999D643786 /* EncryptionResetPasswordScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
4A2B5274C1D3D2999D643786 /* EncryptionResetPasswordScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
4A5B4CD611DE7E94F5BA87B2 /* AppLockTimerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockTimerTests.swift; sourceTree = "<group>"; };
|
4A5B4CD611DE7E94F5BA87B2 /* AppLockTimerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockTimerTests.swift; sourceTree = "<group>"; };
|
||||||
4AB29A2D95D3469B5F016655 /* SecureBackupControllerMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupControllerMock.swift; sourceTree = "<group>"; };
|
4AB29A2D95D3469B5F016655 /* SecureBackupControllerMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupControllerMock.swift; sourceTree = "<group>"; };
|
||||||
4B1F71AC585827E6C416C15A /* AppIcon.icon */ = {isa = PBXFileReference; path = AppIcon.icon; sourceTree = "<group>"; };
|
4B1F71AC585827E6C416C15A /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = AppIcon.icon; sourceTree = "<group>"; };
|
||||||
4B2B564CA6570E1487A7C7CC /* SpaceRoomListProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceRoomListProxy.swift; sourceTree = "<group>"; };
|
4B2B564CA6570E1487A7C7CC /* SpaceRoomListProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceRoomListProxy.swift; sourceTree = "<group>"; };
|
||||||
4B2D4EEBE8C098BBADD10939 /* SecureBackupKeyBackupScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupKeyBackupScreenCoordinator.swift; sourceTree = "<group>"; };
|
4B2D4EEBE8C098BBADD10939 /* SecureBackupKeyBackupScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupKeyBackupScreenCoordinator.swift; sourceTree = "<group>"; };
|
||||||
4B41FABA2B0AEF4389986495 /* LoginMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginMode.swift; sourceTree = "<group>"; };
|
4B41FABA2B0AEF4389986495 /* LoginMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginMode.swift; sourceTree = "<group>"; };
|
||||||
@@ -2326,7 +2328,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>"; };
|
||||||
8DA1E8F287680C8ED25EDBAC /* NetworkMonitorMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkMonitorMock.swift; sourceTree = "<group>"; };
|
8DA1E8F287680C8ED25EDBAC /* NetworkMonitorMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkMonitorMock.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>"; };
|
||||||
8E1584F8BCF407BB94F48F04 /* EncryptionResetPasswordScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreen.swift; sourceTree = "<group>"; };
|
8E1584F8BCF407BB94F48F04 /* EncryptionResetPasswordScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreen.swift; sourceTree = "<group>"; };
|
||||||
8EAF4A49F3ACD8BB8B0D2371 /* ClientSDKMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClientSDKMock.swift; sourceTree = "<group>"; };
|
8EAF4A49F3ACD8BB8B0D2371 /* ClientSDKMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClientSDKMock.swift; sourceTree = "<group>"; };
|
||||||
8F062DD2CCD95DC33528A16F /* KnockRequestProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KnockRequestProxy.swift; sourceTree = "<group>"; };
|
8F062DD2CCD95DC33528A16F /* KnockRequestProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KnockRequestProxy.swift; sourceTree = "<group>"; };
|
||||||
@@ -2455,6 +2457,7 @@
|
|||||||
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>"; };
|
||||||
A6EA0D8B0BBD8805F7D5A133 /* TextBasedRoomTimelineViewProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextBasedRoomTimelineViewProtocol.swift; sourceTree = "<group>"; };
|
A6EA0D8B0BBD8805F7D5A133 /* TextBasedRoomTimelineViewProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextBasedRoomTimelineViewProtocol.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>"; };
|
||||||
|
A7455F6A2F5AF7D400E8D8BB /* LocationPickerSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationPickerSheet.swift; sourceTree = "<group>"; };
|
||||||
A768CA51A59B8A5D8C8FD599 /* AuthenticationStartScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationStartScreen.swift; sourceTree = "<group>"; };
|
A768CA51A59B8A5D8C8FD599 /* AuthenticationStartScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationStartScreen.swift; sourceTree = "<group>"; };
|
||||||
A7978C9EFBDD7DE39BD86726 /* RestorationTokenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestorationTokenTests.swift; sourceTree = "<group>"; };
|
A7978C9EFBDD7DE39BD86726 /* RestorationTokenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestorationTokenTests.swift; sourceTree = "<group>"; };
|
||||||
A7A1B80FE6E3BA72F9C748AD /* AdvancedSettingsScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdvancedSettingsScreenViewModel.swift; sourceTree = "<group>"; };
|
A7A1B80FE6E3BA72F9C748AD /* AdvancedSettingsScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdvancedSettingsScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
@@ -2478,7 +2481,7 @@
|
|||||||
AAD8234D0E9C9B12BF9F240B /* LocationAnnotation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationAnnotation.swift; sourceTree = "<group>"; };
|
AAD8234D0E9C9B12BF9F240B /* LocationAnnotation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationAnnotation.swift; sourceTree = "<group>"; };
|
||||||
AB07F03461023BC39C730922 /* PhishingDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhishingDetector.swift; sourceTree = "<group>"; };
|
AB07F03461023BC39C730922 /* PhishingDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhishingDetector.swift; sourceTree = "<group>"; };
|
||||||
AB26D5444A4A7E095222DE8B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
AB26D5444A4A7E095222DE8B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
||||||
AB389C38BD41EB3E47092CFB /* AccessibilityTests.xctestplan */ = {isa = PBXFileReference; path = AccessibilityTests.xctestplan; sourceTree = "<group>"; };
|
AB389C38BD41EB3E47092CFB /* AccessibilityTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = AccessibilityTests.xctestplan; sourceTree = "<group>"; };
|
||||||
ABA4CF2F5B4F68D02E412004 /* ServerConfirmationScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerConfirmationScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
ABA4CF2F5B4F68D02E412004 /* ServerConfirmationScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerConfirmationScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
AC0275CEE9CA078B34028BDF /* AppLockScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockScreenViewModelTests.swift; sourceTree = "<group>"; };
|
AC0275CEE9CA078B34028BDF /* AppLockScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockScreenViewModelTests.swift; sourceTree = "<group>"; };
|
||||||
AC1DA29A5A041CC0BACA7CB0 /* MockImageCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockImageCache.swift; sourceTree = "<group>"; };
|
AC1DA29A5A041CC0BACA7CB0 /* MockImageCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockImageCache.swift; sourceTree = "<group>"; };
|
||||||
@@ -2546,7 +2549,7 @@
|
|||||||
B53AC78E49A297AC1D72A7CF /* AppMediator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppMediator.swift; sourceTree = "<group>"; };
|
B53AC78E49A297AC1D72A7CF /* AppMediator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppMediator.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>"; };
|
||||||
B5D829FD8958376614504B18 /* TargetConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TargetConfiguration.swift; sourceTree = "<group>"; };
|
B5D829FD8958376614504B18 /* TargetConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TargetConfiguration.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>"; };
|
||||||
B6404166CBF5CC88673FF9E2 /* RoomDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetails.swift; sourceTree = "<group>"; };
|
B6404166CBF5CC88673FF9E2 /* RoomDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetails.swift; sourceTree = "<group>"; };
|
||||||
B65DDCF8E41759890355ACBC /* AuthenticationStartScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationStartScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
B65DDCF8E41759890355ACBC /* AuthenticationStartScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationStartScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
B682FE2C44C5E163E7023B05 /* CopyTextButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyTextButton.swift; sourceTree = "<group>"; };
|
B682FE2C44C5E163E7023B05 /* CopyTextButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyTextButton.swift; sourceTree = "<group>"; };
|
||||||
@@ -2579,7 +2582,7 @@
|
|||||||
BA40B98B098B6F0371B750B3 /* TemplateScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateScreenModels.swift; sourceTree = "<group>"; };
|
BA40B98B098B6F0371B750B3 /* TemplateScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateScreenModels.swift; sourceTree = "<group>"; };
|
||||||
BA919F521E9F0EE3638AFC85 /* BugReportScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugReportScreen.swift; sourceTree = "<group>"; };
|
BA919F521E9F0EE3638AFC85 /* BugReportScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugReportScreen.swift; sourceTree = "<group>"; };
|
||||||
BB284643AF7AB131E307DCE0 /* AudioSessionProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioSessionProtocol.swift; sourceTree = "<group>"; };
|
BB284643AF7AB131E307DCE0 /* AudioSessionProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioSessionProtocol.swift; sourceTree = "<group>"; };
|
||||||
BB576F4118C35E6B5124FA22 /* test_apple_image.heic */ = {isa = PBXFileReference; path = test_apple_image.heic; sourceTree = "<group>"; };
|
BB576F4118C35E6B5124FA22 /* test_apple_image.heic */ = {isa = PBXFileReference; lastKnownFileType = file; path = test_apple_image.heic; sourceTree = "<group>"; };
|
||||||
BB5B00A014307CE37B2812CD /* TimelineViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineViewModelProtocol.swift; sourceTree = "<group>"; };
|
BB5B00A014307CE37B2812CD /* TimelineViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
BB6ED50FE104992419310EEB /* NotificationHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationHandler.swift; sourceTree = "<group>"; };
|
BB6ED50FE104992419310EEB /* NotificationHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationHandler.swift; sourceTree = "<group>"; };
|
||||||
BB8BC4C791D0E88CFCF4E5DF /* ServerSelectionScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerSelectionScreenCoordinator.swift; sourceTree = "<group>"; };
|
BB8BC4C791D0E88CFCF4E5DF /* ServerSelectionScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerSelectionScreenCoordinator.swift; sourceTree = "<group>"; };
|
||||||
@@ -2681,7 +2684,7 @@
|
|||||||
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>"; };
|
||||||
CDE3F3911FF7CC639BDE5844 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
|
CDE3F3911FF7CC639BDE5844 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
CEE20623EB4A9B88FB29F2BA /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/SAS.strings; sourceTree = "<group>"; };
|
CEE20623EB4A9B88FB29F2BA /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/SAS.strings; sourceTree = "<group>"; };
|
||||||
CEE41494C837AA403A06A5D9 /* UnitTests.xctestplan */ = {isa = PBXFileReference; path = UnitTests.xctestplan; sourceTree = "<group>"; };
|
CEE41494C837AA403A06A5D9 /* UnitTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = UnitTests.xctestplan; sourceTree = "<group>"; };
|
||||||
CF19027E7FFA5E63D148873A /* CreateRoomScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateRoomScreenViewModel.swift; sourceTree = "<group>"; };
|
CF19027E7FFA5E63D148873A /* CreateRoomScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateRoomScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
CF847A34FC4C8C937CD39E08 /* LabsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabsScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
CF847A34FC4C8C937CD39E08 /* LabsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabsScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
CFFA5E881D281810AB428EA3 /* RoomPowerLevelsProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomPowerLevelsProxy.swift; sourceTree = "<group>"; };
|
CFFA5E881D281810AB428EA3 /* RoomPowerLevelsProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomPowerLevelsProxy.swift; sourceTree = "<group>"; };
|
||||||
@@ -2751,7 +2754,7 @@
|
|||||||
DC0AEA686E425F86F6BA0404 /* UNNotification+Creator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UNNotification+Creator.swift"; sourceTree = "<group>"; };
|
DC0AEA686E425F86F6BA0404 /* UNNotification+Creator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UNNotification+Creator.swift"; sourceTree = "<group>"; };
|
||||||
DC10CCC8D68B863E20660DBC /* MessageForwardingScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageForwardingScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
DC10CCC8D68B863E20660DBC /* MessageForwardingScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageForwardingScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
DC528B3764E3CF7FCFEF40E7 /* PollInteractionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollInteractionHandler.swift; sourceTree = "<group>"; };
|
DC528B3764E3CF7FCFEF40E7 /* PollInteractionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollInteractionHandler.swift; sourceTree = "<group>"; };
|
||||||
DCA2D836BD10303F37FAAEED /* test_voice_message.m4a */ = {isa = PBXFileReference; path = test_voice_message.m4a; sourceTree = "<group>"; };
|
DCA2D836BD10303F37FAAEED /* test_voice_message.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = test_voice_message.m4a; sourceTree = "<group>"; };
|
||||||
DCAC01A97A43BE07B9E94E43 /* ShareExtensionModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareExtensionModels.swift; sourceTree = "<group>"; };
|
DCAC01A97A43BE07B9E94E43 /* ShareExtensionModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareExtensionModels.swift; sourceTree = "<group>"; };
|
||||||
DCDAB580109C09A6AA97AF7E /* PollFormScreenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollFormScreenTests.swift; sourceTree = "<group>"; };
|
DCDAB580109C09A6AA97AF7E /* PollFormScreenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollFormScreenTests.swift; sourceTree = "<group>"; };
|
||||||
DCF239C619971FDE48132550 /* SecureBackupLogoutConfirmationScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupLogoutConfirmationScreenModels.swift; sourceTree = "<group>"; };
|
DCF239C619971FDE48132550 /* SecureBackupLogoutConfirmationScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupLogoutConfirmationScreenModels.swift; sourceTree = "<group>"; };
|
||||||
@@ -2797,7 +2800,7 @@
|
|||||||
E5272BC4A60B6AD7553BACA1 /* BlurHashDecode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlurHashDecode.swift; sourceTree = "<group>"; };
|
E5272BC4A60B6AD7553BACA1 /* BlurHashDecode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlurHashDecode.swift; sourceTree = "<group>"; };
|
||||||
E53BFB7E4F329621C844E8C3 /* AnalyticsPromptScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsPromptScreen.swift; sourceTree = "<group>"; };
|
E53BFB7E4F329621C844E8C3 /* AnalyticsPromptScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsPromptScreen.swift; sourceTree = "<group>"; };
|
||||||
E55B5EA766E89FF1F87C3ACB /* RoomNotificationSettingsProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomNotificationSettingsProxyProtocol.swift; sourceTree = "<group>"; };
|
E55B5EA766E89FF1F87C3ACB /* RoomNotificationSettingsProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomNotificationSettingsProxyProtocol.swift; sourceTree = "<group>"; };
|
||||||
E5E7D4EE7CA295E5039FDA21 /* portrait_test_video.mp4 */ = {isa = PBXFileReference; path = portrait_test_video.mp4; sourceTree = "<group>"; };
|
E5E7D4EE7CA295E5039FDA21 /* portrait_test_video.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = portrait_test_video.mp4; sourceTree = "<group>"; };
|
||||||
E5E94DCFEE803E5ABAE8ACCE /* KeychainControllerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainControllerProtocol.swift; sourceTree = "<group>"; };
|
E5E94DCFEE803E5ABAE8ACCE /* KeychainControllerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainControllerProtocol.swift; sourceTree = "<group>"; };
|
||||||
E5F2B6443D1ED8602F328539 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ru; path = ru.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
E5F2B6443D1ED8602F328539 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ru; path = ru.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
||||||
E5FDFAA04174CC99FB66391C /* EditRoomAddressScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditRoomAddressScreenViewModel.swift; sourceTree = "<group>"; };
|
E5FDFAA04174CC99FB66391C /* EditRoomAddressScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditRoomAddressScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
@@ -2838,6 +2841,7 @@
|
|||||||
EC589E641AE46EFB2962534D /* RoomMemberDetailsViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMemberDetailsViewModelTests.swift; sourceTree = "<group>"; };
|
EC589E641AE46EFB2962534D /* RoomMemberDetailsViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMemberDetailsViewModelTests.swift; sourceTree = "<group>"; };
|
||||||
ECB836DD8BE31931F51B8AC9 /* EncryptionSettingsFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionSettingsFlowCoordinator.swift; sourceTree = "<group>"; };
|
ECB836DD8BE31931F51B8AC9 /* EncryptionSettingsFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionSettingsFlowCoordinator.swift; sourceTree = "<group>"; };
|
||||||
ECD5FCBA169B6A82F501CA1B /* AnalyticsSettingsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsSettingsScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
ECD5FCBA169B6A82F501CA1B /* AnalyticsSettingsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsSettingsScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
|
ECE03E834CC8C2721899E6AC /* StaticLocationSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticLocationSheet.swift; sourceTree = "<group>"; };
|
||||||
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>"; };
|
||||||
ED096460D7F26F10168FA33B /* LinkNewDeviceScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinkNewDeviceScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
ED096460D7F26F10168FA33B /* LinkNewDeviceScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinkNewDeviceScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
@@ -2845,7 +2849,7 @@
|
|||||||
ED0CBEAB5F796BEFBAF7BB6A /* VideoRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoRoomTimelineView.swift; sourceTree = "<group>"; };
|
ED0CBEAB5F796BEFBAF7BB6A /* VideoRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoRoomTimelineView.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>"; };
|
||||||
ED33988DA4FD4FC666800106 /* SessionVerificationScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionVerificationScreenViewModel.swift; sourceTree = "<group>"; };
|
ED33988DA4FD4FC666800106 /* SessionVerificationScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionVerificationScreenViewModel.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>"; };
|
||||||
ED49073BB1C1FC649DAC2CCD /* LocationRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationRoomTimelineView.swift; sourceTree = "<group>"; };
|
ED49073BB1C1FC649DAC2CCD /* LocationRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationRoomTimelineView.swift; sourceTree = "<group>"; };
|
||||||
ED60E4D2CD678E1EBF16F77A /* BlockedUsersScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockedUsersScreen.swift; sourceTree = "<group>"; };
|
ED60E4D2CD678E1EBF16F77A /* BlockedUsersScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockedUsersScreen.swift; sourceTree = "<group>"; };
|
||||||
EDDE826EAB1BAB80C1104980 /* SpaceFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceFlowCoordinator.swift; sourceTree = "<group>"; };
|
EDDE826EAB1BAB80C1104980 /* SpaceFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceFlowCoordinator.swift; sourceTree = "<group>"; };
|
||||||
@@ -5558,7 +5562,9 @@
|
|||||||
9FD8D798D879069243A7E7F7 /* View */ = {
|
9FD8D798D879069243A7E7F7 /* View */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
A7455F6A2F5AF7D400E8D8BB /* LocationPickerSheet.swift */,
|
||||||
6F56E6E41C6DFE8054787D57 /* LocationSharingScreen.swift */,
|
6F56E6E41C6DFE8054787D57 /* LocationSharingScreen.swift */,
|
||||||
|
ECE03E834CC8C2721899E6AC /* StaticLocationSheet.swift */,
|
||||||
);
|
);
|
||||||
path = View;
|
path = View;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -7236,7 +7242,6 @@
|
|||||||
EE40B0E16A55BD23ECBFFD22 /* XCRemoteSwiftPackageReference "matrix-rich-text-editor-swift" */,
|
EE40B0E16A55BD23ECBFFD22 /* XCRemoteSwiftPackageReference "matrix-rich-text-editor-swift" */,
|
||||||
C89CF7729E028671C5DC461E /* XCLocalSwiftPackageReference "compound-ios" */,
|
C89CF7729E028671C5DC461E /* XCLocalSwiftPackageReference "compound-ios" */,
|
||||||
);
|
);
|
||||||
preferredProjectObjectVersion = 77;
|
|
||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
projectRoot = "";
|
projectRoot = "";
|
||||||
targets = (
|
targets = (
|
||||||
@@ -8063,6 +8068,7 @@
|
|||||||
1D69E31913DF66426985909B /* EmojiPickerScreenViewModelProtocol.swift in Sources */,
|
1D69E31913DF66426985909B /* EmojiPickerScreenViewModelProtocol.swift in Sources */,
|
||||||
FBF09B6C900415800DDF2A21 /* EmojiProvider.swift in Sources */,
|
FBF09B6C900415800DDF2A21 /* EmojiProvider.swift in Sources */,
|
||||||
A5B455D1A6DADF7476F7B417 /* EmojiProviderProtocol.swift in Sources */,
|
A5B455D1A6DADF7476F7B417 /* EmojiProviderProtocol.swift in Sources */,
|
||||||
|
A7455F6B2F5AF7DD00E8D8BB /* LocationPickerSheet.swift in Sources */,
|
||||||
5D27B6537591471A42C89027 /* EmoteRoomTimelineItem.swift in Sources */,
|
5D27B6537591471A42C89027 /* EmoteRoomTimelineItem.swift in Sources */,
|
||||||
8B41D0357B91CD3B6F6A3BCA /* EmoteRoomTimelineItemContent.swift in Sources */,
|
8B41D0357B91CD3B6F6A3BCA /* EmoteRoomTimelineItemContent.swift in Sources */,
|
||||||
661EF50C1F7D4B0BC8A7AAE3 /* EmoteRoomTimelineView.swift in Sources */,
|
661EF50C1F7D4B0BC8A7AAE3 /* EmoteRoomTimelineView.swift in Sources */,
|
||||||
@@ -8678,6 +8684,7 @@
|
|||||||
3B277D9538090766DA6C4566 /* StateRoomTimelineView.swift in Sources */,
|
3B277D9538090766DA6C4566 /* StateRoomTimelineView.swift in Sources */,
|
||||||
B4AAB3257A83B73F53FB2689 /* StateStoreViewModel.swift in Sources */,
|
B4AAB3257A83B73F53FB2689 /* StateStoreViewModel.swift in Sources */,
|
||||||
CF638B8C6FDCE920AE061FAE /* StateStoreViewModelV2.swift in Sources */,
|
CF638B8C6FDCE920AE061FAE /* StateStoreViewModelV2.swift in Sources */,
|
||||||
|
1743EAB45DA264AAFABDD3EF /* StaticLocationSheet.swift in Sources */,
|
||||||
C58E305C380D3ADDF7912180 /* StickerRoomTimelineItem.swift in Sources */,
|
C58E305C380D3ADDF7912180 /* StickerRoomTimelineItem.swift in Sources */,
|
||||||
197441F1EF23A5DABACCA79F /* StickerRoomTimelineView.swift in Sources */,
|
197441F1EF23A5DABACCA79F /* StickerRoomTimelineView.swift in Sources */,
|
||||||
2F94054F50E312AF30BE07F3 /* String.swift in Sources */,
|
2F94054F50E312AF30BE07F3 /* String.swift in Sources */,
|
||||||
@@ -9149,9 +9156,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
OTHER_SWIFT_FLAGS = (
|
OTHER_SWIFT_FLAGS = "-DRELEASE";
|
||||||
"-DRELEASE",
|
|
||||||
);
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.accessibility.tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.accessibility.tests";
|
||||||
PRODUCT_NAME = AccessibilityTests;
|
PRODUCT_NAME = AccessibilityTests;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@@ -9170,9 +9175,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
OTHER_SWIFT_FLAGS = (
|
OTHER_SWIFT_FLAGS = "-DDEBUG";
|
||||||
"-DDEBUG",
|
|
||||||
);
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.accessibility.tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.accessibility.tests";
|
||||||
PRODUCT_NAME = AccessibilityTests;
|
PRODUCT_NAME = AccessibilityTests;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@@ -9194,9 +9197,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;
|
||||||
@@ -9263,9 +9264,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"-ObjC",
|
"-ObjC",
|
||||||
);
|
);
|
||||||
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)";
|
||||||
@@ -9295,9 +9294,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"-ObjC",
|
"-ObjC",
|
||||||
);
|
);
|
||||||
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)";
|
||||||
@@ -9522,9 +9519,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
OTHER_SWIFT_FLAGS = (
|
OTHER_SWIFT_FLAGS = "-DDEBUG";
|
||||||
"-DDEBUG",
|
|
||||||
);
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.ui.tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.ui.tests";
|
||||||
PRODUCT_NAME = UITests;
|
PRODUCT_NAME = UITests;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@@ -9543,9 +9538,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
OTHER_SWIFT_FLAGS = (
|
OTHER_SWIFT_FLAGS = "-DRELEASE";
|
||||||
"-DRELEASE",
|
|
||||||
);
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.ui.tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.ui.tests";
|
||||||
PRODUCT_NAME = UITests;
|
PRODUCT_NAME = UITests;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@@ -9567,9 +9560,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;
|
||||||
|
|||||||
@@ -4,8 +4,7 @@
|
|||||||
version = "1.7">
|
version = "1.7">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
buildImplicitDependencies = "YES"
|
buildImplicitDependencies = "YES">
|
||||||
runPostActionsOnFailure = "NO">
|
|
||||||
<BuildActionEntries>
|
<BuildActionEntries>
|
||||||
<BuildActionEntry
|
<BuildActionEntry
|
||||||
buildForTesting = "YES"
|
buildForTesting = "YES"
|
||||||
@@ -30,12 +29,6 @@
|
|||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
codeCoverageEnabled = "YES"
|
codeCoverageEnabled = "YES"
|
||||||
onlyGenerateCoverageForSpecifiedTargets = "YES">
|
onlyGenerateCoverageForSpecifiedTargets = "YES">
|
||||||
<TestPlans>
|
|
||||||
<TestPlanReference
|
|
||||||
default = "YES"
|
|
||||||
reference = "container:PreviewTests/SupportingFiles/PreviewTests.xctestplan">
|
|
||||||
</TestPlanReference>
|
|
||||||
</TestPlans>
|
|
||||||
<MacroExpansion>
|
<MacroExpansion>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
@@ -45,10 +38,6 @@
|
|||||||
ReferencedContainer = "container:ElementX.xcodeproj">
|
ReferencedContainer = "container:ElementX.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</MacroExpansion>
|
</MacroExpansion>
|
||||||
<Testables>
|
|
||||||
</Testables>
|
|
||||||
<CommandLineArguments>
|
|
||||||
</CommandLineArguments>
|
|
||||||
<CodeCoverageTargets>
|
<CodeCoverageTargets>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
@@ -58,6 +47,12 @@
|
|||||||
ReferencedContainer = "container:ElementX.xcodeproj">
|
ReferencedContainer = "container:ElementX.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</CodeCoverageTargets>
|
</CodeCoverageTargets>
|
||||||
|
<TestPlans>
|
||||||
|
<TestPlanReference
|
||||||
|
reference = "container:PreviewTests/SupportingFiles/PreviewTests.xctestplan"
|
||||||
|
default = "YES">
|
||||||
|
</TestPlanReference>
|
||||||
|
</TestPlans>
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
@@ -78,8 +73,6 @@
|
|||||||
ReferencedContainer = "container:ElementX.xcodeproj">
|
ReferencedContainer = "container:ElementX.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</MacroExpansion>
|
</MacroExpansion>
|
||||||
<CommandLineArguments>
|
|
||||||
</CommandLineArguments>
|
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
<ProfileAction
|
<ProfileAction
|
||||||
buildConfiguration = "Release"
|
buildConfiguration = "Release"
|
||||||
@@ -87,8 +80,6 @@
|
|||||||
savedToolIdentifier = ""
|
savedToolIdentifier = ""
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
debugDocumentVersioning = "YES">
|
debugDocumentVersioning = "YES">
|
||||||
<CommandLineArguments>
|
|
||||||
</CommandLineArguments>
|
|
||||||
<MacroExpansion>
|
<MacroExpansion>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"a11y_pause" = "Pause";
|
"a11y_pause" = "Pause";
|
||||||
"a11y_paused_voice_message" = "Voice message, duration: %1$@, current position: %2$@";
|
"a11y_paused_voice_message" = "Voice message, duration: %1$@, current position: %2$@";
|
||||||
"a11y_pin_field" = "PIN field";
|
"a11y_pin_field" = "PIN field";
|
||||||
|
"a11y_pinned_location" = "Pinned location";
|
||||||
"a11y_play" = "Play";
|
"a11y_play" = "Play";
|
||||||
"a11y_playback_speed" = "Playback speed";
|
"a11y_playback_speed" = "Playback speed";
|
||||||
"a11y_poll_end" = "Ended poll";
|
"a11y_poll_end" = "Ended poll";
|
||||||
@@ -33,6 +34,7 @@
|
|||||||
"a11y_remove_reaction" = "Remove reaction: %1$@";
|
"a11y_remove_reaction" = "Remove reaction: %1$@";
|
||||||
"a11y_remove_reaction_with" = "Remove reaction with %1$@";
|
"a11y_remove_reaction_with" = "Remove reaction with %1$@";
|
||||||
"a11y_send_files" = "Send files";
|
"a11y_send_files" = "Send files";
|
||||||
|
"a11y_sender_location" = "Sender location";
|
||||||
"a11y_session_verification_time_limited_action_required" = "Time limited action required, you have one minute to verify";
|
"a11y_session_verification_time_limited_action_required" = "Time limited action required, you have one minute to verify";
|
||||||
"a11y_show_password" = "Show password";
|
"a11y_show_password" = "Show password";
|
||||||
"a11y_start_call" = "Start a call";
|
"a11y_start_call" = "Start a call";
|
||||||
@@ -771,6 +773,8 @@
|
|||||||
"screen_start_chat_join_room_by_address_room_found" = "Matching room found";
|
"screen_start_chat_join_room_by_address_room_found" = "Matching room found";
|
||||||
"screen_start_chat_join_room_by_address_room_not_found" = "Room not found";
|
"screen_start_chat_join_room_by_address_room_not_found" = "Room not found";
|
||||||
"screen_start_chat_join_room_by_address_supporting_text" = "e.g. #room-name:matrix.org";
|
"screen_start_chat_join_room_by_address_supporting_text" = "e.g. #room-name:matrix.org";
|
||||||
|
"screen_static_location_sheet_timestamp_description" = "Shared %1$@";
|
||||||
|
"screen_static_location_sheet_title" = "On the map";
|
||||||
"screen_timeline_item_menu_send_failure_changed_identity" = "Message not sent because %1$@’s verified identity was reset.";
|
"screen_timeline_item_menu_send_failure_changed_identity" = "Message not sent because %1$@’s verified identity was reset.";
|
||||||
"screen_timeline_item_menu_send_failure_unsigned_device" = "Message not sent because %1$@ has not verified all devices.";
|
"screen_timeline_item_menu_send_failure_unsigned_device" = "Message not sent because %1$@ has not verified all devices.";
|
||||||
"screen_timeline_item_menu_send_failure_you_unsigned_device" = "Message not sent because you have not verified one or more of your devices.";
|
"screen_timeline_item_menu_send_failure_you_unsigned_device" = "Message not sent because you have not verified one or more of your devices.";
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"a11y_pause" = "Pause";
|
"a11y_pause" = "Pause";
|
||||||
"a11y_paused_voice_message" = "Voice message, duration: %1$@, current position: %2$@";
|
"a11y_paused_voice_message" = "Voice message, duration: %1$@, current position: %2$@";
|
||||||
"a11y_pin_field" = "PIN field";
|
"a11y_pin_field" = "PIN field";
|
||||||
|
"a11y_pinned_location" = "Pinned location";
|
||||||
"a11y_play" = "Play";
|
"a11y_play" = "Play";
|
||||||
"a11y_playback_speed" = "Playback speed";
|
"a11y_playback_speed" = "Playback speed";
|
||||||
"a11y_poll_end" = "Ended poll";
|
"a11y_poll_end" = "Ended poll";
|
||||||
@@ -33,6 +34,7 @@
|
|||||||
"a11y_remove_reaction" = "Remove reaction: %1$@";
|
"a11y_remove_reaction" = "Remove reaction: %1$@";
|
||||||
"a11y_remove_reaction_with" = "Remove reaction with %1$@";
|
"a11y_remove_reaction_with" = "Remove reaction with %1$@";
|
||||||
"a11y_send_files" = "Send files";
|
"a11y_send_files" = "Send files";
|
||||||
|
"a11y_sender_location" = "Sender location";
|
||||||
"a11y_session_verification_time_limited_action_required" = "Time limited action required, you have one minute to verify";
|
"a11y_session_verification_time_limited_action_required" = "Time limited action required, you have one minute to verify";
|
||||||
"a11y_show_password" = "Show password";
|
"a11y_show_password" = "Show password";
|
||||||
"a11y_start_call" = "Start a call";
|
"a11y_start_call" = "Start a call";
|
||||||
@@ -771,6 +773,8 @@
|
|||||||
"screen_start_chat_join_room_by_address_room_found" = "Matching room found";
|
"screen_start_chat_join_room_by_address_room_found" = "Matching room found";
|
||||||
"screen_start_chat_join_room_by_address_room_not_found" = "Room not found";
|
"screen_start_chat_join_room_by_address_room_not_found" = "Room not found";
|
||||||
"screen_start_chat_join_room_by_address_supporting_text" = "e.g. #room-name:matrix.org";
|
"screen_start_chat_join_room_by_address_supporting_text" = "e.g. #room-name:matrix.org";
|
||||||
|
"screen_static_location_sheet_timestamp_description" = "Shared %1$@";
|
||||||
|
"screen_static_location_sheet_title" = "On the map";
|
||||||
"screen_timeline_item_menu_send_failure_changed_identity" = "Message not sent because %1$@’s verified identity was reset.";
|
"screen_timeline_item_menu_send_failure_changed_identity" = "Message not sent because %1$@’s verified identity was reset.";
|
||||||
"screen_timeline_item_menu_send_failure_unsigned_device" = "Message not sent because %1$@ has not verified all devices.";
|
"screen_timeline_item_menu_send_failure_unsigned_device" = "Message not sent because %1$@ has not verified all devices.";
|
||||||
"screen_timeline_item_menu_send_failure_you_unsigned_device" = "Message not sent because you have not verified one or more of your devices.";
|
"screen_timeline_item_menu_send_failure_you_unsigned_device" = "Message not sent because you have not verified one or more of your devices.";
|
||||||
|
|||||||
@@ -85,9 +85,8 @@ class PinnedEventsTimelineFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
actionsSubject.send(.finished)
|
actionsSubject.send(.finished)
|
||||||
case .displayUser(let userID):
|
case .displayUser(let userID):
|
||||||
actionsSubject.send(.displayUser(userID: userID))
|
actionsSubject.send(.displayUser(userID: userID))
|
||||||
case .presentLocationViewer(let senderID, let geoURI):
|
case .presentLocationViewer(let location):
|
||||||
presentMapNavigator(senderID: senderID,
|
presentMapNavigator(location: location,
|
||||||
geoURI: geoURI,
|
|
||||||
timelineController: timelineController)
|
timelineController: timelineController)
|
||||||
case .displayMessageForwarding(let forwardingItem):
|
case .displayMessageForwarding(let forwardingItem):
|
||||||
presentMessageForwarding(with: forwardingItem)
|
presentMessageForwarding(with: forwardingItem)
|
||||||
@@ -100,13 +99,11 @@ class PinnedEventsTimelineFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func presentMapNavigator(senderID: String?,
|
private func presentMapNavigator(location: StaticLocationData,
|
||||||
geoURI: GeoURI,
|
|
||||||
timelineController: TimelineControllerProtocol) {
|
timelineController: TimelineControllerProtocol) {
|
||||||
let stackCoordinator = NavigationStackCoordinator()
|
let stackCoordinator = NavigationStackCoordinator()
|
||||||
|
|
||||||
let params = LocationSharingScreenCoordinatorParameters(interactionMode: .viewStatic(senderID: senderID,
|
let params = LocationSharingScreenCoordinatorParameters(interactionMode: .viewStatic(location),
|
||||||
geoURI: geoURI),
|
|
||||||
mapURLBuilder: flowParameters.appSettings.mapTilerConfiguration,
|
mapURLBuilder: flowParameters.appSettings.mapTilerConfiguration,
|
||||||
liveLocationSharingEnabled: flowParameters.appSettings.liveLocationSharingEnabled,
|
liveLocationSharingEnabled: flowParameters.appSettings.liveLocationSharingEnabled,
|
||||||
roomProxy: roomProxy,
|
roomProxy: roomProxy,
|
||||||
|
|||||||
@@ -703,9 +703,10 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
case .presentPollForm(let mode):
|
case .presentPollForm(let mode):
|
||||||
stateMachine.tryEvent(.presentPollForm(mode: mode),
|
stateMachine.tryEvent(.presentPollForm(mode: mode),
|
||||||
userInfo: EventUserInfo(animated: animated, timelineController: timelineController))
|
userInfo: EventUserInfo(animated: animated, timelineController: timelineController))
|
||||||
case .presentLocationViewer(let senderID, let geoURI):
|
case .presentLocationViewer(let location):
|
||||||
stateMachine.tryEvent(.presentMapNavigator(interactionMode: .viewStatic(senderID: senderID, geoURI: geoURI)),
|
stateMachine.tryEvent(.presentMapNavigator(interactionMode: .viewStatic(location)),
|
||||||
userInfo: EventUserInfo(animated: animated, timelineController: timelineController))
|
userInfo: EventUserInfo(animated: animated,
|
||||||
|
timelineController: timelineController))
|
||||||
case .presentRoomMemberDetails(userID: let userID):
|
case .presentRoomMemberDetails(userID: let userID):
|
||||||
stateMachine.tryEvent(.startMembersFlow(entryPoint: .roomMember(userID: userID)))
|
stateMachine.tryEvent(.startMembersFlow(entryPoint: .roomMember(userID: userID)))
|
||||||
case .presentMessageForwarding(let forwardingItem):
|
case .presentMessageForwarding(let forwardingItem):
|
||||||
@@ -788,9 +789,8 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
case .presentPollForm(let mode):
|
case .presentPollForm(let mode):
|
||||||
stateMachine.tryEvent(.presentPollForm(mode: mode),
|
stateMachine.tryEvent(.presentPollForm(mode: mode),
|
||||||
userInfo: EventUserInfo(animated: animated, timelineController: timelineController))
|
userInfo: EventUserInfo(animated: animated, timelineController: timelineController))
|
||||||
case .presentLocationViewer(let senderID, let geoURI):
|
case .presentLocationViewer(let location):
|
||||||
stateMachine.tryEvent(.presentMapNavigator(interactionMode: .viewStatic(senderID: senderID,
|
stateMachine.tryEvent(.presentMapNavigator(interactionMode: .viewStatic(location)),
|
||||||
geoURI: geoURI)),
|
|
||||||
userInfo: EventUserInfo(animated: animated,
|
userInfo: EventUserInfo(animated: animated,
|
||||||
timelineController: timelineController))
|
timelineController: timelineController))
|
||||||
case .presentEmojiPicker(let itemID, let selectedEmojis):
|
case .presentEmojiPicker(let itemID, let selectedEmojis):
|
||||||
|
|||||||
@@ -62,6 +62,8 @@ internal enum L10n {
|
|||||||
}
|
}
|
||||||
/// PIN field
|
/// PIN field
|
||||||
internal static var a11yPinField: String { return L10n.tr("Localizable", "a11y_pin_field") }
|
internal static var a11yPinField: String { return L10n.tr("Localizable", "a11y_pin_field") }
|
||||||
|
/// Pinned location
|
||||||
|
internal static var a11yPinnedLocation: String { return L10n.tr("Localizable", "a11y_pinned_location") }
|
||||||
/// Play
|
/// Play
|
||||||
internal static var a11yPlay: String { return L10n.tr("Localizable", "a11y_play") }
|
internal static var a11yPlay: String { return L10n.tr("Localizable", "a11y_play") }
|
||||||
/// Playback speed
|
/// Playback speed
|
||||||
@@ -110,6 +112,8 @@ internal enum L10n {
|
|||||||
}
|
}
|
||||||
/// Send files
|
/// Send files
|
||||||
internal static var a11ySendFiles: String { return L10n.tr("Localizable", "a11y_send_files") }
|
internal static var a11ySendFiles: String { return L10n.tr("Localizable", "a11y_send_files") }
|
||||||
|
/// Sender location
|
||||||
|
internal static var a11ySenderLocation: String { return L10n.tr("Localizable", "a11y_sender_location") }
|
||||||
/// Time limited action required, you have one minute to verify
|
/// Time limited action required, you have one minute to verify
|
||||||
internal static var a11ySessionVerificationTimeLimitedActionRequired: String { return L10n.tr("Localizable", "a11y_session_verification_time_limited_action_required") }
|
internal static var a11ySessionVerificationTimeLimitedActionRequired: String { return L10n.tr("Localizable", "a11y_session_verification_time_limited_action_required") }
|
||||||
/// Show password
|
/// Show password
|
||||||
@@ -3279,6 +3283,12 @@ internal enum L10n {
|
|||||||
internal static var screenStartChatJoinRoomByAddressRoomNotFound: String { return L10n.tr("Localizable", "screen_start_chat_join_room_by_address_room_not_found") }
|
internal static var screenStartChatJoinRoomByAddressRoomNotFound: String { return L10n.tr("Localizable", "screen_start_chat_join_room_by_address_room_not_found") }
|
||||||
/// e.g. #room-name:matrix.org
|
/// e.g. #room-name:matrix.org
|
||||||
internal static var screenStartChatJoinRoomByAddressSupportingText: String { return L10n.tr("Localizable", "screen_start_chat_join_room_by_address_supporting_text") }
|
internal static var screenStartChatJoinRoomByAddressSupportingText: String { return L10n.tr("Localizable", "screen_start_chat_join_room_by_address_supporting_text") }
|
||||||
|
/// Shared %1$@
|
||||||
|
internal static func screenStaticLocationSheetTimestampDescription(_ p1: Any) -> String {
|
||||||
|
return L10n.tr("Localizable", "screen_static_location_sheet_timestamp_description", String(describing: p1))
|
||||||
|
}
|
||||||
|
/// On the map
|
||||||
|
internal static var screenStaticLocationSheetTitle: String { return L10n.tr("Localizable", "screen_static_location_sheet_title") }
|
||||||
/// Message not sent because %1$@’s verified identity was reset.
|
/// Message not sent because %1$@’s verified identity was reset.
|
||||||
internal static func screenTimelineItemMenuSendFailureChangedIdentity(_ p1: Any) -> String {
|
internal static func screenTimelineItemMenuSendFailureChangedIdentity(_ p1: Any) -> String {
|
||||||
return L10n.tr("Localizable", "screen_timeline_item_menu_send_failure_changed_identity", String(describing: p1))
|
return L10n.tr("Localizable", "screen_timeline_item_menu_send_failure_changed_identity", String(describing: p1))
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ struct RowDivider: ViewModifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension View {
|
extension View {
|
||||||
func rowDivider(alignment: Alignment = .bottom, horizontalInsets: CGFloat) -> some View {
|
func rowDivider(alignment: Alignment = .bottom, horizontalInsets: CGFloat = .zero) -> some View {
|
||||||
modifier(RowDivider(alignment: alignment, horizontalInsets: horizontalInsets))
|
modifier(RowDivider(alignment: alignment, horizontalInsets: horizontalInsets))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ enum TestablePreviewsDictionary {
|
|||||||
"LinkNewDeviceScreen_Previews" : LinkNewDeviceScreen_Previews.self,
|
"LinkNewDeviceScreen_Previews" : LinkNewDeviceScreen_Previews.self,
|
||||||
"LoadableImage_Previews" : LoadableImage_Previews.self,
|
"LoadableImage_Previews" : LoadableImage_Previews.self,
|
||||||
"LocationMarkerView_Previews" : LocationMarkerView_Previews.self,
|
"LocationMarkerView_Previews" : LocationMarkerView_Previews.self,
|
||||||
|
"LocationPickerSheet_Previews" : LocationPickerSheet_Previews.self,
|
||||||
"LocationRoomTimelineView_Previews" : LocationRoomTimelineView_Previews.self,
|
"LocationRoomTimelineView_Previews" : LocationRoomTimelineView_Previews.self,
|
||||||
"LocationSharingScreen_Previews" : LocationSharingScreen_Previews.self,
|
"LocationSharingScreen_Previews" : LocationSharingScreen_Previews.self,
|
||||||
"LoginScreen_Previews" : LoginScreen_Previews.self,
|
"LoginScreen_Previews" : LoginScreen_Previews.self,
|
||||||
@@ -182,6 +183,7 @@ enum TestablePreviewsDictionary {
|
|||||||
"StackedAvatarsView_Previews" : StackedAvatarsView_Previews.self,
|
"StackedAvatarsView_Previews" : StackedAvatarsView_Previews.self,
|
||||||
"StartChatScreen_Previews" : StartChatScreen_Previews.self,
|
"StartChatScreen_Previews" : StartChatScreen_Previews.self,
|
||||||
"StateRoomTimelineView_Previews" : StateRoomTimelineView_Previews.self,
|
"StateRoomTimelineView_Previews" : StateRoomTimelineView_Previews.self,
|
||||||
|
"StaticLocationSheet_Previews" : StaticLocationSheet_Previews.self,
|
||||||
"StickerRoomTimelineView_Previews" : StickerRoomTimelineView_Previews.self,
|
"StickerRoomTimelineView_Previews" : StickerRoomTimelineView_Previews.self,
|
||||||
"SwipeRightAction_Previews" : SwipeRightAction_Previews.self,
|
"SwipeRightAction_Previews" : SwipeRightAction_Previews.self,
|
||||||
"SwipeToReplyView_Previews" : SwipeToReplyView_Previews.self,
|
"SwipeToReplyView_Previews" : SwipeToReplyView_Previews.self,
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import CoreLocation
|
import CoreLocation
|
||||||
import Foundation
|
import Foundation
|
||||||
|
import MatrixRustSDK
|
||||||
|
|
||||||
enum LocationSharingViewError: Error, Hashable {
|
enum LocationSharingViewError: Error, Hashable {
|
||||||
case missingAuthorization
|
case missingAuthorization
|
||||||
@@ -21,25 +22,18 @@ enum LocationSharingScreenViewModelAction {
|
|||||||
|
|
||||||
enum LocationSharingInteractionMode: Hashable {
|
enum LocationSharingInteractionMode: Hashable {
|
||||||
case picker
|
case picker
|
||||||
case viewStatic(senderID: String?, geoURI: GeoURI)
|
case viewStatic(StaticLocationData)
|
||||||
|
|
||||||
var canShowAvatar: Bool {
|
|
||||||
switch self {
|
|
||||||
case .picker, .viewStatic(.some(_), _):
|
|
||||||
true
|
|
||||||
default:
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct LocationSharingScreenViewState: BindableState {
|
struct LocationSharingScreenViewState: BindableState {
|
||||||
init(interactionMode: LocationSharingInteractionMode,
|
init(interactionMode: LocationSharingInteractionMode,
|
||||||
mapURLBuilder: MapTilerURLBuilderProtocol,
|
mapURLBuilder: MapTilerURLBuilderProtocol,
|
||||||
showLiveLocationSharingButton: Bool) {
|
showLiveLocationSharingButton: Bool,
|
||||||
|
ownUserID: String) {
|
||||||
self.interactionMode = interactionMode
|
self.interactionMode = interactionMode
|
||||||
self.mapURLBuilder = mapURLBuilder
|
self.mapURLBuilder = mapURLBuilder
|
||||||
self.showLiveLocationSharingButton = showLiveLocationSharingButton
|
self.showLiveLocationSharingButton = showLiveLocationSharingButton
|
||||||
|
self.ownUserID = ownUserID
|
||||||
|
|
||||||
bindings.showsUserLocationMode = switch interactionMode {
|
bindings.showsUserLocationMode = switch interactionMode {
|
||||||
case .picker: .showAndFollow
|
case .picker: .showAndFollow
|
||||||
@@ -50,6 +44,7 @@ struct LocationSharingScreenViewState: BindableState {
|
|||||||
let interactionMode: LocationSharingInteractionMode
|
let interactionMode: LocationSharingInteractionMode
|
||||||
let mapURLBuilder: MapTilerURLBuilderProtocol
|
let mapURLBuilder: MapTilerURLBuilderProtocol
|
||||||
let showLiveLocationSharingButton: Bool
|
let showLiveLocationSharingButton: Bool
|
||||||
|
let ownUserID: String
|
||||||
|
|
||||||
var bindings = LocationSharingScreenBindings(showsUserLocationMode: .hide)
|
var bindings = LocationSharingScreenBindings(showsUserLocationMode: .hide)
|
||||||
|
|
||||||
@@ -62,9 +57,9 @@ struct LocationSharingScreenViewState: BindableState {
|
|||||||
switch interactionMode {
|
switch interactionMode {
|
||||||
case .picker:
|
case .picker:
|
||||||
// middle point in Europe, to be used if the users location is not yet known
|
// middle point in Europe, to be used if the users location is not yet known
|
||||||
return .init(latitude: 49.843, longitude: 9.902056)
|
.init(latitude: 49.843, longitude: 9.902056)
|
||||||
case .viewStatic(_, let geoURI):
|
case .viewStatic(let location):
|
||||||
return .init(latitude: geoURI.latitude, longitude: geoURI.longitude)
|
.init(latitude: location.geoURI.latitude, longitude: location.geoURI.longitude)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,15 +71,6 @@ struct LocationSharingScreenViewState: BindableState {
|
|||||||
false
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var showShareAction: Bool {
|
|
||||||
switch interactionMode {
|
|
||||||
case .picker:
|
|
||||||
return false
|
|
||||||
case .viewStatic:
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var isLocationLoading: Bool {
|
var isLocationLoading: Bool {
|
||||||
!bindings.hasLoadedUserLocation && bindings.isLocationAuthorized != false
|
!bindings.hasLoadedUserLocation && bindings.isLocationAuthorized != false
|
||||||
@@ -105,12 +91,12 @@ struct LocationSharingScreenViewState: BindableState {
|
|||||||
|
|
||||||
var userProfile: UserProfileProxy?
|
var userProfile: UserProfileProxy?
|
||||||
|
|
||||||
var shownUserProfile: UserProfileProxy? {
|
var staticLocationMarkerUserProfile: UserProfileProxy? {
|
||||||
switch interactionMode {
|
switch interactionMode {
|
||||||
case .picker:
|
case .picker:
|
||||||
isSharingUserLocation ? userProfile : nil
|
isSharingUserLocation ? userProfile : nil
|
||||||
case .viewStatic:
|
case .viewStatic(let location):
|
||||||
userProfile
|
location.kind == .sender ? userProfile : nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -172,3 +158,10 @@ extension AlertInfo where T == LocationSharingViewError {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct StaticLocationData: Hashable {
|
||||||
|
let sender: TimelineItemSender
|
||||||
|
let geoURI: GeoURI
|
||||||
|
let kind: StaticLocationKind
|
||||||
|
let timestamp: Date
|
||||||
|
}
|
||||||
|
|||||||
@@ -37,13 +37,12 @@ class LocationSharingScreenViewModel: LocationSharingScreenViewModelType, Locati
|
|||||||
|
|
||||||
super.init(initialViewState: .init(interactionMode: interactionMode,
|
super.init(initialViewState: .init(interactionMode: interactionMode,
|
||||||
mapURLBuilder: mapURLBuilder,
|
mapURLBuilder: mapURLBuilder,
|
||||||
showLiveLocationSharingButton: liveLocationSharingEnabled),
|
showLiveLocationSharingButton: liveLocationSharingEnabled,
|
||||||
|
ownUserID: roomProxy.ownUserID),
|
||||||
mediaProvider: mediaProvider)
|
mediaProvider: mediaProvider)
|
||||||
|
|
||||||
if interactionMode.canShowAvatar {
|
updateShownUserProfile(members: roomProxy.membersPublisher.value)
|
||||||
updateShownUserProfile(members: roomProxy.membersPublisher.value)
|
setupSubscriptions()
|
||||||
setupSubscriptions()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override func process(viewAction: LocationSharingScreenViewAction) {
|
override func process(viewAction: LocationSharingScreenViewAction) {
|
||||||
@@ -86,14 +85,12 @@ class LocationSharingScreenViewModel: LocationSharingScreenViewModelType, Locati
|
|||||||
} else {
|
} else {
|
||||||
state.userProfile = .init(userID: roomProxy.ownUserID)
|
state.userProfile = .init(userID: roomProxy.ownUserID)
|
||||||
}
|
}
|
||||||
case .viewStatic(.some(let senderID), _):
|
case .viewStatic(let location):
|
||||||
if let sender = members.first(where: { $0.userID == senderID }).map(UserProfileProxy.init) {
|
if let sender = members.first(where: { $0.userID == location.sender.id }).map(UserProfileProxy.init) {
|
||||||
state.userProfile = sender
|
state.userProfile = sender
|
||||||
} else {
|
} else {
|
||||||
state.userProfile = .init(userID: senderID)
|
state.userProfile = .init(sender: location.sender)
|
||||||
}
|
}
|
||||||
default:
|
|
||||||
state.userProfile = nil
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,3 +124,39 @@ class LocationSharingScreenViewModel: LocationSharingScreenViewModelType, Locati
|
|||||||
"\(Self.self)-Status"
|
"\(Self.self)-Status"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension LocationSharingScreenViewModel {
|
||||||
|
enum MockType {
|
||||||
|
case picker
|
||||||
|
case staticSenderLocation
|
||||||
|
case staticPinLocation
|
||||||
|
}
|
||||||
|
|
||||||
|
static func mock(type: MockType, senderID: String = "@dan:matrix.org") -> LocationSharingScreenViewModel {
|
||||||
|
let interactionMode: LocationSharingInteractionMode = switch type {
|
||||||
|
case .picker:
|
||||||
|
.picker
|
||||||
|
case .staticPinLocation:
|
||||||
|
.viewStatic(.init(sender: .init(id: senderID),
|
||||||
|
geoURI: .init(latitude: 41.9027835,
|
||||||
|
longitude: 12.4963655),
|
||||||
|
kind: .pin,
|
||||||
|
timestamp: .mock))
|
||||||
|
case .staticSenderLocation:
|
||||||
|
.viewStatic(.init(sender: .init(id: senderID),
|
||||||
|
geoURI: .init(latitude: 41.9027835,
|
||||||
|
longitude: 12.4963655),
|
||||||
|
kind: .sender,
|
||||||
|
timestamp: .mock))
|
||||||
|
}
|
||||||
|
|
||||||
|
return LocationSharingScreenViewModel(interactionMode: interactionMode,
|
||||||
|
mapURLBuilder: ServiceLocator.shared.settings.mapTilerConfiguration,
|
||||||
|
liveLocationSharingEnabled: true,
|
||||||
|
roomProxy: JoinedRoomProxyMock(.init()),
|
||||||
|
timelineController: MockTimelineController(),
|
||||||
|
analytics: ServiceLocator.shared.analytics,
|
||||||
|
userIndicatorController: UserIndicatorControllerMock(),
|
||||||
|
mediaProvider: MediaProviderMock(configuration: .init()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
//
|
||||||
|
// Copyright 2026 Element Creations Ltd.
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||||
|
// Please see LICENSE files in the repository root for full details.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Compound
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
struct LocationPickerSheet: View {
|
||||||
|
@Bindable var context: LocationSharingScreenViewModel.Context
|
||||||
|
@State private var height: CGFloat = .zero
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
VStack(alignment: .leading, spacing: 0) {
|
||||||
|
Button {
|
||||||
|
context.send(viewAction: .selectLocation)
|
||||||
|
} label: {
|
||||||
|
if context.viewState.isSharingUserLocation {
|
||||||
|
LocationPickerLabel(text: L10n.screenShareMyLocationAction,
|
||||||
|
icon: \.locationNavigatorCentred,
|
||||||
|
iconColor: .compound.iconSecondary)
|
||||||
|
} else {
|
||||||
|
LocationPickerLabel(text: L10n.screenShareThisLocationAction,
|
||||||
|
icon: \.locationNavigator,
|
||||||
|
iconColor: .compound.iconSecondary)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if context.viewState.showLiveLocationSharingButton {
|
||||||
|
Button { } label: {
|
||||||
|
LocationPickerLabel(text: L10n.actionShareLiveLocation,
|
||||||
|
icon: \.locationPinSolid,
|
||||||
|
iconColor: .compound.iconAccentPrimary)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.font(.compound.bodyLG)
|
||||||
|
.foregroundStyle(.compound.textPrimary)
|
||||||
|
.padding(.top, 38)
|
||||||
|
.readHeight($height)
|
||||||
|
.interactiveDismissDisabled()
|
||||||
|
.presentationBackground(.compound.bgCanvasDefault)
|
||||||
|
.presentationBackgroundInteraction(.enabled)
|
||||||
|
.presentationDragIndicator(.hidden)
|
||||||
|
.presentationDetents([.height(height)])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private struct LocationPickerLabel: View {
|
||||||
|
let text: String
|
||||||
|
let icon: KeyPath<CompoundIcons, Image>
|
||||||
|
let iconColor: Color
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
Label {
|
||||||
|
Text(text)
|
||||||
|
.frame(maxWidth: .infinity, alignment: .leading)
|
||||||
|
.padding(.vertical, 14)
|
||||||
|
.rowDivider(alignment: .top)
|
||||||
|
.padding(.trailing, 16)
|
||||||
|
} icon: {
|
||||||
|
CompoundIcon(icon)
|
||||||
|
.foregroundStyle(iconColor)
|
||||||
|
}
|
||||||
|
.padding(.leading, 16)
|
||||||
|
.frame(maxWidth: .infinity, alignment: .leading)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct LocationPickerSheet_Previews: PreviewProvider, TestablePreview {
|
||||||
|
static let viewModel = LocationSharingScreenViewModel.mock(type: .picker)
|
||||||
|
|
||||||
|
static var previews: some View {
|
||||||
|
LocationPickerSheet(context: viewModel.context)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,15 +13,19 @@ struct LocationSharingScreen: View {
|
|||||||
@Bindable var context: LocationSharingScreenViewModel.Context
|
@Bindable var context: LocationSharingScreenViewModel.Context
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
if context.viewState.isLocationPickerMode {
|
switch context.viewState.interactionMode {
|
||||||
|
case .picker:
|
||||||
mainContent
|
mainContent
|
||||||
.sheet(isPresented: .constant(true)) {
|
.sheet(isPresented: .constant(true)) {
|
||||||
sharingOptionsSheet
|
LocationPickerSheet(context: context)
|
||||||
.alert(item: $context.alertInfo)
|
.alert(item: $context.alertInfo)
|
||||||
}
|
}
|
||||||
} else {
|
case .viewStatic:
|
||||||
mainContent
|
mainContent
|
||||||
.alert(item: $context.alertInfo)
|
.sheet(isPresented: .constant(true)) {
|
||||||
|
StaticLocationSheet(context: context)
|
||||||
|
.alert(item: $context.alertInfo)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,7 +55,7 @@ struct LocationSharingScreen: View {
|
|||||||
.ignoresSafeArea(.all, edges: mapSafeAreaEdges)
|
.ignoresSafeArea(.all, edges: mapSafeAreaEdges)
|
||||||
|
|
||||||
if context.viewState.isLocationPickerMode {
|
if context.viewState.isLocationPickerMode {
|
||||||
LocationMarkerView(userProfile: context.viewState.shownUserProfile, mediaProvider: context.mediaProvider)
|
LocationMarkerView(userProfile: context.viewState.staticLocationMarkerUserProfile, mediaProvider: context.mediaProvider)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.overlay(alignment: .topTrailing) {
|
.overlay(alignment: .topTrailing) {
|
||||||
@@ -61,32 +65,21 @@ struct LocationSharingScreen: View {
|
|||||||
|
|
||||||
@ToolbarContentBuilder
|
@ToolbarContentBuilder
|
||||||
private var toolbar: some ToolbarContent {
|
private var toolbar: some ToolbarContent {
|
||||||
ToolbarItem(placement: context.viewState.showShareAction ? .topBarLeading : .topBarTrailing) {
|
ToolbarItem(placement: .primaryAction) {
|
||||||
ToolbarButton(role: .close) {
|
ToolbarButton(role: .close) {
|
||||||
context.send(viewAction: .close)
|
context.send(viewAction: .close)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if context.viewState.showShareAction {
|
|
||||||
ToolbarItem(placement: .topBarTrailing) {
|
|
||||||
Button {
|
|
||||||
context.showShareSheet = true
|
|
||||||
} label: {
|
|
||||||
Image(systemName: "square.and.arrow.up")
|
|
||||||
}
|
|
||||||
.popover(isPresented: $context.showShareSheet) { shareSheet }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private var mapOptions: MapLibreMapView.Options {
|
private var mapOptions: MapLibreMapView.Options {
|
||||||
var annotations: [String: LocationAnnotation] = [:]
|
var annotations: [String: LocationAnnotation] = [:]
|
||||||
if !context.viewState.isLocationPickerMode {
|
if !context.viewState.isLocationPickerMode {
|
||||||
let id = context.viewState.shownUserProfile?.userID ?? UUID().uuidString
|
let id = context.viewState.staticLocationMarkerUserProfile?.userID ?? UUID().uuidString
|
||||||
let annotation = LocationAnnotation(id: id,
|
let annotation = LocationAnnotation(id: id,
|
||||||
coordinate: context.viewState.initialMapCenter,
|
coordinate: context.viewState.initialMapCenter,
|
||||||
anchorPoint: .bottomCenter) {
|
anchorPoint: .bottomCenter) {
|
||||||
LocationMarkerView(userProfile: context.viewState.shownUserProfile, mediaProvider: context.mediaProvider)
|
LocationMarkerView(userProfile: context.viewState.staticLocationMarkerUserProfile, mediaProvider: context.mediaProvider)
|
||||||
}
|
}
|
||||||
annotations[id] = annotation
|
annotations[id] = annotation
|
||||||
}
|
}
|
||||||
@@ -135,7 +128,7 @@ struct LocationSharingScreen: View {
|
|||||||
@ViewBuilder
|
@ViewBuilder
|
||||||
private var shareSheet: some View {
|
private var shareSheet: some View {
|
||||||
let location = context.viewState.initialMapCenter
|
let location = context.viewState.initialMapCenter
|
||||||
let senderName = context.viewState.shownUserProfile?.displayName
|
let senderName = context.viewState.staticLocationMarkerUserProfile?.displayName ?? context.viewState.staticLocationMarkerUserProfile?.userID
|
||||||
AppActivityView(activityItems: [ShareToMapsAppActivity.MapsAppType.apple.activityURL(for: location, senderName: senderName)],
|
AppActivityView(activityItems: [ShareToMapsAppActivity.MapsAppType.apple.activityURL(for: location, senderName: senderName)],
|
||||||
applicationActivities: ShareToMapsAppActivity.MapsAppType.allCases.map { ShareToMapsAppActivity(type: $0, location: location, senderName: senderName) })
|
applicationActivities: ShareToMapsAppActivity.MapsAppType.allCases.map { ShareToMapsAppActivity(type: $0, location: location, senderName: senderName) })
|
||||||
.edgesIgnoringSafeArea(.bottom)
|
.edgesIgnoringSafeArea(.bottom)
|
||||||
@@ -151,95 +144,16 @@ struct LocationSharingScreen: View {
|
|||||||
.sheet
|
.sheet
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@State private var sharingOptionsSheetHeight: CGFloat = .zero
|
|
||||||
|
|
||||||
private var sharingOptionsSheet: some View {
|
|
||||||
VStack(alignment: .leading, spacing: 0) {
|
|
||||||
Button {
|
|
||||||
context.send(viewAction: .selectLocation)
|
|
||||||
} label: {
|
|
||||||
if context.viewState.isSharingUserLocation {
|
|
||||||
LocationSharingLabel(text: L10n.screenShareMyLocationAction,
|
|
||||||
icon: \.locationNavigatorCentred,
|
|
||||||
iconColor: .compound.iconSecondary)
|
|
||||||
} else {
|
|
||||||
LocationSharingLabel(text: L10n.screenShareThisLocationAction,
|
|
||||||
icon: \.locationNavigator,
|
|
||||||
iconColor: .compound.iconSecondary)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if context.viewState.showLiveLocationSharingButton {
|
|
||||||
Button { } label: {
|
|
||||||
LocationSharingLabel(text: L10n.actionShareLiveLocation,
|
|
||||||
icon: \.locationPinSolid,
|
|
||||||
iconColor: .compound.iconAccentPrimary)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.font(.compound.bodyLG)
|
|
||||||
.foregroundStyle(.compound.textPrimary)
|
|
||||||
.padding(.top, 38)
|
|
||||||
.readHeight($sharingOptionsSheetHeight)
|
|
||||||
.interactiveDismissDisabled()
|
|
||||||
.presentationBackground(.compound.bgCanvasDefault)
|
|
||||||
.presentationBackgroundInteraction(.enabled)
|
|
||||||
.presentationDragIndicator(.hidden)
|
|
||||||
.presentationDetents([.height(sharingOptionsSheetHeight)])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private struct LocationSharingLabel: View {
|
|
||||||
let text: String
|
|
||||||
let icon: KeyPath<CompoundIcons, Image>
|
|
||||||
let iconColor: Color
|
|
||||||
|
|
||||||
var body: some View {
|
|
||||||
Label {
|
|
||||||
Text(text)
|
|
||||||
.frame(maxWidth: .infinity, alignment: .leading)
|
|
||||||
.padding(.vertical, 14)
|
|
||||||
.rowDivider(alignment: .top, horizontalInsets: 16.0)
|
|
||||||
} icon: {
|
|
||||||
CompoundIcon(icon)
|
|
||||||
.foregroundStyle(iconColor)
|
|
||||||
}
|
|
||||||
.padding(.leading, 16)
|
|
||||||
.frame(maxWidth: .infinity, alignment: .leading)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Previews
|
// MARK: - Previews
|
||||||
|
|
||||||
struct LocationSharingScreen_Previews: PreviewProvider, TestablePreview {
|
struct LocationSharingScreen_Previews: PreviewProvider, TestablePreview {
|
||||||
static let viewModel = LocationSharingScreenViewModel(interactionMode: .viewStatic(senderID: "@dan:matrix.org", geoURI: .init(latitude: 41.9027835,
|
static let viewModel = LocationSharingScreenViewModel.mock(type: .staticSenderLocation)
|
||||||
longitude: 12.4963655)),
|
|
||||||
mapURLBuilder: ServiceLocator.shared.settings.mapTilerConfiguration,
|
|
||||||
liveLocationSharingEnabled: true,
|
|
||||||
roomProxy: JoinedRoomProxyMock(.init()),
|
|
||||||
timelineController: MockTimelineController(),
|
|
||||||
analytics: ServiceLocator.shared.analytics,
|
|
||||||
userIndicatorController: UserIndicatorControllerMock(),
|
|
||||||
mediaProvider: MediaProviderMock(configuration: .init()))
|
|
||||||
|
|
||||||
static let pinViewModel = LocationSharingScreenViewModel(interactionMode: .viewStatic(senderID: nil, geoURI: .init(latitude: 41.9027835,
|
static let pinViewModel = LocationSharingScreenViewModel.mock(type: .staticPinLocation)
|
||||||
longitude: 12.4963655)),
|
|
||||||
mapURLBuilder: ServiceLocator.shared.settings.mapTilerConfiguration,
|
|
||||||
liveLocationSharingEnabled: true,
|
|
||||||
roomProxy: JoinedRoomProxyMock(.init()),
|
|
||||||
timelineController: MockTimelineController(),
|
|
||||||
analytics: ServiceLocator.shared.analytics,
|
|
||||||
userIndicatorController: UserIndicatorControllerMock(),
|
|
||||||
mediaProvider: MediaProviderMock(configuration: .init()))
|
|
||||||
|
|
||||||
static let pickerViewModel = LocationSharingScreenViewModel(interactionMode: .picker,
|
static let pickerViewModel = LocationSharingScreenViewModel.mock(type: .picker)
|
||||||
mapURLBuilder: ServiceLocator.shared.settings.mapTilerConfiguration,
|
|
||||||
liveLocationSharingEnabled: true,
|
|
||||||
roomProxy: JoinedRoomProxyMock(.init()),
|
|
||||||
timelineController: MockTimelineController(),
|
|
||||||
analytics: ServiceLocator.shared.analytics,
|
|
||||||
userIndicatorController: UserIndicatorControllerMock(),
|
|
||||||
mediaProvider: MediaProviderMock(configuration: .init()))
|
|
||||||
|
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
ElementNavigationStack {
|
ElementNavigationStack {
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
//
|
||||||
|
// Copyright 2026 Element Creations Ltd.
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||||
|
// Please see LICENSE files in the repository root for full details.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Compound
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
struct StaticLocationSheet: View {
|
||||||
|
@Bindable var context: LocationSharingScreenViewModel.Context
|
||||||
|
@State private var height = CGFloat.zero
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
mainContent
|
||||||
|
.readHeight($height)
|
||||||
|
.interactiveDismissDisabled()
|
||||||
|
.presentationBackground(.compound.bgCanvasDefault)
|
||||||
|
.presentationBackgroundInteraction(.enabled)
|
||||||
|
.presentationDragIndicator(.hidden)
|
||||||
|
.presentationDetents([.height(height)])
|
||||||
|
}
|
||||||
|
|
||||||
|
@ViewBuilder
|
||||||
|
private var mainContent: some View {
|
||||||
|
if case let .viewStatic(location) = context.viewState.interactionMode,
|
||||||
|
let userProfile = context.viewState.userProfile {
|
||||||
|
VStack(spacing: 0) {
|
||||||
|
Text(L10n.screenStaticLocationSheetTitle)
|
||||||
|
.foregroundStyle(.compound.textPrimary)
|
||||||
|
.font(.compound.bodyLGSemibold)
|
||||||
|
.padding(.top, 29)
|
||||||
|
.padding(.bottom, 25)
|
||||||
|
Button {
|
||||||
|
context.showShareSheet = true
|
||||||
|
} label: {
|
||||||
|
UserLocationCell(profile: userProfile,
|
||||||
|
isOwnUser: userProfile.userID == context.viewState.ownUserID,
|
||||||
|
isUserLocation: location.kind == .sender,
|
||||||
|
timestamp: location.timestamp,
|
||||||
|
mediaProvider: context.mediaProvider)
|
||||||
|
}
|
||||||
|
accessibilityHint(L10n.actionShare)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// This may be reused for live location sharing sheet in the future with some tweaks
|
||||||
|
private struct UserLocationCell: View {
|
||||||
|
let profile: UserProfileProxy
|
||||||
|
let isOwnUser: Bool
|
||||||
|
let isUserLocation: Bool
|
||||||
|
let timestamp: Date
|
||||||
|
var mediaProvider: MediaProviderProtocol?
|
||||||
|
|
||||||
|
private var name: String {
|
||||||
|
isOwnUser ? L10n.commonYou : profile.displayName ?? profile.userID
|
||||||
|
}
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
HStack(spacing: 12) {
|
||||||
|
LoadableAvatarImage(url: profile.avatarURL,
|
||||||
|
name: profile.displayName,
|
||||||
|
contentID: profile.id,
|
||||||
|
avatarSize: .user(on: .map),
|
||||||
|
mediaProvider: mediaProvider)
|
||||||
|
.accessibilityHidden(true)
|
||||||
|
|
||||||
|
HStack(spacing: 12) {
|
||||||
|
VStack(alignment: .leading, spacing: 0) {
|
||||||
|
Text(name)
|
||||||
|
.font(.compound.bodyLG)
|
||||||
|
.foregroundStyle(.compound.textPrimary)
|
||||||
|
HStack(spacing: 4) {
|
||||||
|
CompoundIcon(isUserLocation ? \.locationNavigatorCentred : \.locationNavigator,
|
||||||
|
size: .xSmall,
|
||||||
|
relativeTo: .compound.bodyMD)
|
||||||
|
.foregroundStyle(.compound.iconSecondary)
|
||||||
|
.accessibilityLabel(isUserLocation ? L10n.a11ySenderLocation : L10n.a11yPinnedLocation)
|
||||||
|
Text(L10n.screenStaticLocationSheetTimestampDescription(timestamp.formatted(.relative(presentation: .named))))
|
||||||
|
.font(.compound.bodyMD)
|
||||||
|
.foregroundStyle(.compound.textSecondary)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer()
|
||||||
|
CompoundIcon(\.shareIos)
|
||||||
|
.foregroundStyle(.compound.iconSecondary)
|
||||||
|
.accessibilityHidden(true)
|
||||||
|
}
|
||||||
|
.padding(.vertical, 12)
|
||||||
|
.rowDivider(alignment: .top)
|
||||||
|
}
|
||||||
|
.padding(.horizontal, 16)
|
||||||
|
.accessibilityElement(children: .combine)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct StaticLocationSheet_Previews: PreviewProvider, TestablePreview {
|
||||||
|
static let viewModel = LocationSharingScreenViewModel.mock(type: .staticSenderLocation, senderID: RoomMemberProxyMock.mockMe.userID)
|
||||||
|
|
||||||
|
static let pinViewModel = LocationSharingScreenViewModel.mock(type: .staticPinLocation)
|
||||||
|
|
||||||
|
static var previews: some View {
|
||||||
|
StaticLocationSheet(context: viewModel.context)
|
||||||
|
.previewDisplayName("Static own location")
|
||||||
|
StaticLocationSheet(context: pinViewModel.context)
|
||||||
|
.previewDisplayName("Static pin location")
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-4
@@ -26,7 +26,7 @@ struct PinnedEventsTimelineScreenCoordinatorParameters {
|
|||||||
enum PinnedEventsTimelineScreenCoordinatorAction {
|
enum PinnedEventsTimelineScreenCoordinatorAction {
|
||||||
case dismiss
|
case dismiss
|
||||||
case displayUser(userID: String)
|
case displayUser(userID: String)
|
||||||
case presentLocationViewer(senderID: String?, geoURI: GeoURI)
|
case presentLocationViewer(StaticLocationData)
|
||||||
case displayMessageForwarding(forwardingItem: MessageForwardingItem)
|
case displayMessageForwarding(forwardingItem: MessageForwardingItem)
|
||||||
case displayRoomScreenWithFocussedPin(eventID: String, threadRootEventID: String?)
|
case displayRoomScreenWithFocussedPin(eventID: String, threadRootEventID: String?)
|
||||||
}
|
}
|
||||||
@@ -87,9 +87,8 @@ final class PinnedEventsTimelineScreenCoordinator: CoordinatorProtocol {
|
|||||||
actionsSubject.send(.displayMessageForwarding(forwardingItem: forwardingItem))
|
actionsSubject.send(.displayMessageForwarding(forwardingItem: forwardingItem))
|
||||||
case .displayMediaPreview(let mediaPreviewViewModel):
|
case .displayMediaPreview(let mediaPreviewViewModel):
|
||||||
viewModel.displayMediaPreview(mediaPreviewViewModel)
|
viewModel.displayMediaPreview(mediaPreviewViewModel)
|
||||||
case .displayLocation(let senderID, let geoURI):
|
case .displayLocation(let location):
|
||||||
actionsSubject.send(.presentLocationViewer(senderID: senderID,
|
actionsSubject.send(.presentLocationViewer(location))
|
||||||
geoURI: geoURI))
|
|
||||||
case .viewInRoomTimeline(let eventID, let threadRootEventID):
|
case .viewInRoomTimeline(let eventID, let threadRootEventID):
|
||||||
actionsSubject.send(.displayRoomScreenWithFocussedPin(eventID: eventID, threadRootEventID: threadRootEventID))
|
actionsSubject.send(.displayRoomScreenWithFocussedPin(eventID: eventID, threadRootEventID: threadRootEventID))
|
||||||
// These other actions will not be handled in this view
|
// These other actions will not be handled in this view
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ enum RoomScreenCoordinatorAction {
|
|||||||
case presentRoomDetails
|
case presentRoomDetails
|
||||||
case presentLocationPicker
|
case presentLocationPicker
|
||||||
case presentPollForm(mode: PollFormMode)
|
case presentPollForm(mode: PollFormMode)
|
||||||
case presentLocationViewer(senderID: String?, geoURI: GeoURI)
|
case presentLocationViewer(StaticLocationData)
|
||||||
case presentEmojiPicker(itemID: TimelineItemIdentifier, selectedEmojis: Set<String>)
|
case presentEmojiPicker(itemID: TimelineItemIdentifier, selectedEmojis: Set<String>)
|
||||||
case presentRoomMemberDetails(userID: String)
|
case presentRoomMemberDetails(userID: String)
|
||||||
case presentMessageForwarding(forwardingItem: MessageForwardingItem)
|
case presentMessageForwarding(forwardingItem: MessageForwardingItem)
|
||||||
@@ -137,8 +137,8 @@ final class RoomScreenCoordinator: CoordinatorProtocol {
|
|||||||
actionsSubject.send(.presentRoomMemberDetails(userID: userID))
|
actionsSubject.send(.presentRoomMemberDetails(userID: userID))
|
||||||
case .displayMessageForwarding(let forwardingItem):
|
case .displayMessageForwarding(let forwardingItem):
|
||||||
actionsSubject.send(.presentMessageForwarding(forwardingItem: forwardingItem))
|
actionsSubject.send(.presentMessageForwarding(forwardingItem: forwardingItem))
|
||||||
case .displayLocation(let senderID, let geoURI):
|
case .displayLocation(let location):
|
||||||
actionsSubject.send(.presentLocationViewer(senderID: senderID, geoURI: geoURI))
|
actionsSubject.send(.presentLocationViewer(location))
|
||||||
case .displayResolveSendFailure(let failure, let sendHandle):
|
case .displayResolveSendFailure(let failure, let sendHandle):
|
||||||
actionsSubject.send(.presentResolveSendFailure(failure: failure, sendHandle: sendHandle))
|
actionsSubject.send(.presentResolveSendFailure(failure: failure, sendHandle: sendHandle))
|
||||||
case .displayThread(let itemID):
|
case .displayThread(let itemID):
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ enum ThreadTimelineScreenCoordinatorAction {
|
|||||||
case presentMediaUploadPicker(mode: MediaPickerScreenMode)
|
case presentMediaUploadPicker(mode: MediaPickerScreenMode)
|
||||||
case presentMediaUploadPreviewScreen(mediaURLs: [URL])
|
case presentMediaUploadPreviewScreen(mediaURLs: [URL])
|
||||||
case presentLocationPicker
|
case presentLocationPicker
|
||||||
case presentLocationViewer(senderID: String?, geoURI: GeoURI)
|
case presentLocationViewer(StaticLocationData)
|
||||||
case presentPollForm(mode: PollFormMode)
|
case presentPollForm(mode: PollFormMode)
|
||||||
case presentEmojiPicker(itemID: TimelineItemIdentifier, selectedEmojis: Set<String>)
|
case presentEmojiPicker(itemID: TimelineItemIdentifier, selectedEmojis: Set<String>)
|
||||||
case presentRoomMemberDetails(userID: String)
|
case presentRoomMemberDetails(userID: String)
|
||||||
@@ -118,9 +118,8 @@ final class ThreadTimelineScreenCoordinator: CoordinatorProtocol {
|
|||||||
viewModel.displayMediaPreview(mediaPreviewViewModel)
|
viewModel.displayMediaPreview(mediaPreviewViewModel)
|
||||||
case .displayLocationPicker:
|
case .displayLocationPicker:
|
||||||
actionsSubject.send(.presentLocationPicker)
|
actionsSubject.send(.presentLocationPicker)
|
||||||
case .displayLocation(let senderID, let geoURI):
|
case .displayLocation(let location):
|
||||||
actionsSubject.send(.presentLocationViewer(senderID: senderID,
|
actionsSubject.send(.presentLocationViewer(location))
|
||||||
geoURI: geoURI))
|
|
||||||
case .displayPollForm(let mode):
|
case .displayPollForm(let mode):
|
||||||
actionsSubject.send(.presentPollForm(mode: mode))
|
actionsSubject.send(.presentPollForm(mode: mode))
|
||||||
case .displayMediaUploadPreviewScreen(let mediaURLs):
|
case .displayMediaUploadPreviewScreen(let mediaURLs):
|
||||||
|
|||||||
@@ -536,8 +536,10 @@ class TimelineInteractionHandler {
|
|||||||
switch timelineItem {
|
switch timelineItem {
|
||||||
case let item as LocationRoomTimelineItem:
|
case let item as LocationRoomTimelineItem:
|
||||||
guard let geoURI = item.content.geoURI else { return .none }
|
guard let geoURI = item.content.geoURI else { return .none }
|
||||||
return .displayLocation(senderID: item.content.kind == .sender ? item.sender.id : nil,
|
return .displayLocation(.init(sender: item.sender,
|
||||||
geoURI: geoURI)
|
geoURI: geoURI,
|
||||||
|
kind: item.content.kind,
|
||||||
|
timestamp: item.timestamp))
|
||||||
case is ImageRoomTimelineItem,
|
case is ImageRoomTimelineItem,
|
||||||
is VideoRoomTimelineItem:
|
is VideoRoomTimelineItem:
|
||||||
return await mediaPreviewAction(for: timelineItem, messageTypes: [.image, .video])
|
return await mediaPreviewAction(for: timelineItem, messageTypes: [.image, .video])
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ enum TimelineViewModelAction {
|
|||||||
case displaySenderDetails(userID: String)
|
case displaySenderDetails(userID: String)
|
||||||
case displayMessageForwarding(forwardingItem: MessageForwardingItem)
|
case displayMessageForwarding(forwardingItem: MessageForwardingItem)
|
||||||
case displayMediaPreview(TimelineMediaPreviewViewModel)
|
case displayMediaPreview(TimelineMediaPreviewViewModel)
|
||||||
case displayLocation(senderID: String?, geoURI: GeoURI)
|
case displayLocation(StaticLocationData)
|
||||||
case displayResolveSendFailure(failure: TimelineItemSendFailure.VerifiedUser, sendHandle: SendHandleProxy)
|
case displayResolveSendFailure(failure: TimelineItemSendFailure.VerifiedUser, sendHandle: SendHandleProxy)
|
||||||
case displayThread(itemID: TimelineItemIdentifier)
|
case displayThread(itemID: TimelineItemIdentifier)
|
||||||
case composer(action: TimelineComposerAction)
|
case composer(action: TimelineComposerAction)
|
||||||
|
|||||||
@@ -655,8 +655,8 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol {
|
|||||||
|
|
||||||
let mediaPreviewViewModel = makeMediaPreviewViewModel(item: item, timelineViewModelKind: timelineViewModelKind)
|
let mediaPreviewViewModel = makeMediaPreviewViewModel(item: item, timelineViewModelKind: timelineViewModelKind)
|
||||||
actionsSubject.send(.displayMediaPreview(mediaPreviewViewModel))
|
actionsSubject.send(.displayMediaPreview(mediaPreviewViewModel))
|
||||||
case .displayLocation(let senderID, let geoURI):
|
case .displayLocation(let location):
|
||||||
actionsSubject.send(.displayLocation(senderID: senderID, geoURI: geoURI))
|
actionsSubject.send(.displayLocation(location))
|
||||||
case .none:
|
case .none:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -30,7 +30,8 @@ struct LocationRoomTimelineView: View {
|
|||||||
MapLibreStaticMapView(geoURI: geoURI,
|
MapLibreStaticMapView(geoURI: geoURI,
|
||||||
mapURLBuilder: context.viewState.mapTilerConfiguration,
|
mapURLBuilder: context.viewState.mapTilerConfiguration,
|
||||||
mapSize: .init(width: mapAspectRatio * mapMaxHeight, height: mapMaxHeight)) {
|
mapSize: .init(width: mapAspectRatio * mapMaxHeight, height: mapMaxHeight)) {
|
||||||
LocationMarkerView(userProfile: timelineItem.content.kind == .sender ? .init(sender: timelineItem.sender) : nil, mediaProvider: context.mediaProvider)
|
LocationMarkerView(userProfile: timelineItem.content.kind == .sender ? .init(sender: timelineItem.sender) : nil,
|
||||||
|
mediaProvider: context.mediaProvider)
|
||||||
}
|
}
|
||||||
.frame(maxHeight: mapMaxHeight)
|
.frame(maxHeight: mapMaxHeight)
|
||||||
.aspectRatio(mapAspectRatio, contentMode: .fit)
|
.aspectRatio(mapAspectRatio, contentMode: .fit)
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@ enum TimelineControllerAction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case displayMediaPreview(item: EventBasedMessageTimelineItemProtocol, timelineViewModel: TimelineViewModelKind)
|
case displayMediaPreview(item: EventBasedMessageTimelineItemProtocol, timelineViewModel: TimelineViewModelKind)
|
||||||
case displayLocation(senderID: String?, geoURI: GeoURI)
|
case displayLocation(StaticLocationData)
|
||||||
case none
|
case none
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+16
-16
@@ -9,29 +9,29 @@
|
|||||||
import MatrixRustSDK
|
import MatrixRustSDK
|
||||||
|
|
||||||
struct LocationRoomTimelineItemContent: Hashable {
|
struct LocationRoomTimelineItemContent: Hashable {
|
||||||
enum Kind {
|
|
||||||
case sender
|
|
||||||
case pin
|
|
||||||
|
|
||||||
init(from asset: AssetType?) {
|
|
||||||
self = switch asset {
|
|
||||||
case .pin:
|
|
||||||
.pin
|
|
||||||
case .sender, .none:
|
|
||||||
.sender
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let body: String
|
let body: String
|
||||||
let geoURI: GeoURI?
|
let geoURI: GeoURI?
|
||||||
let kind: Kind
|
let kind: StaticLocationKind
|
||||||
|
|
||||||
init(body: String,
|
init(body: String,
|
||||||
geoURI: GeoURI? = nil,
|
geoURI: GeoURI? = nil,
|
||||||
kind: Kind = .sender) {
|
kind: StaticLocationKind = .sender) {
|
||||||
self.body = body
|
self.body = body
|
||||||
self.geoURI = geoURI
|
self.geoURI = geoURI
|
||||||
self.kind = kind
|
self.kind = kind
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum StaticLocationKind {
|
||||||
|
case sender
|
||||||
|
case pin
|
||||||
|
|
||||||
|
init(from asset: AssetType?) {
|
||||||
|
switch asset {
|
||||||
|
case .pin:
|
||||||
|
self = .pin
|
||||||
|
default:
|
||||||
|
self = .sender
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -595,6 +595,14 @@ extension PreviewTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func locationPickerSheet() async throws {
|
||||||
|
AppSettings.resetAllSettings() // Ensure this test's previews start with fresh settings.
|
||||||
|
for (index, preview) in LocationPickerSheet_Previews._allPreviews.enumerated() {
|
||||||
|
try await assertSnapshots(matching: preview, step: index)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
func locationRoomTimelineView() async throws {
|
func locationRoomTimelineView() async throws {
|
||||||
AppSettings.resetAllSettings() // Ensure this test's previews start with fresh settings.
|
AppSettings.resetAllSettings() // Ensure this test's previews start with fresh settings.
|
||||||
@@ -1395,6 +1403,14 @@ extension PreviewTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func staticLocationSheet() async throws {
|
||||||
|
AppSettings.resetAllSettings() // Ensure this test's previews start with fresh settings.
|
||||||
|
for (index, preview) in StaticLocationSheet_Previews._allPreviews.enumerated() {
|
||||||
|
try await assertSnapshots(matching: preview, step: index)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
func stickerRoomTimelineView() async throws {
|
func stickerRoomTimelineView() async throws {
|
||||||
AppSettings.resetAllSettings() // Ensure this test's previews start with fresh settings.
|
AppSettings.resetAllSettings() // Ensure this test's previews start with fresh settings.
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e90029735b3e8d91d3e7dffa6b0b9e292198406747cdbe369401fac4bfed3083
|
||||||
|
size 78507
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e161124402355f12e73f54f392098e9e51a35418fa067c5e6bab3e3f826c4c47
|
||||||
|
size 80563
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:508a889587a0f58725312a524011f8c2c23745bf10158d55bf20b4ba98945100
|
||||||
|
size 38102
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:ba81cf51fd3ead374e763a54c1e8f1f8b14d66e4f4708a2d93329537c4838981
|
||||||
|
size 44398
|
||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:cbf4a51ed98c176336fc2e5be99311342bdae0d931d5d78dabca0ace3dd3a85b
|
oid sha256:64737509400fe27cdb017b8f66cffe8c0807f958827cff84a9ce5484db0ca3fc
|
||||||
size 80783
|
size 80109
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:cbf4a51ed98c176336fc2e5be99311342bdae0d931d5d78dabca0ace3dd3a85b
|
oid sha256:64737509400fe27cdb017b8f66cffe8c0807f958827cff84a9ce5484db0ca3fc
|
||||||
size 80783
|
size 80109
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:117ab2273ccfba15cee5546e521a85b87c8f7b915b869a299234c7d1a0caecd2
|
oid sha256:a068c98796f52c050c1adbffcd58a73f848c2ffccc814545c3e825fe70cff608
|
||||||
size 41622
|
size 38354
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:117ab2273ccfba15cee5546e521a85b87c8f7b915b869a299234c7d1a0caecd2
|
oid sha256:a068c98796f52c050c1adbffcd58a73f848c2ffccc814545c3e825fe70cff608
|
||||||
size 41622
|
size 38354
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:b4635f42e9d912d20f4963c5c3627f543cb00f95183fa0e902c9cc61b1afc921
|
oid sha256:40b1b5e02ed04dce7e1c384004f295f2ac535e7a5a21e807122239bd6979688c
|
||||||
size 93073
|
size 92341
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:b4635f42e9d912d20f4963c5c3627f543cb00f95183fa0e902c9cc61b1afc921
|
oid sha256:40b1b5e02ed04dce7e1c384004f295f2ac535e7a5a21e807122239bd6979688c
|
||||||
size 93073
|
size 92341
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:c68d58d06123afaa7e02fc798b2360e1818c450fd277b275308d5704203e5547
|
oid sha256:8cc0b6d024146792039a958fcc043be64b7e002bf4b796de3e2d7a3497f80995
|
||||||
size 53102
|
size 50211
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:c68d58d06123afaa7e02fc798b2360e1818c450fd277b275308d5704203e5547
|
oid sha256:8cc0b6d024146792039a958fcc043be64b7e002bf4b796de3e2d7a3497f80995
|
||||||
size 53102
|
size 50211
|
||||||
|
|||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:6ae12e39a82005f3a05628586575eca9731723bc6e84f5cc615120b34a3abcd1
|
||||||
|
size 91071
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:ca50e6e8aed44c7fae7074946d3991a4ccd37f69df40fc84aa42da4e7c27871d
|
||||||
|
size 93402
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:65740d7427b80648ee701c7f8ee14fcc2b51408ae2f71bf6e2f21b27cbdec440
|
||||||
|
size 47976
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:8b2164e0fb7394363c4dfd82a60e852fc84fc6db53cda01e871208e147b3ecdd
|
||||||
|
size 51137
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a3c481f252728c952db62718fddee02526c96a65e98d3baa876015bbacecb21e
|
||||||
|
size 90853
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:cda862691055a9cf8ed316bbdee74fecf2258b919086aaf92daebf8f93804f3e
|
||||||
|
size 92210
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:cf1c86651f913230a7ff2d1fbfa9a9e6f8ee5abd69f6ef6988699ad343b8ec1b
|
||||||
|
size 47986
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:b099800fa1e8e53e981382786474027d2d34ab6cee4ef85a27a1bd9d678c9681
|
||||||
|
size 50674
|
||||||
Reference in New Issue
Block a user