diff --git a/CHANGES.rst b/CHANGES.rst index 0b65764ff1..e5e46f4380 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,9 +1,26 @@ -Changes in 0.8.5 (2019-xx-xx) +Changes in 0.8.5 (2019-05-03) =============================================== Improvements: + * Upgrade MatrixKit version ([v0.9.9](https://github.com/matrix-org/matrix-ios-kit/releases/tag/v0.9.9)). + * Push: Add more logs to track spontaneously disabling (#2348). + * Widgets: Use scalar prod urls in Riot mobile apps (#2349). + * Productiviy: Create templates (see Tools/Templates/README.md). + * Notifications: Use UserNotifications framework for local notifications (iOS 10+), thanks to @fridtjof (PR #2207). + * Notifications: Added titles to notifications on iOS 10+, thanks to @fridtjof (PR #2347). + * iOS 12 Notification: Group them by room (#2337 and PR #2347 thanks to @fridtjof). + * Notifications: When navigate to a room, remove associated delivered notifications (#2337). + * Key backup: Adjust wording for untrusted backup to match Riot Web. + * Jitsi integration: Use the matching WebRTC framework (#1483). + * Fastlane: Set iCloud container environment (PR #2385). + * Remove code used for iOS 9 only (PR #2386). Bug fix: + * Share extension: Fix a crash when receive a memory warning (PR #2352). + * Upgraded rooms show up in the share extension twice (#2293). + * +N read receipt text is invisible on dark theme (#2294). + * Avoid crashes with tableview reload animation in settings and room settings (PR #2364). + * Media picker: Fix some retain cycles (PR #2382). Changes in 0.8.4 (2019-03-21) =============================================== diff --git a/Podfile b/Podfile index d77789509c..280ff6c64c 100644 --- a/Podfile +++ b/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -platform :ios, "9.0" +platform :ios, '10.0' # Use frameforks to allow usage of pod written in Swift (like PiwikTracker) use_frameworks! @@ -7,7 +7,7 @@ use_frameworks! # Different flavours of pods to MatrixKit # The current MatrixKit pod version -$matrixKitVersion = '0.9.8' +$matrixKitVersion = '0.9.9' # The develop branch version #$matrixKitVersion = 'develop' @@ -43,18 +43,15 @@ def import_MatrixKitAppExtension if $matrixKitVersion == 'local' pod 'MatrixSDK', :path => '../matrix-ios-sdk/MatrixSDK.podspec' pod 'MatrixSDK/SwiftSupport', :path => '../matrix-ios-sdk/MatrixSDK.podspec' - pod 'MatrixSDK/JingleCallStack', :path => '../matrix-ios-sdk/MatrixSDK.podspec' pod 'MatrixKit/AppExtension', :path => '../matrix-ios-kit/MatrixKit.podspec' else if $matrixKitVersion == 'develop' pod 'MatrixSDK', :git => 'https://github.com/matrix-org/matrix-ios-sdk.git', :branch => 'develop' pod 'MatrixSDK/SwiftSupport', :git => 'https://github.com/matrix-org/matrix-ios-sdk.git', :branch => 'develop' - pod 'MatrixSDK/JingleCallStack', :git => 'https://github.com/matrix-org/matrix-ios-sdk.git', :branch => 'develop' pod 'MatrixKit/AppExtension', :git => 'https://github.com/matrix-org/matrix-ios-kit.git', :branch => 'develop' else pod 'MatrixKit/AppExtension', $matrixKitVersion pod 'MatrixSDK/SwiftSupport' - pod 'MatrixSDK/JingleCallStack' end end end diff --git a/Podfile.lock b/Podfile.lock index fd8d95e919..952f5eb90a 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -42,46 +42,47 @@ PODS: - GBDeviceInfo/Core (5.2.0) - GZIP (1.2.2) - HPGrowingTextView (1.1) + - JitsiMeetSDK (2.1.0) - libbase58 (0.1.4) - libPhoneNumber-iOS (0.9.13) - - MatrixKit (0.9.8): + - MatrixKit (0.9.9): - cmark (~> 0.24.1) - DTCoreText (~> 1.6.21) - HPGrowingTextView (~> 1.1) - libPhoneNumber-iOS (~> 0.9.13) - - MatrixKit/Core (= 0.9.8) - - MatrixSDK (= 0.12.4) - - MatrixKit/AppExtension (0.9.8): + - MatrixKit/Core (= 0.9.9) + - MatrixSDK (= 0.12.5) + - MatrixKit/AppExtension (0.9.9): - cmark (~> 0.24.1) - DTCoreText (~> 1.6.21) - DTCoreText/Extension - HPGrowingTextView (~> 1.1) - libPhoneNumber-iOS (~> 0.9.13) - - MatrixSDK (= 0.12.4) - - MatrixKit/Core (0.9.8): + - MatrixSDK (= 0.12.5) + - MatrixKit/Core (0.9.9): - cmark (~> 0.24.1) - DTCoreText (~> 1.6.21) - HPGrowingTextView (~> 1.1) - libPhoneNumber-iOS (~> 0.9.13) - - MatrixSDK (= 0.12.4) - - MatrixSDK (0.12.4): - - MatrixSDK/Core (= 0.12.4) - - MatrixSDK/Core (0.12.4): + - MatrixSDK (= 0.12.5) + - MatrixSDK (0.12.5): + - MatrixSDK/Core (= 0.12.5) + - MatrixSDK/Core (0.12.5): - AFNetworking (~> 3.2.0) - GZIP (~> 1.2.2) - libbase58 (~> 0.1.4) - - OLMKit (~> 3.0.0) + - OLMKit (~> 3.1.0) - Realm (~> 3.13.1) - - MatrixSDK/JingleCallStack (0.12.4): + - MatrixSDK/JingleCallStack (0.12.5): + - JitsiMeetSDK (~> 2.1.0) - MatrixSDK/Core - - WebRTC (= 63.11.20455) - - MatrixSDK/SwiftSupport (0.12.4): + - MatrixSDK/SwiftSupport (0.12.5): - MatrixSDK/Core - - OLMKit (3.0.0): - - OLMKit/olmc (= 3.0.0) - - OLMKit/olmcpp (= 3.0.0) - - OLMKit/olmc (3.0.0) - - OLMKit/olmcpp (3.0.0) + - OLMKit (3.1.0): + - OLMKit/olmc (= 3.1.0) + - OLMKit/olmcpp (= 3.1.0) + - OLMKit/olmc (3.1.0) + - OLMKit/olmcpp (3.1.0) - PiwikTracker (4.4.2): - PiwikTracker/Core (= 4.4.2) - PiwikTracker/Core (4.4.2) @@ -95,15 +96,14 @@ PODS: - Reusable/View (4.0.5) - SwiftGen (6.1.0) - SwiftLint (0.30.1) - - WebRTC (63.11.20455) - zxcvbn-ios (1.0.4) DEPENDENCIES: - cmark - DTCoreText - GBDeviceInfo (~> 5.2.0) - - MatrixKit (= 0.9.8) - - MatrixKit/AppExtension (= 0.9.8) + - MatrixKit (= 0.9.9) + - MatrixKit/AppExtension (= 0.9.9) - MatrixSDK/JingleCallStack - MatrixSDK/SwiftSupport - OLMKit @@ -122,6 +122,7 @@ SPEC REPOS: - GBDeviceInfo - GZIP - HPGrowingTextView + - JitsiMeetSDK - libbase58 - libPhoneNumber-iOS - MatrixKit @@ -131,7 +132,6 @@ SPEC REPOS: - Reusable - SwiftGen - SwiftLint - - WebRTC - zxcvbn-ios EXTERNAL SOURCES: @@ -152,19 +152,19 @@ SPEC CHECKSUMS: GBDeviceInfo: 2c65ceb9404f9079264d4c238f5b81916fdfc5e2 GZIP: 12374d285e3b5d46cfcd480700fcfc7e16caf4f1 HPGrowingTextView: 88a716d97fb853bcb08a4a08e4727da17efc9b19 + JitsiMeetSDK: 3e66564af7f38a19142338955dd7f581801852b3 libbase58: 7c040313537b8c44b6e2d15586af8e21f7354efd libPhoneNumber-iOS: e444379ac18bbfbdefad571da735b2cd7e096caa - MatrixKit: 098ddd270d1dec86a85ea93a85a00e37b2d80c11 - MatrixSDK: 310efb69f70b4d7772f6f134b06fbb9ec238e6a7 - OLMKit: 88eda69110489f817d59bcb4353b7c247570aa4f + MatrixKit: 6f553797e1ad42794b5336afb5cecb975ec69daa + MatrixSDK: ed0d0cee4877955052f19730bb3ee727e01ec948 + OLMKit: 4ee0159d63feeb86d836fdcfefe418e163511639 PiwikTracker: 42862c7b13028065c3dfd36b4dc38db8a5765acf Realm: 50071da38fe079e0735e47c9f2eae738c68c5996 Reusable: 188be1a54ac0691bc66e5bb24ec6eb91971b315b SwiftGen: f872ca75cbd17bf7103c17f13dcfa0d9a15667b0 SwiftLint: a54bf1fe12b55c68560eb2a7689dfc81458508f7 - WebRTC: f2a6203584745fe53532633397557876b5d71640 zxcvbn-ios: fef98b7c80f1512ff0eec47ac1fa399fc00f7e3c -PODFILE CHECKSUM: 63fb661f957b3fa4c00765bc4d28bed41892847c +PODFILE CHECKSUM: cfb6be050dfbb227d58b14434629e447ea54554b COCOAPODS: 1.6.1 diff --git a/README.rst b/README.rst index 34b54eeaf3..d1c56e902e 100644 --- a/README.rst +++ b/README.rst @@ -24,7 +24,7 @@ CocoaPods command:: $ pod install This will load all dependencies for the Riot source code, including MatrixKit -and MatrixSDK. You will need an recent and updated (``pod update``) install of +and MatrixSDK. You will need an recent and updated (``pod setup``) install of CocoaPods. Then, open ``Riot.xcworkspace`` with Xcode diff --git a/Riot.xcodeproj/project.pbxproj b/Riot.xcodeproj/project.pbxproj index f4f6d4f545..08f2bccf2e 100644 --- a/Riot.xcodeproj/project.pbxproj +++ b/Riot.xcodeproj/project.pbxproj @@ -22,23 +22,77 @@ 32242F1721E8FBE500725742 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32242F0D21E8FBA900725742 /* Theme.swift */; }; 32242F1821E8FBF800725742 /* DefaultTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32242F0F21E8FBA900725742 /* DefaultTheme.swift */; }; 32242F1921E8FBFB00725742 /* DarkTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32242F1021E8FBA900725742 /* DarkTheme.swift */; }; - 3233F7461F3497E2006ACA81 /* JitsiMeet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3233F7441F3497DA006ACA81 /* JitsiMeet.framework */; }; - 3233F7471F3497E2006ACA81 /* JitsiMeet.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3233F7441F3497DA006ACA81 /* JitsiMeet.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 3232AB1422564D9100AD6A5C /* swiftgen-config.yml in Resources */ = {isa = PBXBuildFile; fileRef = 3232AB0022564D9100AD6A5C /* swiftgen-config.yml */; }; + 3232AB1522564D9100AD6A5C /* flat-swift4-vector.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 3232AB0322564D9100AD6A5C /* flat-swift4-vector.stencil */; }; + 3232AB2122564D9100AD6A5C /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 3232AB1322564D9100AD6A5C /* README.md */; }; + 3232AB482256558300AD6A5C /* FlowTemplateCoordinatorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB3C2256558300AD6A5C /* FlowTemplateCoordinatorType.swift */; }; + 3232AB492256558300AD6A5C /* FlowTemplateCoordinatorBridgePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB3D2256558300AD6A5C /* FlowTemplateCoordinatorBridgePresenter.swift */; }; + 3232AB4A2256558300AD6A5C /* FlowTemplateCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB3E2256558300AD6A5C /* FlowTemplateCoordinator.swift */; }; + 3232AB4B2256558300AD6A5C /* TemplateScreenViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3232AB402256558300AD6A5C /* TemplateScreenViewController.storyboard */; }; + 3232AB4C2256558300AD6A5C /* TemplateScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB412256558300AD6A5C /* TemplateScreenCoordinator.swift */; }; + 3232AB4D2256558300AD6A5C /* TemplateScreenCoordinatorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB422256558300AD6A5C /* TemplateScreenCoordinatorType.swift */; }; + 3232AB4E2256558300AD6A5C /* TemplateScreenViewModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB432256558300AD6A5C /* TemplateScreenViewModelType.swift */; }; + 3232AB4F2256558300AD6A5C /* TemplateScreenViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB442256558300AD6A5C /* TemplateScreenViewController.swift */; }; + 3232AB502256558300AD6A5C /* TemplateScreenViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB452256558300AD6A5C /* TemplateScreenViewState.swift */; }; + 3232AB512256558300AD6A5C /* TemplateScreenViewAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB462256558300AD6A5C /* TemplateScreenViewAction.swift */; }; + 3232AB522256558300AD6A5C /* TemplateScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB472256558300AD6A5C /* TemplateScreenViewModel.swift */; }; + 3232ABA1225730E100AD6A5C /* DeviceVerificationCoordinatorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB95225730E100AD6A5C /* DeviceVerificationCoordinatorType.swift */; }; + 3232ABA2225730E100AD6A5C /* DeviceVerificationStartViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3232AB97225730E100AD6A5C /* DeviceVerificationStartViewController.storyboard */; }; + 3232ABA3225730E100AD6A5C /* DeviceVerificationStartCoordinatorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB98225730E100AD6A5C /* DeviceVerificationStartCoordinatorType.swift */; }; + 3232ABA4225730E100AD6A5C /* DeviceVerificationStartViewAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB99225730E100AD6A5C /* DeviceVerificationStartViewAction.swift */; }; + 3232ABA5225730E100AD6A5C /* DeviceVerificationStartViewModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB9A225730E100AD6A5C /* DeviceVerificationStartViewModelType.swift */; }; + 3232ABA6225730E100AD6A5C /* DeviceVerificationStartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB9B225730E100AD6A5C /* DeviceVerificationStartViewController.swift */; }; + 3232ABA7225730E100AD6A5C /* DeviceVerificationStartCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB9C225730E100AD6A5C /* DeviceVerificationStartCoordinator.swift */; }; + 3232ABA8225730E100AD6A5C /* DeviceVerificationStartViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB9D225730E100AD6A5C /* DeviceVerificationStartViewState.swift */; }; + 3232ABA9225730E100AD6A5C /* DeviceVerificationStartViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB9E225730E100AD6A5C /* DeviceVerificationStartViewModel.swift */; }; + 3232ABAA225730E100AD6A5C /* DeviceVerificationCoordinatorBridgePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232AB9F225730E100AD6A5C /* DeviceVerificationCoordinatorBridgePresenter.swift */; }; + 3232ABAB225730E100AD6A5C /* DeviceVerificationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232ABA0225730E100AD6A5C /* DeviceVerificationCoordinator.swift */; }; + 3232ABB52257BE6400AD6A5C /* DeviceVerificationVerifyCoordinatorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232ABAD2257BE6400AD6A5C /* DeviceVerificationVerifyCoordinatorType.swift */; }; + 3232ABB62257BE6400AD6A5C /* DeviceVerificationVerifyViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3232ABAE2257BE6400AD6A5C /* DeviceVerificationVerifyViewController.storyboard */; }; + 3232ABB72257BE6400AD6A5C /* DeviceVerificationVerifyViewModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232ABAF2257BE6400AD6A5C /* DeviceVerificationVerifyViewModelType.swift */; }; + 3232ABB82257BE6500AD6A5C /* DeviceVerificationVerifyCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232ABB02257BE6400AD6A5C /* DeviceVerificationVerifyCoordinator.swift */; }; + 3232ABB92257BE6500AD6A5C /* DeviceVerificationVerifyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232ABB12257BE6400AD6A5C /* DeviceVerificationVerifyViewController.swift */; }; + 3232ABBA2257BE6500AD6A5C /* DeviceVerificationVerifyViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232ABB22257BE6400AD6A5C /* DeviceVerificationVerifyViewModel.swift */; }; + 3232ABBB2257BE6500AD6A5C /* DeviceVerificationVerifyViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232ABB32257BE6400AD6A5C /* DeviceVerificationVerifyViewState.swift */; }; + 3232ABBC2257BE6500AD6A5C /* DeviceVerificationVerifyViewAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232ABB42257BE6400AD6A5C /* DeviceVerificationVerifyViewAction.swift */; }; + 3232ABC022594C0900AD6A5C /* VerifyEmojiCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232ABBF22594C0900AD6A5C /* VerifyEmojiCollectionViewCell.swift */; }; + 3232ABC2225B996200AD6A5C /* Themable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3232ABC1225B996100AD6A5C /* Themable.swift */; }; + 324A204F225FC571004FE8B0 /* DeviceVerificationIncomingViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 324A2047225FC571004FE8B0 /* DeviceVerificationIncomingViewController.storyboard */; }; + 324A2050225FC571004FE8B0 /* DeviceVerificationIncomingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 324A2048225FC571004FE8B0 /* DeviceVerificationIncomingViewController.swift */; }; + 324A2051225FC571004FE8B0 /* DeviceVerificationIncomingViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 324A2049225FC571004FE8B0 /* DeviceVerificationIncomingViewState.swift */; }; + 324A2052225FC571004FE8B0 /* DeviceVerificationIncomingViewAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 324A204A225FC571004FE8B0 /* DeviceVerificationIncomingViewAction.swift */; }; + 324A2053225FC571004FE8B0 /* DeviceVerificationIncomingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 324A204B225FC571004FE8B0 /* DeviceVerificationIncomingViewModel.swift */; }; + 324A2054225FC571004FE8B0 /* DeviceVerificationIncomingCoordinatorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 324A204C225FC571004FE8B0 /* DeviceVerificationIncomingCoordinatorType.swift */; }; + 324A2055225FC571004FE8B0 /* DeviceVerificationIncomingViewModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 324A204D225FC571004FE8B0 /* DeviceVerificationIncomingViewModelType.swift */; }; + 324A2056225FC571004FE8B0 /* DeviceVerificationIncomingCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 324A204E225FC571004FE8B0 /* DeviceVerificationIncomingCoordinator.swift */; }; 3275FD8C21A5A2C500B9C13D /* TermsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3275FD8B21A5A2C500B9C13D /* TermsView.swift */; }; 3281BCF72201FA4200F4A383 /* UIControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3281BCF62201FA4200F4A383 /* UIControl.swift */; }; 3284A35120A07C210044F922 /* postMessageAPI.js in Resources */ = {isa = PBXBuildFile; fileRef = 3284A35020A07C210044F922 /* postMessageAPI.js */; }; + 32891D6B2264CBA300C82226 /* SimpleScreenTemplateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32891D692264CBA300C82226 /* SimpleScreenTemplateViewController.swift */; }; + 32891D6C2264CBA300C82226 /* SimpleScreenTemplateViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 32891D6A2264CBA300C82226 /* SimpleScreenTemplateViewController.storyboard */; }; + 32891D702264DF7B00C82226 /* DeviceVerificationVerifiedViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 32891D6E2264DF7B00C82226 /* DeviceVerificationVerifiedViewController.storyboard */; }; + 32891D712264DF7B00C82226 /* DeviceVerificationVerifiedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32891D6F2264DF7B00C82226 /* DeviceVerificationVerifiedViewController.swift */; }; + 32891D75226728EE00C82226 /* DeviceVerificationDataLoadingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32891D73226728EE00C82226 /* DeviceVerificationDataLoadingViewController.swift */; }; + 32891D76226728EF00C82226 /* DeviceVerificationDataLoadingViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 32891D74226728EE00C82226 /* DeviceVerificationDataLoadingViewController.storyboard */; }; 32B1FEDB21A46F2C00637127 /* TermsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 32B1FEDA21A46F2C00637127 /* TermsView.xib */; }; 32BF994F21FA29A400698084 /* SettingsKeyBackupViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BF994E21FA29A400698084 /* SettingsKeyBackupViewModel.swift */; }; 32BF995121FA29DC00698084 /* SettingsKeyBackupViewModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BF995021FA29DC00698084 /* SettingsKeyBackupViewModelType.swift */; }; 32BF995321FA2A1300698084 /* SettingsKeyBackupViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BF995221FA2A1300698084 /* SettingsKeyBackupViewState.swift */; }; 32BF995521FA2AB700698084 /* SettingsKeyBackupViewAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BF995421FA2AB700698084 /* SettingsKeyBackupViewAction.swift */; }; 32BF995721FB07A400698084 /* SettingsKeyBackupTableViewSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BF995621FB07A400698084 /* SettingsKeyBackupTableViewSection.swift */; }; - 358DB9429359F97520545D35 /* Pods_RiotPods_RiotShareExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5856BA7A55E53C0AEAFC084 /* Pods_RiotPods_RiotShareExtension.framework */; }; - 89C94E649229EA68AE787E9E /* Pods_RiotPods_Riot.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2510A69B4A681C1FEC36E848 /* Pods_RiotPods_Riot.framework */; }; + 32F6B9692270623100BBA352 /* DeviceVerificationDataLoadingCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F6B9632270623000BBA352 /* DeviceVerificationDataLoadingCoordinator.swift */; }; + 32F6B96A2270623100BBA352 /* DeviceVerificationDataLoadingViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F6B9642270623100BBA352 /* DeviceVerificationDataLoadingViewState.swift */; }; + 32F6B96B2270623100BBA352 /* DeviceVerificationDataLoadingViewAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F6B9652270623100BBA352 /* DeviceVerificationDataLoadingViewAction.swift */; }; + 32F6B96C2270623100BBA352 /* DeviceVerificationDataLoadingCoordinatorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F6B9662270623100BBA352 /* DeviceVerificationDataLoadingCoordinatorType.swift */; }; + 32F6B96D2270623100BBA352 /* DeviceVerificationDataLoadingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F6B9672270623100BBA352 /* DeviceVerificationDataLoadingViewModel.swift */; }; + 32F6B96E2270623100BBA352 /* DeviceVerificationDataLoadingViewModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F6B9682270623100BBA352 /* DeviceVerificationDataLoadingViewModelType.swift */; }; + 405FD41D306133A48D9B5AA1 /* Pods_RiotPods_Riot.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1ACF09217ADF1D7E7A35BC02 /* Pods_RiotPods_Riot.framework */; }; + 670966FEFE120D865FD8A5B6 /* Pods_RiotPods_SiriIntents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51187E952D5CECF6D6F5A28E /* Pods_RiotPods_SiriIntents.framework */; }; 926FA53F1F4C132000F826C2 /* MXSession+Riot.m in Sources */ = {isa = PBXBuildFile; fileRef = 926FA53E1F4C132000F826C2 /* MXSession+Riot.m */; }; 92726A471F58737A004AD26F /* IntentHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 92726A461F58737A004AD26F /* IntentHandler.m */; }; 92726A4B1F58737A004AD26F /* SiriIntents.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 92726A431F58737A004AD26F /* SiriIntents.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 92726A511F587410004AD26F /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92726A501F587410004AD26F /* Intents.framework */; }; + 933A7148CE5984940344006C /* Pods_RiotPods_RiotShareExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97151D7F0F892081250D50A3 /* Pods_RiotPods_RiotShareExtension.framework */; }; B104C2942203773C00D9F496 /* KeyBackupBannerPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = B104C2932203773B00D9F496 /* KeyBackupBannerPreferences.swift */; }; B1057789221304EC00334B1E /* KeyBackupSetupSuccessFromPassphraseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1057788221304EB00334B1E /* KeyBackupSetupSuccessFromPassphraseViewController.swift */; }; B105778B221304FA00334B1E /* KeyBackupSetupSuccessFromPassphraseViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B105778A221304FA00334B1E /* KeyBackupSetupSuccessFromPassphraseViewController.storyboard */; }; @@ -67,6 +121,7 @@ B109D6F1222D8C400061B6D9 /* UIApplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = B109D6F0222D8C400061B6D9 /* UIApplication.swift */; }; B10B3B5B2201DD740072C76B /* KeyBackupBannerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B10B3B592201DD740072C76B /* KeyBackupBannerCell.swift */; }; B10B3B5C2201DD740072C76B /* KeyBackupBannerCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B10B3B5A2201DD740072C76B /* KeyBackupBannerCell.xib */; }; + B10CFBC32268D99D00A5842E /* JitsiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B10CFBC22268D99D00A5842E /* JitsiService.swift */; }; B1107EC82200B0720038014B /* KeyBackupRecoverSuccessViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1107EC72200B0720038014B /* KeyBackupRecoverSuccessViewController.swift */; }; B1107ECA2200B09F0038014B /* KeyBackupRecoverSuccessViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B1107EC92200B09F0038014B /* KeyBackupRecoverSuccessViewController.storyboard */; }; B110871D21F087F4003554A5 /* KeyBackupSetupPassphraseViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = B110871C21F087F4003554A5 /* KeyBackupSetupPassphraseViewState.swift */; }; @@ -390,7 +445,6 @@ B1E5368D21FB7245001F3AFF /* KeyBackupRecoverFromPassphraseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1E5368C21FB7245001F3AFF /* KeyBackupRecoverFromPassphraseViewController.swift */; }; B1E5368F21FB7258001F3AFF /* KeyBackupRecoverFromPassphraseViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B1E5368E21FB7258001F3AFF /* KeyBackupRecoverFromPassphraseViewController.storyboard */; }; B1FDF56021F5FE5500BA3834 /* KeyBackupSetupPassphraseViewAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1FDF55F21F5FE5500BA3834 /* KeyBackupSetupPassphraseViewAction.swift */; }; - CD9C4E21170ABE528E087A51 /* Pods_RiotPods_SiriIntents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC0B9DB497F579AB1084E3DC /* Pods_RiotPods_SiriIntents.framework */; }; F05927C91FDED836009F2A68 /* MXGroup+Riot.m in Sources */ = {isa = PBXBuildFile; fileRef = F05927C71FDED835009F2A68 /* MXGroup+Riot.m */; }; F083BD1E1E7009ED00A9B29C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F083BB0D1E7009EC00A9B29C /* AppDelegate.m */; }; F083BDE61E7009ED00A9B29C /* busy.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = F083BBDB1E7009EC00A9B29C /* busy.mp3 */; }; @@ -453,23 +507,11 @@ name = "Embed App Extensions"; runOnlyForDeploymentPostprocessing = 0; }; - 3233F7481F3497E2006ACA81 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 3233F7471F3497E2006ACA81 /* JitsiMeet.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1ACF09217ADF1D7E7A35BC02 /* Pods_RiotPods_Riot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RiotPods_Riot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 24CBEC4E1F0EAD310093EABB /* RiotShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = RiotShareExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; - 2510A69B4A681C1FEC36E848 /* Pods_RiotPods_Riot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RiotPods_Riot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 319CD7C67A47A3D35959E18F /* Pods-RiotPods-Riot.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-Riot.release.xcconfig"; path = "Pods/Target Support Files/Pods-RiotPods-Riot/Pods-RiotPods-Riot.release.xcconfig"; sourceTree = ""; }; 3209451121F1C1430088CAA2 /* BlackTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlackTheme.swift; sourceTree = ""; }; 32242F0821E8B05F00725742 /* UIColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIColor.swift; sourceTree = ""; }; 32242F0C21E8FBA900725742 /* ThemeService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThemeService.m; sourceTree = ""; }; @@ -477,7 +519,49 @@ 32242F0F21E8FBA900725742 /* DefaultTheme.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultTheme.swift; sourceTree = ""; }; 32242F1021E8FBA900725742 /* DarkTheme.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DarkTheme.swift; sourceTree = ""; }; 32242F1121E8FBA900725742 /* ThemeService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThemeService.h; sourceTree = ""; }; - 3233F7441F3497DA006ACA81 /* JitsiMeet.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = JitsiMeet.framework; sourceTree = ""; }; + 3232AB0022564D9100AD6A5C /* swiftgen-config.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "swiftgen-config.yml"; sourceTree = ""; }; + 3232AB0322564D9100AD6A5C /* flat-swift4-vector.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "flat-swift4-vector.stencil"; sourceTree = ""; }; + 3232AB1322564D9100AD6A5C /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 3232AB3C2256558300AD6A5C /* FlowTemplateCoordinatorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FlowTemplateCoordinatorType.swift; sourceTree = ""; }; + 3232AB3D2256558300AD6A5C /* FlowTemplateCoordinatorBridgePresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FlowTemplateCoordinatorBridgePresenter.swift; sourceTree = ""; }; + 3232AB3E2256558300AD6A5C /* FlowTemplateCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FlowTemplateCoordinator.swift; sourceTree = ""; }; + 3232AB402256558300AD6A5C /* TemplateScreenViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = TemplateScreenViewController.storyboard; sourceTree = ""; }; + 3232AB412256558300AD6A5C /* TemplateScreenCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TemplateScreenCoordinator.swift; sourceTree = ""; }; + 3232AB422256558300AD6A5C /* TemplateScreenCoordinatorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TemplateScreenCoordinatorType.swift; sourceTree = ""; }; + 3232AB432256558300AD6A5C /* TemplateScreenViewModelType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TemplateScreenViewModelType.swift; sourceTree = ""; }; + 3232AB442256558300AD6A5C /* TemplateScreenViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TemplateScreenViewController.swift; sourceTree = ""; }; + 3232AB452256558300AD6A5C /* TemplateScreenViewState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TemplateScreenViewState.swift; sourceTree = ""; }; + 3232AB462256558300AD6A5C /* TemplateScreenViewAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TemplateScreenViewAction.swift; sourceTree = ""; }; + 3232AB472256558300AD6A5C /* TemplateScreenViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TemplateScreenViewModel.swift; sourceTree = ""; }; + 3232AB95225730E100AD6A5C /* DeviceVerificationCoordinatorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationCoordinatorType.swift; sourceTree = ""; }; + 3232AB97225730E100AD6A5C /* DeviceVerificationStartViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = DeviceVerificationStartViewController.storyboard; sourceTree = ""; }; + 3232AB98225730E100AD6A5C /* DeviceVerificationStartCoordinatorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationStartCoordinatorType.swift; sourceTree = ""; }; + 3232AB99225730E100AD6A5C /* DeviceVerificationStartViewAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationStartViewAction.swift; sourceTree = ""; }; + 3232AB9A225730E100AD6A5C /* DeviceVerificationStartViewModelType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationStartViewModelType.swift; sourceTree = ""; }; + 3232AB9B225730E100AD6A5C /* DeviceVerificationStartViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationStartViewController.swift; sourceTree = ""; }; + 3232AB9C225730E100AD6A5C /* DeviceVerificationStartCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationStartCoordinator.swift; sourceTree = ""; }; + 3232AB9D225730E100AD6A5C /* DeviceVerificationStartViewState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationStartViewState.swift; sourceTree = ""; }; + 3232AB9E225730E100AD6A5C /* DeviceVerificationStartViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationStartViewModel.swift; sourceTree = ""; }; + 3232AB9F225730E100AD6A5C /* DeviceVerificationCoordinatorBridgePresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationCoordinatorBridgePresenter.swift; sourceTree = ""; }; + 3232ABA0225730E100AD6A5C /* DeviceVerificationCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationCoordinator.swift; sourceTree = ""; }; + 3232ABAD2257BE6400AD6A5C /* DeviceVerificationVerifyCoordinatorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationVerifyCoordinatorType.swift; sourceTree = ""; }; + 3232ABAE2257BE6400AD6A5C /* DeviceVerificationVerifyViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = DeviceVerificationVerifyViewController.storyboard; sourceTree = ""; }; + 3232ABAF2257BE6400AD6A5C /* DeviceVerificationVerifyViewModelType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationVerifyViewModelType.swift; sourceTree = ""; }; + 3232ABB02257BE6400AD6A5C /* DeviceVerificationVerifyCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationVerifyCoordinator.swift; sourceTree = ""; }; + 3232ABB12257BE6400AD6A5C /* DeviceVerificationVerifyViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationVerifyViewController.swift; sourceTree = ""; }; + 3232ABB22257BE6400AD6A5C /* DeviceVerificationVerifyViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationVerifyViewModel.swift; sourceTree = ""; }; + 3232ABB32257BE6400AD6A5C /* DeviceVerificationVerifyViewState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationVerifyViewState.swift; sourceTree = ""; }; + 3232ABB42257BE6400AD6A5C /* DeviceVerificationVerifyViewAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationVerifyViewAction.swift; sourceTree = ""; }; + 3232ABBF22594C0900AD6A5C /* VerifyEmojiCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifyEmojiCollectionViewCell.swift; sourceTree = ""; }; + 3232ABC1225B996100AD6A5C /* Themable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Themable.swift; sourceTree = ""; }; + 324A2047225FC571004FE8B0 /* DeviceVerificationIncomingViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = DeviceVerificationIncomingViewController.storyboard; sourceTree = ""; }; + 324A2048225FC571004FE8B0 /* DeviceVerificationIncomingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationIncomingViewController.swift; sourceTree = ""; }; + 324A2049225FC571004FE8B0 /* DeviceVerificationIncomingViewState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationIncomingViewState.swift; sourceTree = ""; }; + 324A204A225FC571004FE8B0 /* DeviceVerificationIncomingViewAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationIncomingViewAction.swift; sourceTree = ""; }; + 324A204B225FC571004FE8B0 /* DeviceVerificationIncomingViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationIncomingViewModel.swift; sourceTree = ""; }; + 324A204C225FC571004FE8B0 /* DeviceVerificationIncomingCoordinatorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationIncomingCoordinatorType.swift; sourceTree = ""; }; + 324A204D225FC571004FE8B0 /* DeviceVerificationIncomingViewModelType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationIncomingViewModelType.swift; sourceTree = ""; }; + 324A204E225FC571004FE8B0 /* DeviceVerificationIncomingCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationIncomingCoordinator.swift; sourceTree = ""; }; 3267EFB320E379FD00FF1CAA /* CHANGES.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGES.rst; sourceTree = ""; }; 3267EFB420E379FD00FF1CAA /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; fileEncoding = 4; path = Podfile; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 3267EFB520E379FD00FF1CAA /* AUTHORS.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS.rst; sourceTree = ""; }; @@ -485,6 +569,12 @@ 3275FD8B21A5A2C500B9C13D /* TermsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermsView.swift; sourceTree = ""; }; 3281BCF62201FA4200F4A383 /* UIControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIControl.swift; sourceTree = ""; }; 3284A35020A07C210044F922 /* postMessageAPI.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = postMessageAPI.js; sourceTree = ""; }; + 32891D692264CBA300C82226 /* SimpleScreenTemplateViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleScreenTemplateViewController.swift; sourceTree = ""; }; + 32891D6A2264CBA300C82226 /* SimpleScreenTemplateViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = SimpleScreenTemplateViewController.storyboard; sourceTree = ""; }; + 32891D6E2264DF7B00C82226 /* DeviceVerificationVerifiedViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = DeviceVerificationVerifiedViewController.storyboard; sourceTree = ""; }; + 32891D6F2264DF7B00C82226 /* DeviceVerificationVerifiedViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationVerifiedViewController.swift; sourceTree = ""; }; + 32891D73226728EE00C82226 /* DeviceVerificationDataLoadingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationDataLoadingViewController.swift; sourceTree = ""; }; + 32891D74226728EE00C82226 /* DeviceVerificationDataLoadingViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = DeviceVerificationDataLoadingViewController.storyboard; sourceTree = ""; }; 32B1FEDA21A46F2C00637127 /* TermsView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TermsView.xib; sourceTree = ""; }; 32BDC9A1211C2C870064AF51 /* zh_Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh_Hant; path = zh_Hant.lproj/InfoPlist.strings; sourceTree = ""; }; 32BDC9A2211C2C870064AF51 /* zh_Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh_Hant; path = zh_Hant.lproj/Localizable.strings; sourceTree = ""; }; @@ -500,14 +590,22 @@ 32D7159E2146CC6F00DF59C9 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Vector.strings; sourceTree = ""; }; 32D7159F2146CC7F00DF59C9 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; 32D715A02146CC8800DF59C9 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; - 3998C51E0196D42B366E0900 /* Pods-RiotPods-RiotShareExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-RiotShareExtension.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RiotPods-RiotShareExtension/Pods-RiotPods-RiotShareExtension.debug.xcconfig"; sourceTree = ""; }; + 32F6B9632270623000BBA352 /* DeviceVerificationDataLoadingCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationDataLoadingCoordinator.swift; sourceTree = ""; }; + 32F6B9642270623100BBA352 /* DeviceVerificationDataLoadingViewState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationDataLoadingViewState.swift; sourceTree = ""; }; + 32F6B9652270623100BBA352 /* DeviceVerificationDataLoadingViewAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationDataLoadingViewAction.swift; sourceTree = ""; }; + 32F6B9662270623100BBA352 /* DeviceVerificationDataLoadingCoordinatorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationDataLoadingCoordinatorType.swift; sourceTree = ""; }; + 32F6B9672270623100BBA352 /* DeviceVerificationDataLoadingViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationDataLoadingViewModel.swift; sourceTree = ""; }; + 32F6B9682270623100BBA352 /* DeviceVerificationDataLoadingViewModelType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceVerificationDataLoadingViewModelType.swift; sourceTree = ""; }; + 3942DD65EBEB7AE647C6392A /* Pods-RiotPods-SiriIntents.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-SiriIntents.debug.xcconfig"; path = "Target Support Files/Pods-RiotPods-SiriIntents/Pods-RiotPods-SiriIntents.debug.xcconfig"; sourceTree = ""; }; 3D78489021AC9E6400B98A7D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; 3D78489121AC9E6500B98A7D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; 3D78489221AC9E6500B98A7D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Vector.strings; sourceTree = ""; }; 3D78489321ACA25200B98A7D /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/InfoPlist.strings; sourceTree = ""; }; 3D78489421ACA25300B98A7D /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = ""; }; 3D78489521ACA25300B98A7D /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Vector.strings; sourceTree = ""; }; - 78CD06F14060998545642330 /* Pods-RiotPods-Riot.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-Riot.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RiotPods-Riot/Pods-RiotPods-Riot.debug.xcconfig"; sourceTree = ""; }; + 43C2962BE367F59220F517FA /* Pods-RiotPods-Riot.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-Riot.debug.xcconfig"; path = "Target Support Files/Pods-RiotPods-Riot/Pods-RiotPods-Riot.debug.xcconfig"; sourceTree = ""; }; + 4FC6A5D63FAD1B27C2F57AFA /* Pods-RiotPods-RiotShareExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-RiotShareExtension.release.xcconfig"; path = "Target Support Files/Pods-RiotPods-RiotShareExtension/Pods-RiotPods-RiotShareExtension.release.xcconfig"; sourceTree = ""; }; + 51187E952D5CECF6D6F5A28E /* Pods_RiotPods_SiriIntents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RiotPods_SiriIntents.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 926FA53D1F4C132000F826C2 /* MXSession+Riot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MXSession+Riot.h"; sourceTree = ""; }; 926FA53E1F4C132000F826C2 /* MXSession+Riot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MXSession+Riot.m"; sourceTree = ""; }; 92726A431F58737A004AD26F /* SiriIntents.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SiriIntents.appex; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -516,6 +614,8 @@ 92726A481F58737A004AD26F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 92726A4F1F587393004AD26F /* SiriIntents.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = SiriIntents.entitlements; sourceTree = ""; }; 92726A501F587410004AD26F /* Intents.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Intents.framework; path = System/Library/Frameworks/Intents.framework; sourceTree = SDKROOT; }; + 97151D7F0F892081250D50A3 /* Pods_RiotPods_RiotShareExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RiotPods_RiotShareExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9C3242E3FE95BCDA9562C75D /* Pods-RiotPods-RiotShareExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-RiotShareExtension.debug.xcconfig"; path = "Target Support Files/Pods-RiotPods-RiotShareExtension/Pods-RiotPods-RiotShareExtension.debug.xcconfig"; sourceTree = ""; }; B104C2932203773B00D9F496 /* KeyBackupBannerPreferences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyBackupBannerPreferences.swift; sourceTree = ""; }; B1057788221304EB00334B1E /* KeyBackupSetupSuccessFromPassphraseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBackupSetupSuccessFromPassphraseViewController.swift; sourceTree = ""; }; B105778A221304FA00334B1E /* KeyBackupSetupSuccessFromPassphraseViewController.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = KeyBackupSetupSuccessFromPassphraseViewController.storyboard; sourceTree = ""; }; @@ -544,6 +644,7 @@ B109D6F0222D8C400061B6D9 /* UIApplication.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIApplication.swift; sourceTree = ""; }; B10B3B592201DD740072C76B /* KeyBackupBannerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBackupBannerCell.swift; sourceTree = ""; }; B10B3B5A2201DD740072C76B /* KeyBackupBannerCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KeyBackupBannerCell.xib; sourceTree = ""; }; + B10CFBC22268D99D00A5842E /* JitsiService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JitsiService.swift; sourceTree = ""; }; B1107EC72200B0720038014B /* KeyBackupRecoverSuccessViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBackupRecoverSuccessViewController.swift; sourceTree = ""; }; B1107EC92200B09F0038014B /* KeyBackupRecoverSuccessViewController.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = KeyBackupRecoverSuccessViewController.storyboard; sourceTree = ""; }; B110871C21F087F4003554A5 /* KeyBackupSetupPassphraseViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBackupSetupPassphraseViewState.swift; sourceTree = ""; }; @@ -1049,10 +1150,8 @@ B1E5368C21FB7245001F3AFF /* KeyBackupRecoverFromPassphraseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBackupRecoverFromPassphraseViewController.swift; sourceTree = ""; }; B1E5368E21FB7258001F3AFF /* KeyBackupRecoverFromPassphraseViewController.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = KeyBackupRecoverFromPassphraseViewController.storyboard; sourceTree = ""; }; B1FDF55F21F5FE5500BA3834 /* KeyBackupSetupPassphraseViewAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyBackupSetupPassphraseViewAction.swift; sourceTree = ""; }; - B4B35D08E11507BEE733BBC4 /* Pods-RiotPods-SiriIntents.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-SiriIntents.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RiotPods-SiriIntents/Pods-RiotPods-SiriIntents.debug.xcconfig"; sourceTree = ""; }; - BC0B9DB497F579AB1084E3DC /* Pods_RiotPods_SiriIntents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RiotPods_SiriIntents.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D523D0ED52562EDD393BE0F0 /* Pods-RiotPods-RiotShareExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-RiotShareExtension.release.xcconfig"; path = "Pods/Target Support Files/Pods-RiotPods-RiotShareExtension/Pods-RiotPods-RiotShareExtension.release.xcconfig"; sourceTree = ""; }; - EE8AD7EF51758CA3EFD23BE1 /* Pods-RiotPods-SiriIntents.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-SiriIntents.release.xcconfig"; path = "Pods/Target Support Files/Pods-RiotPods-SiriIntents/Pods-RiotPods-SiriIntents.release.xcconfig"; sourceTree = ""; }; + B43DC75D1590BB8A4243BD4D /* Pods-RiotPods-Riot.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-Riot.release.xcconfig"; path = "Target Support Files/Pods-RiotPods-Riot/Pods-RiotPods-Riot.release.xcconfig"; sourceTree = ""; }; + E2599D0ECB8DD206624E450B /* Pods-RiotPods-SiriIntents.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-SiriIntents.release.xcconfig"; path = "Target Support Files/Pods-RiotPods-SiriIntents/Pods-RiotPods-SiriIntents.release.xcconfig"; sourceTree = ""; }; F05927C71FDED835009F2A68 /* MXGroup+Riot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MXGroup+Riot.m"; sourceTree = ""; }; F05927C81FDED835009F2A68 /* MXGroup+Riot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MXGroup+Riot.h"; sourceTree = ""; }; F083BB031E7005FD00A9B29C /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -1090,7 +1189,6 @@ F094A9BE1B78D8F000B1FBBF /* RiotTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RiotTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; F0D2AD9F1F6AA5FD00A7097D /* MXRoomSummary+Riot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MXRoomSummary+Riot.h"; sourceTree = ""; }; F0D2ADA01F6AA5FD00A7097D /* MXRoomSummary+Riot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MXRoomSummary+Riot.m"; sourceTree = ""; }; - F5856BA7A55E53C0AEAFC084 /* Pods_RiotPods_RiotShareExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RiotPods_RiotShareExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1098,7 +1196,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 358DB9429359F97520545D35 /* Pods_RiotPods_RiotShareExtension.framework in Frameworks */, + 933A7148CE5984940344006C /* Pods_RiotPods_RiotShareExtension.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1107,7 +1205,7 @@ buildActionMask = 2147483647; files = ( 92726A511F587410004AD26F /* Intents.framework in Frameworks */, - CD9C4E21170ABE528E087A51 /* Pods_RiotPods_SiriIntents.framework in Frameworks */, + 670966FEFE120D865FD8A5B6 /* Pods_RiotPods_SiriIntents.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1115,8 +1213,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3233F7461F3497E2006ACA81 /* JitsiMeet.framework in Frameworks */, - 89C94E649229EA68AE787E9E /* Pods_RiotPods_Riot.framework in Frameworks */, + 405FD41D306133A48D9B5AA1 /* Pods_RiotPods_Riot.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1147,6 +1244,7 @@ 32242F0D21E8FBA900725742 /* Theme.swift */, 32242F1121E8FBA900725742 /* ThemeService.h */, 32242F0E21E8FBA900725742 /* Themes */, + 3232ABC1225B996100AD6A5C /* Themable.swift */, ); path = Theme; sourceTree = ""; @@ -1161,20 +1259,184 @@ path = Themes; sourceTree = ""; }; - 3233F7291F31F3B4006ACA81 /* libs */ = { + 3232AAFE22564D9100AD6A5C /* Tools */ = { + isa = PBXGroup; + children = ( + 3232AAFF22564D9100AD6A5C /* SwiftGen */, + 3232AB0422564D9100AD6A5C /* Templates */, + ); + path = Tools; + sourceTree = ""; + }; + 3232AAFF22564D9100AD6A5C /* SwiftGen */ = { + isa = PBXGroup; + children = ( + 3232AB0022564D9100AD6A5C /* swiftgen-config.yml */, + 3232AB0122564D9100AD6A5C /* Templates */, + ); + path = SwiftGen; + sourceTree = ""; + }; + 3232AB0122564D9100AD6A5C /* Templates */ = { + isa = PBXGroup; + children = ( + 3232AB0222564D9100AD6A5C /* Strings */, + ); + path = Templates; + sourceTree = ""; + }; + 3232AB0222564D9100AD6A5C /* Strings */ = { + isa = PBXGroup; + children = ( + 3232AB0322564D9100AD6A5C /* flat-swift4-vector.stencil */, + ); + path = Strings; + sourceTree = ""; + }; + 3232AB0422564D9100AD6A5C /* Templates */ = { + isa = PBXGroup; + children = ( + 3232AB1322564D9100AD6A5C /* README.md */, + 3232AB0522564D9100AD6A5C /* buildable */, + ); + path = Templates; + sourceTree = ""; + }; + 3232AB0522564D9100AD6A5C /* buildable */ = { + isa = PBXGroup; + children = ( + 3232AB3B2256558300AD6A5C /* FlowCoordinatorTemplate */, + 3232AB3F2256558300AD6A5C /* ScreenTemplate */, + 32891D682264C6A000C82226 /* SimpleScreenTemplate */, + ); + path = buildable; + sourceTree = ""; + }; + 3232AB3B2256558300AD6A5C /* FlowCoordinatorTemplate */ = { + isa = PBXGroup; + children = ( + 3232AB3C2256558300AD6A5C /* FlowTemplateCoordinatorType.swift */, + 3232AB3D2256558300AD6A5C /* FlowTemplateCoordinatorBridgePresenter.swift */, + 3232AB3E2256558300AD6A5C /* FlowTemplateCoordinator.swift */, + ); + path = FlowCoordinatorTemplate; + sourceTree = ""; + }; + 3232AB3F2256558300AD6A5C /* ScreenTemplate */ = { + isa = PBXGroup; + children = ( + 3232AB402256558300AD6A5C /* TemplateScreenViewController.storyboard */, + 3232AB412256558300AD6A5C /* TemplateScreenCoordinator.swift */, + 3232AB422256558300AD6A5C /* TemplateScreenCoordinatorType.swift */, + 3232AB432256558300AD6A5C /* TemplateScreenViewModelType.swift */, + 3232AB442256558300AD6A5C /* TemplateScreenViewController.swift */, + 3232AB452256558300AD6A5C /* TemplateScreenViewState.swift */, + 3232AB462256558300AD6A5C /* TemplateScreenViewAction.swift */, + 3232AB472256558300AD6A5C /* TemplateScreenViewModel.swift */, + ); + path = ScreenTemplate; + sourceTree = ""; + }; + 3232AB94225730E100AD6A5C /* DeviceVerification */ = { + isa = PBXGroup; + children = ( + 324A2046225FC571004FE8B0 /* Incoming */, + 32891D72226728EE00C82226 /* Loading */, + 3232AB96225730E100AD6A5C /* Start */, + 32891D6D2264DF7B00C82226 /* Verified */, + 3232ABAC2257BE6400AD6A5C /* Verify */, + 3232AB95225730E100AD6A5C /* DeviceVerificationCoordinatorType.swift */, + 3232AB9F225730E100AD6A5C /* DeviceVerificationCoordinatorBridgePresenter.swift */, + 3232ABA0225730E100AD6A5C /* DeviceVerificationCoordinator.swift */, + ); + path = DeviceVerification; + sourceTree = ""; + }; + 3232AB96225730E100AD6A5C /* Start */ = { + isa = PBXGroup; + children = ( + 3232AB97225730E100AD6A5C /* DeviceVerificationStartViewController.storyboard */, + 3232AB98225730E100AD6A5C /* DeviceVerificationStartCoordinatorType.swift */, + 3232AB99225730E100AD6A5C /* DeviceVerificationStartViewAction.swift */, + 3232AB9A225730E100AD6A5C /* DeviceVerificationStartViewModelType.swift */, + 3232AB9B225730E100AD6A5C /* DeviceVerificationStartViewController.swift */, + 3232AB9C225730E100AD6A5C /* DeviceVerificationStartCoordinator.swift */, + 3232AB9D225730E100AD6A5C /* DeviceVerificationStartViewState.swift */, + 3232AB9E225730E100AD6A5C /* DeviceVerificationStartViewModel.swift */, + ); + path = Start; + sourceTree = ""; + }; + 3232ABAC2257BE6400AD6A5C /* Verify */ = { + isa = PBXGroup; + children = ( + 3232ABBE22594B5C00AD6A5C /* Views */, + 3232ABAD2257BE6400AD6A5C /* DeviceVerificationVerifyCoordinatorType.swift */, + 3232ABAE2257BE6400AD6A5C /* DeviceVerificationVerifyViewController.storyboard */, + 3232ABAF2257BE6400AD6A5C /* DeviceVerificationVerifyViewModelType.swift */, + 3232ABB02257BE6400AD6A5C /* DeviceVerificationVerifyCoordinator.swift */, + 3232ABB12257BE6400AD6A5C /* DeviceVerificationVerifyViewController.swift */, + 3232ABB22257BE6400AD6A5C /* DeviceVerificationVerifyViewModel.swift */, + 3232ABB32257BE6400AD6A5C /* DeviceVerificationVerifyViewState.swift */, + 3232ABB42257BE6400AD6A5C /* DeviceVerificationVerifyViewAction.swift */, + ); + path = Verify; + sourceTree = ""; + }; + 3232ABBE22594B5C00AD6A5C /* Views */ = { + isa = PBXGroup; + children = ( + 3232ABBF22594C0900AD6A5C /* VerifyEmojiCollectionViewCell.swift */, + ); + path = Views; + sourceTree = ""; + }; + 324A2046225FC571004FE8B0 /* Incoming */ = { + isa = PBXGroup; + children = ( + 324A2047225FC571004FE8B0 /* DeviceVerificationIncomingViewController.storyboard */, + 324A2048225FC571004FE8B0 /* DeviceVerificationIncomingViewController.swift */, + 324A2049225FC571004FE8B0 /* DeviceVerificationIncomingViewState.swift */, + 324A204A225FC571004FE8B0 /* DeviceVerificationIncomingViewAction.swift */, + 324A204B225FC571004FE8B0 /* DeviceVerificationIncomingViewModel.swift */, + 324A204C225FC571004FE8B0 /* DeviceVerificationIncomingCoordinatorType.swift */, + 324A204D225FC571004FE8B0 /* DeviceVerificationIncomingViewModelType.swift */, + 324A204E225FC571004FE8B0 /* DeviceVerificationIncomingCoordinator.swift */, + ); + path = Incoming; + sourceTree = ""; + }; + 32891D682264C6A000C82226 /* SimpleScreenTemplate */ = { + isa = PBXGroup; + children = ( + 32891D6A2264CBA300C82226 /* SimpleScreenTemplateViewController.storyboard */, + 32891D692264CBA300C82226 /* SimpleScreenTemplateViewController.swift */, + ); + path = SimpleScreenTemplate; + sourceTree = ""; + }; + 32891D6D2264DF7B00C82226 /* Verified */ = { isa = PBXGroup; children = ( - 3233F7431F3497DA006ACA81 /* jitsi-meet */, + 32891D6E2264DF7B00C82226 /* DeviceVerificationVerifiedViewController.storyboard */, + 32891D6F2264DF7B00C82226 /* DeviceVerificationVerifiedViewController.swift */, ); - path = libs; + path = Verified; sourceTree = ""; }; - 3233F7431F3497DA006ACA81 /* jitsi-meet */ = { + 32891D72226728EE00C82226 /* Loading */ = { isa = PBXGroup; children = ( - 3233F7441F3497DA006ACA81 /* JitsiMeet.framework */, + 32F6B9632270623000BBA352 /* DeviceVerificationDataLoadingCoordinator.swift */, + 32F6B9662270623100BBA352 /* DeviceVerificationDataLoadingCoordinatorType.swift */, + 32F6B9652270623100BBA352 /* DeviceVerificationDataLoadingViewAction.swift */, + 32F6B9672270623100BBA352 /* DeviceVerificationDataLoadingViewModel.swift */, + 32F6B9682270623100BBA352 /* DeviceVerificationDataLoadingViewModelType.swift */, + 32F6B9642270623100BBA352 /* DeviceVerificationDataLoadingViewState.swift */, + 32891D73226728EE00C82226 /* DeviceVerificationDataLoadingViewController.swift */, + 32891D74226728EE00C82226 /* DeviceVerificationDataLoadingViewController.storyboard */, ); - path = "jitsi-meet"; + path = Loading; sourceTree = ""; }; 32935CB21F628B98006888C8 /* js */ = { @@ -1197,13 +1459,26 @@ path = KeyBackup; sourceTree = ""; }; + 4220F60B660591FD80AF3428 /* Pods */ = { + isa = PBXGroup; + children = ( + 43C2962BE367F59220F517FA /* Pods-RiotPods-Riot.debug.xcconfig */, + B43DC75D1590BB8A4243BD4D /* Pods-RiotPods-Riot.release.xcconfig */, + 9C3242E3FE95BCDA9562C75D /* Pods-RiotPods-RiotShareExtension.debug.xcconfig */, + 4FC6A5D63FAD1B27C2F57AFA /* Pods-RiotPods-RiotShareExtension.release.xcconfig */, + 3942DD65EBEB7AE647C6392A /* Pods-RiotPods-SiriIntents.debug.xcconfig */, + E2599D0ECB8DD206624E450B /* Pods-RiotPods-SiriIntents.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; 5FC42FA41F5186AFFB6A2404 /* Frameworks */ = { isa = PBXGroup; children = ( 92726A501F587410004AD26F /* Intents.framework */, - 2510A69B4A681C1FEC36E848 /* Pods_RiotPods_Riot.framework */, - F5856BA7A55E53C0AEAFC084 /* Pods_RiotPods_RiotShareExtension.framework */, - BC0B9DB497F579AB1084E3DC /* Pods_RiotPods_SiriIntents.framework */, + 1ACF09217ADF1D7E7A35BC02 /* Pods_RiotPods_Riot.framework */, + 97151D7F0F892081250D50A3 /* Pods_RiotPods_RiotShareExtension.framework */, + 51187E952D5CECF6D6F5A28E /* Pods_RiotPods_SiriIntents.framework */, ); name = Frameworks; sourceTree = ""; @@ -1219,19 +1494,6 @@ path = SiriIntents; sourceTree = ""; }; - A237FB70534FB8ADA0D7CFEE /* Pods */ = { - isa = PBXGroup; - children = ( - 78CD06F14060998545642330 /* Pods-RiotPods-Riot.debug.xcconfig */, - 319CD7C67A47A3D35959E18F /* Pods-RiotPods-Riot.release.xcconfig */, - 3998C51E0196D42B366E0900 /* Pods-RiotPods-RiotShareExtension.debug.xcconfig */, - D523D0ED52562EDD393BE0F0 /* Pods-RiotPods-RiotShareExtension.release.xcconfig */, - B4B35D08E11507BEE733BBC4 /* Pods-RiotPods-SiriIntents.debug.xcconfig */, - EE8AD7EF51758CA3EFD23BE1 /* Pods-RiotPods-SiriIntents.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; B1057787221304A200334B1E /* Success */ = { isa = PBXGroup; children = ( @@ -1625,6 +1887,7 @@ B1B5567620EE6C4C00210D55 /* Modules */ = { isa = PBXGroup; children = ( + 3232AB94225730E100AD6A5C /* DeviceVerification */, B1B556EA20EE6C4C00210D55 /* Main */, B1B556CA20EE6C4C00210D55 /* TabBar */, B1B556F920EE6C4C00210D55 /* Authentication */, @@ -2147,9 +2410,10 @@ B1B5576920EE702800210D55 /* Jitsi */ = { isa = PBXGroup; children = ( + B10CFBC22268D99D00A5842E /* JitsiService.swift */, B1B5576A20EE702800210D55 /* JitsiViewController.h */, - B1B5576B20EE702800210D55 /* JitsiViewController.xib */, B1B5576C20EE702800210D55 /* JitsiViewController.m */, + B1B5576B20EE702800210D55 /* JitsiViewController.xib */, ); path = Jitsi; sourceTree = ""; @@ -2805,7 +3069,6 @@ B1B5597C20EFC3DF00210D55 /* Managers */, B1B5567620EE6C4C00210D55 /* Modules */, F083BC0F1E7009EC00A9B29C /* Utils */, - 3233F7291F31F3B4006ACA81 /* libs */, F083BB0E1E7009EC00A9B29C /* Assets */, B169329D20F3A21B00746532 /* SupportingFiles */, ); @@ -2919,7 +3182,8 @@ 92726A441F58737A004AD26F /* SiriIntents */, F094A9A31B78D8F000B1FBBF /* Products */, 5FC42FA41F5186AFFB6A2404 /* Frameworks */, - A237FB70534FB8ADA0D7CFEE /* Pods */, + 3232AAFE22564D9100AD6A5C /* Tools */, + 4220F60B660591FD80AF3428 /* Pods */, ); sourceTree = ""; usesTabs = 0; @@ -2942,7 +3206,7 @@ isa = PBXNativeTarget; buildConfigurationList = 24CBEC5C1F0EAD310093EABB /* Build configuration list for PBXNativeTarget "RiotShareExtension" */; buildPhases = ( - 85AB1F69C1D9EC33197D7368 /* [CP] Check Pods Manifest.lock */, + A34C7B2CCE489F3A560A540A /* [CP] Check Pods Manifest.lock */, 24CBEC4A1F0EAD310093EABB /* Sources */, 24CBEC4B1F0EAD310093EABB /* Frameworks */, 24CBEC4C1F0EAD310093EABB /* Resources */, @@ -2960,7 +3224,7 @@ isa = PBXNativeTarget; buildConfigurationList = 92726A4E1F58737A004AD26F /* Build configuration list for PBXNativeTarget "SiriIntents" */; buildPhases = ( - 330DF9CF4EFAE864802D8AE5 /* [CP] Check Pods Manifest.lock */, + FF06981FDA0DB688B8C52A41 /* [CP] Check Pods Manifest.lock */, 92726A3F1F58737A004AD26F /* Sources */, 92726A401F58737A004AD26F /* Frameworks */, 92726A411F58737A004AD26F /* Resources */, @@ -2978,15 +3242,14 @@ isa = PBXNativeTarget; buildConfigurationList = F094A9C81B78D8F000B1FBBF /* Build configuration list for PBXNativeTarget "Riot" */; buildPhases = ( - E34E30CD2CEE4A42FF8081D6 /* [CP] Check Pods Manifest.lock */, + 47A83697FDBD51DC286B66C0 /* [CP] Check Pods Manifest.lock */, B1D1AC122225A43600D64A6C /* ⚠️ SwiftLint */, B1098BD821ECD3ED000DDA48 /* 🛠 SwiftGen */, F094A99E1B78D8F000B1FBBF /* Sources */, F094A99F1B78D8F000B1FBBF /* Frameworks */, F094A9A01B78D8F000B1FBBF /* Resources */, 24CBEC5D1F0EAD310093EABB /* Embed App Extensions */, - 3233F7481F3497E2006ACA81 /* Embed Frameworks */, - 5C50A1C53E6A24258653D624 /* [CP] Embed Pods Frameworks */, + 29FACD15A5CE317A58C9E77E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -3076,6 +3339,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, nl, @@ -3135,6 +3399,7 @@ files = ( B1B5590220EF768F00210D55 /* RoomOutgoingAttachmentWithPaginationTitleBubbleCell.xib in Resources */, B1B558CA20EF768F00210D55 /* RoomOutgoingEncryptedAttachmentWithoutSenderInfoBubbleCell.xib in Resources */, + 32891D702264DF7B00C82226 /* DeviceVerificationVerifiedViewController.storyboard in Resources */, F083BDE91E7009ED00A9B29C /* ring.mp3 in Resources */, B1B558F720EF768F00210D55 /* RoomIncomingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.xib in Resources */, B1B5592B20EF7A5D00210D55 /* TableViewCellWithButton.xib in Resources */, @@ -3193,17 +3458,23 @@ B1B5573720EE6C4D00210D55 /* GroupParticipantsViewController.xib in Resources */, B110872421F098F0003554A5 /* ActivityIndicatorView.xib in Resources */, B1B5573320EE6C4D00210D55 /* GroupHomeViewController.xib in Resources */, + 3232AB2122564D9100AD6A5C /* README.md in Resources */, B1B5593920EF7BAC00210D55 /* TableViewCellWithCheckBoxes.xib in Resources */, B1B557C120EF5B4500210D55 /* DisabledRoomInputToolbarView.xib in Resources */, + 32891D6C2264CBA300C82226 /* SimpleScreenTemplateViewController.storyboard in Resources */, B1664DA320F4F96200808783 /* Vector.strings in Resources */, B1B557C720EF5CD400210D55 /* DirectoryServerDetailTableViewCell.xib in Resources */, B1B5582620EF638A00210D55 /* RoomMemberTitleView.xib in Resources */, + 3232AB1522564D9100AD6A5C /* flat-swift4-vector.stencil in Resources */, F083BDE61E7009ED00A9B29C /* busy.mp3 in Resources */, B1B5574C20EE6C4D00210D55 /* MediaAlbumContentViewController.xib in Resources */, B1B557E820EF60F500210D55 /* MessagesSearchResultTextMsgBubbleCell.xib in Resources */, B1B558D920EF768F00210D55 /* RoomOutgoingEncryptedAttachmentBubbleCell.xib in Resources */, B1B5573020EE6C4D00210D55 /* BugReportViewController.xib in Resources */, B169329B20F39E6300746532 /* Main.storyboard in Resources */, + 3232AB1422564D9100AD6A5C /* swiftgen-config.yml in Resources */, + 324A204F225FC571004FE8B0 /* DeviceVerificationIncomingViewController.storyboard in Resources */, + 3232AB4B2256558300AD6A5C /* TemplateScreenViewController.storyboard in Resources */, 32B1FEDB21A46F2C00637127 /* TermsView.xib in Resources */, B1B5578E20EF568D00210D55 /* GroupInviteTableViewCell.xib in Resources */, B1B5582020EF625800210D55 /* SimpleRoomTitleView.xib in Resources */, @@ -3243,15 +3514,18 @@ B1B557B320EF5AEF00210D55 /* EventDetailsView.xib in Resources */, B1B557DD20EF5FBB00210D55 /* FilesSearchTableViewCell.xib in Resources */, B1B5590320EF768F00210D55 /* RoomSelectedStickerBubbleCell.xib in Resources */, + 3232ABB62257BE6400AD6A5C /* DeviceVerificationVerifyViewController.storyboard in Resources */, B1B5573F20EE6C4D00210D55 /* SegmentedViewController.xib in Resources */, B1B5581E20EF625800210D55 /* RoomTitleView.xib in Resources */, B1B558C020EF768F00210D55 /* RoomIncomingEncryptedTextMsgWithoutSenderInfoBubbleCell.xib in Resources */, B1B5572420EE6C4D00210D55 /* RoomViewController.xib in Resources */, B169331520F3CAFC00746532 /* PublicRoomTableViewCell.xib in Resources */, + 3232ABA2225730E100AD6A5C /* DeviceVerificationStartViewController.storyboard in Resources */, 3284A35120A07C210044F922 /* postMessageAPI.js in Resources */, B1B557A220EF58AD00210D55 /* ContactTableViewCell.xib in Resources */, B1B558EB20EF768F00210D55 /* RoomIncomingTextMsgWithPaginationTitleBubbleCell.xib in Resources */, B10B3B5C2201DD740072C76B /* KeyBackupBannerCell.xib in Resources */, + 32891D76226728EF00C82226 /* DeviceVerificationDataLoadingViewController.storyboard in Resources */, B1B5581820EF625800210D55 /* PreviewRoomTitleView.xib in Resources */, B1B5583020EF66BA00210D55 /* RoomIdOrAliasTableViewCell.xib in Resources */, B1B558BF20EF768F00210D55 /* RoomOutgoingEncryptedTextMsgWithoutSenderNameBubbleCell.xib in Resources */, @@ -3273,28 +3547,12 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 330DF9CF4EFAE864802D8AE5 /* [CP] Check Pods Manifest.lock */ = { + 29FACD15A5CE317A58C9E77E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RiotPods-SiriIntents-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 5C50A1C53E6A24258653D624 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( + inputFileListPaths = ( ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-RiotPods-Riot/Pods-RiotPods-Riot-frameworks.sh", @@ -3304,13 +3562,14 @@ "${BUILT_PRODUCTS_DIR}/GBDeviceInfo/GBDeviceInfo.framework", "${BUILT_PRODUCTS_DIR}/GZIP/GZIP.framework", "${BUILT_PRODUCTS_DIR}/HPGrowingTextView/HPGrowingTextView.framework", + "${PODS_ROOT}/JitsiMeetSDK/Frameworks/JitsiMeet.framework", + "${PODS_ROOT}/JitsiMeetSDK/Frameworks/WebRTC.framework", "${BUILT_PRODUCTS_DIR}/MatrixKit/MatrixKit.framework", - "${BUILT_PRODUCTS_DIR}/MatrixSDK/MatrixSDK.framework", + "${BUILT_PRODUCTS_DIR}/MatrixSDK.common-JingleCallStack/MatrixSDK.framework", "${BUILT_PRODUCTS_DIR}/OLMKit/OLMKit.framework", "${BUILT_PRODUCTS_DIR}/PiwikTracker/PiwikTracker.framework", "${BUILT_PRODUCTS_DIR}/Realm/Realm.framework", "${BUILT_PRODUCTS_DIR}/Reusable/Reusable.framework", - "${PODS_ROOT}/WebRTC/WebRTC.framework", "${BUILT_PRODUCTS_DIR}/cmark/cmark.framework", "${BUILT_PRODUCTS_DIR}/libPhoneNumber-iOS/libPhoneNumber_iOS.framework", "${BUILT_PRODUCTS_DIR}/libbase58/libbase58.framework", @@ -3319,6 +3578,8 @@ "${BUILT_PRODUCTS_DIR}/MatrixKit-AppExtension/MatrixKit.framework", ); name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + ); outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DTCoreText.framework", @@ -3326,13 +3587,14 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GBDeviceInfo.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GZIP.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/HPGrowingTextView.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JitsiMeet.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MatrixKit.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MatrixSDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OLMKit.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PiwikTracker.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reusable.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/cmark.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libPhoneNumber_iOS.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libbase58.framework", @@ -3343,16 +3605,42 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RiotPods-Riot/Pods-RiotPods-Riot-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 85AB1F69C1D9EC33197D7368 /* [CP] Check Pods Manifest.lock */ = { + 47A83697FDBD51DC286B66C0 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( "${PODS_PODFILE_DIR_PATH}/Podfile.lock", "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RiotPods-Riot-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + A34C7B2CCE489F3A560A540A /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); outputPaths = ( "$(DERIVED_FILE_DIR)/Pods-RiotPods-RiotShareExtension-checkManifestLockResult.txt", ); @@ -3397,18 +3685,22 @@ shellPath = /bin/sh; shellScript = "${PODS_ROOT}/SwiftLint/swiftlint\n"; }; - E34E30CD2CEE4A42FF8081D6 /* [CP] Check Pods Manifest.lock */ = { + FF06981FDA0DB688B8C52A41 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( "${PODS_PODFILE_DIR_PATH}/Podfile.lock", "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RiotPods-Riot-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RiotPods-SiriIntents-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -3460,14 +3752,18 @@ buildActionMask = 2147483647; files = ( B1B557D120EF5E3500210D55 /* MediaAlbumTableCell.m in Sources */, + 324A2053225FC571004FE8B0 /* DeviceVerificationIncomingViewModel.swift in Sources */, B1B557A120EF58AD00210D55 /* ContactTableViewCell.m in Sources */, F083BE021E7009ED00A9B29C /* AvatarGenerator.m in Sources */, B1B5573A20EE6C4D00210D55 /* GroupRoomsViewController.m in Sources */, B1B558F920EF768F00210D55 /* RoomOutgoingTextMsgWithoutSenderNameBubbleCell.m in Sources */, B1FDF56021F5FE5500BA3834 /* KeyBackupSetupPassphraseViewAction.swift in Sources */, B1B5573120EE6C4D00210D55 /* BugReportViewController.m in Sources */, + 324A2051225FC571004FE8B0 /* DeviceVerificationIncomingViewState.swift in Sources */, B16932A520F3A21C00746532 /* empty.mm in Sources */, + 3232AB4A2256558300AD6A5C /* FlowTemplateCoordinator.swift in Sources */, B19EFA3B21F8BB4100FC070E /* KeyBackupRecoverCoordinator.swift in Sources */, + 3232ABA9225730E100AD6A5C /* DeviceVerificationStartViewModel.swift in Sources */, B16932FA20F3C51A00746532 /* RecentCellData.m in Sources */, B16932F220F3C49E00746532 /* GroupsDataSource.m in Sources */, B1B5581C20EF625800210D55 /* RoomAvatarTitleView.m in Sources */, @@ -3476,15 +3772,19 @@ B1B5598820EFC3E000210D55 /* WidgetManager.m in Sources */, B1DB4F0E22316FFF0065DBFA /* UserNameColorGenerator.swift in Sources */, B1057789221304EC00334B1E /* KeyBackupSetupSuccessFromPassphraseViewController.swift in Sources */, + 3232ABB72257BE6400AD6A5C /* DeviceVerificationVerifyViewModelType.swift in Sources */, + 32F6B96D2270623100BBA352 /* DeviceVerificationDataLoadingViewModel.swift in Sources */, B16932B120F3AC9200746532 /* RoomSearchDataSource.m in Sources */, B16932A320F3A21C00746532 /* main.m in Sources */, B1B5574520EE6C4D00210D55 /* StartChatViewController.m in Sources */, + 3232AB4C2256558300AD6A5C /* TemplateScreenCoordinator.swift in Sources */, B1B5575920EE6C4D00210D55 /* HomeMessagesSearchViewController.m in Sources */, B1B558DE20EF768F00210D55 /* RoomIncomingAttachmentBubbleCell.m in Sources */, B1B5574820EE6C4D00210D55 /* PeopleViewController.m in Sources */, B1B5598720EFC3E000210D55 /* Widget.m in Sources */, B1B557E320EF60B900210D55 /* MessagesSearchResultAttachmentBubbleCell.m in Sources */, B1CE9F062216FB09000FAE6A /* EncryptionKeysExportPresenter.swift in Sources */, + 3232ABAA225730E100AD6A5C /* DeviceVerificationCoordinatorBridgePresenter.swift in Sources */, B1B5574420EE6C4D00210D55 /* CallViewController.m in Sources */, B1B5572220EE6C4D00210D55 /* RoomSettingsViewController.m in Sources */, B1B5577320EE702800210D55 /* JitsiViewController.m in Sources */, @@ -3499,9 +3799,12 @@ B1B5572320EE6C4D00210D55 /* AttachmentsViewController.m in Sources */, F083BDEE1E7009ED00A9B29C /* MXRoom+Riot.m in Sources */, B1B5598620EFC3E000210D55 /* RiotSettings.swift in Sources */, + 3232ABA3225730E100AD6A5C /* DeviceVerificationStartCoordinatorType.swift in Sources */, + 3232AB4D2256558300AD6A5C /* TemplateScreenCoordinatorType.swift in Sources */, B1B5581720EF625800210D55 /* PreviewRoomTitleView.m in Sources */, B1098BDF21ECE09F000DDA48 /* Strings.swift in Sources */, B1B558C420EF768F00210D55 /* RoomIncomingEncryptedTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.m in Sources */, + 3232ABC022594C0900AD6A5C /* VerifyEmojiCollectionViewCell.swift in Sources */, B1B5572F20EE6C4D00210D55 /* ReadReceiptsViewController.m in Sources */, B1B558CB20EF768F00210D55 /* RoomIncomingEncryptedTextMsgWithoutSenderInfoBubbleCell.m in Sources */, B169330B20F3CA3A00746532 /* Contact.m in Sources */, @@ -3517,6 +3820,7 @@ B139C21B21FE5B9200BB68EC /* KeyBackupRecoverFromPassphraseViewModel.swift in Sources */, B1B5574A20EE6C4D00210D55 /* MediaPickerViewController.m in Sources */, B1B5598520EFC3E000210D55 /* RageShakeManager.m in Sources */, + 3232ABA8225730E100AD6A5C /* DeviceVerificationStartViewState.swift in Sources */, B1B558D420EF768F00210D55 /* RoomOutgoingEncryptedTextMsgWithoutSenderInfoBubbleCell.m in Sources */, B169331420F3CAFC00746532 /* PublicRoomTableViewCell.m in Sources */, 32BF995721FB07A400698084 /* SettingsKeyBackupTableViewSection.swift in Sources */, @@ -3524,7 +3828,9 @@ B1B558E120EF768F00210D55 /* RoomMembershipCollapsedBubbleCell.m in Sources */, B1B5571A20EE6C4D00210D55 /* SettingsViewController.m in Sources */, B1CE9EFD22148703000FAE6A /* SignOutAlertPresenter.swift in Sources */, + 32F6B9692270623100BBA352 /* DeviceVerificationDataLoadingCoordinator.swift in Sources */, B1B5594720EF7BD000210D55 /* RoomCollectionViewCell.m in Sources */, + B10CFBC32268D99D00A5842E /* JitsiService.swift in Sources */, B1B558C120EF768F00210D55 /* RoomIncomingEncryptedAttachmentWithPaginationTitleBubbleCell.m in Sources */, B1B5573E20EE6C4D00210D55 /* RiotNavigationController.m in Sources */, B1B5593B20EF7BAC00210D55 /* TableViewCellWithCheckBoxAndLabel.m in Sources */, @@ -3539,19 +3845,28 @@ B1B5573D20EE6C4D00210D55 /* WebViewViewController.m in Sources */, 3209451221F1C1430088CAA2 /* BlackTheme.swift in Sources */, B1B5572720EE6C4D00210D55 /* RoomSearchViewController.m in Sources */, + 3232ABBC2257BE6500AD6A5C /* DeviceVerificationVerifyViewAction.swift in Sources */, F05927C91FDED836009F2A68 /* MXGroup+Riot.m in Sources */, B1B5594520EF7BD000210D55 /* TableViewCellWithCollectionView.m in Sources */, + 32891D75226728EE00C82226 /* DeviceVerificationDataLoadingViewController.swift in Sources */, + 32891D712264DF7B00C82226 /* DeviceVerificationVerifiedViewController.swift in Sources */, F083BDEF1E7009ED00A9B29C /* UINavigationController+Riot.m in Sources */, B1B5581F20EF625800210D55 /* SimpleRoomTitleView.m in Sources */, B169330020F3C97D00746532 /* RoomDataSource.m in Sources */, B1B558ED20EF768F00210D55 /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.m in Sources */, B1B5571920EE6C4D00210D55 /* LanguagePickerViewController.m in Sources */, + 3232AB512256558300AD6A5C /* TemplateScreenViewAction.swift in Sources */, + 3232AB4E2256558300AD6A5C /* TemplateScreenViewModelType.swift in Sources */, B1B5590520EF768F00210D55 /* RoomIncomingTextMsgWithoutSenderInfoBubbleCell.m in Sources */, + 3232ABA5225730E100AD6A5C /* DeviceVerificationStartViewModelType.swift in Sources */, B1B558DD20EF768F00210D55 /* RoomIncomingEncryptedTextMsgBubbleCell.m in Sources */, B1098BE521ECE1FC000DDA48 /* Storyboards.swift in Sources */, + 3232ABC2225B996200AD6A5C /* Themable.swift in Sources */, + 3232ABA7225730E100AD6A5C /* DeviceVerificationStartCoordinator.swift in Sources */, B1D4752721EE4E630067973F /* KeyboardAvoider.swift in Sources */, B1D4752821EE4E630067973F /* KeyboardNotification.swift in Sources */, B1B5573C20EE6C4D00210D55 /* MasterTabBarController.m in Sources */, + 32F6B96E2270623100BBA352 /* DeviceVerificationDataLoadingViewModelType.swift in Sources */, B1B5592C20EF7A5D00210D55 /* TableViewCellWithButton.m in Sources */, 32242F1421E8FBA900725742 /* DefaultTheme.swift in Sources */, 32242F1321E8FBA900725742 /* Theme.swift in Sources */, @@ -3559,23 +3874,31 @@ B1B5582C20EF666100210D55 /* DirectoryRecentTableViewCell.m in Sources */, B1B558E420EF768F00210D55 /* RoomMembershipWithPaginationTitleBubbleCell.m in Sources */, B1B5573620EE6C4D00210D55 /* GroupsViewController.m in Sources */, + 3232ABB82257BE6500AD6A5C /* DeviceVerificationVerifyCoordinator.swift in Sources */, B1B5572A20EE6C4D00210D55 /* RoomMemberDetailsViewController.m in Sources */, B1B5590120EF768F00210D55 /* RoomMembershipExpandedWithPaginationTitleBubbleCell.m in Sources */, + 32F6B96B2270623100BBA352 /* DeviceVerificationDataLoadingViewAction.swift in Sources */, B1B558C920EF768F00210D55 /* RoomIncomingEncryptedAttachmentWithoutSenderInfoBubbleCell.m in Sources */, B1B5571B20EE6C4D00210D55 /* DeactivateAccountViewController.m in Sources */, B1B5590620EF768F00210D55 /* RoomMembershipCollapsedWithPaginationTitleBubbleCell.m in Sources */, B139C21D21FE5BF500BB68EC /* KeyBackupRecoverFromPassphraseViewModelType.swift in Sources */, F083BE031E7009ED00A9B29C /* EventFormatter.m in Sources */, + 324A2056225FC571004FE8B0 /* DeviceVerificationIncomingCoordinator.swift in Sources */, B16932F720F3C50E00746532 /* RecentsDataSource.m in Sources */, + 3232AB4F2256558300AD6A5C /* TemplateScreenViewController.swift in Sources */, B1B558FC20EF768F00210D55 /* RoomIncomingTextMsgWithPaginationTitleBubbleCell.m in Sources */, B1B5572920EE6C4D00210D55 /* RoomFilesViewController.m in Sources */, + 3232ABBA2257BE6500AD6A5C /* DeviceVerificationVerifyViewModel.swift in Sources */, B1098C1021ED07E4000DDA48 /* Presentable.swift in Sources */, B1B558E020EF768F00210D55 /* RoomOutgoingTextMsgBubbleCell.m in Sources */, B1B5593C20EF7BAC00210D55 /* TableViewCellWithCheckBoxes.m in Sources */, + 32891D6B2264CBA300C82226 /* SimpleScreenTemplateViewController.swift in Sources */, B1CA3A2721EF6914000D1D89 /* UIViewController.swift in Sources */, F0D2ADA11F6AA5FD00A7097D /* MXRoomSummary+Riot.m in Sources */, B1B5596F20EFA85D00210D55 /* EncryptionInfoView.m in Sources */, B1B5573820EE6C4D00210D55 /* GroupParticipantsViewController.m in Sources */, + 3232ABBB2257BE6500AD6A5C /* DeviceVerificationVerifyViewState.swift in Sources */, + 3232ABAB225730E100AD6A5C /* DeviceVerificationCoordinator.swift in Sources */, B1B5583E20EF6E7F00210D55 /* GroupRoomTableViewCell.m in Sources */, B14F143522144F6500FA0595 /* KeyBackupRecoverFromRecoveryKeyViewController.swift in Sources */, B1B5574F20EE6C4D00210D55 /* RoomsViewController.m in Sources */, @@ -3585,6 +3908,7 @@ B1B5579A20EF575B00210D55 /* ForgotPasswordInputsView.m in Sources */, B1B558CC20EF768F00210D55 /* RoomOutgoingEncryptedAttachmentWithoutSenderInfoBubbleCell.m in Sources */, B1B5571D20EE6C4D00210D55 /* HomeViewController.m in Sources */, + 3232ABA6225730E100AD6A5C /* DeviceVerificationStartViewController.swift in Sources */, B16932EA20F3C39000746532 /* UnifiedSearchRecentsDataSource.m in Sources */, B1B557DE20EF5FBB00210D55 /* FilesSearchTableViewCell.m in Sources */, B1B5574020EE6C4D00210D55 /* SegmentedViewController.m in Sources */, @@ -3604,6 +3928,7 @@ B1B5578F20EF568D00210D55 /* GroupTableViewCell.m in Sources */, B1B5573220EE6C4D00210D55 /* GroupHomeViewController.m in Sources */, B1B5595220EF9A8700210D55 /* RecentTableViewCell.m in Sources */, + 32F6B96C2270623100BBA352 /* DeviceVerificationDataLoadingCoordinatorType.swift in Sources */, B1B5574120EE6C4D00210D55 /* RecentsViewController.m in Sources */, B1D250D82118AA0A000F4E93 /* RoomPredecessorBubbleCell.m in Sources */, B1B5577120EE702800210D55 /* StickerPickerViewController.m in Sources */, @@ -3625,6 +3950,7 @@ B1B558E620EF768F00210D55 /* RoomIncomingAttachmentWithoutSenderInfoBubbleCell.m in Sources */, B1098BFB21ECFE65000DDA48 /* KeyBackupSetupCoordinatorType.swift in Sources */, B1098BF721ECFE65000DDA48 /* PasswordStrength.swift in Sources */, + 324A2052225FC571004FE8B0 /* DeviceVerificationIncomingViewAction.swift in Sources */, B105778D2213051E00334B1E /* KeyBackupSetupSuccessFromRecoveryKeyViewController.swift in Sources */, B1B557D820EF5EA900210D55 /* RoomActivitiesView.m in Sources */, B1B5596620EF9E9B00210D55 /* RoomTableViewCell.m in Sources */, @@ -3636,24 +3962,31 @@ B1B5571820EE6C4D00210D55 /* CountryPickerViewController.m in Sources */, B17982FF2119FED2001FD722 /* GDPRConsentViewController.swift in Sources */, B1098BE121ECE09F000DDA48 /* Images.swift in Sources */, + 3232ABA4225730E100AD6A5C /* DeviceVerificationStartViewAction.swift in Sources */, B1B5575A20EE6C4D00210D55 /* UnifiedSearchViewController.m in Sources */, + 3232AB492256558300AD6A5C /* FlowTemplateCoordinatorBridgePresenter.swift in Sources */, B1B5572820EE6C4D00210D55 /* RoomViewController.m in Sources */, B1B558C720EF768F00210D55 /* RoomOutgoingEncryptedTextMsgWithPaginationTitleBubbleCell.m in Sources */, B1B558F020EF768F00210D55 /* RoomOutgoingAttachmentWithPaginationTitleBubbleCell.m in Sources */, 926FA53F1F4C132000F826C2 /* MXSession+Riot.m in Sources */, B1B5593820EF7BAC00210D55 /* TableViewCellWithLabelAndLargeTextView.m in Sources */, + 3232AB502256558300AD6A5C /* TemplateScreenViewState.swift in Sources */, B1B558C820EF768F00210D55 /* RoomIncomingEncryptedAttachmentBubbleCell.m in Sources */, B1B557C620EF5CD400210D55 /* DirectoryServerDetailTableViewCell.m in Sources */, B1B5590920EF768F00210D55 /* RoomEmptyBubbleCell.m in Sources */, + 324A2054225FC571004FE8B0 /* DeviceVerificationIncomingCoordinatorType.swift in Sources */, + 3232ABB92257BE6500AD6A5C /* DeviceVerificationVerifyViewController.swift in Sources */, B139C21F21FE5D6600BB68EC /* KeyBackupRecoverFromPassphraseViewAction.swift in Sources */, B1B5574720EE6C4D00210D55 /* UsersDevicesViewController.m in Sources */, B1098BFF21ECFE65000DDA48 /* PasswordStrengthView.swift in Sources */, B1B558D220EF768F00210D55 /* RoomEncryptedDataBubbleCell.m in Sources */, B1B558FA20EF768F00210D55 /* RoomMembershipBubbleCell.m in Sources */, + 3232ABA1225730E100AD6A5C /* DeviceVerificationCoordinatorType.swift in Sources */, B1B557BF20EF5B4500210D55 /* DisabledRoomInputToolbarView.m in Sources */, B1B5578620EF564900210D55 /* GroupTableViewCellWithSwitch.m in Sources */, B1098BE821ECFE52000DDA48 /* Coordinator.swift in Sources */, B1B557E920EF60F500210D55 /* MessagesSearchResultTextMsgBubbleCell.m in Sources */, + 324A2050225FC571004FE8B0 /* DeviceVerificationIncomingViewController.swift in Sources */, B1098C0D21ED07E4000DDA48 /* NavigationRouter.swift in Sources */, B110872321F098F0003554A5 /* ActivityIndicatorPresenterType.swift in Sources */, B139C22321FF01B200BB68EC /* KeyBackupRecoverFromPassphraseCoordinatorType.swift in Sources */, @@ -3673,20 +4006,25 @@ B16932EE20F3C3C900746532 /* FilesSearchCellData.m in Sources */, B1B558E520EF768F00210D55 /* RoomMembershipExpandedBubbleCell.m in Sources */, 32BF995121FA29DC00698084 /* SettingsKeyBackupViewModelType.swift in Sources */, + 32F6B96A2270623100BBA352 /* DeviceVerificationDataLoadingViewState.swift in Sources */, 32BF995321FA2A1300698084 /* SettingsKeyBackupViewState.swift in Sources */, B1B5599420EFC5E400210D55 /* DecryptionFailureTracker.m in Sources */, F083BDF01E7009ED00A9B29C /* UIViewController+RiotSearch.m in Sources */, F083BDF91E7009ED00A9B29C /* RoomEmailInvitation.m in Sources */, + 324A2055225FC571004FE8B0 /* DeviceVerificationIncomingViewModelType.swift in Sources */, B1B5572C20EE6C4D00210D55 /* RoomParticipantsViewController.m in Sources */, B1B558EE20EF768F00210D55 /* RoomOutgoingAttachmentBubbleCell.m in Sources */, + 3232ABB52257BE6400AD6A5C /* DeviceVerificationVerifyCoordinatorType.swift in Sources */, 32BF994F21FA29A400698084 /* SettingsKeyBackupViewModel.swift in Sources */, B1B5574920EE6C4D00210D55 /* RiotSplitViewController.m in Sources */, B1B5574E20EE6C4D00210D55 /* DirectoryServerPickerViewController.m in Sources */, B1DB4F0B223131600065DBFA /* String.swift in Sources */, + 3232AB522256558300AD6A5C /* TemplateScreenViewModel.swift in Sources */, B1B5575B20EE6C4D00210D55 /* HomeFilesSearchViewController.m in Sources */, B139C22521FF01C100BB68EC /* KeyBackupRecoverFromPassphraseCoordinator.swift in Sources */, B1098BFD21ECFE65000DDA48 /* PasswordStrengthManager.swift in Sources */, B1B558F520EF768F00210D55 /* RoomOutgoingTextMsgWithPaginationTitleBubbleCell.m in Sources */, + 3232AB482256558300AD6A5C /* FlowTemplateCoordinatorType.swift in Sources */, B1B558F820EF768F00210D55 /* RoomIncomingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.m in Sources */, 32242F0921E8B05F00725742 /* UIColor.swift in Sources */, B16932E720F3C37100746532 /* HomeMessagesSearchDataSource.m in Sources */, @@ -3820,7 +4158,7 @@ /* Begin XCBuildConfiguration section */ 24CBEC5A1F0EAD310093EABB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3998C51E0196D42B366E0900 /* Pods-RiotPods-RiotShareExtension.debug.xcconfig */; + baseConfigurationReference = 9C3242E3FE95BCDA9562C75D /* Pods-RiotPods-RiotShareExtension.debug.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -3831,29 +4169,35 @@ DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = 7J4U792NQT; ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", - "COCOAPODS=1", "IS_SHARE_EXTENSION=1", ); + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = RiotShareExtension/SupportingFiles/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_CFLAGS = "$(inherited)"; + OTHER_LDFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = im.vector.app.shareExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/$(PRODUCT_NAME)/SupportingFiles/RiotShareExtension-Bridging-Header.h"; SWIFT_VERSION = 4.2; + USER_HEADER_SEARCH_PATHS = "$(inherited)"; }; name = Debug; }; 24CBEC5B1F0EAD310093EABB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D523D0ED52562EDD393BE0F0 /* Pods-RiotPods-RiotShareExtension.release.xcconfig */; + baseConfigurationReference = 4FC6A5D63FAD1B27C2F57AFA /* Pods-RiotPods-RiotShareExtension.release.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -3865,29 +4209,35 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = 7J4U792NQT; ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", - "COCOAPODS=1", "IS_SHARE_EXTENSION=1", ); + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = RiotShareExtension/SupportingFiles/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_CFLAGS = "$(inherited)"; + OTHER_LDFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = im.vector.app.shareExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/$(PRODUCT_NAME)/SupportingFiles/RiotShareExtension-Bridging-Header.h"; SWIFT_VERSION = 4.2; + USER_HEADER_SEARCH_PATHS = "$(inherited)"; }; name = Release; }; 92726A4C1F58737A004AD26F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B4B35D08E11507BEE733BBC4 /* Pods-RiotPods-SiriIntents.debug.xcconfig */; + baseConfigurationReference = 3942DD65EBEB7AE647C6392A /* Pods-RiotPods-SiriIntents.debug.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -3896,6 +4246,9 @@ DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = 7J4U792NQT; ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = SiriIntents/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -3903,15 +4256,20 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_CFLAGS = "$(inherited)"; + OTHER_LDFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = im.vector.app.SiriIntents; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + USER_HEADER_SEARCH_PATHS = "$(inherited)"; }; name = Debug; }; 92726A4D1F58737A004AD26F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EE8AD7EF51758CA3EFD23BE1 /* Pods-RiotPods-SiriIntents.release.xcconfig */; + baseConfigurationReference = E2599D0ECB8DD206624E450B /* Pods-RiotPods-SiriIntents.release.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -3921,6 +4279,9 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = 7J4U792NQT; ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = SiriIntents/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -3928,9 +4289,14 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_CFLAGS = "$(inherited)"; + OTHER_LDFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = im.vector.app.SiriIntents; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + USER_HEADER_SEARCH_PATHS = "$(inherited)"; }; name = Release; }; @@ -3982,7 +4348,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -4031,7 +4397,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; @@ -4042,7 +4408,7 @@ }; F094A9C91B78D8F000B1FBBF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 78CD06F14060998545642330 /* Pods-RiotPods-Riot.debug.xcconfig */; + baseConfigurationReference = 43C2962BE367F59220F517FA /* Pods-RiotPods-Riot.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -4050,75 +4416,57 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DEVELOPMENT_TEAM = 7J4U792NQT; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GBDeviceInfo\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GZIP\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/HPGrowingTextView\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/MatrixKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/MatrixSDK\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/OLMKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/Realm\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/cmark\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/libPhoneNumber-iOS\"", - "\"${PODS_ROOT}/WebRTC\"", - "\"$(PROJECT_DIR)/Riot/libs/jitsi-meet\"", - ); + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = Riot/SupportingFiles/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_CFLAGS = "$(inherited)"; + OTHER_LDFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = im.vector.app; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/$(PRODUCT_NAME)/SupportingFiles/Riot-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; + USER_HEADER_SEARCH_PATHS = "$(inherited)"; }; name = Debug; }; F094A9CA1B78D8F000B1FBBF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 319CD7C67A47A3D35959E18F /* Pods-RiotPods-Riot.release.xcconfig */; + baseConfigurationReference = B43DC75D1590BB8A4243BD4D /* Pods-RiotPods-Riot.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Riot/SupportingFiles/Riot.entitlements; DEVELOPMENT_TEAM = 7J4U792NQT; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GBDeviceInfo\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GZIP\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/HPGrowingTextView\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/MatrixKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/MatrixSDK\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/OLMKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/Realm\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/cmark\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/libPhoneNumber-iOS\"", - "\"${PODS_ROOT}/WebRTC\"", - "\"$(PROJECT_DIR)/Riot/libs/jitsi-meet\"", - ); + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = Riot/SupportingFiles/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_CFLAGS = "$(inherited)"; + OTHER_LDFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = im.vector.app; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/$(PRODUCT_NAME)/SupportingFiles/Riot-Bridging-Header.h"; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; + USER_HEADER_SEARCH_PATHS = "$(inherited)"; }; name = Release; }; diff --git a/Riot/AppDelegate.h b/Riot/AppDelegate.h index 8111610109..d44a70a834 100644 --- a/Riot/AppDelegate.h +++ b/Riot/AppDelegate.h @@ -17,6 +17,7 @@ #import #import +#import #import "MasterTabBarController.h" #import "JitsiViewController.h" @@ -37,7 +38,7 @@ extern NSString *const kAppDelegateDidTapStatusBarNotification; */ extern NSString *const kAppDelegateNetworkStatusDidChangeNotification; -@interface AppDelegate : UIResponder +@interface AppDelegate : UIResponder { BOOL isPushRegistered; @@ -119,7 +120,7 @@ extern NSString *const kAppDelegateNetworkStatusDidChangeNotification; Log out all the accounts without confirmation. Show the authentication screen on successful logout. - @param sendLogoutRequest Indicate whether send logout request to home server. + @param sendLogoutRequest Indicate whether send logout request to homeserver. @param completion the block to execute at the end of the operation. */ - (void)logoutSendingRequestServer:(BOOL)sendLogoutServerRequest @@ -143,6 +144,11 @@ extern NSString *const kAppDelegateNetworkStatusDidChangeNotification; #pragma mark - Matrix Room handling +// Show a room and jump to the given event if event id is not nil otherwise go to last messages. +- (void)showRoom:(NSString*)roomId andEventId:(NSString*)eventId withMatrixSession:(MXSession*)mxSession restoreInitialDisplay:(BOOL)restoreInitialDisplay completion:(void (^)(void))completion; + +- (void)showRoom:(NSString*)roomId andEventId:(NSString*)eventId withMatrixSession:(MXSession*)mxSession restoreInitialDisplay:(BOOL)restoreInitialDisplay; + - (void)showRoom:(NSString*)roomId andEventId:(NSString*)eventId withMatrixSession:(MXSession*)mxSession; // Creates a new direct chat with the provided user id diff --git a/Riot/AppDelegate.m b/Riot/AppDelegate.m index c099b2719e..65b7ffdd3f 100644 --- a/Riot/AppDelegate.m +++ b/Riot/AppDelegate.m @@ -72,6 +72,8 @@ #endif #ifdef CALL_STACK_JINGLE #import +#import + #endif #define CALL_STATUS_BAR_HEIGHT 44 @@ -82,7 +84,7 @@ NSString *const kAppDelegateDidTapStatusBarNotification = @"kAppDelegateDidTapStatusBarNotification"; NSString *const kAppDelegateNetworkStatusDidChangeNotification = @"kAppDelegateNetworkStatusDidChangeNotification"; -@interface AppDelegate () +@interface AppDelegate () { /** Reachability observer @@ -126,6 +128,16 @@ The current call view controller (if any). */ RoomKeyRequestViewController *roomKeyRequestViewController; + /** + Incoming device verification requests observers + */ + id incomingDeviceVerificationObserver; + + /** + If any the currently displayed device verification dialog + */ + DeviceVerificationCoordinatorBridgePresenter *deviceVerificationCoordinatorBridgePresenter; + /** Account picker used in case of multiple account. */ @@ -479,6 +491,15 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( // Add matrix observers, and initialize matrix sessions if the app is not launched in background. [self initMatrixSessions]; + + // Setup Jitsi + + NSString *jitsiServerStringURL = [[NSUserDefaults standardUserDefaults] objectForKey:@"jitsiServerURL"]; + NSURL *jitsiServerURL = [NSURL URLWithString:jitsiServerStringURL]; + + [JitsiService.shared configureDefaultConferenceOptionsWith:jitsiServerURL]; + + [JitsiService.shared application:application didFinishLaunchingWithOptions:launchOptions]; NSLog(@"[AppDelegate] didFinishLaunchingWithOptions: Done in %.0fms", [[NSDate date] timeIntervalSinceDate:startDate] * 1000); @@ -696,7 +717,7 @@ - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application NSLog(@"[AppDelegate] applicationDidReceiveMemoryWarning"); } -- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler +- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray> * _Nullable))restorationHandler { BOOL continueUserActivity = NO; @@ -1134,30 +1155,47 @@ - (void)checkExceptionToReport - (void)registerUserNotificationSettings { + NSLog(@"[AppDelegate][Push] registerUserNotificationSettings: isPushRegistered: %@", @(isPushRegistered)); + if (!isPushRegistered) { - NSMutableSet* notificationCategories = [NSMutableSet set]; - - UIMutableUserNotificationAction* quickReply = [[UIMutableUserNotificationAction alloc] init]; - quickReply.title = NSLocalizedStringFromTable(@"room_message_short_placeholder", @"Vector", nil); - quickReply.identifier = @"inline-reply"; - quickReply.activationMode = UIUserNotificationActivationModeBackground; - quickReply.authenticationRequired = true; - quickReply.behavior = UIUserNotificationActionBehaviorTextInput; - - UIMutableUserNotificationCategory* quickReplyCategory = [[UIMutableUserNotificationCategory alloc] init]; - quickReplyCategory.identifier = @"QUICK_REPLY"; - [quickReplyCategory setActions:@[quickReply] forContext:UIUserNotificationActionContextDefault]; - [notificationCategories addObject:quickReplyCategory]; - - // Registration on iOS 8 and later - UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound |UIUserNotificationTypeAlert) categories:notificationCategories]; - [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; + UNTextInputNotificationAction *quickReply = [UNTextInputNotificationAction + actionWithIdentifier:@"inline-reply" + title:NSLocalizedStringFromTable(@"room_message_short_placeholder", @"Vector", nil) + options:UNNotificationActionOptionAuthenticationRequired + ]; + + UNNotificationCategory *quickReplyCategory = [UNNotificationCategory + categoryWithIdentifier:@"QUICK_REPLY" + actions:@[quickReply] + intentIdentifiers:@[] + options:UNNotificationCategoryOptionNone]; + + UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; + [center setNotificationCategories:[[NSSet alloc] initWithArray:@[quickReplyCategory]]]; + [center setDelegate:self]; // commenting this out will fall back to using the same AppDelegate methods as the iOS 9 way of doing this + + UNAuthorizationOptions authorizationOptions = (UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge); + + [center requestAuthorizationWithOptions:authorizationOptions + completionHandler:^(BOOL granted, NSError *error) + { // code here is equivalent to self:application:didRegisterUserNotificationSettings: + if (granted) { + [self registerForRemoteNotificationsWithCompletion:nil]; + } + else + { + // Clear existing token + [self clearPushNotificationToken]; + } + }]; } } - (void)registerForRemoteNotificationsWithCompletion:(nullable void (^)(NSError *))completion { + NSLog(@"[AppDelegate][Push] registerForRemoteNotificationsWithCompletion"); + self.registrationForRemoteNotificationsCompletion = completion; self.pushRegistry = [[PKPushRegistry alloc] initWithQueue:nil]; @@ -1165,93 +1203,80 @@ - (void)registerForRemoteNotificationsWithCompletion:(nullable void (^)(NSError self.pushRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP]; } -- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings +// iOS 10+, see application:handleActionWithIdentifier:forLocalNotification:withResponseInfo:completionHandler: +- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler { - // Register for remote notifications only if user provide access to notification feature - if (notificationSettings.types != UIUserNotificationTypeNone) - { - [self registerForRemoteNotificationsWithCompletion:nil]; - } - else - { - // Clear existing token - MXKAccountManager* accountManager = [MXKAccountManager sharedManager]; - [accountManager setPushDeviceToken:nil withPushOptions:nil]; - } -} + UNNotification *notification = response.notification; + UNNotificationContent *content = notification.request.content; + NSString *actionIdentifier = [response actionIdentifier]; + NSString *roomId = content.userInfo[@"room_id"]; -// "This block is not a prototype" - don't fix this, or it won't match Apple's definition -- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void (^)())completionHandler -{ - if ([identifier isEqualToString: @"inline-reply"]) + if ([actionIdentifier isEqualToString:@"inline-reply"]) { - NSString* roomId = notification.userInfo[@"room_id"]; - if (roomId.length) + if ([response isKindOfClass:[UNTextInputNotificationResponse class]]) { - NSArray* mxAccounts = [MXKAccountManager sharedManager].activeAccounts; - MXKRoomDataSource* roomDataSource = nil; - MXKRoomDataSourceManager* manager; - for (MXKAccount* account in mxAccounts) - { - MXRoom* room = [account.mxSession roomWithRoomId:roomId]; - if (room) - { - manager = [MXKRoomDataSourceManager sharedManagerForMatrixSession:account.mxSession]; - if (manager) - { - break; - } - } - } - if (manager == nil) - { - NSLog(@"[AppDelegate][Push] handleActionWithIdentifier: room with id %@ not found", roomId); - } - else - { - [manager roomDataSourceForRoom:roomId create:YES onComplete:^(MXKRoomDataSource *roomDataSource) { - NSString* responseText = responseInfo[UIUserNotificationActionResponseTypedTextKey]; - if (responseText != nil && responseText.length != 0) - { - NSLog(@"[AppDelegate][Push] handleActionWithIdentifier: sending message to room: %@", roomId); - [roomDataSource sendTextMessage:responseText success:^(NSString* eventId) {} failure:^(NSError* error) { - UILocalNotification* failureNotification = [[UILocalNotification alloc] init]; - failureNotification.alertBody = NSLocalizedStringFromTable(@"room_event_failed_to_send", @"Vector", nil); - failureNotification.userInfo = notification.userInfo; - [[UIApplication sharedApplication] scheduleLocalNotification: failureNotification]; - NSLog(@"[AppDelegate][Push] handleActionWithIdentifier: error sending text message: %@", error); - }]; - } + UNTextInputNotificationResponse *textInputNotificationResponse = (UNTextInputNotificationResponse *)response; + NSString *responseText = [textInputNotificationResponse userText]; - completionHandler(); - }]; - return; - } + [self handleNotificationInlineReplyForRoomId:roomId withResponseText:responseText success:^(NSString *eventId) { + completionHandler(); + } failure:^(NSError *error) { + + UNMutableNotificationContent *failureNotificationContent = [[UNMutableNotificationContent alloc] init]; + failureNotificationContent.userInfo = content.userInfo; + failureNotificationContent.body = NSLocalizedStringFromTable(@"room_event_failed_to_send", @"Vector", nil); + failureNotificationContent.threadIdentifier = roomId; + + NSString *uuid = [[NSUUID UUID] UUIDString]; + UNNotificationRequest *failureNotificationRequest = [UNNotificationRequest requestWithIdentifier:uuid + content:failureNotificationContent + trigger:nil]; + + [center addNotificationRequest:failureNotificationRequest withCompletionHandler:nil]; + NSLog(@"[AppDelegate][Push] didReceiveNotificationResponse: error sending text message: %@", error); + + completionHandler(); + }]; } + else + { + NSLog(@"[AppDelegate][Push] didReceiveNotificationResponse: error, expect a response of type UNTextInputNotificationResponse"); + completionHandler(); + } + } + else if ([actionIdentifier isEqualToString:UNNotificationDefaultActionIdentifier]) + { + [self navigateToRoomById:roomId]; + completionHandler(); } else { - NSLog(@"[AppDelegate][Push] handleActionWithIdentifier: unhandled identifier %@", identifier); + NSLog(@"[AppDelegate][Push] didReceiveNotificationResponse: unhandled identifier %@", actionIdentifier); + completionHandler(); } - completionHandler(); } -- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification +// iOS 10+, this is called when a notification is about to display in foreground. +- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler +{ + NSLog(@"[AppDelegate][Push] willPresentNotification: applicationState: %@", @([UIApplication sharedApplication].applicationState)); + + completionHandler(UNNotificationPresentationOptionNone); +} + +- (void)navigateToRoomById:(NSString *)roomId { - NSLog(@"[AppDelegate][Push] didReceiveLocalNotification: applicationState: %@", @(application.applicationState)); - - NSString* roomId = notification.userInfo[@"room_id"]; if (roomId.length) { // TODO retrieve the right matrix session // We can use the "user_id" value in notification.userInfo - + //************** // Patch consider the first session which knows the room id MXKAccount *dedicatedAccount = nil; - + NSArray *mxAccounts = [MXKAccountManager sharedManager].activeAccounts; - + if (mxAccounts.count == 1) { dedicatedAccount = mxAccounts.firstObject; @@ -1267,17 +1292,17 @@ - (void)application:(UIApplication *)application didReceiveLocalNotification:(UI } } } - + // sanity checks if (dedicatedAccount && dedicatedAccount.mxSession) { - NSLog(@"[AppDelegate][Push] didReceiveLocalNotification: open the roomViewController %@", roomId); - + NSLog(@"[AppDelegate][Push] navigateToRoomById: open the roomViewController %@", roomId); + [self showRoom:roomId andEventId:nil withMatrixSession:dedicatedAccount.mxSession]; } else { - NSLog(@"[AppDelegate][Push] didReceiveLocalNotification : no linked session / account has been found."); + NSLog(@"[AppDelegate][Push] navigateToRoomById : no linked session / account has been found."); } } } @@ -1285,9 +1310,8 @@ - (void)application:(UIApplication *)application didReceiveLocalNotification:(UI - (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(PKPushType)type { NSData *token = credentials.token; - - NSUInteger len = ((token.length > 8) ? 8 : token.length / 2); - NSLog(@"[AppDelegate][Push] Got Push token! (%@ ...)", [token subdataWithRange:NSMakeRange(0, len)]); + + NSLog(@"[AppDelegate][Push] didUpdatePushCredentials: Got Push token: %@. Type: %@", [MXKTools logForPushToken:token], type); MXKAccountManager* accountManager = [MXKAccountManager sharedManager]; [accountManager setPushDeviceToken:token withPushOptions:@{@"format": @"event_id_only"}]; @@ -1303,8 +1327,9 @@ - (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPush - (void)pushRegistry:(PKPushRegistry *)registry didInvalidatePushTokenForType:(PKPushType)type { - MXKAccountManager* accountManager = [MXKAccountManager sharedManager]; - [accountManager setPushDeviceToken:nil withPushOptions:nil]; + NSLog(@"[AppDelegate][Push] didInvalidatePushTokenForType: Type: %@", type); + + [self clearPushNotificationToken]; } - (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type @@ -1391,17 +1416,21 @@ - (void)launchBackgroundSync - (void)handleLocalNotificationsForAccount:(MXKAccount*)account { - NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: %@", account.mxCredentials.userId); + NSString *userId = account.mxCredentials.userId; + + NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: %@", userId); NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: eventsToNotify: %@", eventsToNotify[@(account.mxSession.hash)]); NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: incomingPushEventIds: %@", self.incomingPushEventIds[@(account.mxSession.hash)]); - + __block NSUInteger scheduledNotifications = 0; - + // The call invite are handled here only when the callkit is not active. BOOL isCallKitActive = [MXCallKitAdapter callKitAvailable] && [MXKAppSettings standardAppSettings].isCallKitEnabled; NSMutableArray *eventsArray = eventsToNotify[@(account.mxSession.hash)]; + NSMutableArray *redactedEventIds = [NSMutableArray array]; + // Display a local notification for each event retrieved by the bg sync. for (NSUInteger index = 0; index < eventsArray.count; index++) { @@ -1410,13 +1439,6 @@ - (void)handleLocalNotificationsForAccount:(MXKAccount*)account NSString *roomId = eventDict[@"room_id"]; BOOL checkReadEvent = YES; MXEvent *event; - - // Ignore event already notified to the user - if ([self displayedLocalNotificationForEvent:eventId andUser:account.mxCredentials.userId type:nil]) - { - NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: Skip event already displayed in a notification. Event id: %@", eventId); - continue; - } if (eventId && roomId) { @@ -1425,10 +1447,10 @@ - (void)handleLocalNotificationsForAccount:(MXKAccount*)account if (event) { - // Ignore redacted event. if (event.isRedactedEvent) { - NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: Skip redacted event. Event id: %@", event.eventId); + // Collect redacted event ids to remove possible delivered redacted notifications + [redactedEventIds addObject:eventId]; continue; } @@ -1438,7 +1460,7 @@ - (void)handleLocalNotificationsForAccount:(MXKAccount*)account // Ignore call invite when callkit is active. if (isCallKitActive) { - NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: Skip call event. Event id: %@", event.eventId); + NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: Skip call event. Event id: %@", eventId); continue; } else @@ -1458,13 +1480,13 @@ - (void)handleLocalNotificationsForAccount:(MXKAccount*)account if (checkReadEvent) { // Ignore event which has been read on another device. - MXReceiptData *readReceipt = [account.mxSession.store getReceiptInRoom:roomId forUserId:account.mxCredentials.userId]; + MXReceiptData *readReceipt = [account.mxSession.store getReceiptInRoom:roomId forUserId:userId]; if (readReceipt) { MXEvent *readReceiptEvent = [account.mxSession.store eventWithEventId:readReceipt.eventId inRoom:roomId]; if (event.originServerTs <= readReceiptEvent.originServerTs) { - NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: Skip already read event. Event id: %@", event.eventId); + NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: Skip already read event. Event id: %@", eventId); continue; } } @@ -1472,64 +1494,99 @@ - (void)handleLocalNotificationsForAccount:(MXKAccount*)account // Prepare the local notification MXPushRule *rule = eventDict[@"push_rule"]; - - [self notificationBodyForEvent:event pushRule:rule inAccount:account onComplete:^(NSString * _Nullable notificationBody) { - - if (notificationBody) + + [self notificationContentForEvent:event pushRule:rule inAccount:account onComplete:^(UNNotificationContent * _Nullable notificationContent) { + + if (notificationContent) { - // Printf style escape characters are stripped from the string prior to display; - // to include a percent symbol (%) in the message, use two percent symbols (%%). - notificationBody = [notificationBody stringByReplacingOccurrencesOfString:@"%" withString:@"%%"]; - - UILocalNotification *eventNotification = [[UILocalNotification alloc] init]; - eventNotification.alertBody = notificationBody; - eventNotification.userInfo = @{ - @"type": @"full", - @"room_id": event.roomId, - @"event_id": event.eventId, - @"user_id": account.mxCredentials.userId - }; - - BOOL isNotificationContentShown = !event.isEncrypted || RiotSettings.shared.showDecryptedContentInNotifications; - - if ((event.eventType == MXEventTypeRoomMessage || event.eventType == MXEventTypeRoomEncrypted) && isNotificationContentShown) - { - eventNotification.category = @"QUICK_REPLY"; - } - - // Set sound name based on the value provided in action of MXPushRule - for (MXPushRuleAction *action in rule.actions) - { - if (action.actionType == MXPushRuleActionTypeSetTweak) + UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:eventId + content:notificationContent + trigger:nil]; + + [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { + + if (error) { - if ([action.parameters[@"set_tweak"] isEqualToString:@"sound"]) - { - NSString *soundName = action.parameters[@"value"]; - if ([soundName isEqualToString:@"default"]) - soundName = @"message.mp3"; - - eventNotification.soundName = soundName; - } + NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: Fail to display notification for event %@ with error: %@", eventId, error); } - } - - NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: Display notification for event %@", event.eventId); - [[UIApplication sharedApplication] scheduleLocalNotification:eventNotification]; + else + { + NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: Display notification for event %@", eventId); + } + }]; + scheduledNotifications++; } else { - NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: Skip event with empty generated notificationBody. Event id: %@", event.eventId); + NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: Skip event with empty generated content. Event id: %@", eventId); } }]; } } - + + // Remove possible pending and delivered notifications having a redacted event id + if (redactedEventIds.count) + { + NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: Remove possible notification with redacted event ids: %@", redactedEventIds); + + [[UNUserNotificationCenter currentNotificationCenter] removePendingNotificationRequestsWithIdentifiers:redactedEventIds]; + [[UNUserNotificationCenter currentNotificationCenter] removeDeliveredNotificationsWithIdentifiers:redactedEventIds]; + } + NSLog(@"[AppDelegate][Push] handleLocalNotificationsForAccount: Sent %tu local notifications for %tu events", scheduledNotifications, eventsArray.count); - + [eventsArray removeAllObjects]; } +- (NSString*)notificationSoundNameFromPushRule:(MXPushRule*)pushRule +{ + NSString *soundName; + + // Set sound name based on the value provided in action of MXPushRule + for (MXPushRuleAction *action in pushRule.actions) + { + if (action.actionType == MXPushRuleActionTypeSetTweak) + { + if ([action.parameters[@"set_tweak"] isEqualToString:@"sound"]) + { + soundName = action.parameters[@"value"]; + if ([soundName isEqualToString:@"default"]) + { + soundName = @"message.mp3"; + } + } + } + } + + return soundName; +} + +- (NSString*)notificationCategoryIdentifierForEvent:(MXEvent*)event +{ + BOOL isNotificationContentShown = !event.isEncrypted || RiotSettings.shared.showDecryptedContentInNotifications; + + NSString *categoryIdentifier; + + if ((event.eventType == MXEventTypeRoomMessage || event.eventType == MXEventTypeRoomEncrypted) && isNotificationContentShown) + { + categoryIdentifier = @"QUICK_REPLY"; + } + + return categoryIdentifier; +} + +- (NSDictionary*)notificationUserInfoForEvent:(MXEvent*)event andUserId:(NSString*)userId +{ + NSDictionary *notificationUserInfo = @{ + @"type": @"full", + @"room_id": event.roomId, + @"event_id": event.eventId, + @"user_id": userId + }; + return notificationUserInfo; +} + - (void)notificationBodyForEvent:(MXEvent *)event pushRule:(MXPushRule*)rule inAccount:(MXKAccount*)account onComplete:(void (^)(NSString * _Nullable notificationBody))onComplete; { if (!event.content || !event.content.count) @@ -1656,6 +1713,190 @@ - (void)notificationBodyForEvent:(MXEvent *)event pushRule:(MXPushRule*)rule inA }]; } +// iOS 10+, does the same thing as notificationBodyForEvent:pushRule:inAccount:onComplete:, except with more features +- (void)notificationContentForEvent:(MXEvent *)event pushRule:(MXPushRule *)rule inAccount:(MXKAccount *)account onComplete:(void (^)(UNNotificationContent * _Nullable notificationContent))onComplete; +{ + if (!event.content || !event.content.count) + { + NSLog(@"[AppDelegate][Push] notificationContentForEvent: empty event content"); + onComplete (nil); + return; + } + + MXRoom *room = [account.mxSession roomWithRoomId:event.roomId]; + if (!room) + { + NSLog(@"[AppDelegate][Push] notificationBodyForEvent: Unknown room"); + onComplete (nil); + return; + } + + [room state:^(MXRoomState *roomState) { + + NSString *notificationTitle; + NSString *notificationBody; + + NSString *threadIdentifier = room.roomId; + NSString *eventSenderName = [roomState.members memberName:event.sender]; + + if (event.eventType == MXEventTypeRoomMessage || event.eventType == MXEventTypeRoomEncrypted) + { + if (room.isMentionsOnly) + { + // A local notification will be displayed only for highlighted notification. + BOOL isHighlighted = NO; + + // Check whether is there an highlight tweak on it + for (MXPushRuleAction *ruleAction in rule.actions) + { + if (ruleAction.actionType == MXPushRuleActionTypeSetTweak) + { + if ([ruleAction.parameters[@"set_tweak"] isEqualToString:@"highlight"]) + { + // Check the highlight tweak "value" + // If not present, highlight. Else check its value before highlighting + if (nil == ruleAction.parameters[@"value"] || YES == [ruleAction.parameters[@"value"] boolValue]) + { + isHighlighted = YES; + break; + } + } + } + } + + if (!isHighlighted) + { + // Ignore this notif. + NSLog(@"[AppDelegate][Push] notificationBodyForEvent: Ignore non highlighted notif in mentions only room"); + onComplete(nil); + return; + } + } + + NSString *msgType = event.content[@"msgtype"]; + NSString *messageContent = event.content[@"body"]; + + if (event.isEncrypted && !RiotSettings.shared.showDecryptedContentInNotifications) + { + // Hide the content + msgType = nil; + } + + NSString *roomDisplayName = room.summary.displayname; + + // Display the room name only if it is different than the sender name + if (roomDisplayName.length && ![roomDisplayName isEqualToString:eventSenderName]) + { + notificationTitle = [NSString localizedUserNotificationStringForKey:@"MSG_FROM_USER_IN_ROOM_TITLE" arguments:@[eventSenderName, roomDisplayName]]; + + if ([msgType isEqualToString:@"m.text"]) + { + notificationBody = messageContent; + } + else if ([msgType isEqualToString:@"m.emote"]) + { + notificationBody = [NSString localizedUserNotificationStringForKey:@"ACTION_FROM_USER" arguments:@[eventSenderName, messageContent]]; + } + else if ([msgType isEqualToString:@"m.image"]) + { + notificationBody = [NSString localizedUserNotificationStringForKey:@"IMAGE_FROM_USER" arguments:@[eventSenderName, messageContent]]; + } + else + { + // Encrypted messages falls here + notificationBody = [NSString localizedUserNotificationStringForKey:@"MSG_FROM_USER" arguments:@[eventSenderName]]; + } + } + else + { + notificationTitle = eventSenderName; + + if ([msgType isEqualToString:@"m.text"]) + { + notificationBody = messageContent; + } + else if ([msgType isEqualToString:@"m.emote"]) + { + notificationBody = [NSString localizedUserNotificationStringForKey:@"ACTION_FROM_USER" arguments:@[eventSenderName, messageContent]]; + } + else if ([msgType isEqualToString:@"m.image"]) + { + notificationBody = [NSString localizedUserNotificationStringForKey:@"IMAGE_FROM_USER" arguments:@[eventSenderName, messageContent]]; + } + else + { + // Encrypted messages falls here + notificationBody = [NSString localizedUserNotificationStringForKey:@"MSG_FROM_USER" arguments:@[eventSenderName]]; + } + } + } + else if (event.eventType == MXEventTypeCallInvite) + { + NSString *sdp = event.content[@"offer"][@"sdp"]; + BOOL isVideoCall = [sdp rangeOfString:@"m=video"].location != NSNotFound; + + if (!isVideoCall) + { + notificationBody = [NSString localizedUserNotificationStringForKey:@"VOICE_CALL_FROM_USER" arguments:@[eventSenderName]]; + } + else + { + notificationBody = [NSString localizedUserNotificationStringForKey:@"VIDEO_CALL_FROM_USER" arguments:@[eventSenderName]]; + } + + // call notifications should stand out from normal messages, so we don't stack them + threadIdentifier = nil; + } + else if (event.eventType == MXEventTypeRoomMember) + { + NSString *roomDisplayName = room.summary.displayname; + + if (roomDisplayName.length && ![roomDisplayName isEqualToString:eventSenderName]) + { + notificationBody = [NSString localizedUserNotificationStringForKey:@"USER_INVITE_TO_NAMED_ROOM" arguments:@[eventSenderName, roomDisplayName]]; + } + else + { + notificationBody = [NSString localizedUserNotificationStringForKey:@"USER_INVITE_TO_CHAT" arguments:@[eventSenderName]]; + } + } + else if (event.eventType == MXEventTypeSticker) + { + NSString *roomDisplayName = room.summary.displayname; + + if (roomDisplayName.length && ![roomDisplayName isEqualToString:eventSenderName]) + { + notificationTitle = [NSString localizedUserNotificationStringForKey:@"MSG_FROM_USER_IN_ROOM_TITLE" arguments:@[eventSenderName, roomDisplayName]]; + } + else + { + notificationTitle = eventSenderName; + } + + notificationBody = [NSString localizedUserNotificationStringForKey:@"STICKER_FROM_USER" arguments:@[eventSenderName]]; + } + + UNMutableNotificationContent *notificationContent = [[UNMutableNotificationContent alloc] init]; + + NSDictionary *notificationUserInfo = [self notificationUserInfoForEvent:event andUserId:account.mxCredentials.userId]; + NSString *notificationSoundName = [self notificationSoundNameFromPushRule:rule]; + NSString *categoryIdentifier = [self notificationCategoryIdentifierForEvent:event]; + + notificationContent.title = notificationTitle; + notificationContent.body = notificationBody; + notificationContent.threadIdentifier = threadIdentifier; + notificationContent.userInfo = notificationUserInfo; + notificationContent.categoryIdentifier = categoryIdentifier; + + if (notificationSoundName) + { + notificationContent.sound = [UNNotificationSound soundNamed:notificationSoundName]; + } + + onComplete([notificationContent copy]); + }]; +} + /** Display "limited" notifications for events the app was not able to get data (because of /sync failure). @@ -1681,13 +1922,6 @@ - (void)handleLimitedLocalNotifications:(MXSession*)mxSession events:(NSArray *notificationRequestIdentifiersToRemove = [NSMutableArray new]; - [UIApplication sharedApplication].applicationIconBadgeNumber = count; + UNUserNotificationCenter *notificationCenter = [UNUserNotificationCenter currentNotificationCenter]; + + [notificationCenter getDeliveredNotificationsWithCompletionHandler:^(NSArray * _Nonnull notifications) { + + for (UNNotification *notification in notifications) + { + NSString *threadIdentifier = notification.request.content.threadIdentifier; + + if ([threadIdentifier isEqualToString:roomId]) + { + [notificationRequestIdentifiersToRemove addObject:notification.request.identifier]; + } + } + + [notificationCenter removeDeliveredNotificationsWithIdentifiers:notificationRequestIdentifiersToRemove]; + + if (completion) + { + completion(); + } + }]; } #pragma mark - Universal link @@ -1980,7 +2277,7 @@ - (BOOL)handleUniversalLinkFragment:(NSString*)fragment } } failure:^(NSError *error) { - NSLog(@"[AppDelegate] Universal link: Error: The home server failed to resolve the room alias (%@)", roomIdOrAlias); + NSLog(@"[AppDelegate] Universal link: Error: The homeserver failed to resolve the room alias (%@)", roomIdOrAlias); [homeViewController stopActivityIndicator]; @@ -2305,6 +2602,10 @@ - (void)initMatrixSessions options:NSKeyValueObservingOptionNew context:NULL]; } + else + { + [self enableCallKit:NO forCallManager:mxSession.callManager]; + } } else { @@ -2399,6 +2700,7 @@ - (void)initMatrixSessions { // Check if we need to display a key share dialog [self checkPendingRoomKeyRequests]; + [self checkPendingIncomingDeviceVerificationsInSession:mxSession]; } } @@ -2419,7 +2721,9 @@ - (void)initMatrixSessions // Set the push gateway URL. account.pushGatewayURL = [[NSUserDefaults standardUserDefaults] objectForKey:@"pushGatewayURL"]; - + + NSLog(@"[AppDelegate][Push] didAddAccountNotification: isPushRegistered: %@", @(isPushRegistered)); + if (isPushRegistered) { // Enable push notifications by default on new added account @@ -2566,6 +2870,9 @@ - (void)addMatrixSession:(MXSession *)mxSession // Enable listening of incoming key share requests [self enableRoomKeyRequestObserver:mxSession]; + + // Enable listening of incoming device verification requests + [self enableIncomingDeviceVerificationObserver:mxSession]; } } @@ -2587,6 +2894,9 @@ - (void)removeMatrixSession:(MXSession*)mxSession // Disable listening of incoming key share requests [self disableRoomKeyRequestObserver:mxSession]; + + // Disable listening of incoming device verification requests + [self disableIncomingDeviceVerificationObserver:mxSession]; [mxSessionArray removeObject:mxSession]; @@ -2973,11 +3283,20 @@ - (void)handleLaunchAnimation - (void)enableCallKit:(BOOL)enable forCallManager:(MXCallManager *)callManager { + JitsiService.shared.enableCallKit = enable; + if (enable) { // Create adapter for Riot MXCallKitConfiguration *callKitConfiguration = [[MXCallKitConfiguration alloc] init]; callKitConfiguration.iconName = @"riot_icon_callkit"; + + NSData *riotCallKitIconData = UIImagePNGRepresentation([UIImage imageNamed:callKitConfiguration.iconName]); + + [JitsiService.shared configureCallKitProviderWithLocalizedName:callKitConfiguration.name + ringtoneName:callKitConfiguration.ringtoneName + iconTemplateImageData:riotCallKitIconData]; + MXCallKitAdapter *callKitAdapter = [[MXCallKitAdapter alloc] initWithConfiguration:callKitConfiguration]; id audioSessionConfigurator; @@ -3268,14 +3587,42 @@ - (void)selectMatrixAccount:(void (^)(MXKAccount *selectedAccount))onSelection #pragma mark - Matrix Rooms handling -- (void)showRoom:(NSString*)roomId andEventId:(NSString*)eventId withMatrixSession:(MXSession*)mxSession +- (void)showRoom:(NSString*)roomId andEventId:(NSString*)eventId withMatrixSession:(MXSession*)mxSession restoreInitialDisplay:(BOOL)restoreInitialDisplay completion:(void (^)(void))completion { - [self restoreInitialDisplay:^{ - + void (^selectRoom)(void) = ^() { // Select room to display its details (dispatch this action in order to let TabBarController end its refresh) - [_masterTabBarController selectRoomWithId:roomId andEventId:eventId inMatrixSession:mxSession]; - - }]; + [self.masterTabBarController selectRoomWithId:roomId andEventId:eventId inMatrixSession:mxSession completion:^{ + + // Remove delivered notifications for this room + [self removeDeliveredNotificationsWithRoomId:roomId completion:nil]; + + if (completion) + { + completion(); + } + }]; + }; + + if (restoreInitialDisplay) + { + [self restoreInitialDisplay:^{ + selectRoom(); + }]; + } + else + { + selectRoom(); + } +} + +- (void)showRoom:(NSString*)roomId andEventId:(NSString*)eventId withMatrixSession:(MXSession*)mxSession restoreInitialDisplay:(BOOL)restoreInitialDisplay +{ + [self showRoom:roomId andEventId:eventId withMatrixSession:mxSession restoreInitialDisplay:restoreInitialDisplay completion:nil]; +} + +- (void)showRoom:(NSString*)roomId andEventId:(NSString*)eventId withMatrixSession:(MXSession*)mxSession +{ + [self showRoom:roomId andEventId:eventId withMatrixSession:mxSession restoreInitialDisplay:YES completion:nil]; } - (void)showRoomPreview:(RoomPreviewData*)roomPreviewData @@ -3598,15 +3945,8 @@ - (void)addCallStatusBar:(NSString*)buttonTitle [_callStatusBarButton setTitle:buttonTitle forState:UIControlStateNormal]; [_callStatusBarButton setTitle:buttonTitle forState:UIControlStateHighlighted]; _callStatusBarButton.titleLabel.textColor = ThemeService.shared.theme.backgroundColor; - - if ([UIFont respondsToSelector:@selector(systemFontOfSize:weight:)]) - { - _callStatusBarButton.titleLabel.font = [UIFont systemFontOfSize:17 weight:UIFontWeightMedium]; - } - else - { - _callStatusBarButton.titleLabel.font = [UIFont boldSystemFontOfSize:17]; - } + + _callStatusBarButton.titleLabel.font = [UIFont systemFontOfSize:17 weight:UIFontWeightMedium]; [_callStatusBarButton setBackgroundColor:ThemeService.shared.theme.tintColor]; [_callStatusBarButton addTarget:self action:@selector(onCallStatusBarButtonPressed) forControlEvents:UIControlEventTouchUpInside]; @@ -4057,6 +4397,102 @@ - (void)checkPendingRoomKeyRequests } } +#pragma mark - Incoming device verification requests handling + +- (void)enableIncomingDeviceVerificationObserver:(MXSession*)mxSession +{ + incomingDeviceVerificationObserver = + [[NSNotificationCenter defaultCenter] addObserverForName:MXDeviceVerificationManagerNewTransactionNotification + object:mxSession.crypto.deviceVerificationManager + queue:[NSOperationQueue mainQueue] + usingBlock:^(NSNotification *notif) + { + NSObject *object = notif.userInfo[MXDeviceVerificationManagerNotificationTransactionKey]; + if ([object isKindOfClass:MXIncomingSASTransaction.class]) + { + [self checkPendingIncomingDeviceVerificationsInSession:mxSession]; + } + }]; +} + +- (void)disableIncomingDeviceVerificationObserver:(MXSession*)mxSession +{ + if (incomingDeviceVerificationObserver) + { + [[NSNotificationCenter defaultCenter] removeObserver:incomingDeviceVerificationObserver]; + incomingDeviceVerificationObserver = nil; + } +} + +// Check if an incoming device verification dialog must be displayed for the given session +- (void)checkPendingIncomingDeviceVerificationsInSession:(MXSession*)mxSession +{ + if ([UIApplication sharedApplication].applicationState != UIApplicationStateActive) + { + NSLog(@"[AppDelegate][MXKeyVerification] checkPendingIncomingDeviceVerificationsInSession: called while the app is not active. Ignore it."); + return; + } + + [mxSession.crypto.deviceVerificationManager transactions:^(NSArray * _Nonnull transactions) { + + NSLog(@"[AppDelegate][MXKeyVerification] checkPendingIncomingDeviceVerificationsInSession: transactions: %@", transactions); + + for (MXDeviceVerificationTransaction *transaction in transactions) + { + if (transaction.isIncoming) + { + MXIncomingSASTransaction *incomingTransaction = (MXIncomingSASTransaction*)transaction; + if (incomingTransaction.state == MXSASTransactionStateIncomingShowAccept) + { + [self presentIncomingDeviceVerification:incomingTransaction inSession:mxSession]; + break; + } + } + } + }]; +} + +// Check all opened MXSessions for incoming device verification dialog +- (void)checkPendingIncomingDeviceVerifications +{ + for (MXSession *mxSession in mxSessionArray) + { + [self checkPendingIncomingDeviceVerificationsInSession:mxSession]; + } +} + +- (BOOL)presentIncomingDeviceVerification:(MXIncomingSASTransaction*)transaction inSession:(MXSession*)mxSession +{ + NSLog(@"[AppDelegate][MXKeyVerification] presentIncomingDeviceVerification: %@", transaction); + + BOOL presented = NO; + if (!deviceVerificationCoordinatorBridgePresenter) + { + UIViewController *presentingViewController = self.window.rootViewController.presentedViewController ?: self.window.rootViewController; + + deviceVerificationCoordinatorBridgePresenter = [[DeviceVerificationCoordinatorBridgePresenter alloc] initWithSession:mxSession]; + deviceVerificationCoordinatorBridgePresenter.delegate = self; + + [deviceVerificationCoordinatorBridgePresenter presentFrom:presentingViewController incomingTransaction:transaction animated:YES]; + + presented = YES; + } + else + { + NSLog(@"[AppDelegate][MXKeyVerification] presentIncomingDeviceVerification: Controller already presented."); + } + return presented; +} + +- (void)deviceVerificationCoordinatorBridgePresenterDelegateDidComplete:(DeviceVerificationCoordinatorBridgePresenter *)coordinatorBridgePresenter otherUserId:(NSString * _Nonnull)otherUserId otherDeviceId:(NSString * _Nonnull)otherDeviceId +{ + [deviceVerificationCoordinatorBridgePresenter dismissWithAnimated:YES completion:^{ + [self checkPendingIncomingDeviceVerifications]; + }]; + + deviceVerificationCoordinatorBridgePresenter = nil; +} + #pragma mark - GDPR consent // Observe user GDPR consent not given diff --git a/Riot/Assets/Riot-Defaults.plist b/Riot/Assets/Riot-Defaults.plist index 7ad072f6b9..78e606c724 100644 --- a/Riot/Assets/Riot-Defaults.plist +++ b/Riot/Assets/Riot-Defaults.plist @@ -25,9 +25,11 @@ matrixApps integrationsUiUrl - https://scalar-staging.riot.im/scalar-web/ + https://scalar.vector.im/ integrationsRestUrl - https://scalar-staging.riot.im/scalar/api + https://scalar.vector.im/api + jitsiServerURL + https://jitsi.riot.im integrationsWidgetsUrls https://scalar-staging.riot.im/scalar/api diff --git a/Riot/Assets/de.lproj/Vector.strings b/Riot/Assets/de.lproj/Vector.strings index b9f864f8f0..249422b2de 100644 --- a/Riot/Assets/de.lproj/Vector.strings +++ b/Riot/Assets/de.lproj/Vector.strings @@ -282,11 +282,11 @@ "auth_add_email_and_phone_message" = "Füge eine E-Mail-Adresse und eine Telefonnummer hinzu, damit dich andere Benutzer finden können. Über die E-Mail-Adresse kannst du das Passwort zurücksetzen."; "auth_use_server_options" = "Individuelle Server Optionen"; "auth_email_validation_message" = "Prüfe dein E-Mail-Konto um mit der Registrierung fortzufahren"; -"auth_recaptcha_message" = "Dieser Home-Server will sicherstellen dass du kein Robot bist"; +"auth_recaptcha_message" = "Dieser Homeserver will sicherstellen dass du kein Robot bist"; "auth_reset_password_message" = "E-Mail-Adresse angeben, um das Passwort zurückzusetzen:"; "auth_reset_password_missing_email" = "Die E-Mail-Adresse die mit dem Konto verbunden ist muss eingegeben werden."; "auth_reset_password_error_unauthorized" = "Konnte E-Mail-Adresse nicht verifizieren. Klicke den Link in der Registrierungs-E-Mail"; -"auth_reset_password_error_not_found" = "Diese E-Mail-Adresse ist nicht mit einer Matrix-ID auf diesem Home-Server verknüpft."; +"auth_reset_password_error_not_found" = "Diese E-Mail-Adresse ist nicht mit einer Matrix-ID auf diesem Homeserver verknüpft."; "auth_reset_password_success_message" = "Dein Passwort wurde zurückgesetzt.\n\nDu wurdest von allen Geräten abgemeldet, diese bekommen jetzt keine Push-Benachrichtigungen mehr. Um diese wiedereinzuschalten, melde dich auf den Geräten erneut an."; "auth_add_email_and_phone_warning" = "Registrierung mit E-Mail und Telefonnummer zugleich ist noch nicht unterstützt. Nur die Telefonnummer wird berücksichtigt. Du kannst deine E-Mail-Adresse in deinem Profil ergänzen."; "room_creation_make_public_prompt_msg" = "Sicher, dass du diesen Raum öffentlich machen willst? Jeder kann deine Nachrichten lesen und dem Raum beitreten."; @@ -368,7 +368,7 @@ "directory_server_picker_title" = "Wähle ein Verzeichnis"; "directory_server_all_rooms" = "Alle Räume auf %@ Server"; "directory_server_all_native_rooms" = "Alle nativen Matrix-Räume"; -"directory_server_type_homeserver" = "Gib einen Home-Server ein, um davon öffentliche Räume zu listen"; +"directory_server_type_homeserver" = "Gib einen Homeserver ein, um davon öffentliche Räume zu listen"; "directory_server_placeholder" = "matrix.org"; // Others "or" = "oder"; diff --git a/Riot/Assets/en.lproj/InfoPlist.strings b/Riot/Assets/en.lproj/InfoPlist.strings index 4fe9eb47f1..fe1df4e928 100644 --- a/Riot/Assets/en.lproj/InfoPlist.strings +++ b/Riot/Assets/en.lproj/InfoPlist.strings @@ -19,4 +19,5 @@ "NSPhotoLibraryUsageDescription" = "The photo library is used to send photos and videos."; "NSMicrophoneUsageDescription" = "The microphone is used to take videos, make calls."; "NSContactsUsageDescription" = "In order to show you which of your contacts are already using Riot or Matrix, we can send the email addresses and phone numbers in your address book to your Matrix Identity Server. New Vector does not store this data or use it for any other purpose. For more information please see the privacy policy page in application settings."; +"NSCalendarsUsageDescription" = "See your scheduled meetings in the app."; diff --git a/Riot/Assets/en.lproj/Localizable.strings b/Riot/Assets/en.lproj/Localizable.strings index 33e5d39f42..fc5cc015a8 100644 --- a/Riot/Assets/en.lproj/Localizable.strings +++ b/Riot/Assets/en.lproj/Localizable.strings @@ -14,10 +14,13 @@ limitations under the License. */ +/* Message title for a specific person in a named room */ +"MSG_FROM_USER_IN_ROOM_TITLE" = "%@ in %@"; + /** Single, end-to-end encrypted messages (ie. we don't know what they say) */ /* New message from a specific person, not referencing a room */ -"MSG_FROM_USER" = "Message from %@"; +"MSG_FROM_USER" = "%@ sent a message"; /* New message from a specific person in a named room */ "MSG_FROM_USER_IN_ROOM" = "%@ posted in %@"; @@ -39,7 +42,7 @@ /** Image Messages **/ /* New action message from a specific person, not referencing a room. */ -"IMAGE_FROM_USER" = "%@ sent you a picture %@"; +"IMAGE_FROM_USER" = "%@ sent a picture %@"; /* New action message from a specific person in a named room. */ "IMAGE_FROM_USER_IN_ROOM" = "%@ posted a picture %@ in %@"; @@ -50,6 +53,9 @@ /* A single unread message */ "SINGLE_UNREAD" = "You received a message"; +/* Sticker from a specific person, not referencing a room. */ +"STICKER_FROM_USER" = "%@ sent a sticker"; + /** Coalesced messages **/ /* Multiple unread messages in a room */ diff --git a/Riot/Assets/en.lproj/Vector.strings b/Riot/Assets/en.lproj/Vector.strings index 81ca9d9fa5..adc5906501 100644 --- a/Riot/Assets/en.lproj/Vector.strings +++ b/Riot/Assets/en.lproj/Vector.strings @@ -83,7 +83,7 @@ "auth_invalid_email" = "This doesn't look like a valid email address"; "auth_invalid_phone" = "This doesn't look like a valid phone number"; "auth_missing_password" = "Missing password"; -"auth_add_email_message" = "Add an email address to your account to let users discover you, and let you reset password."; +"auth_add_email_message" = "Add an email address to your account to let users discover you, and to reset your password."; "auth_add_phone_message" = "Add a phone number to your account to let users discover you."; "auth_add_email_phone_message" = "Add an email address and/or a phone number to your account to let users discover you. Email address will also let you reset your password."; "auth_add_email_and_phone_message" = "Add an email address and a phone number to your account to let users discover you. Email address will also let you reset your password."; @@ -102,14 +102,14 @@ "auth_msisdn_validation_title" = "Verification Pending"; "auth_msisdn_validation_message" = "We\'ve sent an SMS with an activation code. Please enter this code below."; "auth_msisdn_validation_error" = "Unable to verify phone number."; -"auth_recaptcha_message" = "This Home Server would like to make sure you are not a robot"; +"auth_recaptcha_message" = "This homeserver would like to make sure you are not a robot"; "auth_reset_password_message" = "To reset your password, enter the email address linked to your account:"; "auth_reset_password_missing_email" = "The email address linked to your account must be entered."; "auth_reset_password_missing_password" = "A new password must be entered."; "auth_reset_password_email_validation_message" = "An email has been sent to %@. Once you've followed the link it contains, click below."; "auth_reset_password_next_step_button" = "I have verified my email address"; "auth_reset_password_error_unauthorized" = "Failed to verify email address: make sure you clicked the link in the email"; -"auth_reset_password_error_not_found" = "Your email address does not appear to be associated with a Matrix ID on this Homeserver."; +"auth_reset_password_error_not_found" = "Your email address does not appear to be associated with a Matrix ID on this homeserver."; "auth_reset_password_success_message" = "Your password has been reset.\n\nYou have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, re-log in on each device."; "auth_add_email_and_phone_warning" = "Registration with email and phone number at once is not supported yet until the api exists. Only the phone number will be taken into account. You may add your email to your profile in settings."; "auth_accept_policies" = "Please review and accept the policies of this homeserver:"; @@ -326,7 +326,7 @@ "settings_mark_all_as_read" = "Mark all messages as read"; "settings_report_bug" = "Report bug"; "settings_clear_cache" = "Clear cache"; -"settings_config_home_server" = "Home server is %@"; +"settings_config_home_server" = "Homeserver is %@"; "settings_config_identity_server" = "Identity server is %@"; "settings_config_user_id" = "Logged in as %@"; @@ -431,11 +431,11 @@ "settings_key_backup_info" = "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages."; "settings_key_backup_info_checking" = "Checking..."; "settings_key_backup_info_none" = "Your keys are not being backed up from this device."; -"settings_key_backup_info_signout_warning" = "Back up your keys before signing out to avoid losing them."; +"settings_key_backup_info_signout_warning" = "Connect this device to key backup before signing out to avoid losing any keys that may only be on this device."; "settings_key_backup_info_version" = "Key Backup Version: %@"; "settings_key_backup_info_algorithm" = "Algorithm: %@"; "settings_key_backup_info_valid" = "This device is backing up your keys."; -"settings_key_backup_info_not_valid" = "This device is not backing up your keys."; +"settings_key_backup_info_not_valid" = "This device is not backing up your keys, but you do have an existing backup you can restore from and add to going forward."; "settings_key_backup_info_progress" = "Backing up %@ keys..."; "settings_key_backup_info_progress_done" = "All keys backed up"; @@ -449,7 +449,7 @@ "settings_key_backup_button_create" = "Start using Key Backup"; "settings_key_backup_button_restore" = "Restore from Backup"; "settings_key_backup_button_delete" = "Delete Backup"; -"settings_key_backup_button_use" = "Use key backup"; +"settings_key_backup_button_connect" = "Connect this device to Key Backup"; "settings_key_backup_delete_confirmation_prompt_title" = "Delete Backup"; "settings_key_backup_delete_confirmation_prompt_msg" = "Are you sure? You will lose your encrypted messages if your keys are not backed up properly."; @@ -694,7 +694,7 @@ "key_backup_setup_intro_title" = "Never lose encrypted messages"; "key_backup_setup_intro_info" = "Messages in encrypted rooms are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.\n\nSecurely back up your keys to avoid losing them."; "key_backup_setup_intro_setup_action_without_existing_backup" = "Start using Key Backup"; -"key_backup_setup_intro_setup_action_with_existing_backup" = "Use Key Backup"; +"key_backup_setup_intro_setup_connect_action_with_existing_backup" = "Connect this device to Key Backup"; "key_backup_setup_intro_manual_export_info" = "(Advanced)"; "key_backup_setup_intro_manual_export_action" = "Manually export keys"; @@ -773,7 +773,7 @@ // Recover "key_backup_recover_banner_title" = "Never lose encrypted messages"; -"key_backup_recover_banner_subtitle" = "Use Key Backup"; +"key_backup_recover_connent_banner_subtitle" = "Connect this device to Key Backup"; // MARK: Sign out warning @@ -792,3 +792,99 @@ "sign_out_key_backup_in_progress_alert_title" = "Key backup in progress. If you sign out now you’ll lose access to your encrypted messages."; "sign_out_key_backup_in_progress_alert_discard_key_backup_action" = "I don't want my encrypted messages"; "sign_out_key_backup_in_progress_alert_cancel_action" = "I'll wait"; + +// MARK: - Device Verification +"device_verification_title" = "Verify device"; +"device_verification_security_advice" = "For maximum security, we recommend you do this in person or use another trusted means of communication"; +"device_verification_cancelled" = "The other party cancelled the verification."; +"device_verification_cancelled_by_me" = "The verification has been cancelled. Reason: %@"; +"device_verification_error_cannot_load_device" = "Cannot load device information."; + +// Mark: Incoming +"device_verification_incoming_title" = "Incoming Verification Request"; +"device_verification_incoming_description_1" = "Verify this device to mark it as trusted. Trusting devices of partners gives you extra peace of mind when using end-to-end encrypted messages."; +"device_verification_incoming_description_2" = "Verifying this device will mark it as trusted, and also mark your device as trusted to the partner."; + +// MARK: Start +"device_verification_start_title" = "Verify by comparing a short text string"; +"device_verification_start_wait_partner" = "Waiting for partner to accept..."; +"device_verification_start_use_legacy" = "Nothing appearing? Not all clients supports interactive verification yet. Use legacy verification."; +"device_verification_start_verify_button" = "Begin Verifying"; +"device_verification_start_use_legacy_action" = "Use Legacy Verification"; + +// MARK: Verify +"device_verification_verify_title_emoji" = "Verify this device by confirming the following emoji appear on the screen of the partner"; +"device_verification_verify_title_number" = "Verify this device by confirming the following numbers appear on the screen of the partner"; +"device_verification_verify_wait_partner" = "Waiting for partner to confirm..."; + +// MARK: Verified +"device_verification_verified_title" = "Verified!"; +"device_verification_verified_description_1" = "You've successfully verified this device."; +"device_verification_verified_description_2" = "Secure messages with this user are end-to-end encrypted and not able to be read by third parties."; +"device_verification_verified_got_it_button" = "Got it"; + +// MARK: Emoji +"device_verification_emoji_dog" = "Dog"; +"device_verification_emoji_cat" = "Cat"; +"device_verification_emoji_lion" = "Lion"; +"device_verification_emoji_horse" = "Horse"; +"device_verification_emoji_unicorn" = "Unicorn"; +"device_verification_emoji_pig" = "Pig"; +"device_verification_emoji_elephant" = "Elephant"; +"device_verification_emoji_rabbit" = "Rabbit"; +"device_verification_emoji_panda" = "Panda"; +"device_verification_emoji_rooster" = "Rooster"; +"device_verification_emoji_penguin" = "Penguin"; +"device_verification_emoji_turtle" = "Turtle"; +"device_verification_emoji_fish" = "Fish"; +"device_verification_emoji_octopus" = "Octopus"; +"device_verification_emoji_butterfly" = "Butterfly"; +"device_verification_emoji_flower" = "Flower"; +"device_verification_emoji_tree" = "Tree"; +"device_verification_emoji_cactus" = "Cactus"; +"device_verification_emoji_mushroom" = "Mushroom"; +"device_verification_emoji_globe" = "Globe"; +"device_verification_emoji_moon" = "Moon"; +"device_verification_emoji_cloud" = "Cloud"; +"device_verification_emoji_fire" = "Fire"; +"device_verification_emoji_banana" = "Banana"; +"device_verification_emoji_apple" = "Apple"; +"device_verification_emoji_strawberry" = "Strawberry"; +"device_verification_emoji_corn" = "Corn"; +"device_verification_emoji_pizza" = "Pizza"; +"device_verification_emoji_cake" = "Cake"; +"device_verification_emoji_heart" = "Heart"; +"device_verification_emoji_smiley" = "Smiley"; +"device_verification_emoji_robot" = "Robot"; +"device_verification_emoji_hat" = "Hat"; +"device_verification_emoji_glasses" = "Glasses"; +"device_verification_emoji_spanner" = "Spanner"; +"device_verification_emoji_santa" = "Santa"; +"device_verification_emoji_thumbs up" = "Thumbs up"; +"device_verification_emoji_umbrella" = "Umbrella"; +"device_verification_emoji_hourglass" = "Hourglass"; +"device_verification_emoji_clock" = "Class"; +"device_verification_emoji_gift" = "Gift"; +"device_verification_emoji_light bulb" = "Light Bulb"; +"device_verification_emoji_book" = "Book"; +"device_verification_emoji_pencil" = "Pencil"; +"device_verification_emoji_paperclip" = "Paperclip"; +"device_verification_emoji_scissors" = "Scissors"; +"device_verification_emoji_padlock" = "Padlock"; +"device_verification_emoji_key" = "Key"; +"device_verification_emoji_hammer" = "Hammer"; +"device_verification_emoji_telephone" = "Telephone"; +"device_verification_emoji_flag" = "Flag"; +"device_verification_emoji_train" = "Train"; +"device_verification_emoji_bicycle" = "Bicycle"; +"device_verification_emoji_aeroplane" = "Aeroplane"; +"device_verification_emoji_rocket" = "Rocket"; +"device_verification_emoji_trophy" = "Trophy"; +"device_verification_emoji_ball" = "Ball"; +"device_verification_emoji_guitar" = "Guitar"; +"device_verification_emoji_trumpet" = "Trumpet"; +"device_verification_emoji_bell" = "Ball"; +"device_verification_emoji_anchor" = "Anchor"; +"device_verification_emoji_headphones" = "Headphones"; +"device_verification_emoji_folder" = "Folder"; +"device_verification_emoji_pin" = "Pin"; diff --git a/Riot/Assets/ja.lproj/Localizable.strings b/Riot/Assets/ja.lproj/Localizable.strings index f81b270ee9..51a5c3d855 100644 --- a/Riot/Assets/ja.lproj/Localizable.strings +++ b/Riot/Assets/ja.lproj/Localizable.strings @@ -47,6 +47,6 @@ /* Incoming named video conference invite from a specific person */ "VIDEO_CONF_NAMED_FROM_USER" = "映像つき会議通話の着信 from %@: '%@'"; /* A single unread message in a room */ -"SINGLE_UNREAD_IN_ROOM" = "%@にメッセージを受け取りました"; +"SINGLE_UNREAD_IN_ROOM" = "%@にメッセージを受け取りました"; /* A single unread message */ "SINGLE_UNREAD" = "あなたはメッセージを受け取りました"; diff --git a/Riot/Assets/ja.lproj/Vector.strings b/Riot/Assets/ja.lproj/Vector.strings index c526364de1..f3312f9258 100644 --- a/Riot/Assets/ja.lproj/Vector.strings +++ b/Riot/Assets/ja.lproj/Vector.strings @@ -246,7 +246,7 @@ // Room Preview "room_preview_invitation_format" = "あなたは %@ さんに呼ばれてこの部屋へ参加しました"; "room_preview_subtitle" = "これは部屋の下見です。発言があっても部屋は更新されません。"; -"room_preview_unlinked_email_warning" = "このアカウントに関連付けられていない %@ 宛に招待が送信されました。別のアカウントでログインするか、この電子メールアドレスをこのアカウントに追加することができます。"; +"room_preview_unlinked_email_warning" = "このアカウントに関連付けられていない %@ 宛に招待が送信されました。別のアカウントでログインするか、この電子メールアドレスをこのアカウントに追加することができます。"; "room_preview_try_join_an_unknown_room" = "あなたは %@ へ接続しようとしています。この会議に参加しますか?"; "room_preview_try_join_an_unknown_room_default" = "部屋"; // Settings @@ -435,7 +435,7 @@ "no_voip_title" = "通話着信中"; "no_voip" = "%@ さんから通話の着信がありましたが、 %@ は通話をまだサポートしていません。\nこの通知を無視して、別の端末から着信に応答することも、拒否することもできます。"; // Crash report -"google_analytics_use_prompt" = "匿名の誤動作報告と使用状況データを自動的に報告して%@の改善に役立てますか?"; +"google_analytics_use_prompt" = "匿名の誤動作報告と使用状況データを自動的に報告して%@の改善に役立てますか?"; // Crypto "e2e_enabling_on_app_update" = "Riotはend-to-end暗号化をサポートするようになりましたが、再度有効にするにはログインする必要があります。\n\nアプリの設定から再ログインできます。今すぐ、または後からでも構いません。"; "e2e_need_log_in_again" = "この端末のエンドツーエンド暗号鍵を生成し、接続先サーバに公開鍵を送信するには、再度ログインする必要があります。\n一度回線を切断します。ご不便おかけしてすみません。"; @@ -498,9 +498,9 @@ "settings_labs_room_members_lazy_loading_error_message" = "あなたのホームサーバーはまだルームメンバーの遅延ロードをサポートしていません。 後で試してください。"; "settings_deactivate_my_account" = "アカウントを無効にします"; "room_details_flair_section" = "コミュニティの特色を表示"; -"room_details_new_flair_placeholder" = "新しいコミュニティIDを追加 (例 +foo%@)"; +"room_details_new_flair_placeholder" = "新しいコミュニティIDを追加 (例 +foo%@)"; "room_details_flair_invalid_id_prompt_title" = "無効な形式"; -"room_details_flair_invalid_id_prompt_msg" = "%@はコミュニティの有効な識別子ではありません"; +"room_details_flair_invalid_id_prompt_msg" = "%@はコミュニティの有効な識別子ではありません"; "room_details_fail_to_update_room_communities" = "関連コミュニティを更新できない"; // Group Details "group_details_title" = "コミュニティの詳細"; @@ -512,15 +512,15 @@ "group_home_multi_members_format" = "%tu メンバー"; "group_home_one_room_format" = "1 部屋"; "group_home_multi_rooms_format" = "%tu 部屋"; -"group_invitation_format" = "%@がこのコミュニティにあなたを招待しました"; +"group_invitation_format" = "%@がこのコミュニティにあなたを招待しました"; // Group participants "group_participants_add_participant" = "参加者を追加"; "group_participants_leave_prompt_title" = "グループを退出"; "group_participants_leave_prompt_msg" = "本当にグループを退出しますか?"; "group_participants_remove_prompt_title" = "確認"; -"group_participants_remove_prompt_msg" = "本当にこのグループから%@を削除しますか?"; +"group_participants_remove_prompt_msg" = "本当にこのグループから%@を削除しますか?"; "group_participants_invite_prompt_title" = "確認"; -"group_participants_invite_prompt_msg" = "本当にこのグループに%@を招待しますか?"; +"group_participants_invite_prompt_msg" = "本当にこのグループに%@を招待しますか?"; "group_participants_filter_members" = "コミュニティメンバーをフィルタリング"; "group_participants_invite_another_user" = "ユーザーIDまたは名前による検索/招待"; "group_participants_invite_malformed_id_title" = "招待エラー"; @@ -535,13 +535,13 @@ "widget_sticker_picker_no_stickerpacks_alert_add_now" = "今すぐ追加しますか?"; // Room key request dialog "e2e_room_key_request_title" = "暗号化キー要求"; -"e2e_room_key_request_message_new_device" = "暗号化キーを要求している新しい端末 '%@'を追加しました。"; -"e2e_room_key_request_message" = "検証されていない端末 '%@'が暗号化キーを要求しています。"; +"e2e_room_key_request_message_new_device" = "暗号化キーを要求している新しい端末 '%@'を追加しました。"; +"e2e_room_key_request_message" = "検証されていない端末 '%@'が暗号化キーを要求しています。"; "e2e_room_key_request_start_verification" = "検証開始..."; "e2e_room_key_request_share_without_verifying" = "検証せずに共有"; "e2e_room_key_request_ignore_request" = "要求を無視"; // GDPR -"gdpr_consent_not_given_alert_message" = "%@ホームサーバーを引き続き使用するには、利用規約を確認して同意する必要があります。"; +"gdpr_consent_not_given_alert_message" = "%@ホームサーバーを引き続き使用するには、利用規約を確認して同意する必要があります。"; "gdpr_consent_not_given_alert_review_now_action" = "今レビュー"; "deactivate_account_title" = "無効なアカウント"; "deactivate_account_informations_part1" = "これにより、アカウントは永久に使用できなくなります。 ログインすることはできず、誰も同じユーザーIDを再登録することはできません。 これにより、あなたのアカウントは参加しているすべての部屋から退去し、あなたのIDサーバーからアカウントの詳細が削除されます。 "; diff --git a/Riot/Assets/nl.lproj/Vector.strings b/Riot/Assets/nl.lproj/Vector.strings index 16359b7e6e..aed22a6bf2 100644 --- a/Riot/Assets/nl.lproj/Vector.strings +++ b/Riot/Assets/nl.lproj/Vector.strings @@ -91,7 +91,7 @@ "auth_reset_password_email_validation_message" = "Een e-mail is naar %@ gestuurd. Zodra je de link die het bevat hebt gevolgd, klik hieronder."; "auth_reset_password_next_step_button" = "Ik heb mijn e-mailadres geverifieerd"; "auth_reset_password_error_unauthorized" = "Het is niet gelukt om het e-mailadres te verifiëren: wees er zeker van dat je op de link in de e-mail hebt geklikt"; -"auth_reset_password_error_not_found" = "Het ziet er niet naar uit dat het e-mailadres met het Matrix ID op deze Homeserver is verbonden."; +"auth_reset_password_error_not_found" = "Het ziet er niet naar uit dat het e-mailadres met het Matrix ID op deze homeserver is verbonden."; "auth_reset_password_success_message" = "Je wachtwoord is opnieuw ingesteld.\n\nJe bent op alle apparaten uitgelogd en je zal geen notificaties meer ontvangen. Om notificaties weer in te schakelen, log op elk apparaat opnieuw in."; "auth_add_email_and_phone_warning" = "Registratie met e-mail en telefoonnummer tegelijkertijd wordt nog niet ondersteund totdat de api bestaat. Alleen het telefoonnummer zal worden gebruikt. Je kan je e-mailadres later aan je profiel in de instellingen toevoegen."; // Chat creation diff --git a/Riot/Assets/pr.lproj/Vector.strings b/Riot/Assets/pr.lproj/Vector.strings index e4c803196c..06ace01b4b 100755 --- a/Riot/Assets/pr.lproj/Vector.strings +++ b/Riot/Assets/pr.lproj/Vector.strings @@ -103,7 +103,7 @@ "auth_reset_password_email_validation_message" = "An email has been sent to %@. Once you've followed the link it contains, click below."; "auth_reset_password_next_step_button" = "I have verified my email address"; "auth_reset_password_error_unauthorized" = "Failed to verify email address: make sure you clicked the link in the email"; -"auth_reset_password_error_not_found" = "Your email address does not appear to be associated with a Matrix ID on this Homeserver."; +"auth_reset_password_error_not_found" = "Your email address does not appear to be associated with a Matrix ID on this homeserver."; "auth_reset_password_success_message" = "Your password has been reset.\n\nYou have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, re-log in on each device."; "auth_add_email_and_phone_warning" = "Registration with email and phone number at once is not supported yet until the api exists. Only the phone number will be taken into account. You may add your email to your profile in settings."; "auth_accept_policies" = "Please review and accept the policies of this homeserver:"; diff --git a/Riot/Assets/vi.lproj/Vector.strings b/Riot/Assets/vi.lproj/Vector.strings index 3058ca2c09..699dd5cb21 100644 --- a/Riot/Assets/vi.lproj/Vector.strings +++ b/Riot/Assets/vi.lproj/Vector.strings @@ -84,7 +84,7 @@ "auth_reset_password_email_validation_message" = "Email đã được gửi tới %@. Khi bạn đã theo liên kết trong đó, bấm vào dưới đây."; "auth_reset_password_next_step_button" = "Tôi đã xác thực địa chỉ email của tôi"; "auth_reset_password_error_unauthorized" = "Xác thực địa chỉ email thất bại: hãy đảm bảo rằng bạn đã bấm vào địa chỉ đính kèm trong email"; -"auth_reset_password_error_not_found" = "Địa chỉ email có vẻ chưa được liên kết với Matrix ID trên Homeserver này."; +"auth_reset_password_error_not_found" = "Địa chỉ email có vẻ chưa được liên kết với Matrix ID trên homeserver này."; "auth_reset_password_success_message" = "Mật khẩu của bạn đã được thiết lập lại.\n\nBạn đã được đăng xuất khỏi tất cả các thiết bị và sẽ không còn nhận được thông báo. Để bật lại thông báo, đăng nhập lại trên mỗi thiết bị."; "auth_add_email_and_phone_warning" = "Đăng kí với mật khẩu và số điện thoại cùng lúc chưa được hỗ trợ cho tới khi api được thiết lập. Duy nhất số điện thoại sẽ được liên kết với với tài khoản. Bạn sẽ phải thêm email vào hồ sơ trong mục cài đặt."; // Chat creation diff --git a/Riot/Assets/zh_Hans.lproj/Vector.strings b/Riot/Assets/zh_Hans.lproj/Vector.strings index b0acd371e3..e5a98d04f7 100644 --- a/Riot/Assets/zh_Hans.lproj/Vector.strings +++ b/Riot/Assets/zh_Hans.lproj/Vector.strings @@ -577,7 +577,7 @@ // Share extension "share_extension_auth_prompt" = "登录主应用程序以共享内容"; "share_extension_failed_to_encrypt" = "发送失败。 请在主应用程序中检查此房间的加密设置"; -"e2e_room_key_request_message_new_device" = "您添加了一个新设备 '%@' ,它正在请求加密密钥。"; +"e2e_room_key_request_message_new_device" = "您添加了一个新设备 '%@' ,它正在请求加密密钥。"; "e2e_room_key_request_message" = "您的未验证设备 '%@' 正在请求加密密钥。"; // GDPR "gdpr_consent_not_given_alert_message" = "要继续使用该 %@ 主服务器,您必须查看并同意其服务条款和条件。"; diff --git a/Riot/Assets/zh_Hant.lproj/Vector.strings b/Riot/Assets/zh_Hant.lproj/Vector.strings index 6c120218eb..0f338eb841 100644 --- a/Riot/Assets/zh_Hant.lproj/Vector.strings +++ b/Riot/Assets/zh_Hant.lproj/Vector.strings @@ -213,9 +213,9 @@ "search_in_progress" = "搜尋中……"; // Directory "directory_cell_title" = "瀏覽目錄"; -"directory_cell_description" = "%tu 個聊天室"; +"directory_cell_description" = "%tu 個聊天室"; "directory_search_results_title" = "聊天室目錄搜尋結果"; -"directory_search_results" = "搜尋 %@ 有 %tu 個結果"; +"directory_search_results" = "搜尋 %@ 有 %tu 個結果"; "directory_search_results_more_than" = "搜尋 %@ 有超過 %tu 個結果"; "directory_searching_title" = "搜尋聊天室目錄中……"; "directory_search_fail" = "無法取得資料"; @@ -437,7 +437,7 @@ "group_home_one_member_format" = "1 位成員"; "group_home_multi_members_format" = "%tu 位成員"; "group_home_one_room_format" = "一個聊天室"; -"group_home_multi_rooms_format" = "%tu 個聊天室"; +"group_home_multi_rooms_format" = "%tu 個聊天室"; "group_invitation_format" = "%@ 邀請您加入此社群"; // Group participants "group_participants_add_participant" = "新增成員"; diff --git a/Riot/Generated/RiotDefaults.swift b/Riot/Generated/RiotDefaults.swift index 51897ad61f..b760f56190 100644 --- a/Riot/Generated/RiotDefaults.swift +++ b/Riot/Generated/RiotDefaults.swift @@ -22,6 +22,7 @@ internal enum RiotDefaults { internal static let integrationsRestUrl: String = _document["integrationsRestUrl"] internal static let integrationsUiUrl: String = _document["integrationsUiUrl"] internal static let integrationsWidgetsUrls: [String] = _document["integrationsWidgetsUrls"] + internal static let jitsiServerURL: String = _document["jitsiServerURL"] internal static let matrixApps: Bool = _document["matrixApps"] internal static let maxAllowedMediaCacheSize: Int = _document["maxAllowedMediaCacheSize"] internal static let pinRoomsWithMissedNotif: Bool = _document["pinRoomsWithMissedNotif"] diff --git a/Riot/Generated/Storyboards.swift b/Riot/Generated/Storyboards.swift index afafd57f15..5db46ea188 100644 --- a/Riot/Generated/Storyboards.swift +++ b/Riot/Generated/Storyboards.swift @@ -12,6 +12,31 @@ import UIKit // swiftlint:disable explicit_type_interface identifier_name line_length type_body_length type_name internal enum StoryboardScene { + internal enum DeviceVerificationDataLoadingViewController: StoryboardType { + internal static let storyboardName = "DeviceVerificationDataLoadingViewController" + + internal static let initialScene = InitialSceneType(storyboard: DeviceVerificationDataLoadingViewController.self) + } + internal enum DeviceVerificationIncomingViewController: StoryboardType { + internal static let storyboardName = "DeviceVerificationIncomingViewController" + + internal static let initialScene = InitialSceneType(storyboard: DeviceVerificationIncomingViewController.self) + } + internal enum DeviceVerificationStartViewController: StoryboardType { + internal static let storyboardName = "DeviceVerificationStartViewController" + + internal static let initialScene = InitialSceneType(storyboard: DeviceVerificationStartViewController.self) + } + internal enum DeviceVerificationVerifiedViewController: StoryboardType { + internal static let storyboardName = "DeviceVerificationVerifiedViewController" + + internal static let initialScene = InitialSceneType(storyboard: DeviceVerificationVerifiedViewController.self) + } + internal enum DeviceVerificationVerifyViewController: StoryboardType { + internal static let storyboardName = "DeviceVerificationVerifyViewController" + + internal static let initialScene = InitialSceneType(storyboard: DeviceVerificationVerifyViewController.self) + } internal enum KeyBackupRecoverFromPassphraseViewController: StoryboardType { internal static let storyboardName = "KeyBackupRecoverFromPassphraseViewController" @@ -47,6 +72,16 @@ internal enum StoryboardScene { internal static let initialScene = InitialSceneType(storyboard: KeyBackupSetupSuccessFromRecoveryKeyViewController.self) } + internal enum SimpleScreenTemplateViewController: StoryboardType { + internal static let storyboardName = "SimpleScreenTemplateViewController" + + internal static let initialScene = InitialSceneType(storyboard: SimpleScreenTemplateViewController.self) + } + internal enum TemplateScreenViewController: StoryboardType { + internal static let storyboardName = "TemplateScreenViewController" + + internal static let initialScene = InitialSceneType(storyboard: TemplateScreenViewController.self) + } } // swiftlint:enable explicit_type_interface identifier_name line_length type_body_length type_name diff --git a/Riot/Generated/Strings.swift b/Riot/Generated/Strings.swift index 846f237d35..1239b656be 100644 --- a/Riot/Generated/Strings.swift +++ b/Riot/Generated/Strings.swift @@ -38,7 +38,7 @@ internal enum VectorL10n { internal static var authAddEmailAndPhoneWarning: String { return VectorL10n.tr("Vector", "auth_add_email_and_phone_warning") } - /// Add an email address to your account to let users discover you, and let you reset password. + /// Add an email address to your account to let users discover you, and to reset your password. internal static var authAddEmailMessage: String { return VectorL10n.tr("Vector", "auth_add_email_message") } @@ -166,7 +166,7 @@ internal enum VectorL10n { internal static var authPhonePlaceholder: String { return VectorL10n.tr("Vector", "auth_phone_placeholder") } - /// This Home Server would like to make sure you are not a robot + /// This homeserver would like to make sure you are not a robot internal static var authRecaptchaMessage: String { return VectorL10n.tr("Vector", "auth_recaptcha_message") } @@ -186,7 +186,7 @@ internal enum VectorL10n { internal static func authResetPasswordEmailValidationMessage(_ p1: String) -> String { return VectorL10n.tr("Vector", "auth_reset_password_email_validation_message", p1) } - /// Your email address does not appear to be associated with a Matrix ID on this Homeserver. + /// Your email address does not appear to be associated with a Matrix ID on this homeserver. internal static var authResetPasswordErrorNotFound: String { return VectorL10n.tr("Vector", "auth_reset_password_error_not_found") } @@ -426,6 +426,342 @@ internal enum VectorL10n { internal static var decline: String { return VectorL10n.tr("Vector", "decline") } + /// The other party cancelled the verification. + internal static var deviceVerificationCancelled: String { + return VectorL10n.tr("Vector", "device_verification_cancelled") + } + /// The verification has been cancelled. Reason: %@ + internal static func deviceVerificationCancelledByMe(_ p1: String) -> String { + return VectorL10n.tr("Vector", "device_verification_cancelled_by_me", p1) + } + /// Aeroplane + internal static var deviceVerificationEmojiAeroplane: String { + return VectorL10n.tr("Vector", "device_verification_emoji_aeroplane") + } + /// Anchor + internal static var deviceVerificationEmojiAnchor: String { + return VectorL10n.tr("Vector", "device_verification_emoji_anchor") + } + /// Apple + internal static var deviceVerificationEmojiApple: String { + return VectorL10n.tr("Vector", "device_verification_emoji_apple") + } + /// Ball + internal static var deviceVerificationEmojiBall: String { + return VectorL10n.tr("Vector", "device_verification_emoji_ball") + } + /// Banana + internal static var deviceVerificationEmojiBanana: String { + return VectorL10n.tr("Vector", "device_verification_emoji_banana") + } + /// Ball + internal static var deviceVerificationEmojiBell: String { + return VectorL10n.tr("Vector", "device_verification_emoji_bell") + } + /// Bicycle + internal static var deviceVerificationEmojiBicycle: String { + return VectorL10n.tr("Vector", "device_verification_emoji_bicycle") + } + /// Book + internal static var deviceVerificationEmojiBook: String { + return VectorL10n.tr("Vector", "device_verification_emoji_book") + } + /// Butterfly + internal static var deviceVerificationEmojiButterfly: String { + return VectorL10n.tr("Vector", "device_verification_emoji_butterfly") + } + /// Cactus + internal static var deviceVerificationEmojiCactus: String { + return VectorL10n.tr("Vector", "device_verification_emoji_cactus") + } + /// Cake + internal static var deviceVerificationEmojiCake: String { + return VectorL10n.tr("Vector", "device_verification_emoji_cake") + } + /// Cat + internal static var deviceVerificationEmojiCat: String { + return VectorL10n.tr("Vector", "device_verification_emoji_cat") + } + /// Class + internal static var deviceVerificationEmojiClock: String { + return VectorL10n.tr("Vector", "device_verification_emoji_clock") + } + /// Cloud + internal static var deviceVerificationEmojiCloud: String { + return VectorL10n.tr("Vector", "device_verification_emoji_cloud") + } + /// Corn + internal static var deviceVerificationEmojiCorn: String { + return VectorL10n.tr("Vector", "device_verification_emoji_corn") + } + /// Dog + internal static var deviceVerificationEmojiDog: String { + return VectorL10n.tr("Vector", "device_verification_emoji_dog") + } + /// Elephant + internal static var deviceVerificationEmojiElephant: String { + return VectorL10n.tr("Vector", "device_verification_emoji_elephant") + } + /// Fire + internal static var deviceVerificationEmojiFire: String { + return VectorL10n.tr("Vector", "device_verification_emoji_fire") + } + /// Fish + internal static var deviceVerificationEmojiFish: String { + return VectorL10n.tr("Vector", "device_verification_emoji_fish") + } + /// Flag + internal static var deviceVerificationEmojiFlag: String { + return VectorL10n.tr("Vector", "device_verification_emoji_flag") + } + /// Flower + internal static var deviceVerificationEmojiFlower: String { + return VectorL10n.tr("Vector", "device_verification_emoji_flower") + } + /// Folder + internal static var deviceVerificationEmojiFolder: String { + return VectorL10n.tr("Vector", "device_verification_emoji_folder") + } + /// Gift + internal static var deviceVerificationEmojiGift: String { + return VectorL10n.tr("Vector", "device_verification_emoji_gift") + } + /// Glasses + internal static var deviceVerificationEmojiGlasses: String { + return VectorL10n.tr("Vector", "device_verification_emoji_glasses") + } + /// Globe + internal static var deviceVerificationEmojiGlobe: String { + return VectorL10n.tr("Vector", "device_verification_emoji_globe") + } + /// Guitar + internal static var deviceVerificationEmojiGuitar: String { + return VectorL10n.tr("Vector", "device_verification_emoji_guitar") + } + /// Hammer + internal static var deviceVerificationEmojiHammer: String { + return VectorL10n.tr("Vector", "device_verification_emoji_hammer") + } + /// Hat + internal static var deviceVerificationEmojiHat: String { + return VectorL10n.tr("Vector", "device_verification_emoji_hat") + } + /// Headphones + internal static var deviceVerificationEmojiHeadphones: String { + return VectorL10n.tr("Vector", "device_verification_emoji_headphones") + } + /// Heart + internal static var deviceVerificationEmojiHeart: String { + return VectorL10n.tr("Vector", "device_verification_emoji_heart") + } + /// Horse + internal static var deviceVerificationEmojiHorse: String { + return VectorL10n.tr("Vector", "device_verification_emoji_horse") + } + /// Hourglass + internal static var deviceVerificationEmojiHourglass: String { + return VectorL10n.tr("Vector", "device_verification_emoji_hourglass") + } + /// Key + internal static var deviceVerificationEmojiKey: String { + return VectorL10n.tr("Vector", "device_verification_emoji_key") + } + /// Light Bulb + internal static var deviceVerificationEmojiLightBulb: String { + return VectorL10n.tr("Vector", "device_verification_emoji_light bulb") + } + /// Lion + internal static var deviceVerificationEmojiLion: String { + return VectorL10n.tr("Vector", "device_verification_emoji_lion") + } + /// Moon + internal static var deviceVerificationEmojiMoon: String { + return VectorL10n.tr("Vector", "device_verification_emoji_moon") + } + /// Mushroom + internal static var deviceVerificationEmojiMushroom: String { + return VectorL10n.tr("Vector", "device_verification_emoji_mushroom") + } + /// Octopus + internal static var deviceVerificationEmojiOctopus: String { + return VectorL10n.tr("Vector", "device_verification_emoji_octopus") + } + /// Padlock + internal static var deviceVerificationEmojiPadlock: String { + return VectorL10n.tr("Vector", "device_verification_emoji_padlock") + } + /// Panda + internal static var deviceVerificationEmojiPanda: String { + return VectorL10n.tr("Vector", "device_verification_emoji_panda") + } + /// Paperclip + internal static var deviceVerificationEmojiPaperclip: String { + return VectorL10n.tr("Vector", "device_verification_emoji_paperclip") + } + /// Pencil + internal static var deviceVerificationEmojiPencil: String { + return VectorL10n.tr("Vector", "device_verification_emoji_pencil") + } + /// Penguin + internal static var deviceVerificationEmojiPenguin: String { + return VectorL10n.tr("Vector", "device_verification_emoji_penguin") + } + /// Pig + internal static var deviceVerificationEmojiPig: String { + return VectorL10n.tr("Vector", "device_verification_emoji_pig") + } + /// Pin + internal static var deviceVerificationEmojiPin: String { + return VectorL10n.tr("Vector", "device_verification_emoji_pin") + } + /// Pizza + internal static var deviceVerificationEmojiPizza: String { + return VectorL10n.tr("Vector", "device_verification_emoji_pizza") + } + /// Rabbit + internal static var deviceVerificationEmojiRabbit: String { + return VectorL10n.tr("Vector", "device_verification_emoji_rabbit") + } + /// Robot + internal static var deviceVerificationEmojiRobot: String { + return VectorL10n.tr("Vector", "device_verification_emoji_robot") + } + /// Rocket + internal static var deviceVerificationEmojiRocket: String { + return VectorL10n.tr("Vector", "device_verification_emoji_rocket") + } + /// Rooster + internal static var deviceVerificationEmojiRooster: String { + return VectorL10n.tr("Vector", "device_verification_emoji_rooster") + } + /// Santa + internal static var deviceVerificationEmojiSanta: String { + return VectorL10n.tr("Vector", "device_verification_emoji_santa") + } + /// Scissors + internal static var deviceVerificationEmojiScissors: String { + return VectorL10n.tr("Vector", "device_verification_emoji_scissors") + } + /// Smiley + internal static var deviceVerificationEmojiSmiley: String { + return VectorL10n.tr("Vector", "device_verification_emoji_smiley") + } + /// Spanner + internal static var deviceVerificationEmojiSpanner: String { + return VectorL10n.tr("Vector", "device_verification_emoji_spanner") + } + /// Strawberry + internal static var deviceVerificationEmojiStrawberry: String { + return VectorL10n.tr("Vector", "device_verification_emoji_strawberry") + } + /// Telephone + internal static var deviceVerificationEmojiTelephone: String { + return VectorL10n.tr("Vector", "device_verification_emoji_telephone") + } + /// Thumbs up + internal static var deviceVerificationEmojiThumbsUp: String { + return VectorL10n.tr("Vector", "device_verification_emoji_thumbs up") + } + /// Train + internal static var deviceVerificationEmojiTrain: String { + return VectorL10n.tr("Vector", "device_verification_emoji_train") + } + /// Tree + internal static var deviceVerificationEmojiTree: String { + return VectorL10n.tr("Vector", "device_verification_emoji_tree") + } + /// Trophy + internal static var deviceVerificationEmojiTrophy: String { + return VectorL10n.tr("Vector", "device_verification_emoji_trophy") + } + /// Trumpet + internal static var deviceVerificationEmojiTrumpet: String { + return VectorL10n.tr("Vector", "device_verification_emoji_trumpet") + } + /// Turtle + internal static var deviceVerificationEmojiTurtle: String { + return VectorL10n.tr("Vector", "device_verification_emoji_turtle") + } + /// Umbrella + internal static var deviceVerificationEmojiUmbrella: String { + return VectorL10n.tr("Vector", "device_verification_emoji_umbrella") + } + /// Unicorn + internal static var deviceVerificationEmojiUnicorn: String { + return VectorL10n.tr("Vector", "device_verification_emoji_unicorn") + } + /// Cannot load device information. + internal static var deviceVerificationErrorCannotLoadDevice: String { + return VectorL10n.tr("Vector", "device_verification_error_cannot_load_device") + } + /// Verify this device to mark it as trusted. Trusting devices of partners gives you extra peace of mind when using end-to-end encrypted messages. + internal static var deviceVerificationIncomingDescription1: String { + return VectorL10n.tr("Vector", "device_verification_incoming_description_1") + } + /// Verifying this device will mark it as trusted, and also mark your device as trusted to the partner. + internal static var deviceVerificationIncomingDescription2: String { + return VectorL10n.tr("Vector", "device_verification_incoming_description_2") + } + /// Incoming Verification Request + internal static var deviceVerificationIncomingTitle: String { + return VectorL10n.tr("Vector", "device_verification_incoming_title") + } + /// For maximum security, we recommend you do this in person or use another trusted means of communication + internal static var deviceVerificationSecurityAdvice: String { + return VectorL10n.tr("Vector", "device_verification_security_advice") + } + /// Verify by comparing a short text string + internal static var deviceVerificationStartTitle: String { + return VectorL10n.tr("Vector", "device_verification_start_title") + } + /// Nothing appearing? Not all clients supports interactive verification yet. Use legacy verification. + internal static var deviceVerificationStartUseLegacy: String { + return VectorL10n.tr("Vector", "device_verification_start_use_legacy") + } + /// Use Legacy Verification + internal static var deviceVerificationStartUseLegacyAction: String { + return VectorL10n.tr("Vector", "device_verification_start_use_legacy_action") + } + /// Begin Verifying + internal static var deviceVerificationStartVerifyButton: String { + return VectorL10n.tr("Vector", "device_verification_start_verify_button") + } + /// Waiting for partner to accept... + internal static var deviceVerificationStartWaitPartner: String { + return VectorL10n.tr("Vector", "device_verification_start_wait_partner") + } + /// Verify device + internal static var deviceVerificationTitle: String { + return VectorL10n.tr("Vector", "device_verification_title") + } + /// You've successfully verified this device. + internal static var deviceVerificationVerifiedDescription1: String { + return VectorL10n.tr("Vector", "device_verification_verified_description_1") + } + /// Secure messages with this user are end-to-end encrypted and not able to be read by third parties. + internal static var deviceVerificationVerifiedDescription2: String { + return VectorL10n.tr("Vector", "device_verification_verified_description_2") + } + /// Got it + internal static var deviceVerificationVerifiedGotItButton: String { + return VectorL10n.tr("Vector", "device_verification_verified_got_it_button") + } + /// Verified! + internal static var deviceVerificationVerifiedTitle: String { + return VectorL10n.tr("Vector", "device_verification_verified_title") + } + /// Verify this device by confirming the following emoji appear on the screen of the partner + internal static var deviceVerificationVerifyTitleEmoji: String { + return VectorL10n.tr("Vector", "device_verification_verify_title_emoji") + } + /// Verify this device by confirming the following numbers appear on the screen of the partner + internal static var deviceVerificationVerifyTitleNumber: String { + return VectorL10n.tr("Vector", "device_verification_verify_title_number") + } + /// Waiting for partner to confirm... + internal static var deviceVerificationVerifyWaitPartner: String { + return VectorL10n.tr("Vector", "device_verification_verify_wait_partner") + } /// %tu rooms internal static func directoryCellDescription(_ p1: Int) -> String { return VectorL10n.tr("Vector", "directory_cell_description", p1) @@ -686,14 +1022,14 @@ internal enum VectorL10n { internal static var join: String { return VectorL10n.tr("Vector", "join") } - /// Use Key Backup - internal static var keyBackupRecoverBannerSubtitle: String { - return VectorL10n.tr("Vector", "key_backup_recover_banner_subtitle") - } /// Never lose encrypted messages internal static var keyBackupRecoverBannerTitle: String { return VectorL10n.tr("Vector", "key_backup_recover_banner_title") } + /// Connect this device to Key Backup + internal static var keyBackupRecoverConnentBannerSubtitle: String { + return VectorL10n.tr("Vector", "key_backup_recover_connent_banner_subtitle") + } /// Done internal static var keyBackupRecoverDoneAction: String { return VectorL10n.tr("Vector", "key_backup_recover_done_action") @@ -790,14 +1126,14 @@ internal enum VectorL10n { internal static var keyBackupSetupIntroManualExportInfo: String { return VectorL10n.tr("Vector", "key_backup_setup_intro_manual_export_info") } - /// Use Key Backup - internal static var keyBackupSetupIntroSetupActionWithExistingBackup: String { - return VectorL10n.tr("Vector", "key_backup_setup_intro_setup_action_with_existing_backup") - } /// Start using Key Backup internal static var keyBackupSetupIntroSetupActionWithoutExistingBackup: String { return VectorL10n.tr("Vector", "key_backup_setup_intro_setup_action_without_existing_backup") } + /// Connect this device to Key Backup + internal static var keyBackupSetupIntroSetupConnectActionWithExistingBackup: String { + return VectorL10n.tr("Vector", "key_backup_setup_intro_setup_connect_action_with_existing_backup") + } /// Never lose encrypted messages internal static var keyBackupSetupIntroTitle: String { return VectorL10n.tr("Vector", "key_backup_setup_intro_title") @@ -1878,7 +2214,7 @@ internal enum VectorL10n { internal static var settingsClearCache: String { return VectorL10n.tr("Vector", "settings_clear_cache") } - /// Home server is %@ + /// Homeserver is %@ internal static func settingsConfigHomeServer(_ p1: String) -> String { return VectorL10n.tr("Vector", "settings_config_home_server", p1) } @@ -2006,6 +2342,10 @@ internal enum VectorL10n { internal static var settingsKeyBackup: String { return VectorL10n.tr("Vector", "settings_key_backup") } + /// Connect this device to Key Backup + internal static var settingsKeyBackupButtonConnect: String { + return VectorL10n.tr("Vector", "settings_key_backup_button_connect") + } /// Start using Key Backup internal static var settingsKeyBackupButtonCreate: String { return VectorL10n.tr("Vector", "settings_key_backup_button_create") @@ -2018,10 +2358,6 @@ internal enum VectorL10n { internal static var settingsKeyBackupButtonRestore: String { return VectorL10n.tr("Vector", "settings_key_backup_button_restore") } - /// Use key backup - internal static var settingsKeyBackupButtonUse: String { - return VectorL10n.tr("Vector", "settings_key_backup_button_use") - } /// Are you sure? You will lose your encrypted messages if your keys are not backed up properly. internal static var settingsKeyBackupDeleteConfirmationPromptMsg: String { return VectorL10n.tr("Vector", "settings_key_backup_delete_confirmation_prompt_msg") @@ -2046,7 +2382,7 @@ internal enum VectorL10n { internal static var settingsKeyBackupInfoNone: String { return VectorL10n.tr("Vector", "settings_key_backup_info_none") } - /// This device is not backing up your keys. + /// This device is not backing up your keys, but you do have an existing backup you can restore from and add to going forward. internal static var settingsKeyBackupInfoNotValid: String { return VectorL10n.tr("Vector", "settings_key_backup_info_not_valid") } @@ -2058,7 +2394,7 @@ internal enum VectorL10n { internal static var settingsKeyBackupInfoProgressDone: String { return VectorL10n.tr("Vector", "settings_key_backup_info_progress_done") } - /// Back up your keys before signing out to avoid losing them. + /// Connect this device to key backup before signing out to avoid losing any keys that may only be on this device. internal static var settingsKeyBackupInfoSignoutWarning: String { return VectorL10n.tr("Vector", "settings_key_backup_info_signout_warning") } @@ -2488,7 +2824,7 @@ internal enum VectorL10n { // MARK: - Implementation Details extension VectorL10n { - private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String { + static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String { let format = NSLocalizedString(key, tableName: table, bundle: Bundle(for: BundleToken.self), comment: "") let locale: Locale if let localeIdentifier = Bundle.mxk_language() { diff --git a/Riot/Managers/Theme/Themable.swift b/Riot/Managers/Theme/Themable.swift new file mode 100644 index 0000000000..3764b24b7f --- /dev/null +++ b/Riot/Managers/Theme/Themable.swift @@ -0,0 +1,21 @@ +/* + Copyright 2019 New Vector Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation + +protocol Themable: class { + func update(theme: Theme) +} diff --git a/Riot/Modules/Authentication/AuthenticationViewController.xib b/Riot/Modules/Authentication/AuthenticationViewController.xib index c87bea248e..71887099da 100644 --- a/Riot/Modules/Authentication/AuthenticationViewController.xib +++ b/Riot/Modules/Authentication/AuthenticationViewController.xib @@ -102,7 +102,7 @@ -