From 95339a4404f0beebbd1175d02018f65805887c09 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Wed, 3 Feb 2021 14:01:29 +0300 Subject: [PATCH 001/194] Voip all --- CHANGES.rst | 1 + Podfile | 4 +- Podfile.lock | 28 ++- Riot.xcodeproj/project.pbxproj | 40 ++++ .../Call/call_video_icon.imageset/24.png | Bin 0 -> 333 bytes .../Call/call_video_icon.imageset/24@2x.png | Bin 0 -> 498 bytes .../Call/call_video_icon.imageset/24@3x.png | Bin 0 -> 633 bytes .../call_video_icon.imageset/Contents.json | 23 ++ Riot/Assets/en.lproj/Vector.strings | 6 + .../MXKRoomBubbleTableViewCell+Riot.h | 7 + .../MXKRoomBubbleTableViewCell+Riot.m | 1 + Riot/Categories/RoomBubbleCellData.swift | 50 +++++ Riot/Generated/Images.swift | 1 + Riot/Generated/Strings.swift | 24 ++ Riot/Managers/Call/CallService.swift | 52 +++++ Riot/Modules/Application/LegacyAppDelegate.m | 6 + .../Room/CellData/RoomBubbleCellData.h | 3 +- .../Room/CellData/RoomBubbleCellData.m | 30 +++ Riot/Modules/Room/RoomViewController.h | 5 + Riot/Modules/Room/RoomViewController.m | 24 ++ .../Call/CallBubbleCellBaseContentView.swift | 122 +++++++++++ .../Call/CallBubbleCellBaseContentView.xib | 170 ++++++++++++++ .../RoomDirectCallStatusBubbleCell.swift | 207 ++++++++++++++++++ .../Call/RoomBaseCallBubbleCell.swift | 113 ++++++++++ .../Call/RoomBaseCallBubbleCell.xib | 24 ++ Riot/Utils/EventFormatter.m | 71 ++++-- 26 files changed, 983 insertions(+), 29 deletions(-) create mode 100644 Riot/Assets/Images.xcassets/Call/call_video_icon.imageset/24.png create mode 100644 Riot/Assets/Images.xcassets/Call/call_video_icon.imageset/24@2x.png create mode 100644 Riot/Assets/Images.xcassets/Call/call_video_icon.imageset/24@3x.png create mode 100644 Riot/Assets/Images.xcassets/Call/call_video_icon.imageset/Contents.json create mode 100644 Riot/Categories/RoomBubbleCellData.swift create mode 100644 Riot/Modules/Room/Views/BubbleCells/Call/CallBubbleCellBaseContentView.swift create mode 100644 Riot/Modules/Room/Views/BubbleCells/Call/CallBubbleCellBaseContentView.xib create mode 100644 Riot/Modules/Room/Views/BubbleCells/Call/Direct/RoomDirectCallStatusBubbleCell.swift create mode 100644 Riot/Modules/Room/Views/BubbleCells/Call/RoomBaseCallBubbleCell.swift create mode 100644 Riot/Modules/Room/Views/BubbleCells/Call/RoomBaseCallBubbleCell.xib diff --git a/CHANGES.rst b/CHANGES.rst index 400f4e41d..2882cb3e8 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -92,6 +92,7 @@ Changes in 1.1.4 (2021-01-15) * Bug report: Add "Continue in background" button (#3816). * Show user id in the room invite preview screen (#3839) * AuthVC: SSO authentication now use redirect URL instead of fallback page (#3846). + * VoIP: Implement call tiles on timeline (#3955). 🐛 Bugfix * Crash report cannot be submitted (on small phones) (#3819) diff --git a/Podfile b/Podfile index 38349e222..46a8ae841 100644 --- a/Podfile +++ b/Podfile @@ -11,9 +11,9 @@ use_frameworks! # - `{ {kit spec hash} => {sdk spec hash}` to depend on specific pod options (:git => …, :podspec => …) for each repo. Used by Fastfile during CI # # Warning: our internal tooling depends on the name of this variable name, so be sure not to change it -$matrixKitVersion = '= 0.13.8' +#$matrixKitVersion = '= 0.13.8' # $matrixKitVersion = :local -# $matrixKitVersion = {'develop' => 'develop'} + $matrixKitVersion = {'voip_2746' => 'voip_2746'} ######################################## diff --git a/Podfile.lock b/Podfile.lock index 7f785686f..c36755b5c 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -127,10 +127,10 @@ DEPENDENCIES: - KeychainAccess (~> 4.2.1) - KTCenterFlowLayout (~> 1.3.1) - MatomoTracker (~> 7.2.2) - - MatrixKit (= 0.13.8) - - MatrixKit/AppExtension (= 0.13.8) - - MatrixSDK - - MatrixSDK/JingleCallStack + - MatrixKit (from `https://github.com/matrix-org/matrix-ios-kit.git`, branch `voip_2746`) + - MatrixKit/AppExtension (from `https://github.com/matrix-org/matrix-ios-kit.git`, branch `voip_2746`) + - MatrixSDK (from `https://github.com/matrix-org/matrix-ios-sdk.git`, branch `voip_2746`) + - MatrixSDK/JingleCallStack (from `https://github.com/matrix-org/matrix-ios-sdk.git`, branch `voip_2746`) - OLMKit - ReadMoreTextView (~> 3.0.1) - Reusable (~> 4.1) @@ -164,8 +164,6 @@ SPEC REPOS: - LoggerAPI - Logging - MatomoTracker - - MatrixKit - - MatrixSDK - OLMKit - ReadMoreTextView - Realm @@ -177,6 +175,22 @@ SPEC REPOS: - zxcvbn-ios - ZXingObjC +EXTERNAL SOURCES: + MatrixKit: + :branch: voip_2746 + :git: https://github.com/matrix-org/matrix-ios-kit.git + MatrixSDK: + :branch: voip_2746 + :git: https://github.com/matrix-org/matrix-ios-sdk.git + +CHECKOUT OPTIONS: + MatrixKit: + :commit: dd4a397a95ff2e2b9a0d9b75a097ef63d428f683 + :git: https://github.com/matrix-org/matrix-ios-kit.git + MatrixSDK: + :commit: 7afc4c109249ab6a69da1c9f460a30f756cf6324 + :git: https://github.com/matrix-org/matrix-ios-sdk.git + SPEC CHECKSUMS: AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce BlueCryptor: b0aee3d9b8f367b49b30de11cda90e1735571c24 @@ -212,6 +226,6 @@ SPEC CHECKSUMS: zxcvbn-ios: fef98b7c80f1512ff0eec47ac1fa399fc00f7e3c ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb -PODFILE CHECKSUM: 376eeb13ecb078f5d76166cd2982477f181e815f +PODFILE CHECKSUM: 736d0c773f36aceb3334fdda58933e81360d5774 COCOAPODS: 1.10.0 diff --git a/Riot.xcodeproj/project.pbxproj b/Riot.xcodeproj/project.pbxproj index 47c72d15c..807bc3489 100644 --- a/Riot.xcodeproj/project.pbxproj +++ b/Riot.xcodeproj/project.pbxproj @@ -963,6 +963,12 @@ ECB5D98F255420F8000AD89C /* Keychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECB5D98E255420F8000AD89C /* Keychain.swift */; }; ECB5D9902554221F000AD89C /* Keychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECB5D98E255420F8000AD89C /* Keychain.swift */; }; ECC4C82F256FA7520010BA44 /* CallService.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECC4C82E256FA7520010BA44 /* CallService.swift */; }; + ECD95ACF25CAB5C300E92D6F /* RoomBubbleCellData.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECD95ACE25CAB5C300E92D6F /* RoomBubbleCellData.swift */; }; + ECD95AD725CAB5D100E92D6F /* CallBubbleCellBaseContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ECD95AD125CAB5D100E92D6F /* CallBubbleCellBaseContentView.xib */; }; + ECD95AD825CAB5D100E92D6F /* RoomDirectCallStatusBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECD95AD325CAB5D100E92D6F /* RoomDirectCallStatusBubbleCell.swift */; }; + ECD95AD925CAB5D100E92D6F /* RoomBaseCallBubbleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = ECD95AD425CAB5D100E92D6F /* RoomBaseCallBubbleCell.xib */; }; + ECD95ADA25CAB5D100E92D6F /* RoomBaseCallBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECD95AD525CAB5D100E92D6F /* RoomBaseCallBubbleCell.swift */; }; + ECD95ADB25CAB5D100E92D6F /* CallBubbleCellBaseContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECD95AD625CAB5D100E92D6F /* CallBubbleCellBaseContentView.swift */; }; ECDC15F224AF41D2003437CF /* FormattedBodyParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECDC15F124AF41D2003437CF /* FormattedBodyParser.swift */; }; ECF57A4425090C23004BBF9D /* CreateRoomCoordinatorBridgePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECF57A3825090C23004BBF9D /* CreateRoomCoordinatorBridgePresenter.swift */; }; ECF57A4525090C23004BBF9D /* CreateRoomCoordinatorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECF57A3925090C23004BBF9D /* CreateRoomCoordinatorType.swift */; }; @@ -2252,6 +2258,12 @@ ECB101352477D00700CF8C11 /* UniversalLink.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UniversalLink.m; sourceTree = ""; }; ECB5D98E255420F8000AD89C /* Keychain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Keychain.swift; sourceTree = ""; }; ECC4C82E256FA7520010BA44 /* CallService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallService.swift; sourceTree = ""; }; + ECD95ACE25CAB5C300E92D6F /* RoomBubbleCellData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RoomBubbleCellData.swift; sourceTree = ""; }; + ECD95AD125CAB5D100E92D6F /* CallBubbleCellBaseContentView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CallBubbleCellBaseContentView.xib; sourceTree = ""; }; + ECD95AD325CAB5D100E92D6F /* RoomDirectCallStatusBubbleCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RoomDirectCallStatusBubbleCell.swift; sourceTree = ""; }; + ECD95AD425CAB5D100E92D6F /* RoomBaseCallBubbleCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoomBaseCallBubbleCell.xib; sourceTree = ""; }; + ECD95AD525CAB5D100E92D6F /* RoomBaseCallBubbleCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RoomBaseCallBubbleCell.swift; sourceTree = ""; }; + ECD95AD625CAB5D100E92D6F /* CallBubbleCellBaseContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallBubbleCellBaseContentView.swift; sourceTree = ""; }; ECDC15F124AF41D2003437CF /* FormattedBodyParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormattedBodyParser.swift; sourceTree = ""; }; ECF57A3825090C23004BBF9D /* CreateRoomCoordinatorBridgePresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateRoomCoordinatorBridgePresenter.swift; sourceTree = ""; }; ECF57A3925090C23004BBF9D /* CreateRoomCoordinatorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateRoomCoordinatorType.swift; sourceTree = ""; }; @@ -4431,6 +4443,7 @@ B1B5583F20EF768E00210D55 /* BubbleCells */ = { isa = PBXGroup; children = ( + ECD95AD025CAB5D100E92D6F /* Call */, ECFBD5E6250F97FC00DD5F5A /* RoomCreationCollapsedBubbleCell.h */, ECFBD5E9250F97FC00DD5F5A /* RoomCreationCollapsedBubbleCell.m */, ECFBD5E4250F97FC00DD5F5A /* RoomCreationCollapsedBubbleCell.xib */, @@ -5461,6 +5474,26 @@ path = Call; sourceTree = ""; }; + ECD95AD025CAB5D100E92D6F /* Call */ = { + isa = PBXGroup; + children = ( + ECD95AD125CAB5D100E92D6F /* CallBubbleCellBaseContentView.xib */, + ECD95AD225CAB5D100E92D6F /* Direct */, + ECD95AD425CAB5D100E92D6F /* RoomBaseCallBubbleCell.xib */, + ECD95AD525CAB5D100E92D6F /* RoomBaseCallBubbleCell.swift */, + ECD95AD625CAB5D100E92D6F /* CallBubbleCellBaseContentView.swift */, + ); + path = Call; + sourceTree = ""; + }; + ECD95AD225CAB5D100E92D6F /* Direct */ = { + isa = PBXGroup; + children = ( + ECD95AD325CAB5D100E92D6F /* RoomDirectCallStatusBubbleCell.swift */, + ); + path = Direct; + sourceTree = ""; + }; ECF57A3725090C23004BBF9D /* CreateRoom */ = { isa = PBXGroup; children = ( @@ -5666,6 +5699,7 @@ F083BBE41E7009EC00A9B29C /* Categories */ = { isa = PBXGroup; children = ( + ECD95ACE25CAB5C300E92D6F /* RoomBubbleCellData.swift */, ECFBD5D9250A7ABD00DD5F5A /* MXThirdPartyProtocolInstance.swift */, EC711B4524A63B13008F830C /* MXRecoveryService.swift */, ECB1012E2477CFDB00CF8C11 /* UIDevice.swift */, @@ -6088,6 +6122,7 @@ B1B558C220EF768F00210D55 /* RoomIncomingEncryptedTextMsgBubbleCell.xib in Resources */, B1B558F620EF768F00210D55 /* RoomOutgoingTextMsgBubbleCell.xib in Resources */, B1B5574D20EE6C4D00210D55 /* MediaPickerViewController.xib in Resources */, + ECD95AD925CAB5D100E92D6F /* RoomBaseCallBubbleCell.xib in Resources */, B1B5575020EE6C4D00210D55 /* AuthenticationViewController.xib in Resources */, B1C45A85232A8C2600165425 /* SettingsIdentityServerViewController.storyboard in Resources */, B14F142E22144F6500FA0595 /* KeyBackupRecoverFromRecoveryKeyViewController.storyboard in Resources */, @@ -6137,6 +6172,7 @@ 3232AB1522564D9100AD6A5C /* flat-swift4-vector.stencil in Resources */, F083BDE61E7009ED00A9B29C /* busy.mp3 in Resources */, EC711BB324A63B58008F830C /* SecureBackupBannerCell.xib in Resources */, + ECD95AD725CAB5D100E92D6F /* CallBubbleCellBaseContentView.xib in Resources */, B1B5574C20EE6C4D00210D55 /* MediaAlbumContentViewController.xib in Resources */, 32607D6F243E0A55006674CC /* KeyBackupRecoverFromPrivateKeyViewController.storyboard in Resources */, EC757B2625B85C7F00DF5787 /* DialpadViewController.storyboard in Resources */, @@ -6613,6 +6649,7 @@ B1C3361C22F32B4A0021BA8D /* SingleImagePickerPresenter.swift in Sources */, B1B5572F20EE6C4D00210D55 /* ReadReceiptsViewController.m in Sources */, B1BD71BC238E8F9600BA92E2 /* WidgetPermissionViewController.swift in Sources */, + ECD95AD825CAB5D100E92D6F /* RoomDirectCallStatusBubbleCell.swift in Sources */, B1B558CB20EF768F00210D55 /* RoomIncomingEncryptedTextMsgWithoutSenderInfoBubbleCell.m in Sources */, B10A3E9824FE86AF007C380F /* SplitViewCoordinatorType.swift in Sources */, B11291EA238D35590077B478 /* SlidingModalPresentable.swift in Sources */, @@ -6885,6 +6922,7 @@ B1C7822F2500EAF500337EB9 /* TabBarCoordinator.swift in Sources */, B1B557DE20EF5FBB00210D55 /* FilesSearchTableViewCell.m in Sources */, B1B5574020EE6C4D00210D55 /* SegmentedViewController.m in Sources */, + ECD95ACF25CAB5C300E92D6F /* RoomBubbleCellData.swift in Sources */, ECF57A4C25090C23004BBF9D /* EnterNewRoomDetailsViewAction.swift in Sources */, EC711BAE24A63B58008F830C /* SecureBackupSetupCoordinator.swift in Sources */, B1B5599320EFC5E400210D55 /* DecryptionFailure.m in Sources */, @@ -7092,6 +7130,7 @@ EC85D6AE2477DC89002C44C9 /* RoundedButton.swift in Sources */, B1CE83D72422817200D07506 /* KeyVerificationVerifyByScanningViewModelType.swift in Sources */, 3232ABA1225730E100AD6A5C /* KeyVerificationCoordinatorType.swift in Sources */, + ECD95ADA25CAB5D100E92D6F /* RoomBaseCallBubbleCell.swift in Sources */, B1C562D9228C0B760037F12A /* RoomContextualMenuItem.swift in Sources */, B1C543B223A2913F00DCA1FA /* KeyVerificationConclusionBubbleCell.swift in Sources */, 323AB947232BD74600C1451F /* AuthFallBackViewController.m in Sources */, @@ -7210,6 +7249,7 @@ B109D6F1222D8C400061B6D9 /* UIApplication.swift in Sources */, ECFBD5D6250A7AAF00DD5F5A /* ShowDirectoryViewAction.swift in Sources */, EC711BB124A63B58008F830C /* SecureBackupBannerPreferences.swift in Sources */, + ECD95ADB25CAB5D100E92D6F /* CallBubbleCellBaseContentView.swift in Sources */, ECF57A4625090C23004BBF9D /* CreateRoomCoordinator.swift in Sources */, ECFBD5DC250A82B200DD5F5A /* TextViewTableViewHeaderFooterView.swift in Sources */, B1BEE73723DF44A60003A4CB /* UserVerificationSessionsStatusViewState.swift in Sources */, diff --git a/Riot/Assets/Images.xcassets/Call/call_video_icon.imageset/24.png b/Riot/Assets/Images.xcassets/Call/call_video_icon.imageset/24.png new file mode 100644 index 0000000000000000000000000000000000000000..aa4d945029981c87146fa45709d0b6a3856f9826 GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{v%Hp$B+ufvy<*~9&+G0HhIgBHPUxD`W|rf zEfCIFtMo{o&&5UeTUbGJUV!@r-a7}H{IjYze!s9>Y$eyL_YdEBd+f7OVc5@h_VUy^ z(RYP&XSl3uu-KIQdc&l1D=#Ey)C#H>&hYw}BgAZd`=`TGo?pWHDJ^VM6m~|KE}e5C zqx@OvC4HyzSB6ts7;oQNbiixNd^g?6$`yjUUZ!39GtKdwfZdbbY%LYnM7bI&r$5a} zxiLL9+2{J=Ny?j#h2`(MH~E-W+0&qaq;?LCd8Uigjz^2g1gYKmxa=V7@|+7(y%#L$ dd7xj(;6BOE0!YB|ErD;8Z@dUCYZv3-xiAUfDmf*_F z%yWhWZAdjGw78jHGVRQ~PTrUHrQZWE82%X&UR0Q8TT+w&F$c?lH~~sW?uBy)OY$wC z)^vcBV?a`MyUrl)36fm$5E2V+ul^M0QBrGNl?l*WNR~iMtsUR522nx%srB7w z)qql@B}g8dZt-$dz-ji|mJsiH)LPe-j3kgFkOCBT!^>HL3vrJC`S~6J($1*lHl$30 zd08&_qe_`w2-y_Yz$fP{BKeH92>1&lzz8q`)*=8ioS}BgC;{r%7(faTB$N5vXJ=z+ z@q(Hz+O#$!c!M;cFbXfV2)E-Dl~te5_axvAMf}-F3jMl&>yA{Pz=ZX&t%ujCvzZZ| zH2c1?rejD76h*h&h}9KY`tthnFx=ZeQ0_?bumZZCRA+VQ_D+X!&nz^hmsv}094+0H o>g0kx%gyP)XDpSXHW*Ul3om1m$P##)V*mgE07*qoM6N<$f>@N(%m4rY literal 0 HcmV?d00001 diff --git a/Riot/Assets/Images.xcassets/Call/call_video_icon.imageset/24@3x.png b/Riot/Assets/Images.xcassets/Call/call_video_icon.imageset/24@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..2c487f4aa9c5d63da2ffaeb3679e2406986de085 GIT binary patch literal 633 zcmV-<0*3vGP)3~#V=s>Cbuq=J|Va4ImVAe5jI_-^Sod%|)4 z3D8(rry1Yx10!^MbNBA{R&x(4OGKYr8*pZI9Z?snSk4s z|AFcz|BI#XdF?Vgq0CQ`CRMKdpEPb$_TJF(>2P26VFsIM4oC0%^KD_>vrh*E^$cdQ z374a{y{Rt;YJW{JstnF59_E{3y62-YY3}^)grIvic;b_yJ!V)%RyA1HX3l4tBs13B z`oABY`!e|!tdsw(F_lry=L|&6H60rYHRbrt@P*DQBQ-b0)mDJy_@qc!eFYT639yY5 zU>hgEHco(ToB-R@Rse&Kip14cz~_tpB=vM#gv6WTL;%IG4RfwDF^NtV+Dk&Yx#YGR zaZ0oP4%@7mpkWfdiskOxmf3#!w@ogRQ>7S}undv6)u|IVufx!X;_%Jo@0Ex?7+>_G z>^9#!9bPj%v>TU?Ndw9Er?@98U&y~XlK}YVtZXW1|Fj zWps7oZ?=}LogjH^#xi4~B)N`O=GLtYuRV#_k?ms2wVp#`TEvBOI2;a#qX<6%4aCMR T!e4;O00000NkvXXu0mjf>&zec literal 0 HcmV?d00001 diff --git a/Riot/Assets/Images.xcassets/Call/call_video_icon.imageset/Contents.json b/Riot/Assets/Images.xcassets/Call/call_video_icon.imageset/Contents.json new file mode 100644 index 000000000..f69f28085 --- /dev/null +++ b/Riot/Assets/Images.xcassets/Call/call_video_icon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "24.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "24@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "24@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Riot/Assets/en.lproj/Vector.strings b/Riot/Assets/en.lproj/Vector.strings index 223cbf657..00a2532d8 100644 --- a/Riot/Assets/en.lproj/Vector.strings +++ b/Riot/Assets/en.lproj/Vector.strings @@ -809,6 +809,12 @@ Tap the + to start adding people."; "event_formatter_rerequest_keys_part1_link" = "Re-request encryption keys"; "event_formatter_rerequest_keys_part2" = " from your other sessions."; "event_formatter_message_edited_mention" = "(edited)"; +"event_formatter_call_voice" = "Voice call"; +"event_formatter_call_video" = "Video call"; +"event_formatter_call_has_ended" = "This call has ended"; +"event_formatter_call_you_currently_in" = "You're currently in this call"; +"event_formatter_call_you_declined" = "You declined this call"; +"event_formatter_call_back" = "Call back"; // Events formatter with you "event_formatter_widget_added_by_you" = "You added the widget: %@"; diff --git a/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.h b/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.h index ce1282065..ac04ef63f 100644 --- a/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.h +++ b/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.h @@ -56,6 +56,13 @@ extern NSString *const kMXKRoomBubbleCellKeyVerificationIncomingRequestAcceptPre */ extern NSString *const kMXKRoomBubbleCellKeyVerificationIncomingRequestDeclinePressed; +/** + Action identifier used when the user pressed "Call back" button for a declined call. + + The `userInfo` dictionary contains an `MXEvent` object under the `kMXKRoomBubbleCellEventKey` key, representing the invite event of the declined call. + */ +extern NSString *const kMXKRoomBubbleCellCallBackButtonPressed; + /** Define a `MXKRoomBubbleTableViewCell` category at Riot level to handle bubble customisation. */ diff --git a/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.m b/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.m index 6723f2dc0..f48054f7f 100644 --- a/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.m +++ b/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.m @@ -33,6 +33,7 @@ NSString *const kMXKRoomBubbleCellLongPressOnReactionView = @"kMXKRoomBubbleCell NSString *const kMXKRoomBubbleCellEventIdKey = @"kMXKRoomBubbleCellEventIdKey"; NSString *const kMXKRoomBubbleCellKeyVerificationIncomingRequestAcceptPressed = @"kMXKRoomBubbleCellKeyVerificationAcceptPressed"; NSString *const kMXKRoomBubbleCellKeyVerificationIncomingRequestDeclinePressed = @"kMXKRoomBubbleCellKeyVerificationDeclinePressed"; +NSString *const kMXKRoomBubbleCellCallBackButtonPressed = @"kMXKRoomBubbleCellCallBackButtonPressed"; @implementation MXKRoomBubbleTableViewCell (Riot) diff --git a/Riot/Categories/RoomBubbleCellData.swift b/Riot/Categories/RoomBubbleCellData.swift new file mode 100644 index 000000000..d35681dd4 --- /dev/null +++ b/Riot/Categories/RoomBubbleCellData.swift @@ -0,0 +1,50 @@ +// +// Copyright 2020 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 + +@objc extension RoomBubbleCellData { + + /// Gathers all collapsable events in both directions (previous and next) + /// - Returns: Array of events containing collapsable events in both sides. + func allLinkedEvents() -> [MXEvent] { + var result: [MXEvent] = [] + + // add prev linked events + var prevBubbleData = prevCollapsableCellData + while prevBubbleData != nil { + // swiftlint:disable force_unwrapping + result.append(contentsOf: prevBubbleData!.events) + // swiftlint:enable force_unwrapping + prevBubbleData = prevBubbleData?.prevCollapsableCellData + } + + // add self events + result.append(contentsOf: events) + + // add next linked events + var nextBubbleData = nextCollapsableCellData + while nextBubbleData != nil { + // swiftlint:disable force_unwrapping + result.append(contentsOf: nextBubbleData!.events) + // swiftlint:enable force_unwrapping + nextBubbleData = nextBubbleData?.nextCollapsableCellData + } + + return result + } + +} diff --git a/Riot/Generated/Images.swift b/Riot/Generated/Images.swift index f28b92c92..90a35d7ac 100644 --- a/Riot/Generated/Images.swift +++ b/Riot/Generated/Images.swift @@ -38,6 +38,7 @@ internal enum Asset { internal static let callPipIcon = ImageAsset(name: "call_pip_icon") internal static let callSpeakerOffIcon = ImageAsset(name: "call_speaker_off_icon") internal static let callSpeakerOnIcon = ImageAsset(name: "call_speaker_on_icon") + internal static let callVideoIcon = ImageAsset(name: "call_video_icon") internal static let callVideoMuteOffIcon = ImageAsset(name: "call_video_mute_off_icon") internal static let callVideoMuteOnIcon = ImageAsset(name: "call_video_mute_on_icon") internal static let callkitIcon = ImageAsset(name: "callkit_icon") diff --git a/Riot/Generated/Strings.swift b/Riot/Generated/Strings.swift index 4c8cf695d..66383bff8 100644 --- a/Riot/Generated/Strings.swift +++ b/Riot/Generated/Strings.swift @@ -1238,6 +1238,30 @@ internal enum VectorL10n { internal static var errorUserAlreadyLoggedIn: String { return VectorL10n.tr("Vector", "error_user_already_logged_in") } + /// Call back + internal static var eventFormatterCallBack: String { + return VectorL10n.tr("Vector", "event_formatter_call_back") + } + /// This call has ended + internal static var eventFormatterCallHasEnded: String { + return VectorL10n.tr("Vector", "event_formatter_call_has_ended") + } + /// Video call + internal static var eventFormatterCallVideo: String { + return VectorL10n.tr("Vector", "event_formatter_call_video") + } + /// Voice call + internal static var eventFormatterCallVoice: String { + return VectorL10n.tr("Vector", "event_formatter_call_voice") + } + /// You're currently in this call + internal static var eventFormatterCallYouCurrentlyIn: String { + return VectorL10n.tr("Vector", "event_formatter_call_you_currently_in") + } + /// You declined this call + internal static var eventFormatterCallYouDeclined: String { + return VectorL10n.tr("Vector", "event_formatter_call_you_declined") + } /// VoIP conference added by %@ internal static func eventFormatterJitsiWidgetAdded(_ p1: String) -> String { return VectorL10n.tr("Vector", "event_formatter_jitsi_widget_added", p1) diff --git a/Riot/Managers/Call/CallService.swift b/Riot/Managers/Call/CallService.swift index de06b8d79..80a8996ae 100644 --- a/Riot/Managers/Call/CallService.swift +++ b/Riot/Managers/Call/CallService.swift @@ -25,6 +25,7 @@ class CallService: NSObject { static let pipAnimationDuration: TimeInterval = 0.25 } + private var sessions: [MXSession] = [] private var callVCs: [String: CallViewController] = [:] private var callBackgroundTasks: [String: MXBackgroundTask] = [:] private weak var presentedCallVC: CallViewController? { @@ -77,6 +78,16 @@ class CallService: NSObject { /// Delegate object weak var delegate: CallServiceDelegate? + func addMatrixSession(_ session: MXSession) { + sessions.append(session) + } + + func removeMatrixSession(_ session: MXSession) { + if let index = sessions.firstIndex(of: session) { + sessions.remove(at: index) + } + } + /// Start the service func start() { addCallObservers() @@ -217,6 +228,10 @@ class CallService: NSObject { selector: #selector(callStateChanged(_:)), name: NSNotification.Name(rawValue: kMXCallStateDidChange), object: nil) + NotificationCenter.default.addObserver(self, + selector: #selector(callTileTapped(_:)), + name: NSNotification.Name(rawValue: kRoomCallTileTapped), + object: nil) isStarted = true } @@ -232,6 +247,9 @@ class CallService: NSObject { NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: kMXCallStateDidChange), object: nil) + NotificationCenter.default.removeObserver(self, + name: NSNotification.Name(rawValue: kRoomCallTileTapped), + object: nil) isStarted = false } @@ -301,6 +319,40 @@ class CallService: NSObject { } } + @objc + private func callTileTapped(_ notification: Notification) { + NSLog("[CallService] callTileTapped") + guard let bubbleData = notification.object as? RoomBubbleCellData else { + return + } + + guard let randomEvent = bubbleData.allLinkedEvents().randomElement() else { + return + } + + guard let callEventContent = MXCallEventContent(fromJSON: randomEvent.content) else { + return + } + + NSLog("[CallService] callTileTapped: for call: \(callEventContent.callId)") + + guard let session = sessions.first else { return } + + guard let call = session.callManager.call(withCallId: callEventContent.callId) else { + return + } + + if call.state == .ended { + return + } + + guard let callVC = callVCs[call.callId] else { + return + } + + presentCallVC(callVC) + } + // MARK: - Call Screens private func presentCallVC(_ callVC: CallViewController, completion: (() -> Void)? = nil) { diff --git a/Riot/Modules/Application/LegacyAppDelegate.m b/Riot/Modules/Application/LegacyAppDelegate.m index c8fdf6219..bf356d821 100644 --- a/Riot/Modules/Application/LegacyAppDelegate.m +++ b/Riot/Modules/Application/LegacyAppDelegate.m @@ -1961,6 +1961,9 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni // Register the session to the widgets manager [[WidgetManager sharedManager] addMatrixSession:mxSession]; + // register the session to the call service + [_callService addMatrixSession:mxSession]; + [mxSessionArray addObject:mxSession]; // Do the one time check on device id @@ -1974,6 +1977,9 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni // Update home data sources [_masterTabBarController removeMatrixSession:mxSession]; + + // remove session from the call service + [_callService removeMatrixSession:mxSession]; // Update the widgets manager [[WidgetManager sharedManager] removeMatrixSession:mxSession]; diff --git a/Riot/Modules/Room/CellData/RoomBubbleCellData.h b/Riot/Modules/Room/CellData/RoomBubbleCellData.h index 305371c75..6c2f729d3 100644 --- a/Riot/Modules/Room/CellData/RoomBubbleCellData.h +++ b/Riot/Modules/Room/CellData/RoomBubbleCellData.h @@ -26,7 +26,8 @@ typedef NS_ENUM(NSInteger, RoomBubbleCellDataTag) RoomBubbleCellDataTagKeyVerificationNoDisplay, RoomBubbleCellDataTagKeyVerificationRequestIncomingApproval, RoomBubbleCellDataTagKeyVerificationRequest, - RoomBubbleCellDataTagKeyVerificationConclusion + RoomBubbleCellDataTagKeyVerificationConclusion, + RoomBubbleCellDataTagCall }; /** diff --git a/Riot/Modules/Room/CellData/RoomBubbleCellData.m b/Riot/Modules/Room/CellData/RoomBubbleCellData.m index dee71aec9..35bd209f7 100644 --- a/Riot/Modules/Room/CellData/RoomBubbleCellData.m +++ b/Riot/Modules/Room/CellData/RoomBubbleCellData.m @@ -125,6 +125,18 @@ static NSAttributedString *timestampVerticalWhitespace = nil; // Membership events can be collapsed together self.collapsable = YES; + // Collapse them by default + self.collapsed = YES; + } + break; + case MXEventTypeCallInvite: + case MXEventTypeCallReject: + { + self.tag = RoomBubbleCellDataTagCall; + + // Call events can be collapsed together + self.collapsable = YES; + // Collapse them by default self.collapsed = YES; } @@ -233,6 +245,17 @@ static NSAttributedString *timestampVerticalWhitespace = nil; { return YES; } + else if (self.tag == RoomBubbleCellDataTagCall && cellData.tag == RoomBubbleCellDataTagCall) + { + // Check if the same call + MXEvent * event1 = self.events.firstObject; + MXCallEventContent *eventContent1 = [MXCallEventContent modelFromJSON:event1.content]; + + MXEvent * event2 = cellData.events.firstObject; + MXCallEventContent *eventContent2 = [MXCallEventContent modelFromJSON:event2.content]; + + return [eventContent1.callId isEqualToString:eventContent2.callId]; + } if (self.tag == RoomBubbleCellDataTagRoomCreateWithPredecessor || cellData.tag == RoomBubbleCellDataTagRoomCreateWithPredecessor) { @@ -711,6 +734,9 @@ static NSAttributedString *timestampVerticalWhitespace = nil; // One single bubble per membership event shouldAddEvent = NO; break; + case RoomBubbleCellDataTagCall: + shouldAddEvent = NO; + break; case RoomBubbleCellDataTagRoomCreateConfiguration: shouldAddEvent = NO; break; @@ -755,6 +781,10 @@ static NSAttributedString *timestampVerticalWhitespace = nil; case MXEventTypeRoomJoinRules: shouldAddEvent = NO; break; + case MXEventTypeCallInvite: + case MXEventTypeCallReject: + shouldAddEvent = NO; + break; default: break; } diff --git a/Riot/Modules/Room/RoomViewController.h b/Riot/Modules/Room/RoomViewController.h index 72b7c2ce5..99ee17445 100644 --- a/Riot/Modules/Room/RoomViewController.h +++ b/Riot/Modules/Room/RoomViewController.h @@ -27,6 +27,11 @@ #import "UIViewController+RiotSearch.h" +/** + Notification string used to indicate call tile tapped in a room. Notification object will be the `RoomBubbleCellData` object. + */ +extern NSString *const kRoomCallTileTapped; + @interface RoomViewController : MXKRoomViewController // The preview header diff --git a/Riot/Modules/Room/RoomViewController.m b/Riot/Modules/Room/RoomViewController.m index c474f2c09..ec7957dd8 100644 --- a/Riot/Modules/Room/RoomViewController.m +++ b/Riot/Modules/Room/RoomViewController.m @@ -123,6 +123,8 @@ #import "Riot-Swift.h" +NSString *const kRoomCallTileTapped = @"RoomCallTileTapped"; + @interface RoomViewController () + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Riot/Modules/Room/Views/BubbleCells/Call/Direct/RoomDirectCallStatusBubbleCell.swift b/Riot/Modules/Room/Views/BubbleCells/Call/Direct/RoomDirectCallStatusBubbleCell.swift new file mode 100644 index 000000000..8a5391c8b --- /dev/null +++ b/Riot/Modules/Room/Views/BubbleCells/Call/Direct/RoomDirectCallStatusBubbleCell.swift @@ -0,0 +1,207 @@ +// +// Copyright 2020 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 UIKit + +class RoomDirectCallStatusBubbleCell: RoomBaseCallBubbleCell { + + private enum Constants { + static let statusTextFontSize: CGFloat = 14 + static let statusTextInsets: UIEdgeInsets = UIEdgeInsets(top: 8, left: 8, bottom: 12, right: 8) + // swiftlint:disable force_unwrapping + static let statusCallBackURL: URL = URL(string: "element://call")! + // swiftlint:enable force_unwrapping + } + + private lazy var statusTextView: UITextView = { + let textView = UITextView() + textView.font = .systemFont(ofSize: Constants.statusTextFontSize) + textView.backgroundColor = .clear + textView.textColor = ThemeService.shared().theme.noticeSecondaryColor + textView.linkTextAttributes = [ + .font: UIFont.systemFont(ofSize: Constants.statusTextFontSize), + .foregroundColor: ThemeService.shared().theme.tintColor + ] + textView.textAlignment = .center + textView.contentInset = .zero + textView.isEditable = false + textView.isSelectable = false + textView.isScrollEnabled = false + textView.scrollsToTop = false + textView.textContainerInset = Constants.statusTextInsets + textView.textContainer.lineFragmentPadding = 0 + textView.delegate = self + return textView + }() + + override var bottomContentView: UIView? { + return statusTextView + } + + override func update(theme: Theme) { + super.update(theme: theme) + statusTextView.textColor = theme.noticeSecondaryColor + statusTextView.linkTextAttributes = [ + .font: UIFont.systemFont(ofSize: Constants.statusTextFontSize), + .foregroundColor: theme.tintColor + ] + } + + private func configure(withCall call: MXCall) { + switch call.state { + case .connected, + .fledgling, + .waitLocalMedia, + .createOffer, + .inviteSent, + .createAnswer, + .connecting, + .onHold, + .remotelyOnHold: + statusTextView.text = VectorL10n.eventFormatterCallYouCurrentlyIn + case .ringing: + if call.isIncoming { + // should not be here + statusTextView.text = nil + } else { + statusTextView.text = VectorL10n.eventFormatterCallYouCurrentlyIn + } + case .ended: + switch call.endReason { + case .unknown, + .hangup, + .hangupElsewhere, + .remoteHangup, + .missed, + .answeredElseWhere: + statusTextView.text = VectorL10n.eventFormatterCallHasEnded + case .busy: + configureForRejectedCall(call: call) + @unknown default: + statusTextView.text = VectorL10n.eventFormatterCallHasEnded + } + case .inviteExpired, + .answeredElseWhere: + statusTextView.text = VectorL10n.eventFormatterCallHasEnded + @unknown default: + statusTextView.text = VectorL10n.eventFormatterCallHasEnded + } + } + + private func configureForRejectedCall(withEvent event: MXEvent? = nil, call: MXCall? = nil, bubbleCellData: RoomBubbleCellData? = nil) { + + let isMyReject: Bool + + if let call = call, call.isIncoming { + isMyReject = true + } else if let event = event, let bubbleCellData = bubbleCellData, event.sender == bubbleCellData.mxSession.myUserId { + isMyReject = true + } else { + isMyReject = false + } + + if isMyReject { + + let centerParagraphStyle = NSMutableParagraphStyle() + centerParagraphStyle.alignment = .center + + let mutableAttrString = NSMutableAttributedString(string: VectorL10n.eventFormatterCallYouDeclined + " " + VectorL10n.eventFormatterCallBack, attributes: [ + .font: UIFont.systemFont(ofSize: Constants.statusTextFontSize), + .foregroundColor: ThemeService.shared().theme.noticeSecondaryColor, + .paragraphStyle: centerParagraphStyle + ]) + + let range = mutableAttrString.mutableString.range(of: VectorL10n.eventFormatterCallBack) + if range.location != NSNotFound { + mutableAttrString.addAttribute(.link, value: Constants.statusCallBackURL, range: range) + } + + statusTextView.attributedText = mutableAttrString + statusTextView.isSelectable = true + } else { + statusTextView.text = VectorL10n.eventFormatterCallHasEnded + } + } + + // MARK: - MXKCellRendering + + override func render(_ cellData: MXKCellData!) { + super.render(cellData) + + guard let bubbleCellData = cellData as? RoomBubbleCellData else { + return + } + + let events = bubbleCellData.allLinkedEvents() + + // getting a random event for call id is enough + guard let randomEvent = bubbleCellData.events.randomElement() else { + return + } + + guard let callEventContent = MXCallEventContent(fromJSON: randomEvent.content) else { return } + let callId = callEventContent.callId + guard let call = bubbleCellData.mxSession.callManager.call(withCallId: callId) else { + + // check events include a reject event + if let rejectEvent = events.first(where: { $0.eventType == .callReject }) { + configureForRejectedCall(withEvent: rejectEvent, bubbleCellData: bubbleCellData) + return + } + + // there is no reject event, we can just say this call has ended + statusTextView.text = VectorL10n.eventFormatterCallHasEnded + return + } + + configure(withCall: call) + } + + override func prepareForReuse() { + statusTextView.isSelectable = false + statusTextView.text = nil + statusTextView.attributedText = nil + + super.prepareForReuse() + } + +} + +// MARK: - UITextViewDelegate + +extension RoomDirectCallStatusBubbleCell { + + override func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { + if URL == Constants.statusCallBackURL && interaction == .invokeDefaultAction { + let userInfo: [AnyHashable: Any]? + + guard let bubbleCellData = bubbleData as? RoomBubbleCellData else { + return false + } + let events = bubbleCellData.allLinkedEvents() + if let callInviteEvent = events.first(where: { $0.eventType == .callInvite }) { + userInfo = [kMXKRoomBubbleCellEventKey: callInviteEvent] + } else { + userInfo = nil + } + + self.delegate?.cell(self, didRecognizeAction: kMXKRoomBubbleCellCallBackButtonPressed, userInfo: userInfo) + return true + } + return false + } + +} diff --git a/Riot/Modules/Room/Views/BubbleCells/Call/RoomBaseCallBubbleCell.swift b/Riot/Modules/Room/Views/BubbleCells/Call/RoomBaseCallBubbleCell.swift new file mode 100644 index 000000000..fed709feb --- /dev/null +++ b/Riot/Modules/Room/Views/BubbleCells/Call/RoomBaseCallBubbleCell.swift @@ -0,0 +1,113 @@ +// +// Copyright 2020 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 UIKit +import Reusable + +class RoomBaseCallBubbleCell: MXKRoomBubbleTableViewCell { + + fileprivate lazy var innerContentView: CallBubbleCellBaseContentView = { + return CallBubbleCellBaseContentView.loadFromNib() + }() + + override required init!(style: UITableViewCell.CellStyle, reuseIdentifier: String!) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + setupViews() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupViews() + } + + override func setupViews() { + super.setupViews() + + self.contentView.vc_removeAllSubviews() + self.contentView.vc_addSubViewMatchingParent(innerContentView) + + updateBottomContentView() + } + + // Properties to override + private(set) var bottomContentView: UIView? + + func updateBottomContentView() { + innerContentView.bottomContainerView.vc_removeAllSubviews() + + guard let bottomContentView = bottomContentView else { return } + innerContentView.bottomContainerView.vc_addSubViewMatchingParent(bottomContentView) + } + + class func createSizingView() -> RoomBaseCallBubbleCell { + return self.init(style: .default, reuseIdentifier: self.defaultReuseIdentifier()) + } + + // MARK: - Overrides + + override var bubbleOverlayContainer: UIView! { + get { + guard let overlayContainer = innerContentView.bubbleOverlayContainer else { + fatalError("[RoomBaseCallBubbleCell] bubbleOverlayContainer should not be used before set") + } + return overlayContainer + } + set { + super.bubbleOverlayContainer = newValue + } + } + + // MARK: - MXKCellRendering + + override func render(_ cellData: MXKCellData!) { + super.render(cellData) + + update(theme: ThemeService.shared().theme) + + guard let cellData = cellData else { + return + } + + innerContentView.render(cellData) + } + + override class func height(for cellData: MXKCellData!, withMaximumWidth maxWidth: CGFloat) -> CGFloat { + guard let cellData = cellData else { + return 0 + } + + let fittingSize = CGSize(width: maxWidth, height: UIView.layoutFittingCompressedSize.height) + guard let cell = self.init(style: .default, reuseIdentifier: self.defaultReuseIdentifier()) else { + return 0 + } + cell.render(cellData) + + return cell.contentView.systemLayoutSizeFitting(fittingSize).height + } + +} + +extension RoomBaseCallBubbleCell: Themable { + + func update(theme: Theme) { + innerContentView.update(theme: theme) + } + +} + +extension RoomBaseCallBubbleCell: NibLoadable, Reusable { + +} diff --git a/Riot/Modules/Room/Views/BubbleCells/Call/RoomBaseCallBubbleCell.xib b/Riot/Modules/Room/Views/BubbleCells/Call/RoomBaseCallBubbleCell.xib new file mode 100644 index 000000000..b7b585fca --- /dev/null +++ b/Riot/Modules/Room/Views/BubbleCells/Call/RoomBaseCallBubbleCell.xib @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Riot/Utils/EventFormatter.m b/Riot/Utils/EventFormatter.m index b6ce37b81..6dd3aa6ce 100644 --- a/Riot/Utils/EventFormatter.m +++ b/Riot/Utils/EventFormatter.m @@ -26,6 +26,7 @@ #import "DecryptionFailureTracker.h" #import "EventFormatter+DTCoreTextFix.h" +#import #pragma mark - Constants definitions @@ -168,30 +169,55 @@ static NSString *const kEventFormatterTimeFormat = @"HH:mm"; } } - if (event.eventType == MXEventTypeRoomCreate) + switch (event.eventType) { - MXRoomCreateContent *createContent = [MXRoomCreateContent modelFromJSON:event.content]; - - NSString *roomPredecessorId = createContent.roomPredecessorInfo.roomId; - - if (roomPredecessorId) + case MXEventTypeRoomCreate: { - return [self roomCreatePredecessorAttributedStringWithPredecessorRoomId:roomPredecessorId]; + MXRoomCreateContent *createContent = [MXRoomCreateContent modelFromJSON:event.content]; + + NSString *roomPredecessorId = createContent.roomPredecessorInfo.roomId; + + if (roomPredecessorId) + { + return [self roomCreatePredecessorAttributedStringWithPredecessorRoomId:roomPredecessorId]; + } + else + { + NSAttributedString *string = [super attributedStringFromEvent:event withRoomState:roomState error:error]; + NSMutableAttributedString *result = [[NSMutableAttributedString alloc] initWithString:@"· "]; + [result appendAttributedString:string]; + return result; + } } - else + break; + case MXEventTypeCallCandidates: + case MXEventTypeCallAnswer: + case MXEventTypeCallSelectAnswer: + case MXEventTypeCallHangup: + case MXEventTypeCallNegotiate: + case MXEventTypeCallReplaces: + case MXEventTypeCallRejectReplacement: + // Do not show call events except invite and reject in timeline + return nil; + case MXEventTypeCallInvite: { - NSAttributedString *string = [super attributedStringFromEvent:event withRoomState:roomState error:error]; - NSMutableAttributedString *result = [[NSMutableAttributedString alloc] initWithString:@"· "]; - [result appendAttributedString:string]; - return result; + MXCallInviteEventContent *content = [MXCallInviteEventContent modelFromJSON:event.content]; + MXCall *call = [mxSession.callManager callWithCallId:content.callId]; + if (call && call.isIncoming && call.state == MXCallStateRinging) + { + // incoming call UI will be handled by CallKit (or incoming call screen if CallKit disabled) + // do not show a bubble for this case + return nil; + } } - } - - // Make event types MXEventTypeKeyVerificationCancel and MXEventTypeKeyVerificationDone visible in timeline. - // TODO: Find another way to keep them visible and avoid instantiate empty NSMutableAttributedString. - if (event.eventType == MXEventTypeKeyVerificationCancel || event.eventType == MXEventTypeKeyVerificationDone) - { - return [NSMutableAttributedString new]; + break; + case MXEventTypeKeyVerificationCancel: + case MXEventTypeKeyVerificationDone: + // Make event types MXEventTypeKeyVerificationCancel and MXEventTypeKeyVerificationDone visible in timeline. + // TODO: Find another way to keep them visible and avoid instantiate empty NSMutableAttributedString. + return [NSMutableAttributedString new]; + default: + break; } NSAttributedString *attributedString = [super attributedStringFromEvent:event withRoomState:roomState error:error]; @@ -265,6 +291,8 @@ static NSString *const kEventFormatterTimeFormat = @"HH:mm"; { MXEvent *roomCreateEvent = [events filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"type == %@", kMXEventTypeStringRoomCreate]].firstObject; + MXEvent *callInviteEvent = [events filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"type == %@", kMXEventTypeStringCallInvite]].firstObject; + if (roomCreateEvent) { MXKEventFormatterError tmpError; @@ -287,6 +315,11 @@ static NSString *const kEventFormatterTimeFormat = @"HH:mm"; [result appendAttributedString:linkMore]; return result; } + else if (callInviteEvent) + { + // return a non-nil value + return [NSMutableAttributedString new]; + } else if (events[0].eventType == MXEventTypeRoomMember) { // This is a series for cells tagged with RoomBubbleCellDataTagMembership From acdd1eed37bc9612b388b0438b4cef68d8b974e6 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Wed, 10 Feb 2021 16:17:38 +0300 Subject: [PATCH 002/194] Add letters to dialpad buttons --- .../Dialpad/DialpadViewController.storyboard | 20 ++++++-- .../Call/Dialpad/DialpadViewController.swift | 21 ++++++++ .../Call/Dialpad/Views/DialpadButton.swift | 50 ++++++++++++++++++- 3 files changed, 86 insertions(+), 5 deletions(-) diff --git a/Riot/Modules/Call/Dialpad/DialpadViewController.storyboard b/Riot/Modules/Call/Dialpad/DialpadViewController.storyboard index 8f81e6b7f..3fd9d043a 100644 --- a/Riot/Modules/Call/Dialpad/DialpadViewController.storyboard +++ b/Riot/Modules/Call/Dialpad/DialpadViewController.storyboard @@ -171,7 +171,7 @@ - - - - @@ -285,14 +285,14 @@ - + - + From 3af6a0be52888bf133c2072e5cfd58dc269a256a Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Wed, 10 Feb 2021 17:15:20 +0300 Subject: [PATCH 005/194] Move PiP view to top-right of the screen by default --- Riot/Managers/Call/PiPAnimator.swift | 1 - Riot/Managers/Call/PiPView.swift | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Riot/Managers/Call/PiPAnimator.swift b/Riot/Managers/Call/PiPAnimator.swift index 17faf256e..84926be12 100644 --- a/Riot/Managers/Call/PiPAnimator.swift +++ b/Riot/Managers/Call/PiPAnimator.swift @@ -69,7 +69,6 @@ class PiPAnimator: NSObject { pipView.transform = transform pipView.move(in: keyWindow, - to: .bottomLeft, targetSize: targetRect.size) } diff --git a/Riot/Managers/Call/PiPView.swift b/Riot/Managers/Call/PiPView.swift index 2eb15b56c..2aec117f6 100644 --- a/Riot/Managers/Call/PiPView.swift +++ b/Riot/Managers/Call/PiPView.swift @@ -17,9 +17,9 @@ import UIKit @objc enum PiPViewPosition: Int { - case bottomLeft // default value + case bottomLeft case bottomRight - case topRight + case topRight // default value case topLeft } @@ -97,7 +97,7 @@ NSLayoutConstraint.activate([ } func move(in view: UIView? = nil, - to position: PiPViewPosition = .bottomLeft, + to position: PiPViewPosition = .topRight, targetSize: CGSize? = nil, animated: Bool = false, completion: ((Bool) -> Void)? = nil) { From 119f888760c472a614c002c329011408dcbe8d95 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Mon, 15 Feb 2021 15:58:19 +0300 Subject: [PATCH 006/194] Add dial pad tones --- Riot/Modules/Call/CallViewController.m | 3 +- .../Call/Dialpad/DialpadConfiguration.swift | 7 +++- .../Call/Dialpad/DialpadViewController.swift | 33 +++++++++++-------- .../Call/Dialpad/Views/DialpadButton.swift | 4 ++- 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/Riot/Modules/Call/CallViewController.m b/Riot/Modules/Call/CallViewController.m index 92dc8438d..f12443b68 100644 --- a/Riot/Modules/Call/CallViewController.m +++ b/Riot/Modules/Call/CallViewController.m @@ -521,7 +521,8 @@ showsBackspaceButton:NO showsCallButton:NO formattingEnabled:NO - editingEnabled:NO]; + editingEnabled:NO + playTones:YES]; DialpadViewController *controller = [DialpadViewController instantiateWithConfiguration:config]; controller.delegate = self; self.customSizedPresentationController = [[CustomSizedPresentationController alloc] initWithPresentedViewController:controller presentingViewController:self]; diff --git a/Riot/Modules/Call/Dialpad/DialpadConfiguration.swift b/Riot/Modules/Call/Dialpad/DialpadConfiguration.swift index a1d91f3d2..04d617ea9 100644 --- a/Riot/Modules/Call/Dialpad/DialpadConfiguration.swift +++ b/Riot/Modules/Call/Dialpad/DialpadConfiguration.swift @@ -38,6 +38,9 @@ class DialpadConfiguration: NSObject { /// Option for a dial pad to enable editing on typed text or not. var editingEnabled: Bool + /// Option for a dial pad to play tones when digits tapped or not. + var playTones: Bool + /// Default configuration object. All options are enabled by default. static let `default`: DialpadConfiguration = DialpadConfiguration() @@ -46,13 +49,15 @@ class DialpadConfiguration: NSObject { showsBackspaceButton: Bool = true, showsCallButton: Bool = true, formattingEnabled: Bool = true, - editingEnabled: Bool = true) { + editingEnabled: Bool = true, + playTones: Bool = true) { self.showsTitle = showsTitle self.showsCloseButton = showsCloseButton self.showsBackspaceButton = showsBackspaceButton self.showsCallButton = showsCallButton self.formattingEnabled = formattingEnabled self.editingEnabled = editingEnabled + self.playTones = playTones super.init() } diff --git a/Riot/Modules/Call/Dialpad/DialpadViewController.swift b/Riot/Modules/Call/Dialpad/DialpadViewController.swift index 55be0f97c..410c46dcc 100644 --- a/Riot/Modules/Call/Dialpad/DialpadViewController.swift +++ b/Riot/Modules/Call/Dialpad/DialpadViewController.swift @@ -85,18 +85,18 @@ class DialpadViewController: UIViewController { static let sizeOniPad: CGSize = CGSize(width: 375, height: 667) static let additionalTopInset: CGFloat = 20 static let digitButtonViewDatas: [Int: DialpadButton.ViewData] = [ - -2: .init(title: "#"), - -1: .init(title: "*"), - 0: .init(title: "0", subtitle: "+"), - 1: .init(title: "1", showsSubtitleSpace: true), - 2: .init(title: "2", subtitle: "ABC"), - 3: .init(title: "3", subtitle: "DEF"), - 4: .init(title: "4", subtitle: "GHI"), - 5: .init(title: "5", subtitle: "JKL"), - 6: .init(title: "6", subtitle: "MNO"), - 7: .init(title: "7", subtitle: "PQRS"), - 8: .init(title: "8", subtitle: "TUV"), - 9: .init(title: "9", subtitle: "WXYZ") + -2: .init(title: "#", tone: 1211), + -1: .init(title: "*", tone: 1210), + 0: .init(title: "0", tone: 1200, subtitle: "+"), + 1: .init(title: "1", tone: 1201, showsSubtitleSpace: true), + 2: .init(title: "2", tone: 1202, subtitle: "ABC"), + 3: .init(title: "3", tone: 1203, subtitle: "DEF"), + 4: .init(title: "4", tone: 1204, subtitle: "GHI"), + 5: .init(title: "5", tone: 1205, subtitle: "JKL"), + 6: .init(title: "6", tone: 1206, subtitle: "MNO"), + 7: .init(title: "7", tone: 1207, subtitle: "PQRS"), + 8: .init(title: "8", tone: 1208, subtitle: "TUV"), + 9: .init(title: "9", tone: 1209, subtitle: "WXYZ") ] } @@ -274,12 +274,19 @@ class DialpadViewController: UIViewController { } @IBAction private func digitButtonAction(_ sender: DialpadButton) { - let digit = Constants.digitButtonViewDatas[sender.tag]?.title ?? "" + guard let digitViewData = Constants.digitButtonViewDatas[sender.tag] else { + return + } + let digit = digitViewData.title defer { delegate?.dialpadViewControllerDidTapDigit?(self, digit: digit) } + if configuration.playTones { + AudioServicesPlaySystemSound(digitViewData.tone) + } + if !configuration.editingEnabled { phoneNumber += digit return diff --git a/Riot/Modules/Call/Dialpad/Views/DialpadButton.swift b/Riot/Modules/Call/Dialpad/Views/DialpadButton.swift index 1081c5364..0ea0a2661 100644 --- a/Riot/Modules/Call/Dialpad/Views/DialpadButton.swift +++ b/Riot/Modules/Call/Dialpad/Views/DialpadButton.swift @@ -21,11 +21,13 @@ class DialpadButton: UIButton { struct ViewData { var title: String + var tone: SystemSoundID var subtitle: String? var showsSubtitleSpace: Bool - init(title: String, subtitle: String? = nil, showsSubtitleSpace: Bool = false) { + init(title: String, tone: SystemSoundID, subtitle: String? = nil, showsSubtitleSpace: Bool = false) { self.title = title + self.tone = tone self.subtitle = subtitle self.showsSubtitleSpace = showsSubtitleSpace } From d18fb5d191b4084b1977c284fdb2360538b169e0 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Mon, 15 Feb 2021 17:46:49 +0300 Subject: [PATCH 007/194] Force orientation to portrait only on phone --- Riot/Modules/Call/CallViewController.m | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Riot/Modules/Call/CallViewController.m b/Riot/Modules/Call/CallViewController.m index f12443b68..b911624a6 100644 --- a/Riot/Modules/Call/CallViewController.m +++ b/Riot/Modules/Call/CallViewController.m @@ -107,6 +107,12 @@ [self.endCallButton setImage:hangUpButtonImage forState:UIControlStateNormal]; [self.endCallButton setImage:hangUpButtonImage forState:UIControlStateHighlighted]; + // force orientation to portrait if phone + if ([UIDevice currentDevice].isPhone) + { + [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger: UIInterfaceOrientationPortrait] forKey:@"orientation"]; + } + [self updateLocalPreviewLayout]; [self configureUserInterface]; @@ -152,6 +158,30 @@ [super viewWillDisappear:animated]; } +- (UIInterfaceOrientationMask)supportedInterfaceOrientations +{ + // limit orientation to portrait only for phone + if ([UIDevice currentDevice].isPhone) + { + return UIInterfaceOrientationMaskPortrait; + } + return [super supportedInterfaceOrientations]; +} + +- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation +{ + if ([UIDevice currentDevice].isPhone) + { + return UIInterfaceOrientationPortrait; + } + return [super preferredInterfaceOrientationForPresentation]; +} + +- (BOOL)shouldAutorotate +{ + return NO; +} + #pragma mark - override MXKViewController - (UIView *)createIncomingCallView From 5d76f8acc7acb3172bb506d9d3ad73e2cf65cd7b Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Mon, 15 Feb 2021 17:47:22 +0300 Subject: [PATCH 008/194] Fix call status bar layout on orientation changes --- Riot/Modules/Application/LegacyAppDelegate.m | 48 ++++++++------------ 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/Riot/Modules/Application/LegacyAppDelegate.m b/Riot/Modules/Application/LegacyAppDelegate.m index 4c4ff28f3..f40b776a5 100644 --- a/Riot/Modules/Application/LegacyAppDelegate.m +++ b/Riot/Modules/Application/LegacyAppDelegate.m @@ -3249,13 +3249,13 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni [_callBar.heightAnchor constraintEqualToAnchor:_callStatusBarWindow.heightAnchor].active = YES; _callStatusBarWindow.hidden = NO; - [self statusBarDidChangeFrame]; + [self deviceOrientationDidChange]; - // We need to listen to the system status bar size change events to refresh the root controller frame. + // We need to listen to the device orientation change events to refresh the root controller frame. // Else the navigation bar position will be wrong. [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(statusBarDidChangeFrame) - name:UIApplicationDidChangeStatusBarFrameNotification + selector:@selector(deviceOrientationDidChange) + name:UIDeviceOrientationDidChangeNotification object:nil]; } @@ -3263,8 +3263,8 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni { if (_callStatusBarWindow) { - // No more need to listen to system status bar changes - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidChangeStatusBarFrameNotification object:nil]; + // No more need to listen to device orientation changes + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; // Hide & destroy it _callStatusBarWindow.hidden = YES; @@ -3272,11 +3272,11 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni _callBar = nil; _callStatusBarWindow = nil; - [self statusBarDidChangeFrame]; + [self deviceOrientationDidChange]; } } -- (void)statusBarDidChangeFrame +- (void)deviceOrientationDidChange { UIApplication *app = [UIApplication sharedApplication]; UIViewController *rootController = app.keyWindow.rootViewController; @@ -3288,30 +3288,20 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni { CGFloat callStatusBarHeight = [self calculateCallStatusBarHeight]; - UIInterfaceOrientation statusBarOrientation = [UIApplication sharedApplication].statusBarOrientation; + UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation; + CGFloat width; - switch (statusBarOrientation) + if (UIDeviceOrientationIsPortrait(deviceOrientation)) { - case UIInterfaceOrientationLandscapeLeft: - { - _callStatusBarWindow.frame = CGRectMake(-rootControllerFrame.size.width / 2, -callStatusBarHeight / 2, rootControllerFrame.size.width, callStatusBarHeight); - _callStatusBarWindow.transform = CGAffineTransformMake(0, -1, 1, 0, callStatusBarHeight / 2, rootControllerFrame.size.width / 2); - break; - } - case UIInterfaceOrientationLandscapeRight: - { - _callStatusBarWindow.frame = CGRectMake(-rootControllerFrame.size.width / 2, -callStatusBarHeight / 2, rootControllerFrame.size.width, callStatusBarHeight); - _callStatusBarWindow.transform = CGAffineTransformMake(0, 1, -1, 0, rootControllerFrame.size.height - callStatusBarHeight / 2, rootControllerFrame.size.width / 2); - break; - } - default: - { - _callStatusBarWindow.transform = CGAffineTransformIdentity; - _callStatusBarWindow.frame = CGRectMake(0, 0, rootControllerFrame.size.width, callStatusBarHeight); - break; - } + width = MIN(rootControllerFrame.size.width, rootControllerFrame.size.height); } - + else + { + width = MAX(rootControllerFrame.size.width, rootControllerFrame.size.height); + } + + _callStatusBarWindow.frame = CGRectMake(0, 0, width, callStatusBarHeight); + // Apply the vertical offset due to call status bar rootControllerFrame.origin.y = callStatusBarHeight; rootControllerFrame.size.height -= callStatusBarHeight; From 50da32b8b3d3129d0c2af28f80cb9e24a309f5ae Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Mon, 15 Feb 2021 18:33:21 +0300 Subject: [PATCH 009/194] Fix PiP view frame when device rotated --- Riot/Managers/Call/PiPView.swift | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Riot/Managers/Call/PiPView.swift b/Riot/Managers/Call/PiPView.swift index 2aec117f6..c5f0a9c05 100644 --- a/Riot/Managers/Call/PiPView.swift +++ b/Riot/Managers/Call/PiPView.swift @@ -148,19 +148,30 @@ NSLayoutConstraint.activate([ } let targetSize = targetSize ?? frame.size + var superviewWidth: CGFloat = 0 + var superviewHeight: CGFloat = 0 + + if UIDevice.current.orientation.isPortrait { + superviewWidth = min(view.bounds.width, view.bounds.height) + superviewHeight = max(view.bounds.width, view.bounds.height) + } else { + superviewWidth = max(view.bounds.width, view.bounds.height) + superviewHeight = min(view.bounds.width, view.bounds.height) + } + switch position { case .bottomLeft: let origin = CGPoint(x: margins.horizontal + view.safeAreaInsets.left, - y: view.bounds.height - view.safeAreaInsets.bottom - targetSize.height - margins.vertical) + y: superviewHeight - view.safeAreaInsets.bottom - targetSize.height - margins.vertical) return CGRect(origin: origin, size: targetSize) case .bottomRight: - let origin = CGPoint(x: view.bounds.width - view.safeAreaInsets.right - margins.horizontal - targetSize.width, - y: view.bounds.height - view.safeAreaInsets.bottom - targetSize.height - margins.vertical) + let origin = CGPoint(x: superviewWidth - view.safeAreaInsets.right - margins.horizontal - targetSize.width, + y: superviewHeight - view.safeAreaInsets.bottom - targetSize.height - margins.vertical) return CGRect(origin: origin, size: targetSize) case .topRight: - let origin = CGPoint(x: view.bounds.width - view.safeAreaInsets.right - margins.horizontal - targetSize.width, + let origin = CGPoint(x: superviewWidth - view.safeAreaInsets.right - margins.horizontal - targetSize.width, y: margins.vertical + view.safeAreaInsets.top) return CGRect(origin: origin, size: targetSize) From 77ee1035c53e0bf4e91658038a1d024c7d9ba2c8 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Mon, 15 Feb 2021 18:34:33 +0300 Subject: [PATCH 010/194] Fix video call screen layout when coming back after device rotation --- Riot/Managers/Call/PiPAnimator.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Riot/Managers/Call/PiPAnimator.swift b/Riot/Managers/Call/PiPAnimator.swift index 84926be12..3a889a2b4 100644 --- a/Riot/Managers/Call/PiPAnimator.swift +++ b/Riot/Managers/Call/PiPAnimator.swift @@ -116,6 +116,7 @@ class PiPAnimator: NSObject { animator.addCompletion { (position) in toVC.additionalSafeAreaInsets = .zero + toVC.view.frame = context.finalFrame(for: toVC) toVC.view.isHidden = false snapshot.removeFromSuperview() From 17e3325bc1a9fd7a6c8ea1ad3191d68d4b746e3b Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Tue, 16 Feb 2021 11:07:34 +0300 Subject: [PATCH 011/194] Update CHANGES.rst --- CHANGES.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index fd402af07..331899df8 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -182,7 +182,6 @@ Changes in 1.1.4 (2021-01-15) * Bug report: Add "Continue in background" button (#3816). * Show user id in the room invite preview screen (#3839) * AuthVC: SSO authentication now use redirect URL instead of fallback page (#3846). - * VoIP: Implement call tiles on timeline (#3955). 🐛 Bugfix * Crash report cannot be submitted (on small phones) (#3819) From a375eedf51c2319db94d464d980df82b4e13a671 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Tue, 16 Feb 2021 20:06:09 +0300 Subject: [PATCH 012/194] Update backspace button style --- .../Call/call_dialpad_backspace_icon.imageset/Contents.json | 3 +++ Riot/Modules/Call/Dialpad/DialpadViewController.storyboard | 5 +++-- Riot/Modules/Call/Dialpad/Views/DialpadActionButton.swift | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Riot/Assets/Images.xcassets/Call/call_dialpad_backspace_icon.imageset/Contents.json b/Riot/Assets/Images.xcassets/Call/call_dialpad_backspace_icon.imageset/Contents.json index df240cf11..713667a8c 100644 --- a/Riot/Assets/Images.xcassets/Call/call_dialpad_backspace_icon.imageset/Contents.json +++ b/Riot/Assets/Images.xcassets/Call/call_dialpad_backspace_icon.imageset/Contents.json @@ -19,5 +19,8 @@ "info" : { "author" : "xcode", "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" } } diff --git a/Riot/Modules/Call/Dialpad/DialpadViewController.storyboard b/Riot/Modules/Call/Dialpad/DialpadViewController.storyboard index c38b5107d..33d53a158 100644 --- a/Riot/Modules/Call/Dialpad/DialpadViewController.storyboard +++ b/Riot/Modules/Call/Dialpad/DialpadViewController.storyboard @@ -1,9 +1,9 @@ - + - + @@ -240,6 +240,7 @@ + diff --git a/Riot/Modules/Call/Dialpad/Views/DialpadActionButton.swift b/Riot/Modules/Call/Dialpad/Views/DialpadActionButton.swift index 3426269d5..a14d945a5 100644 --- a/Riot/Modules/Call/Dialpad/Views/DialpadActionButton.swift +++ b/Riot/Modules/Call/Dialpad/Views/DialpadActionButton.swift @@ -30,9 +30,11 @@ class DialpadActionButton: DialpadButton { override func update(theme: Theme) { switch type { case .backspace: - backgroundColor = theme.warningColor + backgroundColor = .clear + tintColor = theme.noticeSecondaryColor case .call: backgroundColor = theme.tintColor + tintColor = .white } } From add52373572ad1a77d80c754d99b42fca0a36984 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Tue, 16 Feb 2021 21:45:16 +0300 Subject: [PATCH 013/194] Wait for user action on alert if an alert is displayed --- Riot/Managers/Call/CallPresenter.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Riot/Managers/Call/CallPresenter.swift b/Riot/Managers/Call/CallPresenter.swift index 94d03f578..8185e7c8f 100644 --- a/Riot/Managers/Call/CallPresenter.swift +++ b/Riot/Managers/Call/CallPresenter.swift @@ -181,7 +181,11 @@ class CallPresenter: NSObject { } return } - dismissCallVC(callVC, completion: completion) + if callVC.isDisplayingAlert { + completion() + } else { + dismissCallVC(callVC, completion: completion) + } } // MARK: - Timer From 3d1d814cdc0d86a8a0047b1bb0d6b88bdd6cf9ea Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Tue, 16 Feb 2021 21:45:53 +0300 Subject: [PATCH 014/194] Dismiss the call screen instead of alerts on it --- Riot/Modules/Application/LegacyAppDelegate.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Riot/Modules/Application/LegacyAppDelegate.m b/Riot/Modules/Application/LegacyAppDelegate.m index f40b776a5..814eea98d 100644 --- a/Riot/Modules/Application/LegacyAppDelegate.m +++ b/Riot/Modules/Application/LegacyAppDelegate.m @@ -4473,7 +4473,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni // Check whether the call view controller is actually presented if (viewController.presentingViewController) { - [viewController dismissViewControllerAnimated:YES completion:^{ + [viewController.presentingViewController dismissViewControllerAnimated:YES completion:^{ if (viewController.shouldPromptForStunServerFallback) { From 3b0f664a6ca25a986ffcbde28c1b8fd52e3870ca Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Wed, 17 Feb 2021 16:49:29 +0300 Subject: [PATCH 015/194] Update icons --- .../Microphone.png | Bin 1933 -> 3284 bytes .../Microphone@2x.png | Bin 4990 -> 9038 bytes .../Microphone@3x.png | Bin 9029 -> 16291 bytes .../Microphone Off.png | Bin 2359 -> 7388 bytes .../Microphone Off@2x.png | Bin 5545 -> 16957 bytes .../Microphone Off@3x.png | Bin 9506 -> 29129 bytes .../Contents.json | 23 ++++++++++++++++++ .../call_go_to_chat_icon.imageset/back.png | Bin 0 -> 403 bytes .../call_go_to_chat_icon.imageset/back@2x.png | Bin 0 -> 794 bytes .../call_go_to_chat_icon.imageset/back@3x.png | Bin 0 -> 1171 bytes .../call_hangup_large.imageset/End Call.png | Bin 1030 -> 3020 bytes .../End Call@2x.png | Bin 1791 -> 7367 bytes .../End Call@3x.png | Bin 2620 -> 13320 bytes .../Video.png | Bin 1770 -> 2541 bytes .../Video@2x.png | Bin 4725 -> 6881 bytes .../Video@3x.png | Bin 8563 -> 12660 bytes .../Video Off.png | Bin 2203 -> 3096 bytes .../Video Off@2x.png | Bin 5232 -> 7673 bytes .../Video Off@3x.png | Bin 8991 -> 13438 bytes .../Call/camera_switch.imageset/Contents.json | 3 --- .../camera_switch.imageset/camera_switch.png | Bin 336 -> 370 bytes .../camera_switch@2x.png | Bin 586 -> 647 bytes .../camera_switch@3x.png | Bin 888 -> 686 bytes Riot/Generated/Images.swift | 1 + 24 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 Riot/Assets/Images.xcassets/Call/call_go_to_chat_icon.imageset/Contents.json create mode 100644 Riot/Assets/Images.xcassets/Call/call_go_to_chat_icon.imageset/back.png create mode 100644 Riot/Assets/Images.xcassets/Call/call_go_to_chat_icon.imageset/back@2x.png create mode 100644 Riot/Assets/Images.xcassets/Call/call_go_to_chat_icon.imageset/back@3x.png diff --git a/Riot/Assets/Images.xcassets/Call/call_audio_mute_off_icon.imageset/Microphone.png b/Riot/Assets/Images.xcassets/Call/call_audio_mute_off_icon.imageset/Microphone.png index 699255712827c09c92fcd4b76cb8e99805abb66a..75c5702086e2ac8be88bd5d4d57265b122269086 100644 GIT binary patch delta 3266 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 D*Jr4b diff --git a/Riot/Assets/Images.xcassets/Call/call_audio_mute_off_icon.imageset/Microphone@3x.png b/Riot/Assets/Images.xcassets/Call/call_audio_mute_off_icon.imageset/Microphone@3x.png index b292d11c5106df36e14bbe4f564352b1fcce11a9..cc5bbe81bb694d4cd12c82129b46428922e096ea 100644 GIT binary patch literal 16291 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 Z{{urG#RHii85;lq002ovPDHLkV1lz9Z(#rc literal 9029 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 literal 2359 zcmV-73CQ+|P) zl2o#b)Q6~&IDc?ypg;vJC{5Tl0c^K<7{`uLT`+MVBsS}P#Jk?zd2r6%z3cIMy}Pq^ zoIiZh^_|(dGxMGIxnl+kgl#SR-N4v7$Fjvi z0}B8K^T4*2c9#UPT?R-k(`0i73IrY0Ph@KoXt#3L=9= z>}c6f+I|^_8x{@?4D|0dY;5wM?LKv8Q03oiebkC--ha{3Meda z!s-5D=z8V&taUlUrRxQIaHh;;q+U!H#0;}e4bBfk7L=Ejz|Vj316YQH&E#8mKLo35 zZ{*|&U%j;!+IBxYW1S^1srjAxO*4dNonfp-l<6i$PAy(B^CyAR; zSm1z1&?@<&ykdDX#sNzeVuk>Coz5{cu`SsiIF9a+PKdXA&%uGNH`3lyU9}wY1(T#l z-EOy(8qBF_RC;LVUbmzuk3tRzg(Gn0+%T+17a<|YRZipi`@^F!J`v#OX4q^By!z%l zkSCnQrPU|Cch8m)kH?dYg`@=%reRF6W!1hJ`B)-fFhyC{+S*E-lV(U-fZPWqlN&aE za~B@o0v2G!67#SCrXW44sJ_2kx^&5aL`F(lU|?W?q(UE)t04~vOAxM=B_v6?)$jLn z3y5GA0KJv!Ai&z^Lo8ImJ@ywE|UBPrcWB{3SfpNFEY`3xLIeVGW?pR9W4y z`39TKac8a%CBoF_Q1d3p2_Y!w|NU4my#1env~?nk^}`CZNaU6NQ=StwH8omOQ|-Hx&2T67+dLY!Hr*d#>$O85yOO`nAe`L=vrddl*Cvx}ReFrpc`C7(xNB?~a*4M`^L9vi- zKamc)u3bF*>@VoyVH^?k8Wo4mU5KI@Qyp67`th8UgeA#(( z{l?{+@49ag=81#tyZOB1vER(PMjM|e(2ay8p4j`RjL$mXcXDI*Tdz{eqZAi~cp%4P z0Q(99du;>BlT_L#ANEg#!=VE(PY^L0>90+9vDpxfgpVNk3y{b>3C{eQd3QkWL~%g& zch=T5mTzvl|6QxGu+SjiN9}*V_g}Al0CDZph>_B1gJ#Y`LOPn&;lUnXFyQTg>kR+I zSO=2-Xz9|W3epH{e|aR_o}f-4=ge?HG015xu>4OL!NbfKA(E= z;zf;8r+HoKo|wl(C=_C)rKKzw403A(eBR^LU#Z(7Nm2zY0!U#eJuhwZjeQ!TQ}B>B9bM*Dh?{rQ&q+g*0MqXDiV!jpl{=l|H+ zg5)RBZPZvS7A+|$iLP9^QpGxz%t8WleOjb!M8er|IPgJs>;!G71?4+GY`L#=S!FYB z@2X${VHkSQ@B8f8mk;lwZ?Qy_G#*I|%KIXSXJD?c(^MB=WMqVn8ES#4s>)l~_xrnt zn9X*~Ra#k$!Mz3+0Fzh!hff~u+KIWo+v#-b_^w!jG>sT?(U6Ot?%qsarxPE!l9mud z!I#LGhUK~qcUG;bZ*0cywb80YNaLZPzw`9FuXPTef6wo5IE)DXR|6A=D$8>8>eZ{! z6)RRmF>rR&L#v%9LotI@l&Kj+I07Wjb-JP8yt?JHL|Q!NwTy8 zKhG=`WOW1lS}Zyg3I%&Gw+|iv+o5i{M#M3vYv`U@QBhG0H|<1NxC~iB6Gh9C0H*6A zm=(;!Hrx@}uwzv;O|#(!NC+XPtT*3pAW1;&LPE=8HppF&I8WUP!clyOitpg56T4&` zyX0Acn@TVv;=(gQOc4VsqYVRFMvZZoLL#E3ND0EsEQEL*Ojmpwq;)N!brqY*81`c- z`8*CCtv@4W<|Tl69cn~Ejfl7q!|YBH`Y=Pw2&<*OT*vDMUKd&yLq&hrs8GR7e>ZX> zW&!4Q!z_e^#YRH6l11^OHK<*2kAYg|+CHc|hek=-WNbWC3y^+~t`A+Mv%icDvo6jW|rl0^f`9hs=>>76pO>OlK@HWZG|=W^Ot0 dDIdN7z~@H=F7go9U*iA(002ovPDHLkV1lVHXYK$1 diff --git a/Riot/Assets/Images.xcassets/Call/call_audio_mute_on_icon.imageset/Microphone Off@2x.png b/Riot/Assets/Images.xcassets/Call/call_audio_mute_on_icon.imageset/Microphone Off@2x.png index a4bdab618722a0c9da4183bc17dba763cb77fc9b..a07c47c46f0d9da546e70f3c4c8a7b433dcc9b70 100644 GIT binary patch literal 16957 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 diff --git a/Riot/Assets/Images.xcassets/Call/call_audio_mute_on_icon.imageset/Microphone Off@3x.png b/Riot/Assets/Images.xcassets/Call/call_audio_mute_on_icon.imageset/Microphone Off@3x.png index cb777a3fa5a9be0aa3b5bcf39c06c80c34103825..ecbbc14c63c7ed5b45ce6d54c7f04aa2686bcdb9 100644 GIT binary patch literal 29129 zcmY)U19WChuqc3jv27<`oQZAQn%K5EvF(X%dnUGR+jb__%YW~A=f2l_?OoN?#a_L7 zRoCtaMR^GXSX@{D0DvGRDXRPpSN?mUA-}&7#B`V60Nh+iP6z;~kAr(Rg!t|g8%rw7 z0RX=!0094B0O0kTN9#8-v%n|_pKRjCB@W1w-d;iJ&UkH{5^8YmE zf&MS|N*>t%!~YY@pI3|d1~3kin$7?K3Fm(=h*%1f!M8R|OH~aQ4LMnEV|!bALlb)= zQ+f|uhySDiydK=&sI94sA+d+8jh!>M2OseNaBzR)|B)Gh#Q%rI#hMSOA*VJc?{Hg>XfaIv(vBmPgXp^?3-3m*{ppP~P4|JP3! zOSAuH$=KJq(p^OJwPrxVO+9@T`4ra)`{HWiCdD0 z$&^s3XSJ#a@d$X_vOGoyBw|zL*W{fxPF?0s)Az~vN)_aPr}O*l$;!FL~C zrERwzm$8v)aFh8h8G-(k4K5T29`57yCa~?UznS|$NT>!%4Cn$9ReY|cdYx~zxmJ#` z{A?`ayUE{vt-Vcg=;A}Cv0;39AF4ZU#+zpK>QYy~5w0%Tv1iTMw((}L=Vb^OTg2O6 z?nO*iU%2PpfBOWy*Y0q{ZigRdq7*5-3}rER9CerrTXyfb{zCa0u=q$}QQ-ZIkoDwW zybd`BvEOazDtCVLJ>=+a;m2c&aYWNP_cF`2@1P*=w*q|9OnV^Y94}*d1LG`VUnq9H zd?&DLOTuOKKwDI9e9(kE@VlveF@|9E1S$42nK&CHqjI6ZX%0~QkgrI#pG6l)rk~zo zuyDb}AHkTs0y4k^hsG^cT2Lp`dl|k2x|c&(%k&l}%#l>F|GZ529v(kD@5hD7$1PAe zccsdf+%tipGo3nkk(gY8-qha1ei8_l@$9tE!i8uT)VENh!vakG`M-MU+fagh-`#dP zo)K!P;i+-rM?V=5sXrn=;R|?7g!AJ^&E|#}4r=?JfYLliVI9Vjvmq^Ea@>9;@&91c z6TE-f0&{*fI#RuD?8hCKP_^N*${{&~R%M)@1oQ_X+^#9^&Pw+3Du;)|!G z7U8k&-W)16IRMkcFTgy#jJ2;TlBRLyS)@{aUgP`|bZpBM8nF6pg!F#)^;ueZm(#sD z{0f6^2#4M3R_DJylW-YcKMEIe*1sEm;|zYZS8H%N+T-Wwl{%vK9#SR8cq2=nD#mxu z2hDT+rU$jMv=x6loz~&LAu4RHTyHYG{V{9*kHOA1)!p(Zc&6Dq|JO@*cmQutqdIe!-eauE~ie#0dBnBsttHvkm_ zmaK(%HzAc$dDSfPXHippoPY9U(in!iz7p#V;U7fnQE!rqOgrTEW4Wof zTMO@jtvcKe^iHzRu6N?_XM-(f;O zUNxQ>4KxG{tw!HnHxEB>Q2$&w2_W7G4N9Gh99wFv9*!mBq(KlpIxOD5C|PEMxG;Yc z20^1&-4zCL($=W-gSCI^gkL&Vrhi^uwUkUzY`@6EjBImqKTPPaKY0C3*|3W!6l=)L ztiu=Yf8;1n!bcNN1sM9FHw->d@LSJvT|+2!V~x0zXCi&gOh5R7eZFBonQ?HiLA(_+ zygS-*o?k+HhBSleTm_L`X74(9@R(aDR|@BZhs0N;|A872Zs@jf_N!GK$qsm9vne2g zdE2_*y-n!Uf1TT3f$rv-oD4VEIu`iyU?!;5B#I2Z1_$*~)fBqnr${YUv@xx%#Drf6 zFiFc3d?rBzIUFW?aBbkywQgP%s8Ng_p4!o!5pMGLURz%)WHF; zVK9bx5+_qzxi4n;)IO1}@owBhscKQmk{=Q-cNZbLMk6*RiV`hA(D*TuVR(pi8)K87 z%pGWZz)hDr2`^Ig1&?Xtmn(gkGo~jO$A3Gp|3j*CuC$kI3o9y2ziLzG%dhuZRI>o%q1A|brPgOR zuKCb;tAD24EBE+t8}4k89^zU+gX5=*ii{0z8kBb-{U%1UoJ+>#}+k6Y)g=$+S&D=zi~WkAG=wxh-w7XM3hakoB_>@7dnNclY`Z z;#zxMEiQZTxw_0J0b>}Lb6MHWfj{N9#*rT<Pwiz!@ zJI`)#@rekdwgCAMnQzejUi;a9=D>OfG7(MGx6?U(-)CE~r|S8;vP&i(ig@(zc_XOi z03WjO2UV^V|BJxay8R=4$g8eBfdjF_OQ!x;A5n9L!@tgzm3Po!Y$8|*BRO7fP!y&i zxDLrh+Ev0EPbScRc=_uq(GRP-Gmx$Q_fA+>K5r5=7k-zyDV>lb4dy6BZ!uqLsZ+5& zsBb^MQ1`YcpI0a4_tY?2Q)tZ~Fn&nmwqi+cTI`U|pXw5zquf=LcqXmpt7SPadGTE1IRi#NeZdhbuTvh8>FlJ=54UDTfyuKkb} zIdBwE%BpSbF$Q>k?TXMJuf+k&?mm~+`e=c9b&S)4^pb8eIbtT}eN@_MEv!0Eg6#Uw z_}CFh!+WD@t)W%FicEz3_r=Yn)e@FBOqGrKH01n-;le(D$$Xr3#xWH3XUXIQ!Z?A9 zwj77qn@`QR3DM~lt z<2KMP8N^+05wyDGnPbr#z3^)E`NdAf?v=rm*(ccQAQI?S?`L`S?7!j~BO2{=BcN8@ zl*54$$VIsS%i?*$H(w^7459M`Cp~QQD0|X#x$PF!_a(!W5kw>8KvTvrh;YBk5~|3k ztAcWH7GQ;DeBAXW=|+K<+pj=Kn1XWu`*gA1tnep%9F;bGn!FonX;r_y(BO_J4D-?4 zD8dAoBo9^}>_m5(Zao@(6IliwqBCT|Y*`o8!20}$I@rtU){Rg=z@Nx40PQM~MaB-{ zNIIPV^@o1dv{!zdp!(%<4~b|a4k1fDwBxbd6mwGS=TK^1RM_-|VEdHg?Zwp#~hHgRl2b)TJ&!6|(r>%r-LHJ^BPer_Te~hx@FE>#LIR~Iv(775 zL-*lwLlqw{fA_&1Rshv8vMEjjfaXEwf{rEd4Ylr=?=z)VOMEM8p&A^&!)Y5^)*d6e|1s_Rcq`gQzl4c2?2Cl;)0bVpQ`t5l)YlYK#0|yER3DQ6 zBdmVh80(@libj-lsD3w!-HU-80?zEWz-lcO>e^uaVjk=%~1VpUjuW#2JxgGP6PKSiNh7RLoRW>cHAg5c1D-4fTuXt zTVbWflEG5K4T&*fpZk)$pL#y~Jm4W_^G1)Fdo9Q@6x=K+zk7#hWN!8DEo$UqNf}GW zFSEd2=B9K^_W=?zDM^-KcB{>F4bWx{vP1ZB8bp>3I|dU9tg(`)@N&Uf5vgJJ9rsWKz_JW3I z5oEOVRH5y_G`Pd=JJ34E8^lF5K)Wrow5;JkaD}na*aP7Q{2S3&gO4kbrODP+%_BEJ zX73ZsdJPR;pu>zxgN~<+Y@5vug-#nDh#x&Fjx{c)-Qar0ctTuV{u$)k2gl7Ahc0Z^ zK|<(q6#h8#ggllUyN6c~oXcdHohE2V2Hcidkc)4=I)An2X*S)3Cg2hOs$A zdT+iXT3q5C#VCoM~E!DC1039)jut z!fx0x;-pty_%mnep3cn%Rb_(*Me#Y_6DLF5_HyWyy`|R7#;%w3IgYE3C%O&Kx`=G1nEl%%TM8KsHALX zqZQ|AzTwEXOb!7>=V>qB$E|p*PbzS{mLMHMQN4I^xzy7gi=jWZ8m7Lld{3E6Y?D1t z20-XUianc%Z`*jQcmN(z~8VR>_w#v*9 zEfmiqBgxaHDm&)p?FNX2>MeNqxOD!yn0>0K!1&C0=uZPS)bi=KmvJ6K@8er2w+q6p z?k_I-8J8iGu<7dg(oVW{N*++^J^D zYAaEi92&@CG?F%5huQD1!min`f9<&CbDCfsLw_m5mycS|7^|@@8D2JTdY^PY1&P@X z<5m*>{y}3ZtCoBEF6EOH!AYe-aJLcKK@`ud2C~}HWxUE!3Q`!})w}IJL^`Sv%U&58 zM*P!X<0Q9-Pyd6JkAb;8aRWAy4!+AeDI#V?_0tj{)K0$MIPOVktkNN8xjS?7J)^EF zu;3YjgKk^1h`ylaal}L2gl-8NUv2)q1BSN|I0DI851pGRu48QiV>EhHcs zB=NBIyDe6$?(e{ADPp1BLXXDMu?teXG>&k&BU0MrFCDueOZN#kVZ3KYo8$=0_gyvv zkr{x^eG~ZnFcY}$gp<>N`b%ZQf6JVQXKqzD%m&W%o*6ck=D};X^cQoPF=;Ve(v5=( z6v4a?>xq!VI>XwWPPa%f$hxLFa~Z7lN{8`a&JEcyq9-`}GoQ)%v(FUTM!7H4Dl2n1 zbcoLYDe0|3a$x&2efoWAu=`_O0I$HN=P`g7lQQo`lzGxy?=>Amg6-NtS&|m~kmedO zWp=Bnx8r!Xy(e@jgGrLsUQOfx1fM-X+=r~qY98^ipJ=6XRp2>DAdREq@bTJPnQ;ox z7spwZAFp@9u?->A$D`!nObTl(6Kd+$=hT;K_ULp6`yD>%Wu8-6{60;lH zMphJTJ(<1UTu_y9cY$@0d9fFJX?rwq3b*ox$6~x9X->3ZGj!ET0a8NL*MGj@;roCV zmp+3g$lO!q5(csBd7kki%qT>=AZ-rfi{<9`*cd@q&!ZKfvrfWgqd`-fSC^>zLn~x* zy|9$$1vA;@MA!XK#DO9|#S06TTLKH^Vtvci-mloi(Lr{pi#NVtHX@GluhW;0k}h^V zrC)6;4_Xs<7s>WB{!w-S+O3b3W1{W3B(AW|`r0DJIOL%SI7Y0{MZROJDX2hdCrk3c zYl`_4=;3z>WCxyQdY~^@9UTT5qE`W?>$?qBg*cNNh;sjDrv)1etF zG!M17{#RY=+$Pi`dS*{NHhoDxbhpnrq;r0w%pb8c>lU^@X>1y}rU}Bg{~A-LuPS1O z{b+FYo@^Iri_xpXjqk%umZJ;~MT)kKmKVhH2vK|)#P8JjQQFX#^sgAvmd^ne=X=>67I?Gp%jwFG1Or&hVL6Fy=HzYQH9Y#3d}^)9LB3Tpg+n@!M)EI#d!er5M7tdoeE9dKD^I zTUOZUrd*QEe84D&b-BH>HjV!AYO|eO#ljw)@NMI36*X?LgTVEJlTfL$b=FH?xt{t{ zQN$QNvpz@>KnMmWQ5_?Gk)Tv)Ow;c`1A}IOu;kPU);~fCXT?-+&GZX&0jnJ6|eNqg-Cx39)41?%A{w~l@7wdqSzNzqwW)Rumir?S>s=Cka=qh7H3vTiEc`3 zQCwWvQ)&D0RBlg*;|XbE)b0@&eIF}8*wtP_(t47fjb938bL?c~)EZ z(*g=#kOp8GVNVeUb=$O)p-9mG@ zNy|v-o%Vzwk8d{{>hs*t^D9MjIy`p(N(HIys!&F$m0;Oh+a0iGD*@#4lcS8P2_3M1 z4gTf)=9B*IBc?2vyP>Xcr)<^*x$nu_wh)1~GGtc9>HnS^RG1HOJ(!B3L>n;iPrM(h z8%ykw&q>0su3Ky?^PR4QaS1mL0%SV_4M@hdDm>wC1D$MmmC%TY@a*1Z%=zbM5=M&< z1#U$VgZtK7olASFMFfvn@g_3@>jg^{h3M--2kbuIIs1S{4jUi&DYbb#F9gb9!RX+pa>npRa$*-p>xBoQGjnRP-kbShWY?q3co&%zZs=2s-(k+(TooB1suiB7h zwZRfA8{mWb0-Xt#ZUPBZExa^mOXDhro%utW+5U`4CHr z3kT*#Ij~&iYSxDzp4Td$x%$4&dPrh~B@maXNM*#6EZV1Rowp1Jen6onCuFe1^RWoY|qp<%}nV@J$e? z9qV&K6u!>7`vauyp$ddPL{apTX#Fysv5TYd(a-3+p3g|aZ>C2_PfoQYW;xkTw;yik z8wr-{9cyE_&$B_#IFCJ#NmpClGe2*tzwKl>74M_Dy*5;?iXKT5rRpx*N}X!e>rxe|G?zSx0oyXV1WEJfov@O4fDZHcsa;^*l^Z!+Nws3NvnT&44$WRpgOE z*q7SSB*sslwnSjYfOjh|`oXmT?_iJg_t+ENYt_=;0?*9qM|;bRgszU8BNIoV`5Mv> zk{sxLZwA=jjYsd`%|RR`MqmmMtC$8+tr1iUCQIQq zuXoorY&){l03Q^%D!mzP_GX7EQUQ(}2XNyM?Qke;!s|nHL_InsPNXK(kS}^KnD5MNY!@xF3fUvg_RoiDgvRW7I z`$P4Xn1|e2MM5Ym)5?1H8$EiY7==xxA(W4gucmwT&uIcDB^8jk|Ju7AH_+7J2W*0MXl zQ$0X>TD+F$zHClr2Mu!@GLPs-AcJIbNAfQlic0$KbCCBaL>NqfPzcuSm7>57ZCGqV;)Vf{hQW5!j5i({8z7%BPl zg1`0V5~dYk93>+wL*}GSQB(}u!!Br#i z)#Mp*V!4asSHgV>V(RA2+2!fglYt+~sF|~zd$Mkp0M!q|zJHmW79P&57x#L6Lc~~0 zi*dzm%&>}oBS+Y|rj1ydQ89f)72<2Uy7XA~n{&e##fZB%pxu*(%pvUDMBHwf?J~|T zhsim3+gL;jFZPuAarpX6XlpI}tsIb~@}!N)bVyqq&#Rjo5Q3cpe10@wJ;~y7U_coE z0wzk7M_5gzmfy(;g;+pCo3X#Pcy&b@EVpIZYWF!_=l8GtErD8#4vr+v}X#2yhFf%_7?mvaqbnB2m} z^)uV~48#=6{MU8CI6eK)=m{5_6*VPIpdH=9hZ^~N$H{39x9ix=D`146=tz{-`&>)* z)=)Vw7q*weCB&!>VP-;(DhO{(mI{UjGxJXoOzTfRvpKMzZjKb4tOAa~Z+9KP6id|5 z`tJ+H(0V*QsnI=ThwJ5rfhotM_Lx-N&c{ytAA;Ct;slSpNH1&KhBpbZ5 z1dDE;S@0Y$AO1XwH%4(ZTrSVsH!8@yR7)8pRnG2=>1Xn55U$$ij*}}hNiVS>+PG@h z7O+u6s7%m80TZPYWyc9&1I2*e_Bc@@BBL^cPSUWt@yf;L#;1w3nJ&K*~SclxS4WLG#Ll6XeTAO@8oIxy5#dhsQiaT7UE7rjf z|CTS6`S9*g*?XzXKO@pSQ#Wak$sL=7JQ8XM*Eqk?=nHCRPrF=S%GBym*PR# zv>|Zhm(UgZ4!p-6KKGrezDcJ+S6Fq0T&`{MC+x>@Qj{*8 z2b;A8SxhP^&jjF#O((jtROI7YL zbz-!mt#*4RZT9NqOb6GJf=Mjqm$Vnsr)?62{#epaBi!#L-;UF1zKzmoer?F&?_PfH zz#vK9xbPkS)cujVj#>!Z3oy`jg*a6%!l0iz$Uz_R?Qk2_hX$6N1kHxIG8YO4$WoS8 ze$X-TRn*{VgDMfAQ>|gV%QgaAf(Y#aM~GcJh--sy&ksfUKr^5l9-9Hz{`}g@Vm2Kx z4-Apd^GTlYZthgZky%z)F=wPi-$=%->OLt|jSg^`x6nagc-^xXgN4-lZS|5Nxgv5A zpfswEW;JAlB^p^K^rQc%9FN|;aA&lX*`$^8RPL8_SQG(vv9HP@+kb1yybXsy%x7PT zHy=0pYCzfZAbeMmAshST8GRiwAxbz1t!X2><&Tt>>**Xhdq^iapE&+bt&IYf7rl_3yWr`T~jbYO74Lbn=Pv5Ami41@s=UENQ5r` z_5Ns{OYx59Z6-qd2hu%VVwd zH&d{9_L5$4`rk_5`^yu(yjbT-D0ncZ_o*p&l1MxDc1X|Z9PNk0mH=3+32IHW(J%UB zRm#+7A>GYU&fiif(F7piXa`1SG+(9QD03p0D!nU;;XLAI-sN5Wys1LT@{ob1&LNh$ zFS~3o`BKzrl-KNWu`!vnWJz$AX5;i~6>v}u6gX^BRXiY8$pzs=ltf(zqo3)~zZ5b& zBB1h+gxess+nYQ_RkgJ5sbssYat5c)fe<4j&`u#UkpBNOj-O5IjW)P%oCN4*9S8@MW*x!MqQ z_&}0J=E#T+w7j8ABE@E4I82gRaEg%amrhBo|K06)icracP3^Ew9sfH@kpVRVnt7JU zn$ZzWp@bO&MRt^+KB<&58(#HSxT~1n-^)%NN1?PKNZp9Yh$OpJt_W-##jMIsFf;rN zyd<0&mH(=B)@qC6zpA|{qKuIElc&ap{xNRZ>%p_&xy@E1L2<{C*i_W^*4mA+VRNiQ z^*$!b1rx?)PByrrUEROfAb!k5)gKqrtTEQRdR0^f=!D5hYXD6Xf~H3qlP*Y}x@&Y= zQ3qlai%wsV+i64l6csN5xmQrFcyDa$$~AaSxQvOa#0i-x9rkFQr8*1ZS7LU#)|R)q zO$oc6niA_m-WA;vOeaiOw9Y`!#8T{itdmyjx&{q~a{fe8SIK$3g$0kP#5Xd-C(m?L z9b+l$Jl4q>d|5`V+meR(<{AC+<69ksaU|=^9BIR_PWQL_z(hbylnSS3V~GIs&01p< zDT69`CH@ssl^Ta-ZaOv9`Oz;NKvBuXAidI2zi6Yg4lg<;A3p$)f8U zU%|b6t^_aOTBonJLGt)MqM~O}V#&wbQ!28vEoCC)8R68)BZDXWh1QzjTzFi8qJym& z4UZnQ1`niyJ4>T$*NAI-M2t?e-i)`)e4@Xz-Ou6QU<*uGW_t@{H&S9gE@@Rz zvgf9hsW-|;K6$}cINRjb{y7G0qs*dQxWh&N4dI9|6vOJ#4qdvPlT1A39-d5%KBU+> zp<1xn08IH;O6$S2ucDn(MF4?u5Jbr$7lU9%`R8)KKDAb=S?{1Cq? z7VJKBvStib@^gKobYXfAx5Loq4ErREt+DUDwT#Y7p) z%`I-mv5o#r!s=B%bc>H^!yDGZJwv4c6A~ithjVDzeSgpCKbmNj0nJL@qx+rvowKY) zQ^2jxX&CGIoL9|C0H8v}P3~G;ikEe+u97}?vP3XF#IRYxMU5CU8C;543Pl zXqRP9uDRK9lKMz(z|aDLj9p(53f{n#>Lqxc^@N&W;~_|vF*i>ll=VX=-(?|Omk)!~nm~fJKl!F}XLrQ=vFlA~sro$7p9Sj+>fxgu%qwU-Ff>aW@#rHPA#bR< zZVkc>o(~yx?I(n;`O%jtk90>P5%)(EA$FSTHP{Ej3|LJ4(_wcItMG6gJO2N4iYnAb zJ56LIqkC>)dQuz5(U7C5BO(Ci|Z@so%_@V%?zGoH^*zh$!nEFGxCF|LN3g-)0DCw;}QIbaBagGZ3b0!Lr%yEOK|d-qM{D6k}d?1`W*b*FhbIKa2o|1A|-+r0Cv8 zS_q$Sy=|*%hpY5hWPJ@oc2fUfL0wP0$oP~Lm#dU%08zrM6i@Y1-DEk@+1;;OzOU?r zoD8gv0|Q8fTXm(~ZGoX|lh8Sid=YG0EuPaN)Q!e(YG`4QV!WZ}P)B7rLJ!5>0j~io zG5r~}iA9R%6&HK5MNwn)S9~r@7d+mCQ2f?q7L3QgtO!z45Lz&<;6&!v7nwFT^J$Iz zRp}oJ#5*g4m0(&|x|}3Yf*o;dwgVM?e0=glLm^l3un91#!C~SuqMQA;qe$BcpUWlo zA`ZZQ9Ip9Wf9yov03mnmt;+gE5R=OhP=d^dM<5@O_Kfg}wP5=|LA_e@XM$8#M^4gC zJ62-Y4gPA*AX+cDD#_I4>Qf2pY5@sEp|H-EEPRWZM zONWLJF~V}SNVFuvQ+7$RLQ*@N9oqXm2>6t?zX4Gu>@6*s)NAz~>aR`JYV|IW;NeFg zI5&d*UQbIW6G$ZvpukzC`QK<;yA$ow1$(81DSe^E3OVXhYpZ5Xbvrx~Dqn@N?60QH z=K3I+42sjRR|a-xe|y?~!8F=BSFYB{Z(CGu^wDK5XFTycHNViump*M^Ym_U~45{KP zDmSAXtVd~AwDmfnP`|xGP7EPfi(45pFcDQQFm6ZCDvdMaYOyAsu z;U?;vO^e>J@4k<9Yt{3=rDXZuR??x)WzWR+mCbH7hWu7)Y#_&pYG>li1TFgnaT-UW zH6ys1ejVOr`WLJo-3_YWHhw6f>cRA)N4Vh5+m9mcN$0+SPT@v>Mkhg8o%oN5k}Q)zDd;d>cR4NE4Ex}l9FGO)txM-^I(lWcI+SZuX((Lhot#^SS@9x5 zKg~Rk`_FZ{?fmw{D2?&N8lkg2pL~3bG5hi7yPT2PteK!o4mQHkky?ULJO==Ez(KuHhvW75oAQ4CSr#oc@{5@9IuQ$TIdAR< zYSn!D}0%DN~DK|%?p*pRRhZ6>v9 zqsGcluYU#79^R;#mj|yNOcABVE3Se(a7?HREmGfv6CNDNZdAFmk}eOBOPH&xF@Y#$ zZcL_^PhNI{Ljwo93AAv*aQY-ZyT1F^b+|yoUMY)R);WU|ljBPvKRVlP1@yI`dqWvs56PA;h_ zV8KjIrcvi<$nvCB9Vs2LD(=j2DRS>sI=sYJXS*oiJCl&8D-Gp|^;hIYAuEKe@joZ7 z*_Dcl5#eHLKT;a5%-BE`lAqui-ntHPi=pQFaTjM-*vX_cG9iM2iT7N`ul z&~*SjV$Xe(H>dJ6DmSzKg)~xXj0m2dI{ zTQa-CE#>8-rJvO?+IH=lGm{Q6Xu+*T@!l2=-908o!^Fj|1_o^VGZx#)`8M=E5JC&N z)NySW-K#T4uSGhUAK9gPZ00=l^6M0jeO7?SFo7Gy`);2T0<-fHS0EieM2O}H8%=6= z7V;A7BJLL1!vvgHzKu6Tn8cxP81;Ge_qNI~m(JX1iYy5mdKFk8|9EFXWHtkg8rdyL z$BdT>=S&&My?Z8y9@=Oby`WzyqY(4EQk$peU|0DSrswe*@q@T=SaE4DiO@h zN6a37ZJ}?!<+e6v31H|#4 z88s}IhfauxN_h;qHDdz~wnaph z6;))7>W$N5Az7StxewH|P(xTJndIpRq`Wz99pu{IdrTFmr9>?vy2)eFHIDGYCu-vK zx&>@`lFw%q#{n92VJk7tyvaWsh57NtAV{^&n-4P|Jj8MxVnqpuRVE=9ptY-#SV5xW z6TP1!hs>N~N!Nsvu{jbCP-o{HOGrriCbiPjTH2deBFNQKc{kxvUkTi;|p186SzN{Ci;sEXifqg8Tsy`Cru`8J!%`KxP6v`(m%^2QU zYD_sjsy8q4vsC67Yk<=s4@m|b@Ui+ zG%exyUc3%oiV@1-)e*|q-l7w)+$318jzZP&s{<74o4b&xALT#Nh=~Pe>S^P(F<@Xr zR5Z_i(k#oUN5p_(F1pi;o`61QOd~ORySTqjC?g*y=g97z<1IoC2MiQrt&dkF4WnRL~g!Wn!n?ox@tMcWrb z3U$-X*%$t}3csFRt}u1!U`y7vEH2wY@I6`Md{zj4%QXiGHn; z8wy=YRmq%g$5sO-PiI&}=}sww8M86e@Z3&m)Wt5iNqy<_X>E62g-%d84T+u>b^6E{ zifnwubiHEc)=>}qB7w=+rtKBdzo#d-rgi_39RvNgd`ky?-9LwV6CTZmZ#Y6|XLtvV zSp<&6u+$@tyvCyaXftseex-m%S+;`+KqPpFNhzF!5I1*i_!jB3&aL>5Do1KgGGq*3|pCTXFSnQqV-_#`y%1qQHE2j~0TM@2S4~ z+h4x6`xW}5MMEYf%hFY%nMO8|i`wcOX^+)-6IT-MyKE_wjdnEDKz+W^eO{baP_7*q zffsdli3Hc8eDLUSaVG9-sQjf-9gSWiyZJAI;FHgt*~X(m^=)Q`D?Y^PB&}5nLAKOv zLxI6PDHi61r$r7u-@CZbx6oGx9nKo{@Om*59Eec^wAO!=zUU4;3S4}S`zp4O$u+%- z#6vAq74DEy39=)^kA2=3F;YhF34zZbAYt~zCjcjV^@VnvjNvO_2=O z*|RT>=&%RP(jRfJwS@y}#UOcmtweW*Pqz14KqSzHH=q(+FwRmBv{7ZsXHxogYZ zzL_ag7^3c{gnsV!+EBPdT6)|{2WZ_RJ2*&w{H#<+xo>LPZBx?3Fh+mau#E7N;3H`5=l_x+O&ai`lzGp@_OZm#0UqBBS)kXfe~(^Rq|q?vf5*DM2;( z-qT0$MG50b38j~6It)7TObHT(uc}p)AaWaBe@`b3n2cGpElTf5X?@0wAZOjT<46>^ zrph!tnO|6Hn&d4Y z|1-C9CCW>};f+yaqZdVz&XJxLhOJ7xOh(R~zPe29r?r*G75x5sRFvb;P$MUgI!YC0 z`>09^*5E3`#bRts9Q@b*sj+>>;-+hkHA9~r*I?p2X#;ozSK!Wb^R{pM*G>@9m?mQ> zu~M+g*>jLKa-Wk2owipFSLm+PoOS0xvTa^DHTt67!*Uj9#K4nxHKwA1| zpot02D7{u1WnaGjUP)8alHi&=ut>Ma^TfS8Uc_fqhNg92D>`!$8V+GTa)6S2eqrV)ng1@&d z*oCTm-{>+A_mtnrZaN+S)E1O>eMX+VAMMF0c`E+ej@vt@j z3hDjDdhCvz_%nSmw25az*}V(LvZZ*bUK2N;3TMkU!Za?(g?K$Jq49G(Py{T{o5m@} z?tB;{s{C4HY&XfF#gnNw8v4hvsW0L=7kJ%Vnz02~nK>Dmml)rTY<2gSG8v?_8WFMHN8v4qzK+7X(v8QpDTX<<-J6U{ zw2dUewzM-Rar3Zq-z0VA6XpyyIOtvPi^B`i5=ZtluPZEY74<>DAeLitq(vBP=#&`Z za&$c>dvR{JBjojw_19n2FxRS!Yl1kQVBeDlrGc{VHbsjatjcKcmnS~$H9l@(OpS7( z4}2&rfgs|FGt`f!(d8Xx$52kj0`yU6k@BrLc|3u+V@t!CJ27Xx+!Q^0U;UVb6If+f zc5$9scD6b^+$ggLt~{^Ys4EcqJap?^a&G$^O&GSe;h+u#idBJzLuiVbV!`dKdDjI) z*wD`_to8*eGp_9EZ!aZrMzD*GDaIdcMSLB9HuC)fQw7h46KVG8{S-pAJqo z5l*ytKp7;$zATxK4r1+b!<4L=iiUq695G{_?%|WawOB;=@^`3(!f~G2B5q&iV5GrY zV!*#bce8Kn0v@h87mVxpe;Og_1@2Z-in1Qb_-D{LwH_wunq+%0XJp`o#bzh`Xx!vX z-Y~(s9tx?j4+H(D+iZ)v^0!oF-pvnTg!A&c zNrh#)UehzB;1^UCm|j-2`eblm@=cEHWF;7t676WYMoURD@j|8}sy*-hsGZ`guWYe36UML(T#W+vCULYLay(7jlyE3(!C5Mf)5;s>X`kF2yBR0Jhg zEY>3-SRw&vVs_@N8EeAD)cV@Q`gJFmC)vRja`inzV>GgL+9%0&G@MQ_UJH)CX1$UsDD6u+~xvy*=k z;^4i)*?ieP?#IgJb*sGo+4nJJ7{Z#Oi?T~#%m8veJ+3480#$iV5q-pYo#H5KHI57~ z$C>+{d^F^XgUB~i7FzeNLdUt?CUA{`%JSRYWxdx~v|}Ym{a;vuMUYUMqTvUQ<|-|s z%v(!Kp%Fj!wj@~g&wdsdB&IcDa%8)JDu3b!qX|ifi$7oPZy}0P z!|PslMVkBjLVrHVlJ&XKv0Buv99nZiDIqgw8)gljjJDQAsrnx!JEBy<Xg)dYnP+J}j`1VzmHQeH_0r)^ED(i~p=QejH-z0Ij4*e5ua=Z%Qc*Bd@n@@O5E zZm99igEC4J3v+a&j;rJZ!~TcxF_a(62097XCEYqBDK5>f?Upd2zadNojR8;NM~a_T ze;2axxiy|GfPLEC^H<&5=AxpfvO2cS$AYF@JCJyX>ZQa(FQyUFI18ra`}n6JNE@Bc z!0daW7FK0Ms=%RQD?M5qZC&iOFX)uM1x9Y{mX8LdKb;m-OSHZA`4;B1dU91D$^;*= z7n8lJ(OPUK*=dE=5p>(I(c5Az(Jo1_`3rSt+D)gg^F{rzOT0wWqMzBkpI&+P<)j>u zB```ki9^;Wk{}2V=pBaZ3W=a3#elK4Q8P%;i zShE`8(l+t|hrK*KQEWlABC&Qmc2Zczcf+BCh-Tbk@94qK0WE2+5X|R|C4He0TCx%3 zCrdpPr$tBNCAi-5M*CNq#bHunIZi;)4OI#G;dV`ndo3ayckqtD?I{9U?~<@6c}>ETj{z+(yai5Xg!=Az+i zp}I*mH47L29U}C&N75fOuEAlryP@JYUM~)(85Kiyj~h!Wb)cn#Tj-Pf{HQ}sKiNb> zgy_-1kL|CcQ3<~*GzGS13L>#0LH;q(pU%}#1sdHtS2#UgOH%)z0F^Lm&zVVyV4HB4 z2Rrmk$7S>C8^_H4L#IXcsUG@-q%MnPSQgnuUWWSOzTZL01&OAwe(m;$VNz*S`1n|Me{d5aw|IxGY^Xo=`FS!D{N# zN8B1o!>Q5X__=P!yXc&hMRX8rLLzu@oF|ycbP}D2-qqnted*lDNzm-m`K(!seX+RC zd``TZ-pNs;QZV<&4jke2a79YRju`_m4~`TM-qt{&crlSn2Zm)*L!+g!RvwCf=EZ&H z)xC#`0u9u82s)2^*n-H#cvC{5W;)L{w=nYA>=oP*^J;2%NG*Q-MIAh~q?l^m;uD1D!nuex$A{u|RieTuW3MLFz zk$uwx{Y758orabMO#*vmyeFS(P`XiFA^Do4lsGJuAMjjh7Fd^;3O zU|T#V`7`Mn%*H2Dlw?YgJOvo=3@T9O7Dk*$TC6{J$|XLKi+=F~uRW9c#{c-^?`6hQ zFJL_eDTqJqVvz}NHp5OMCqY2vjl%0z)yc03k2~-L^)y_@qI4I*gQo?^GOmGo*80_T zV)G#jis@Y-S(FOdJ|j#)J#QqJ&FuZo*Z%C4!-rp?@#q$AcP(B zzz<>BpZ(Ooes^Qz>QBbw$)CXixFq(-;9WJ<9=N_9pfWFDX&mZ#FW|PQuYT)q|Kus; zD4WXUqyWzaz@i`%{AmY2P_F`5MA4)tf`K>`z!DY|!5~G{bOC}Pze(p20{m1)kt)D+ z?g6kcl1*+nvl9Fv6ZfZ;P--W~(QO=-$GG09L$ALzK05q8?2DZxa#=)Xc-2&UU`{d(&@_NqIrK%N;~0HiAe-LnPKl@SFZ2oDhwiIQYtymeuR_)YjF#fUBqKa1Heq zebb5&tESombLjybrW^o!`1+L#=U+PT@^?A`YYo^u=KUJFTrsL?LRa%jVod9ei+CtSw+$Au=je@bX+)*%7*fP zzy0oMuq>YthQ0AL2XhS@?UJ$@KB*}VAj zGym%-QpS?WWQdY$xcQ?|cZtolm#X~%mW_pFiNhrkxVGSW>|!=E`#U29bF-qz9!4u0 z1c7HIl9f~pfkZYUqQtky0z4uZ{gSvE0!SwA-kyv5fnZP8)-*ME`P>%JU&NSD43bq% zwFk<20I-5n8ragvcaDt>f2X&nYrl#GY?}pLOfB(<_T6@cyP5&&GNPI9JPi(46 z711kIGi?u$dS%k7PHg%7u($i--#qorzdUOb1qg*nom)Ya9@38!fA9l!Dp0UNB#Xsj z1yC>Q+%g=ORoCpk6_|M=85|E2?h*<`ZhDJfa^ zm#x2C7^L<_fLut=FhMRW(35ZafrBG4n6a5Pi)eG!0+kB61^RqD3{;Hr42?(I{V~3V z;oiOhs3;_3gM;1qr=I-Fy&wPO-`f@mM{Yr*Z^5Hfa-hsDpz5ynfc5}1T~c^JuM2Ch z=briIe}4u3s}fC3F_V_Jm0g&d%+0$|WZ#RF3+V+ep}C<&xV9h{!McdpZct_SOevV8 zM#kmX%L8cgK%bjE`B<8A-9)PaLei@Zk;dQ~`3Agl&*MIyXLdXhvseu7rd#zn1u*QRxFyhv`=jowaPC!(`w!*i< zC!@H=cg}yg{*$_AgmXXL@SZ;xqw6j`Jq#|@yz&vpW~)Kjd$e0 zE8S;K9DH?jWbkjZne<`q%wKD}#Hs$d$$Nk>0od3NO^v@ge)zSQ0W&?gl}S0W3GfBj z3nq5Lp)Ox^?L`}1N@5{IgWXH%p>w#B;j=cgLNHcLOCTn*a4rBXWfBoS!YQr~8t690 zrq?{=HXoHJGM)W#76~7I{h6y@|MDMwEj>Q^!)!J^fM6_AXH{KfQ#C8C2Z}J@7YGxn z)aduW{*^EO?Xfpr;?>e2tThCNAex7SIvF4o!h$O-=yu>(j-?Q}9Brha%apnW9@gQc zFAtjVtr$NcU?v`RXPd9E2+}xwtCCu|OA&cV!`)W{;m0`i*SM00jl zk-nEs zNY>CAjW5a;*JO4YJiR?91S5bKfxK8i*_8s)ScFLBaC!b@NT!u9v5Vxrh&+izV-yGF z$M(JQ-J=&ToWgo6^<(UJWQ$Uqfbvb>%4&>d-2((SEc^XTW;}y+*N-m&7T$R2sUvu@ zVFVJxFxFmt$6DY>kxSvv)j8DbEEvX#U)Nn4SC=}DXr6fzxs=P|=d8?J6T0ctO9kC%ZTwO<JF(T_4@CVe_q@iN$L_ zhFo!wj#xJ9wxfuuS-L$yaKX)rKJNX&nu~1Vz89Z7LgWHG#4Ytw#1SN+MA}}kBuGS- z4>NE9X%vaXpBdxlrqymJs92uM9vTMN<J+JArAcW|{W@ z$CAq9*!&&D8(v?zjIlnk|0l=n+sQFqZ?Tzx4_d@VTog4XH%Tky;ys7ROU`>CSYeD& zB|aUFVYqBHeeG*s69i;EEL=&L6L-eW>p`%RLMTxzGtwZQdd77ELF4Sko;!oM5+0pl z7+>NL(a@pAtc4{=7p`8sIQFA&{ngR#E1ge{jST%cBufW^&OoPB&GPJlYh#E@GgD)S z$3}<$x~Hq-yU%>2cxDU;2DY$~11tcqldt_27z2_OtYAanhZ8gM4dBVfl`!Y> z8cD0vtE~5=tTMkDe_q!j8|E)f_CpfE8yGnVp>UFtgmiq6e6+%WdFe)&g9#- zU=92bI*a*ed;?75w+9x1vsmic?|$V7zK?$VbH6+4c})%BP-H#!%o5iUFnZN2j~=jB zyA|?dICj!CHahstumANIpFrJtgKZv&g)txWxgN*(!wz%}1z8YB;fde;(TE=o_i7mJ z0J)ft#$jYdIKZPKF~hIR%*WNbLNfRmbZcuXH9NFIN=nqGKd&eDAl=b*m&C=)1St`& zHZGEGk8eNYSCUR57XNr;A0oM22v?j61;))`my-3(mlDb3U6E+42~?7=XfQkZ!Z|_8ErARt>{|HMG%gHkyjj`TMZs)I0>o6EvY2nc zE(+xWHS>5m4h&};UVKx2>RBtxJlJ5qGN^2;Hd4}SMA#J1l8VW8G-t9yZ@zp5_ffrk z*S+sdCgQnwh9j}JVZb)w;z^v{l$(Z~Va@1;_ia(OtH)Z`Zv3d1tbIT7+vt>0DQ(s72KNAu`ST=lCN=(4Ur)z(fAp=d@SF&*SX0_2opgVZTF|h1r8=aIvdXK;HD_Lty&*pv!JY@A{YEDtcBlNvhqb? z#?X^}SFb$1_to!Sz~1-0KAxPY{g$7Rf?D zGD(llq|l=zt&OkwKfjO&C2&jqj8c*-rG>Vd5Gv$ zvlu-}_EE%{w5k!TqA@ksROY@Sl@Q1ME`qBTojFRE&%0v@e#L`bzloh6t1_8OW z0rZnFdv1&kC-UfQ5~4(rYclK4b#MVl#=Q;~$s}LIu_nb0X$%k^27l&jR0KWw&JTY4 zP}?nUi(yax0ndb*kWU=`%%f@+xd$-8;h0G#4UXbmHZ%UhnZx`3anH-&JB?~^9HE%g zknp?=q=Y3v&M^5=uz~U8X0jj({jH|FepjSi?luw91cxl?wnpJdZ5K{8&YbM|kRrMT zD?*j~Rr1$35(ec>$R>V?9v~|SVFszzD2|#uH9XY+HytP5dh)`>lY=9J zeJofe&3ryB5<*G|DOIGQ8hvz>pvwCTTfX$wR-6sNNhoa>VD4 z`CFqfr{8Xv`pwCnZvXvzv=CgT2A34$>%P%%x%FmdDNA0AC8 z=@jzoj8E!i4Z`DQaIhia8{*3n?99Z6e(^UR zZeG>;p=dPm5N?9q06(&gRWlzwz+o;5lyZQ944hXB`RwVTp}uc?`)~gA2PlH$z%hwp zOah>XpX+8#h&&|-#q}2BVKP>KiNmX}$vSe~g?nHaXF^)|(MT94ei~~tt{5U1^U?45 zuoVdBBd;J2R+Jw_oC>_@r$2**rXk`uLJtj7y99xdR*^|wn#a*=BJc+(6->k8Px=Z5?H zempileEMqF+3th;UZ5(DAc@UWff+)LKmkYgOcAa~BuK$@L@>aVs6v6WAwr2j1JdUp zj?F(v%R4q0m*w%C7nOKz9C`)I1PiMYPXgxY&%6pbv`%&wAbdD2L5)ZM5IUQAi<=3{4AW`+z-`Htf9lOW!}#%a_WqB2@;9+t*>Wu8 zrEU#Jqjv*9wuHjihQZWZl{l95YK2b`x8r><0;p^lr^Zf#9o&OWwj?) z$#AENj0cB6$6m)rkPB-koSRGtB_g}W_|8VMd^?njk3bf9fReDrHI}7ZqOHO88-EbV z%foq4;UkNvU&0qh0>fGy#QzM+oFUM2ZMr zn(>1$Aegw(=_USU`7%!}N8AuHdeEgY=^@d=A%gNXfaH5V{F!^#uW$cAJdu327YeUN zvIf)^0D)Bm9H;}+SB>p~YklJ9&^ak|5BR;p!1(CUcVBw?JKw%^{!k~PQjLZJcZ?Nr zOV-B$wW2@*o&kc<4dmjO&?-nG9N}{qFk{O^xefYu9aQP1M#rSd(mgFQknRMsVni zQZTAqk)qw~hKNO~#p|j`u>w|bsPD&_ROVb?Z`ajxr`{Ux?K-b(Ufb6Ja*$H78%y@M zFlORM|8mL&KSeIJ6*+=$=ouEc*TqaQ`SQ^`jiazvZZoPH4b$&=vloO#w6$ZUwR7pE zZr5KLMoFPnT`@dA2I-Np%D)U}CzAS+VsYKZ3v6A?o3a1og0C9^hC!5Q-Nw))R;OTrmb9`u^_n>73d0i97jO2<`3uDe}9g1U577%VV zq+B{4^p{_`6cGLa5@{U!o>$-xji5jcsuJa5fmUtLEuY>CZWQPjv>>Gz94u?-2tFLQ zXnSD26#^nqf+%qS&>qM?5s5z!YcfwMnN2JHWo~>*86sh19Y`hB&)SSbLu7*m*0Ctr zBB>&>#kTKy$JX0--hWShjE(G~&Iod#es~?Nk zZ}p=cLdOx2$R-lOB#y4hh+vAiplU=g7s=fGBu~pW5^>$~)XgIf63^L3V_m(~>$gVN zZElaXG_P%l*Ve6tZsXQuP2HV%Qu=nUa0dC5zo%@t?y{#nv>r0nHVxA*n9+h3tN_il-f4M6&PyqSuW45}{jO+PGZ1?d#Qh-A2Pf#Kx{Cf`IX%#6&J zlq|UCgWvRok)tn)tN;%Bqn^UvFr0%)Afk!ha`)X$x3u5Cp{}`gb2OG{$NFqDK(aX; z39sj#8ni`L;VIl=Y*01ii(iqIq54iM6-hy7taH9^JaCW!=trqUJ8F)7ro_u0cYs+9827Q9u+n*}NzTLy_?U zWC#c#hM1BM^_(XgH7WitmLv#o@~8-;e+B9tf%U^A;u)MIF7!cgaRpbT9q;Syee>yW z{>5G-;1nfHlu~gW%TF3XE;@)vv@OR#xBOI?QHEd=7jf9PTw@dQ^|Bgx z75#aaAy35P^&X8M0!Of3Bk(A~ zk&U!&9U!uhk;aw{k(P#LC@0_-345_*-DV)#ZINiAH5N}mI1;@LfYBa}C-K%hPFo9* z1C}h76~BvFf@;{|FH%3L&=h|Fh)!scGO^Wy$V6vBY4O1E5WHWUNkfQ~?S}~P3Ru50 zK&G?#Y^odWI+-3F>&)j1ekwhf?HlM#oj-LTl^z~e>dkW8!n9mLFj5BFkMw6_w2#zQ z%0o^?3DfMKst76oOn9$)r9=C*@c_A8QbY8{>E2jPyoZ78NskO+V0qdM*Ks*#J{V$d~ z48oL12qH^iH%rN#)PP9IwI4N4;AFYLTxiSUodbA`Av^={N`pBa0LzDtD2(EJDDPv_ zw~+4#k_~6Z$F2^I_Ff(Axiqx@)n|Evm~9~2=ltTBpaP)$TMUp>fSePS+jj^Q z04G9WQd3|TH^xMej4UA$i$5X>h9p2PrYFTBf>BaP%0U(3muZ;Nt$rw#27}*T) z@Qg>T57{%btRmwC>DBE}Glr>=ctj=|0Fs1Rsrz1NIY4y78)e$;En>(l33FvO*j+>f7wjrLmK847-Wj_u&~49b8tg3 z&qKxhFc4?NFXXT0^0|ILpC8ZX^26h)u}j0lL%jn%mwMlN{i#dHgqO&05>O;k3eUAv zC}8#w!BT6u#IP;=k&Wh9>4Zct@#iE(cNrz4gizvGwou~-7lT^LMTC(}V^S`gr}QC_ z%RcQIq-8kP>{711>N*g`0~W-ek!gxJR;**uXYu~t2nr^x;{dVk{IDHBr}&Xgq?;_G zYe>mB=v0BBXclV*gISF_W)vkeF9Hkm;N2dQH{EtK8qQ*Qv@z)V`aI()OUO7nIGSE4 z9Rp|-*@|C9$r)#Gep`Ulday1u+Q*t-;ZkSEm67pGZz2wbe$+cwlZ?co$*>P%hS?ed zJc$0o1rV_)WGGR|$MZmYU>JusaU=xMWgdSZWR)-v>>VzL$w3nkge~vqQh9$gGoBky z4d=&)hKb|^*y5s-SzI&B6Z9_aL)Sv45f=)lZn5s$*_KqyYDGsq{au3&9ed$#`CE8QLbKP*+$P& zG!=fZMoc3!IcHk{hWbgF02;CF%uI1K*J4sPx)E7{PU2ZV=HVJmBLIZ}rgz=^=8r~g zhO1FODMLMB^IPiRxYdugw9AHxo09~Q1h(d>lLMj!CJ2KM5sX7a>J<1BnVfI>%g<6Q zsk_S>GF(|gjqBKC_labIUZJvuj6=2%6KhZg{AgsKi^v7GQ0irEx^)>M{u28J{E^x5 z29)a-S<(UIpJ^;|Nyk|hK;lsahJeA1Me^f_8r-=+xBba%NM%rbOB}F_WIrUFvnPQ? z<7ylL2E#Q?U|S#x;uE6sTP6@ueY{8$#tWZ8;LIw{c0HQH|a1#Snq z#E)%9xbzqM&GwyqlNDrq{0f-N+&-)-Fd&P&aLd{6U+)ZiBh@$ZU zO2&MdRwop7Yo5GVN8&gleN7YC04ilAW$z3DQXh+eniu1X0Z`CZ$z#A?0_lnoihm^! zItfHhSm1BNXfZtSxA|)t@pt?*p0IaJta&qzx|t`#9OHhgTWv;@+np?x*ZT>D4J73v zaxo73lL*Gi%;rtI(of=Jk4vP5U^(g$HbdgC45cR46goCO1(JjYb zU~^5NNQTde2EZfr!$1pL1f&uqgU!fV?~;V9x(!$VpswX40eg86A4wlIxvKc$Y^cGoY+k8Pu|6GnL)_d8f;(NmF)<4EZsCMo%m9Yk=&A61_0 zdP~A7Ep(8Jel#NZpu>*0_)Ugf45VQ_imn^~S7-DaUz1WGl@7AFHPsOV5f1~f zcI)lBZCRREP;Qw&`$Sl9_9xv8r<<&~6Ia4G7M2y%dPq(7cJ2(wE4oi zW>BWq@tWribd}F&H?S%tMF;hANIoM3{_3Ux#IlPF)1StbZ(gVa)-g~XCQAx-G6XFV zxgL(`=m&AJ#OKV*Z~VA_7UW45h;cDv(~l+yD}I*LPb6xL<4`e8M<9^21m+6iHoKx_ zkyAcgw-ZV7vxqiR_D_=wK%yS<&AM0wQ|ilboooVXML+vvI&mw-QXt2;(4P~U9+(X_ zju{6+DL&&Wf(>_aq*ewq1!B<>H*G8x)a~wbEjhN3l~%KqD45oXwsxf28s>hBn*tEB z4|Y)Kr*UY@EJ*f)GbVqeY#dzJ5(XfkNIwvOFb(%*7zaOzqxk@_B!3{9Xn)(XG>(=h zaco#6H-f|jVG7*vrJrjgjze(-d58e|L*yVI#&hD9P$e6Wc?;E|113mIYRn(}cs04S zpKiucN^aY)?UgW%!+6?nbUS?)^flvh4A{3oF3E>1Jq1=w29u}jM>mCD{E3_2 zFydyO#m}YnS7+3vRjY}$DX*t~i%p)~QLo~pq2bI)-L8L#0uZo|8qPTS(@Dp}jI7!q z8fL&c25yJCac~2FEfYxKQZKhGx&s}H< z4!1%T+yYeAUpkj=%wqJ{^%;d445J?hj<){99~;v+O;X&LW*i`wYUT@zVHey)E**Gf z8R1owJ}T=-fe1ZevQDza3F z>$06C!A_m%FZH#ouYA+3lp2$X_;GDY2RDg{Y@k%)k3ZsXZS6PusXzVH?fR>qra?4A zE<}VGSZ`^#+7iw`*03Jh_ih{wUoy7N)=Q>B6)IBRf$Z3T2d5j7M2!>JWErhL{kUgV zpt=p+_|X=2MOjDnrw~NL9b2^^N?0FFLz_TJ;In>#ZP_c$Q_7~F^_N-L0==+iOph?F zXOIv4)lY3@>D)NtRwOL1i<3u?M(YP;%H!v<%A$ztv`NF5R@);sg+|oZ-}b|JUJm* ze_7`OK_sq?BW-frvfi@Fx{PN?wO}Mqj-mckSr=idon*w zKfwmFh#wGD(+WUZq$9h>GU!J{L^l} zSP@6;u4y$5&-qb&ul|NCVcFgmv!Dsm6hD_AvMm=1X8Sj=WN>umq%V<;EQL}udXde* z!090AfV$t}cGwn~eO1!MJn$<(6GSe!)NlIPy)=mrKLS zh*;zboIaIy+xCc?`&wiL^~Z5SxUl*hL%M0h(5aJ&P zCGFPPVM$kV29=wv9qKO+v@;(LDh&NKOujMD++z}*#&b9=iy2rn^s!G<9zRG&Q9ou` zRl^eYl94MIoydZ;HjaD)&o4&cL6HfFp?M21GCq;WvaXD( zK&m$5(@n(ic#4?uEgKB4A|hCu-!zOb>B$NL(Qs5I?-9A|MzPoCT>J@Pi@YSMVs}S6 zsCm(*(R{THMc?9IDbMv-PHr9eLUK6JoMK*5uRrp z>!)QYwGwLN#CKU(&BLX70i|;5rDf4}D3+uLD=1XnK`yBSCMRK^8K0~m(()(kEb9*Z z=no^|uodB5KMkYbvNV-ujAhvnTj}ZA++q%oYStt6bzqrwEKKZIggb*yIBu<&1{S4y$|LvWNlG`8*MYG%d{~veTdv0{G zOq_IIGo4Lfh9D#%8(9K@AL+axbDWv4*MB@bU*I3#q1J)XHx|o$y{gd+)`p1jn#Eiy zjA858uch!kkV>O%ceaT(c!UQ|JtgcNPu)&OSuckIlHjvb;E*^Bb$;YHmRC4Xq;9-? znAJ!*)DCZC@oJ;OJA^omc1!)#1h8f%ADd?c;RnZhimrjqxTZvp2NVnnHK-CRv{pp+XgvdD8vz^!(BK&)UNWtF zP{F;(sZO~sC1W>U4ix%q)v2dEsV{aay`t~qsbOd?>*jEO+C6lRG2rMlgPWXrcMj6M zP}>f0h>ui`9zRm2ZuBL6W#lx>1;@cilaqxvqDGzY5o9gkf%(*&cOdx~PbKrnQ28T^ z7wxdU)P127aF|kR(`1LkX_`Zv*s<%lUdMqnTMeTw=S4I)UI+1EST82*15vx9=Am9& z>VQtIFX0)-NEnzIKaND%;K3gqBlyuB>Y}~v_a{8;yPfUVpmD*u$mL|0A#@5=WF+Q| zvGl|8juHmO4Q!l1Mwa)!{QbtZZu6hO5mKuCi^8mk$$8*(I2?cIZU@3qa3n%C9HX3o zSLyR)gk?~#aE`YK*m#L-%E z!(c^1XP`7|Rg#)c?-N|y?iP0*E>F*x|=jKP-CMs9fQD9k8n1KdJ2!#E(079N-@IV2Qpn%Y`E&IKI@ zD#tco94GwnaPD>fZqw`P4^9Ld$@D4*jB}ZK`RQ;&FK}t#-x?qs8d=krpGBmU5x$ZG zi;uzUUe34S^AXasW|3cVhO^q8DFah)dGLpic7jKy-f_U3Tjvq{8or`IAN>HHbNVa% zO7GNw4%4jX;Eb1{k1&%4YUhWOwL@q+JC&7o z2c%t6cJ-)pT-I~IwISh{R_6zfJmkPj4zBm~kaQ+zk;w}x?LCOGkN&zP$ zWz)QNl^5BXJjY8Ds~Wsa;}Ph9E-M<+3XnjcCK+Qm+;<6;l0DM zNcS|r1z73(HE^ZZgPFlc?RXH)5pJDTWM3J7WJN~m2Xbi}Igqbpfn4e98t6*?y0j(X zNCW8jt^vytd>!H#M?wlWJI0PR4%Ou3xVO&X7JespRX(o)U)aw#UoF2&12|c8j3cq# zS&ry4F8nio)t3gA29^ev29^ev29^ev29^ev2L7K0{sOUjX0BdJV&DJ(002ovPDHLk FV1j|m#CQMz literal 9506 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 AP)JLCge!2?7%U69@_HLkYTz3F5m`e39+<;v|*< zUW^+WfQX)&ImL{k5M67E;G7FE1{S8MahR6k>rwFqKF%UnyutA_uXysjl~6~8c6iO8 zMLX)gxJP>~t9XkZ9_;bbV6F@}QtUEvyO{4YlLi_k?a~iwgAn5TQV6c%m{OTP88S#D zu|mmBh9z__@oVU8(rh#H~ujUAa!LsDkJDqfJ+;J=i^D4ix_s-YShYe#6^P& xuC-%Hv7sk93Ui*!@d>y8o%?z3j6d|PI0N-zH^Bn~LeBsI002ovPDHLkV1h_nrO^NY literal 0 HcmV?d00001 diff --git a/Riot/Assets/Images.xcassets/Call/call_go_to_chat_icon.imageset/back@2x.png b/Riot/Assets/Images.xcassets/Call/call_go_to_chat_icon.imageset/back@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cd85e308531cb77aa6dcf730aa02c325912ac8cb GIT binary patch literal 794 zcmV+#1LgdQP)G+#2uD`Ez9x+oLK4W z@4b7r6v;kGr#ndw@XE9#7!j?tqRV@dwPvLV@NIR(ib z*Tq!O%QK_M|5A{A#;GtpUg+^Dj@l4<_?+acK0f@8ImUz@sPu7qy^liI4&f}7AFmM; zDlcwC5>TG)@CS*)v~bM$NU@{x{df_mc!TMcXE-q498^QsK0Y>5pRP$y0}8~^`%QQW za_MGvOo)`v5TEi4JCshK>x@98y>ID^LTdz!ohihNa_53;LK)&`*-W%dD01_$RAfdA zo7j&4DbM~^A%1vKscfQYLJH@@JA3o54aiCENy?x-jW!QW8www>nvo>1B#@B#*VP)miTYAcDh0jl&GIK5C&ejPn=K81x(#+12HxuL? zyc4?^P{fD3GQ9SbS!&0G;P`LD%1KN2#LxETO(U~}jFqlkZfTVA^&00D#*`}fm1q7O z5TKsGiqnv>@9cdbV_T-n1I~jb1+(vb(=?%YPRoY*X>Z)61W&$kk2J=owIX%B&^N?S z-b}a+7>b%P(CXxuwV^S5LAOPIp!>=azck>ml7Z zz%gKlxF|_JNRJl#)+|#|B5*FsxD7}V4<%~l%TS?MmlC`#`!u9H(>#?(5r^`(5cIsI zxgW?NqcWl}E+xqoDV`rtr!@y=fpR(O2+cjSFahNX@=Z{Pk|g729;$o`GNF~TaegGZ z)&rk-bp6?tH|&L$!zUCQJ;H}>cM>bqo@g6#U4h0Z{QaxJ!d#hOsFx?amwl4j_bcbX YZ#(L1=yABS;{X5v07*qoM6N<$f=7dGh5!Hn literal 0 HcmV?d00001 diff --git a/Riot/Assets/Images.xcassets/Call/call_go_to_chat_icon.imageset/back@3x.png b/Riot/Assets/Images.xcassets/Call/call_go_to_chat_icon.imageset/back@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8c3dc162521a586f13cc0810ba8e70ab29f6228a GIT binary patch literal 1171 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 QKmY&$07*qoM6N<$f><%wng9R* diff --git a/Riot/Assets/Images.xcassets/Call/call_hangup_large.imageset/End Call@2x.png b/Riot/Assets/Images.xcassets/Call/call_hangup_large.imageset/End Call@2x.png index 8a471f94de3614557b50c1d8b3372ca4a0c78c6c..7b4433f3f8d7dd7603afacbb84fec3a45bbec04a 100644 GIT binary patch literal 7367 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 delta 1761 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 delta 1740 zcmV;-1~d8X6Y32iiBL{Q4GJ0x0000DNk~Le0000m0000m2nGNE09OL}hmj#Pe+GX^ zL_t(|0o_?$Xj4}lKQ}i?lk_8POsyYPqxM0|rm})E2Qz(e+gmq5ir~YFu$R4T47R6D zJN7chunhM$bbAsjgZbtVW(QN8bLhZIWtEn-MV(!3ESi2K_w4t(IXB)$)7+b;N$>}M z&ds^K=luR3=YRg^R1+nFlroNHe<#S391l}f!URuGyjt=03PPm~(d)6-2D_@XQm48yp= zIYo&;%ioaY$3@Ovh@7X;d&E3lx>J-N@r8v2&RtN6yuhOBkrf6E_#qnMe->IYncN~X zxw_JLm`Efd`H1EVAuSLHe1G zS9PueI>M(j91dS7G}>=he{YJDr_T#F=z43f=z4RnC>B`E`}_L(emQpRm|^v07qN1U z77PaWIT`HS&zFT;oI8J6JW0-GfAg8+oc`&eqwkSec7i-PXAPfKptrYIQ@?jP8SKBQ zN1_-!NzR+?F8Ts*W(=>9j2kJKCksKI5=o3f8h0cH;NU;ljNL9 z-mMX!z{?0D8rfjP0Mhb+cJ}O9Q!^)vce!Bb6zRdn$B!TDBE!?{uy16h2k;^+subjQ z_wL?{cC7@; z`!V&nIE1h{WIJbOW-d7ytQZRtp`hPvqmi)q>eKhc{?|Lip|?97eTxia8aEb;iGv3Z zntk>~OP9#;@o`7R%^R55Em%e{eC#;%PN&$v&)Ha`qod~be~-ONBJGL33j&gl%ohE9Ov*j{E(7YMO-1A!<_gnuw{1zO92q zk!!z}RR$E9XX@+gql%+X6C#wX=j{V@ZR%9-V$bA zetzuu@#C+8Qwt=lI6iYS6UrslI-sl8-MMq8S5_FPl0PCB#Q!SA%`fs?MrbOwf=W|r zyy4!xdnaXuz`4PJ<^7sQptZF%_)PrgfSUQ6o14vSe}vQ7dbFFdxm}TE2JWR;@Wg0+ za&_$v9A!?}hgj%&0 z)+#q{nV6XPUal~(2c5!PTRA5#v^aN!>0NPhT<+5gT6HA0nUac?(uUb5?HeKgce*^h#&$=2|!{na+{{B5XcI?=V^|l=f zuJ`$Tt++*?`*{$V!9gj3a(L+e{rkV)zI}VBtE=k@-{D(cFQjK@XVa(v7VtMIbo1_o z?E*ii!n}cSrGV|dbzkJgan1*e`(Pn2NcoVNEG6`uzqfxcL6Qe0ldP?kP}Bf%R+MQ) ze|R2qq%a4cQ^s${;GOA%ZW8Ra#LnAZ~Qj6PUZhsC@gqJxO#W{)DQ*_E({gII(p zw0c@uJ%wzu01u@Q^J$0y?@O@+d24Vdu+9x0ScKNLi#?n?h++P7#PVA1dA56J#b6RtTe^9Q!;J>>bch>{Dnqz6A=SP-`PQ24dD+1M~nx2zNL31uc1PgCn6tzhz-VjgvXs=E*W;fyF^Q%~+P`B0O)~ iTGMmN+C>}hg~I=8Q1g4n3N_0B00003Q_fkK4`t zRh_xFyKg_{p5Ohx-}imzoa@OY0N?lPvH1>Klit?p{U&`#y>6*Egx2n~Pte-*c8}+I z?NZ|Kqyzy%EW+m7XxtiNxNXzQdz$Wj!b`#^gGt<5hkto0MFFGMcjCy4O}zxc5m?Oq9y z9pGdxNBhbzJ$!|Bp9CC%)gXSt96u(()fd^qA+#R`H3AA8K|qWqY}QKY6C)Mt&{hRa z%tjn2?G2dFZ%c@w;L!Q==a*Dh zSAQjWM&1e1)zx)Pd3pI}$z1`hRB=cOpiA=UVmw%l+d+>1l8_w3L6anO32RT1FSnDA zFCj6wWqNt7gvbV%SX+;+FF8g|Er=!t5t1XjSliRnbD!kl0?+jq(0YXA$PtiO{9##H z**eJ~az+sCBk3mD|wMR(c?uUTTD}*16BQxkx1kP2~jY_VHLV|(_;ng(1_~xiw3TQ)AGi~L{ zl@Y%H<4HVzF}4vfb-f=Vkbq#_CJ8T*KZ4+UO&UD{>#@WS5ooZF%*E{cSgr;Zwn;(+8WgM-E?ihvSy{<~UdARQBSw)R zULtOyx%yuT2~re5U;Q7#-szGch#|?4$TH+G*N_9IN_u*F?vaojMFVu(lrv|}EV|>4 zJ2G}LLw$qiY$Nb%{~eA}uq{UzsB#A)H&CN|AIf@sk^4|9T z`|oqS4*S&*V?ZM@V3_M`WokaCp`l@s!_82vk{m{`_DhrjT@1yk4voAozx=W(pX4BdN)BSnJ0Hq>+dqc0N^ zYojMU=*)h3koE=RU5p8;si_Gwr&++qAjL|MBM926s;Y`>+N=IGh9KQ>=?J2Va*STI z36k>i^1Mbbr3ebze_QiArCWjkl>gbMk$LmxnWxf*GX0ts%_?bZY>a>)dDS1K1nP}n zffx*ng9L=TS9AN(M;|FGVrp%v$E76*tp^%+y{Ddfs-8YeLS&3|dLt;{5P;WTe|_|v zIdjxwYR+`|khD>Z@kujg%wQ-K>W^W7dSlIR|06IiB^{7<|5jI5*EYBrPg{~c3`r%3 zH8WsV@Q1Sa{`AdC$We^aMh&TqqAT2@2CYT;ophJQzv>+u4KXKPCqTh_FOAwni?dJ+Y&4*YdSr8ILA1D_tTu_sKL6FH3q9l=;--7nE`4BS#AmSWs z2%;Xs^hk)(h9-y|Qff*o?(mSLC??gspyD^!ki-y0jxl4#aO3uK(i&$;1TpD#{-Ho^ zXlRfSr48y#z3YxJv#%S1c+LniF=0<@YinphN*sDZ{@_Cn!5T{z{yA~tg!zCD2~n~j zLB@_9YYD<6sVg;-TnvhIo~iC>crZc5kv9&JF=DY;b9;NcfAZu>pJ@$A(IWh#2%^1< zdIAMHIdtey>cJsO5V-j19aKM~&)u4gg(66rr4rQ>_4V~!>fx}2C`phY>|?-dY;3g8 zJL!%j3z7u*CEl6R13?Nq-?0dBS;HtP5_D({A}uW~KF9x<7Yrv{3!-2&h*@q51PL`r zhPZM5pUF>uv|P>Q4Klv@=9|489UTG$}U#09L#UI~#guDyDOtbFL6 zKwFcpt}b)&n*y!tN_vZR#+)#UF|Q(v>etoPNn2Z6s6mDat^ly=p?l>TkR^yXdh{qS zejhHzrv}m9!_3$1jbi$nno0AsVZ(;cB*d^mH}e48O#oK{@X@z>wMbPOM0*ckFZ-dM z?{CPVSrWj1_St9K7%xkRivpL62$C*gpFa28bEhF8s6mpV6n%4szAnZEYBBbBl>S2< zk_7}wmq33g_aX@w!!S2#RGFFapPC0zFEXpfRQu@Bqt$cJAv+{QR*+7YeD|h#l4tm+ zv+d*#`j{ij{Iaq#)z^But>uCpFk}Xa%$qmQKXvL<(x){yH}9J`aiZiCSI(GJ@Fk~) zg2@xdN~SQn#4P=g>FNO4z>yMnwlDc+sW%xF`D6r|Nd_SOA?af&yg`LLiopzAAje}nKSkY2vi?QGPSSkFqQ{V z`!0mOix)4pb7SxUYP2&4FIQGpMoynT{pBsU-11Y&BSutL$zN$p@^$NJIo)|y3JH>S z{x!4Z`?oJv>GWd7rcIkxzWw&wZODPd&YwRYN8kEzFL532CWpLchXmoWQ|9I~Xi*53 zXm@va8DiyfK1S|-b9Hs~0tr#HfP49H#E21pgWVWfHyfhX7@mt?e);8bl>6g4QI;IV zn9LdLG0-9$K;l!2h@)`9u-{LfJUJvt@xniR`0&4*ebY=oLxY$ch_xa~B2{{YssfW` z4Gj(UgC2kU@lD|fv*O0qty{U0ja@)j2O}=}Uo@5O1r~(5gf4|S;Sp#f5y><_^@eZ+-lv|^d{!kW&OfT!{fmfnjp23n4imx&;DWSIIfW5yVQlp}*$mhQfGUK)a!7KILpz&}MbVag55AXZ-s#cFW@wU>Q} zM!$#M9=B1TqL1lvC|Z*=Cy``MNHga}D_)qd7sqey+_`hLgeWHX2M-=x!yP8b_!!nB z4*lToiOW7mPDiRy1F`ZcYyekB};Z7{B4mCMFIBJ?Afz7iE|?%4hTcP zs(yy==VVnBTF-n~DAB$%lC zZVVD+^@vbwuwRV?S%vQFwD;9b#~3wvSI@MIz(+-4hKz76*B_>|$l0@JHzC1ty@UuX zU_F{EDk^S7KlPxj--8Uft3l!rr#-CTGWR9D7RI7aNJGjwtKFq0%ao8oZAO`-9Xob} zS|r%;KltE-hp>$!u<$_+qa)p|%$+;8Pm0~3KcABn%}B4yDNAXzA{#?15=^wUwY`Q! zCkaAp5rahNK?T=XkC<-mU8e>XsV>ayDwrVm11$4E3iaHJFTVItm|YDXVzJoimtTJQ z7ufZ6U&TQV6=XNqxI z#*8)aaXTeMAV6U{Yu2n^fE;{i`Yf*NYH>aORK4cT!%c^NU5tAlGx#o=sZ>{^8h(U& z{L)J={TybkQ$iFJbSWq2}6XuN? zHHwp}%=601w6wJBx%Jjt7sAhFJ|7^&uz_M+%l-G?|KO*eetNE_r^n>1l(m5Nh=DL_ z-(28B{oJ8g5YZpVNi|mWB2^o6n8~nL{eX=dH+DS#{PRD-4?ZFx@&c0MnP;B4Yr}>O z?X(_j;v_d)TU+g8-G@F>6GJA+pz!rdcpOXw6J-VyaU8)Y4kp5OEV8SrMuRq`s;a7K z{rdH{a%~YmL{5Qo-0{Q{PuzraJ{4^W&cCU-(1NoJKN7leggAqO^xWI*EivXh1QDl* zhsJ^rSL-E7)QB^*N&1IQMVj{~eu!Km&T~w1;Cwg1a!i6HS0ly{d0sYp^yoTWl&jJg zwp*0T9zk4^NN>uWB&pVwUXD0prFWeEft)VZgf{JyPd@p%A0iis@7}%ppLikab3IuS z)?*y2?)8av9oRQ&NTDW3qB)~k8?S%pWHP(5vT}Mz zlB~m!W11!i$wBu%9$~FBD7dC&dmn?EKt8R=PN2C*jyNl1CKY#O{ zJ$oLO5ZQo_bNR^i*I&=+3qCGFBTCh|M_6n7LJtUvGbskkkx}$=F-USXjuok;&y!v~ z!ojh0HA;`5O{2dIh3oJ^LCSN8b2(k>4xZaaxb+DL61bp?8jP&nzUx|)_3(!wOf$A1 ze(z#4ijlA)mc7V*SPKGEXX9|PoX6gHOKBsmVp+4s$P1GWZAR?+G&-^h%!^F`l^yQoiZORNu zlxWq0X`KE?Z1{^deZ`6u*B&`?WSt*kKp^wE_Rc%+yq02L5~8#T=W#N0hZ3ct^Bu^R zjxys+B|#1~&qd$vBl}_P5MaJgMKvUe{$bVpq5Q#;&?6>^Hj#0<=R&dwc(Iu=QS9LjQ#9HPTnic*q8XR%3+S|?j-MQJuNrrBVYYrb4< z5`iU&pu%W}1Art^n7k+oM-lwPQ5O94u^udnhb!iRNs}hshwyBqT!P?u8i@X1UUk(~ z>qLj76!>~H0ng%(;Au1%8gv&!Y5&D^qO%iWiP z+o3yo>#eu$(*L*78*YZwjaJ6et)!;Wd9HP|65;vxv#2?;EnZyVYWD542_({@ZEbBv zuSDTXBM9Nl>vq(d^Iq@ck3U{9ckbK=Dk>`SyAEfL!Mw)1@4oxU(xprPNcTz$s$X*F ztfL607A$xjSIr{S9v%Ui4oH!MuH?-(-~0jo$0Z=gE^K{G z4yMh`412e95#x+FY)Ot7$$|I8jvhVglEaWmWC)|gGC{7wA8P?%`n-b&4@U6MMG(4q zdO3+GND}39(raPt+GuZr!nC$L3|rmZ{PI z=w#8O@#1>l9Ve=Y!fZ4yq8Qu|FRVB|gBM!7rKKglaN)w(_U+rnd5=L>HAgPvY zB1(}2tXI(u6F6KTkNy(RQ?sO!#gN2xIT3v_y+m%jcsOv;yVr`4T|DTKo~6 z`Jec$n_)FNH3{6Mu5ELom87C4S0aQMH3C&x3yv$DHf>s5&!=@KKNS^J46X%J#1XG% zu#s84$cWd=BvIrWug8>7z*3|&iO!jrV;o zEi=c4>rXh#Y`QrUQ!gk>*+y~lJcP!yCK1==XiH)&iqExNX|nlv)22vmIen~$*~kCF^;uNm zjmxFea&Sy3w2AxKIYB;BuwI&d8?A7eD|R$$4vHu^5p+dSTuEHaH!3N~w-jxnKFhcr z9SztoGmmjnN8Ww+-Lq%Snl&5m9|^NP8x_xyXro9TLZEsz$JDf zx3j;wx%tSeufDopyA2+a)JcZ4lF%2tKIlHoab`xMn5hYDAacx^JImF7VmK#OgmSPk z*D&RWNgxLYt(L!H$4p1{PtS`&yEC)kJWKqPCJaf$FjO zey2kR{oi$jVU9EJ@zWevkkr%&N~eRwK<; zoX3_R+9g=a<3tzkd(`88tcCAbEh9M9F?!5~oBn1_!w1!}HGSX4E4 zHcfuR6}NdqAqb-2_pV|@vUn#?o}@J~B#D3|sX9e9?RxrH5?8D6vF;q}iX5wwM1qvp zlPrs4LHrcrs7^A3At6XmY+X|HA&0xqHQ$)mfC%M!VGLh=hOcwx%;Ad1silj8kb}ro zqHIuT;i}dJr|2?flp!2X6qjej;~0FgN)o}Es1Z{fb4h>A=WsQuW6Y#2(c@szOaUvd zlTUGzlw&yQB&O6cIx(l7;8qZF5CyX!22PMeSc?FnD2sqdLFGa~8r~r~0`VAuIrcyn z4`PjXp->jXu`KD*{o=SK^F2J_5p(rR%DFJsKyU5O)t}|-r4`%`OwD9cc(T@Ftc4;H z*8|gcRY;mZtydc4O?|lJxsU%-v=DW_C+{dYK?sK=sS%HAyb}_xEO+dQ>U{Wa4`i{f zhFXQ6rEg^-(rY0-T+tpvN%wOV7)^-I*=YA*e^$ydh7{&CU+W3`7$jwKOlb>NR6z>Y z#c*BpxD%NS)Y6LKLZDzS#)V$ZDCuNM;;K^5(d^Ro@SY~(m}-#2uGj~%aQ&@rbdX(1 zhih_~eUQVLdHWu^0MH>y6OajD7FJdcMj_m@ad*=RY&Os+tg!R z)jepI1SAhTm{n4~P6BZ)4gI<~uGL6-$!i$*W{8yEqASn z5o4NM65}@FZYEX=s5SaSAY9B4;A#iekRK2TTlJjdf(Yeu&`BO|?V9Gj?sKX8=5ea4 zQO|J+ClJv-ul0o5N7k0fD@Gzo?gFGxH;SY+hp zV`h_NZHhR~Ry9K;-RZWa zl0eTQG)1!tO-6GU3^VrDRHogD(m9V21f=BBU(?NJxy}!0%n6BDF;%jir&^vbjs7s57r5Y2STsO1V89F+v0# ze)8a5J3hs^vyvr`(Fc;;;p%w~ZgL4>=9{?gPD&J)GSgLLk|Gv8XUc%bOr|*?j5I=o bNP|BC=Fpo(`hvEw00000NkvXXu0mjfQ#u-o delta 4718 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 ifPjF2fPjFy#Qz7KNZ64Bg(DUK0000wJ^h&6 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 diff --git a/Riot/Assets/Images.xcassets/Call/call_video_mute_on_icon.imageset/Video Off.png b/Riot/Assets/Images.xcassets/Call/call_video_mute_on_icon.imageset/Video Off.png index 243928c1a0945a001eb996d9db2f1de3b52a3647..89052530e5e0d34cfdd082dacc88cacb1bbb40bb 100644 GIT binary patch delta 3076 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 S=S)oi0000X1q96h!I0Lf- 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 delta 5229 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

Cn?IL^umD&YW-Yy z+*;Q>?b$?`-s2O5r<4&(AZlSpL#|g`L)t!fO)<=hyf4vM?CnWF3B%BOZJ#U}$F!kR n{apVtj(`!5*m1JQkr@6T)6QDAP_4*f00000NkvXXu0mjf@2ecW diff --git a/Riot/Assets/Images.xcassets/Call/call_video_mute_on_icon.imageset/Video Off@3x.png b/Riot/Assets/Images.xcassets/Call/call_video_mute_on_icon.imageset/Video Off@3x.png index 975156a5046b395fbd070a4a82c3ca4db663a51c..894447ebc7f800caa5e42b57d7c5f0025b8fccac 100644 GIT binary patch literal 13438 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 literal 8991 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 bE7kS`ER8C2b@;1600000NkvXXu0mjfbcT>M delta 294 zcmV+>0onfY0?+~>iBL{Q4GJ0x0000DNk~Le0000O0000O2nGNE0N{5$_>mzre*oo4 zL_t(|0qs=L4T3NbJ#>MNa3e4Rn=pq{)D3h4-2gUVg!=0jZh$3RV>PtBJL885FL{u_ z^}Tm32f&6efu5b`lwe0SYPgJepp%M)1r0+yumK?ucXe()1)23!~?ev6kKLeC6ZWiHu4nMd6%)C6iHWfV7uGrpByv$1ROAK>rt1g2aEO|JZ5ssI2007*qoM6N<$g4C#bLjV8( diff --git a/Riot/Assets/Images.xcassets/Call/camera_switch.imageset/camera_switch@2x.png b/Riot/Assets/Images.xcassets/Call/camera_switch.imageset/camera_switch@2x.png index 3f526d9a83747fd214b5124eb75a3171a3f9cfd7..a1a67cd0031dc94baea650e7df49cea0fa41c716 100644 GIT binary patch delta 608 zcmV-m0-ycL1cwD7iBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAl#wAce*zpy zL_t(|0j*Ynal$YRl)FGfCrCG-U7+a(To)iSumDWZG666F&;=+HG<1Q634ktuDiIk> zupKAxcYnUvvR{@Z#|mly5hH5a#F)4fu9Q+cxD`kwCiaOry1`>(wuPqP-4G{OA7h`e za)>3=%!rZE&0(7pSHwT*yC*&oe_x;ovqnzrQK;v(#bfa*lJBl1TnYH2!A$Wy?0a6z zW}J#aW)T}|M?xUNgOX_C5-ei?4PX)7oH^|f9Ksc#`AVXrF{%>Gutq2yyKLdyADLQISM7b>1(sd{$egC@_=jYa4>D%23gT?e+bg9iw}9fZU8M+i=? zqoAa+&o=XneL^6V7K7pv-ce|Bo1rAlH?dV3Iwp;*(-xM&5nAfS`f~WWZJa? z%i|e8DK>^jgC?SQ`FpwysbQSRfGMg%ghhy*{wRw`crOKIVptHa*tE2(QR;Q}|cJ uZ4TsEoOfKcUhv;S#Pw4@60V`5^5HUg6fcg|$m=q{J z9|=Zz(u+Xk?DzaT+W-Rw3>XkQ63w}0t+~69wTV&a896Q&eTq4HLWXehmNWE#3UUT$ zNR1$bW5TM|J1HO{++_v^9>GHje|bEkBjk{8{m$mX6u6rBAQMWngx^};Czo(?h>A$K z%i5Y)MkKn;^1*zN#<%9D=0i+h@NWnit2N|$?cZo?%STM>6GEh2|7tAv3P|BF`K?aBk z_PtOs%P0b3gAKToT0!=@c%>5q#P^no#fkT7)7q(^QL&cDafp!-`evBoaKaWs^@Kxg1yE#3_7!oU_0gAA+@FTUuZ5c$=jH4)1d kBMC2Y1Ah<>7;p>t1=%t|cKNF$>i_@%07*qoM6N<$f-7BOwqvWEe6{^1Y0pSk@H_=^^lM@Z z=n=2^(FIag_F(gd^g9~QaXLBQ`beOT7D{47V)wBOu1*Mdt6|$wA#tn*;nqA)0U`p| zP+=t?Tgm`5YrsuF%7m)5fDNrI471&zHefNtdgMorKOgzC%lkr~TuT9O8NPpLhL!^U%J99=*21u`8pQ-LnQ^Pp z+>cKf7Dp*iy#rw8LJj2-f8}N{&i9Y!F&(HB=q@`wh7(F1@o#eh{qtB$D+}?vNf6L? z&KfssLAs80Aibjvl!EjfFJ8KId$F5b1WxRS7SKPBy>~TMx|dkEZ%C{Hp-iFKRUA?S z7X-AKFKaw(?7N8t`-=FacyWBi=aC8~UE?u!-ZRL*ZwOe6 zc$dDwTh#ggK@<3bxW?zVJ<`u_SHz#+9+-N5Q$VJk&6emtO6^z}4h7FBqxV+B8W$-C h)MNrZY>Ra{U~fj{Bvc5Tur>ey002ovPDHLkV1h+}BIp1B delta 851 zcmV-Z1FZb61^5ObiBL{Q4GJ0x0000DNk~Le0000;0000;2nGNE09Ea?N0A{ke*+Ck zL_t(|0qvXJbrUfVg>OOw?f_8%p@Z#!bP#s{RN$q8m?f{z#3=OcR0`tlXX2+It zHnR37*%?WjGv7HkC;pq6y_U4vl?*6~q9}@@C`v+#TFY8ht>Z}TYOQJ+yZ~mk));R} znj@K4F1ua@WS0D{! z&KwaL@~wrCJZtr7g@}~sE~X58#vq+JuA3QTib32nSDUDYEYD~(!%c0D(+(MNQ)`2K z%yC-V+Ss6GxybZjW464zkU0iol>W8)*gF=Pon*`d6eGC!;5H#*}#agwEK{9U|76#2|xl z7(|+wUfF+Qvaj_f@O)wQy7Am^oX3G}IMk_oet}Nf#$cQQYeo|P^VI`_zI85B>G>X6|o0w z9zYX`({kzMkQlJp13DS6_#1&72QNn!OLenzFiUGhkf4|ZU?^aEg0ZzJ?{tRe~i(J3_}i)F6LBu z1((e6`<8YpraY`g`)W?)3W4|~!YmkbuovA_;T0}1)AhTW;f&8cNc;GM=@;;`@*Z!% z%u!JOo*k*3XQhq55Qxnlu&sE9#3ctw>aKxE(56CLQsxozPR1b82A5DvsuCPFWNU0H zx Date: Wed, 17 Feb 2021 16:49:48 +0300 Subject: [PATCH 016/194] Remove PiP button callback --- Riot/Managers/Call/CallPresenter.swift | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/Riot/Managers/Call/CallPresenter.swift b/Riot/Managers/Call/CallPresenter.swift index 8185e7c8f..81dbf995f 100644 --- a/Riot/Managers/Call/CallPresenter.swift +++ b/Riot/Managers/Call/CallPresenter.swift @@ -478,8 +478,13 @@ extension CallPresenter: MXKCallViewControllerDelegate { // wait for the call state changes, will be handled there return } else { - dismissCallVC(callVC) - self.presentCallBar(for: callVC, completion: completion) + if callVC.mxCall.isVideoCall { + // go to pip mode here + enterPipCallVC(callVC, completion: completion) + } else { + dismissCallVC(callVC) + self.presentCallBar(for: callVC, completion: completion) + } } } @@ -501,20 +506,6 @@ extension CallPresenter: MXKCallViewControllerDelegate { presentCallVC(onHoldCallVC) } - func callViewControllerDidTapPiPButton(_ callViewController: MXKCallViewController!) { - guard let callVC = callViewController as? CallViewController else { - // this call screen is not handled by this service - return - } - - // sanity check - // do not enter PiP mode if not a video call - guard callVC.mxCall.isVideoCall else { return } - - // go to pip mode here - enterPipCallVC(callVC) - } - } // MARK: - UIViewControllerTransitioningDelegate From 80c227729b764b0644a36dcc0d0c8c65fd1ab988 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Wed, 17 Feb 2021 16:50:24 +0300 Subject: [PATCH 017/194] Remove old view outlet --- Riot/Modules/Call/CallViewController.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Riot/Modules/Call/CallViewController.h b/Riot/Modules/Call/CallViewController.h index 54ef33aa6..f3366c473 100644 --- a/Riot/Modules/Call/CallViewController.h +++ b/Riot/Modules/Call/CallViewController.h @@ -21,7 +21,6 @@ */ @interface CallViewController : MXKCallViewController -@property (weak, nonatomic) IBOutlet UIView *gradientMaskContainerView; @property (weak, nonatomic) IBOutlet UIButton *chatButton; @property (weak, nonatomic) IBOutlet UIView *callControlsBackgroundView; From f0e188ba84cbb686b7d31c0144e8b88749eaedd5 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Wed, 17 Feb 2021 16:50:46 +0300 Subject: [PATCH 018/194] Update icons & more --- Riot/Modules/Call/CallViewController.h | 1 + Riot/Modules/Call/CallViewController.m | 10 +++ Riot/Modules/Call/CallViewController.xib | 92 ++++++++++++++---------- 3 files changed, 65 insertions(+), 38 deletions(-) diff --git a/Riot/Modules/Call/CallViewController.h b/Riot/Modules/Call/CallViewController.h index f3366c473..763b22ce3 100644 --- a/Riot/Modules/Call/CallViewController.h +++ b/Riot/Modules/Call/CallViewController.h @@ -30,6 +30,7 @@ // Effect views @property (weak, nonatomic) IBOutlet MXKImageView *blurredCallerImageView; +@property (weak, nonatomic) IBOutlet UIView *switchCameraGradientContainerView; // At the end of call, this flag indicates if the prompt to use the fallback should be displayed @property (nonatomic) BOOL shouldPromptForStunServerFallback; diff --git a/Riot/Modules/Call/CallViewController.m b/Riot/Modules/Call/CallViewController.m index b911624a6..0dec50e13 100644 --- a/Riot/Modules/Call/CallViewController.m +++ b/Riot/Modules/Call/CallViewController.m @@ -145,6 +145,16 @@ self.localPreviewContainerView.layer.borderWidth = 2; self.localPreviewContainerView.layer.cornerRadius = 5; self.localPreviewContainerView.clipsToBounds = YES; + + CAGradientLayer *gradient = [CAGradientLayer layer]; + + gradient.frame = self.switchCameraGradientContainerView.bounds; + gradient.colors = @[ + (id)[UIColor colorWithWhite:0.0 alpha:0.0].CGColor, + (id)[UIColor colorWithWhite:0.0 alpha:1.0].CGColor + ]; + + [self.switchCameraGradientContainerView.layer insertSublayer:gradient atIndex:0]; } - (void)viewWillDisappear:(BOOL)animated diff --git a/Riot/Modules/Call/CallViewController.xib b/Riot/Modules/Call/CallViewController.xib index 821dfd614..24915c9bf 100644 --- a/Riot/Modules/Call/CallViewController.xib +++ b/Riot/Modules/Call/CallViewController.xib @@ -1,9 +1,9 @@ - + - + @@ -20,24 +20,26 @@ - + + - + + - + @@ -77,21 +79,54 @@ - - - - - - - - - - - - - - - + + + + + + @@ -280,7 +298,7 @@ - + @@ -315,22 +333,8 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From d6cb67a2df1d398c87938b28587a22af416f85df Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Fri, 12 Mar 2021 04:04:23 +0300 Subject: [PATCH 040/194] Add call actions --- .../Categories/MXKRoomBubbleTableViewCell+Riot.h | 14 ++++++++++++++ .../Categories/MXKRoomBubbleTableViewCell+Riot.m | 2 ++ Riot/Modules/Room/RoomViewController.m | 16 ++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.h b/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.h index 6bc374644..639728352 100644 --- a/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.h +++ b/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.h @@ -65,6 +65,20 @@ extern NSString *const kMXKRoomBubbleCellKeyVerificationIncomingRequestDeclinePr */ extern NSString *const kMXKRoomBubbleCellCallBackButtonPressed; +/** + Action identifier used when the user pressed "Decline" button for an incoming call. + + The `userInfo` dictionary contains an `MXEvent` object under the `kMXKRoomBubbleCellEventKey` key, representing the invite event of the call. + */ +extern NSString *const kMXKRoomBubbleCellCallDeclineButtonPressed; + +/** + Action identifier used when the user pressed "Answer" button for an incoming call. + + The `userInfo` dictionary contains an `MXEvent` object under the `kMXKRoomBubbleCellEventKey` key, representing the invite event of the call. + */ +extern NSString *const kMXKRoomBubbleCellCallAnswerButtonPressed; + /** Define a `MXKRoomBubbleTableViewCell` category at Riot level to handle bubble customisation. */ diff --git a/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.m b/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.m index b1fa86843..589bf9e5f 100644 --- a/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.m +++ b/Riot/Categories/MXKRoomBubbleTableViewCell+Riot.m @@ -34,6 +34,8 @@ NSString *const kMXKRoomBubbleCellEventIdKey = @"kMXKRoomBubbleCellEventIdKey"; NSString *const kMXKRoomBubbleCellKeyVerificationIncomingRequestAcceptPressed = @"kMXKRoomBubbleCellKeyVerificationAcceptPressed"; NSString *const kMXKRoomBubbleCellKeyVerificationIncomingRequestDeclinePressed = @"kMXKRoomBubbleCellKeyVerificationDeclinePressed"; NSString *const kMXKRoomBubbleCellCallBackButtonPressed = @"kMXKRoomBubbleCellCallBackButtonPressed"; +NSString *const kMXKRoomBubbleCellCallDeclineButtonPressed = @"kMXKRoomBubbleCellCallDeclineButtonPressed"; +NSString *const kMXKRoomBubbleCellCallAnswerButtonPressed = @"kMXKRoomBubbleCellCallAnswerButtonPressed"; @implementation MXKRoomBubbleTableViewCell (Riot) diff --git a/Riot/Modules/Room/RoomViewController.m b/Riot/Modules/Room/RoomViewController.m index 611a64390..171c67fd5 100644 --- a/Riot/Modules/Room/RoomViewController.m +++ b/Riot/Modules/Room/RoomViewController.m @@ -2390,6 +2390,22 @@ NSNotificationName const RoomCallTileTappedNotification = @"RoomCallTileTappedNo [self roomInputToolbarView:self.inputToolbarView placeCallWithVideo2:eventContent.isVideoCall]; } + else if ([actionIdentifier isEqualToString:kMXKRoomBubbleCellCallDeclineButtonPressed]) + { + MXEvent *callInviteEvent = userInfo[kMXKRoomBubbleCellEventKey]; + MXCallInviteEventContent *eventContent = [MXCallInviteEventContent modelFromJSON:callInviteEvent.content]; + + MXCall *call = [self.mainSession.callManager callWithCallId:eventContent.callId]; + [call hangup]; + } + else if ([actionIdentifier isEqualToString:kMXKRoomBubbleCellCallAnswerButtonPressed]) + { + MXEvent *callInviteEvent = userInfo[kMXKRoomBubbleCellEventKey]; + MXCallInviteEventContent *eventContent = [MXCallInviteEventContent modelFromJSON:callInviteEvent.content]; + + MXCall *call = [self.mainSession.callManager callWithCallId:eventContent.callId]; + [call answer]; + } else if ([actionIdentifier isEqualToString:RoomCreationIntroCell.tapOnAvatarView]) { [self showRoomAvatarChange]; From 7fa59e9648252637d3d77c404b6ecafea8c2da71 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Fri, 12 Mar 2021 04:05:10 +0300 Subject: [PATCH 041/194] Refactor bubble cell, introduce viewState and implement statusText --- .../RoomDirectCallStatusBubbleCell.swift | 331 +++++++++++++----- 1 file changed, 234 insertions(+), 97 deletions(-) diff --git a/Riot/Modules/Room/Views/BubbleCells/Call/Direct/RoomDirectCallStatusBubbleCell.swift b/Riot/Modules/Room/Views/BubbleCells/Call/Direct/RoomDirectCallStatusBubbleCell.swift index 8a5391c8b..2d7d13013 100644 --- a/Riot/Modules/Room/Views/BubbleCells/Call/Direct/RoomDirectCallStatusBubbleCell.swift +++ b/Riot/Modules/Room/Views/BubbleCells/Call/Direct/RoomDirectCallStatusBubbleCell.swift @@ -16,48 +16,123 @@ import UIKit +/// The number of milliseconds in one second. +private let MSEC_PER_SEC: TimeInterval = 1000 + class RoomDirectCallStatusBubbleCell: RoomBaseCallBubbleCell { - private enum Constants { - static let statusTextFontSize: CGFloat = 14 - static let statusTextInsets: UIEdgeInsets = UIEdgeInsets(top: 8, left: 8, bottom: 12, right: 8) - // swiftlint:disable force_unwrapping - static let statusCallBackURL: URL = URL(string: "element://call")! - // swiftlint:enable force_unwrapping + private var callDurationString: String = "" + private var isVideoCall: Bool = false + private var isIncoming: Bool = false + private var callInviteEvent: MXEvent? + private var viewState: ViewState = .unknown { + didSet { + updateBottomContentView() + } } - private lazy var statusTextView: UITextView = { - let textView = UITextView() - textView.font = .systemFont(ofSize: Constants.statusTextFontSize) - textView.backgroundColor = .clear - textView.textColor = ThemeService.shared().theme.noticeSecondaryColor - textView.linkTextAttributes = [ - .font: UIFont.systemFont(ofSize: Constants.statusTextFontSize), - .foregroundColor: ThemeService.shared().theme.tintColor - ] - textView.textAlignment = .center - textView.contentInset = .zero - textView.isEditable = false - textView.isSelectable = false - textView.isScrollEnabled = false - textView.scrollsToTop = false - textView.textContainerInset = Constants.statusTextInsets - textView.textContainer.lineFragmentPadding = 0 - textView.delegate = self - return textView - }() + private enum ViewState { + case unknown + case ringing + case active + case declined + case missed + case ended + case failed + } - override var bottomContentView: UIView? { - return statusTextView + private static var callDurationFormatter: DateComponentsFormatter { + let formatter = DateComponentsFormatter() + formatter.zeroFormattingBehavior = .dropAll + formatter.allowedUnits = [.hour, .minute, .second] + formatter.unitsStyle = .abbreviated + return formatter } override func update(theme: Theme) { super.update(theme: theme) - statusTextView.textColor = theme.noticeSecondaryColor - statusTextView.linkTextAttributes = [ - .font: UIFont.systemFont(ofSize: Constants.statusTextFontSize), - .foregroundColor: theme.tintColor - ] + if let themable = bottomContentView as? Themable { + themable.update(theme: theme) + } + } + + private func updateBottomContentView() { + bottomContentView = bottomView(for: viewState) + } + + private var callTypeIcon: UIImage { + if isVideoCall { + return Asset.Images.callVideoIcon.image + } else { + return Asset.Images.voiceCallHangonIcon.image + } + } + + private var actionUserInfo: [AnyHashable: Any]? { + if let event = callInviteEvent { + return [kMXKRoomBubbleCellEventKey: event] + } + return nil + } + + private func bottomView(for state: ViewState) -> UIView? { + switch state { + case .unknown: + return nil + case .ringing: + let view = HorizontalButtonsContainerView.loadFromNib() + + view.firstButton.style = .negative + view.firstButton.setTitle(VectorL10n.eventFormatterCallDecline, for: .normal) + view.firstButton.setImage(Asset.Images.voiceCallHangupIcon.image, for: .normal) + view.firstButton.removeTarget(nil, action: nil, for: .touchUpInside) + view.firstButton.addTarget(self, action: #selector(declineCallAction(_:)), for: .touchUpInside) + + view.secondButton.style = .positive + view.secondButton.setTitle(VectorL10n.eventFormatterCallAnswer, for: .normal) + view.secondButton.setImage(callTypeIcon, for: .normal) + view.secondButton.removeTarget(nil, action: nil, for: .touchUpInside) + view.secondButton.addTarget(self, action: #selector(answerCallAction(_:)), for: .touchUpInside) + + return view + case .active: + return nil + case .declined: + let view = HorizontalButtonsContainerView.loadFromNib() + view.secondButton.isHidden = true + + view.firstButton.style = .positive + view.firstButton.setTitle(VectorL10n.eventFormatterCallBack, for: .normal) + view.firstButton.setImage(callTypeIcon, for: .normal) + view.firstButton.removeTarget(nil, action: nil, for: .touchUpInside) + view.firstButton.addTarget(self, action: #selector(callBackAction(_:)), for: .touchUpInside) + + return view + case .missed: + let view = HorizontalButtonsContainerView.loadFromNib() + view.secondButton.isHidden = true + + view.firstButton.style = .positive + view.firstButton.setTitle(VectorL10n.eventFormatterCallBack, for: .normal) + view.firstButton.setImage(callTypeIcon, for: .normal) + view.firstButton.removeTarget(nil, action: nil, for: .touchUpInside) + view.firstButton.addTarget(self, action: #selector(callBackAction(_:)), for: .touchUpInside) + + return view + case .ended: + return nil + case .failed: + let view = HorizontalButtonsContainerView.loadFromNib() + view.secondButton.isHidden = true + + view.firstButton.style = .positive + view.firstButton.setTitle(VectorL10n.eventFormatterCallRetry, for: .normal) + view.firstButton.setImage(callTypeIcon, for: .normal) + view.firstButton.removeTarget(nil, action: nil, for: .touchUpInside) + view.firstButton.addTarget(self, action: #selector(callBackAction(_:)), for: .touchUpInside) + + return view + } } private func configure(withCall call: MXCall) { @@ -71,13 +146,15 @@ class RoomDirectCallStatusBubbleCell: RoomBaseCallBubbleCell { .connecting, .onHold, .remotelyOnHold: - statusTextView.text = VectorL10n.eventFormatterCallYouCurrentlyIn + viewState = .active + statusText = VectorL10n.eventFormatterCallYouCurrentlyIn case .ringing: if call.isIncoming { - // should not be here - statusTextView.text = nil + viewState = .ringing + statusText = nil } else { - statusTextView.text = VectorL10n.eventFormatterCallYouCurrentlyIn + viewState = .active + statusText = VectorL10n.eventFormatterCallYouCurrentlyIn } case .ended: switch call.endReason { @@ -85,19 +162,29 @@ class RoomDirectCallStatusBubbleCell: RoomBaseCallBubbleCell { .hangup, .hangupElsewhere, .remoteHangup, - .missed, .answeredElseWhere: - statusTextView.text = VectorL10n.eventFormatterCallHasEnded + viewState = .ended + statusText = VectorL10n.eventFormatterCallHasEnded(callDurationString) + case .missed: + if call.isIncoming { + viewState = .missed + statusText = VectorL10n.eventFormatterCallYouMissed + } else { + statusText = VectorL10n.eventFormatterCallHasEnded(callDurationString) + } case .busy: configureForRejectedCall(call: call) @unknown default: - statusTextView.text = VectorL10n.eventFormatterCallHasEnded + viewState = .ended + statusText = VectorL10n.eventFormatterCallHasEnded(callDurationString) } case .inviteExpired, .answeredElseWhere: - statusTextView.text = VectorL10n.eventFormatterCallHasEnded + viewState = .ended + statusText = VectorL10n.eventFormatterCallHasEnded(callDurationString) @unknown default: - statusTextView.text = VectorL10n.eventFormatterCallHasEnded + viewState = .ended + statusText = VectorL10n.eventFormatterCallHasEnded(callDurationString) } } @@ -114,46 +201,92 @@ class RoomDirectCallStatusBubbleCell: RoomBaseCallBubbleCell { } if isMyReject { - - let centerParagraphStyle = NSMutableParagraphStyle() - centerParagraphStyle.alignment = .center - - let mutableAttrString = NSMutableAttributedString(string: VectorL10n.eventFormatterCallYouDeclined + " " + VectorL10n.eventFormatterCallBack, attributes: [ - .font: UIFont.systemFont(ofSize: Constants.statusTextFontSize), - .foregroundColor: ThemeService.shared().theme.noticeSecondaryColor, - .paragraphStyle: centerParagraphStyle - ]) - - let range = mutableAttrString.mutableString.range(of: VectorL10n.eventFormatterCallBack) - if range.location != NSNotFound { - mutableAttrString.addAttribute(.link, value: Constants.statusCallBackURL, range: range) - } - - statusTextView.attributedText = mutableAttrString - statusTextView.isSelectable = true + viewState = .declined + statusText = VectorL10n.eventFormatterCallYouDeclined } else { - statusTextView.text = VectorL10n.eventFormatterCallHasEnded + viewState = .ended + statusText = VectorL10n.eventFormatterCallHasEnded(callDurationString) } } + private func configureForHangupCall(withEvent event: MXEvent) { + guard let hangupEventContent = MXCallHangupEventContent(fromJSON: event.content) else { + viewState = .ended + statusText = VectorL10n.eventFormatterCallHasEnded(callDurationString) + return + } + + switch hangupEventContent.reasonType { + case .userHangup: + viewState = .ended + statusText = VectorL10n.eventFormatterCallHasEnded(callDurationString) + default: + viewState = .failed + statusText = VectorL10n.eventFormatterCallConnectionFailed + } + } + + private func configureForUnansweredCall() { + if isIncoming { + // missed call + viewState = .missed + statusText = VectorL10n.eventFormatterCallYouMissed + } else { + // outgoing unanswered call + viewState = .ended + statusText = VectorL10n.eventFormatterCallHasEnded(callDurationString) + } + } + + // MARK: - Actions + + @objc + private func callBackAction(_ sender: CallTileActionButton) { + self.delegate?.cell(self, + didRecognizeAction: kMXKRoomBubbleCellCallBackButtonPressed, + userInfo: actionUserInfo) + } + + @objc + private func declineCallAction(_ sender: CallTileActionButton) { + self.delegate?.cell(self, + didRecognizeAction: kMXKRoomBubbleCellCallDeclineButtonPressed, + userInfo: actionUserInfo) + } + + @objc + private func answerCallAction(_ sender: CallTileActionButton) { + self.delegate?.cell(self, + didRecognizeAction: kMXKRoomBubbleCellCallAnswerButtonPressed, + userInfo: actionUserInfo) + } + // MARK: - MXKCellRendering override func render(_ cellData: MXKCellData!) { super.render(cellData) + viewState = .unknown + guard let bubbleCellData = cellData as? RoomBubbleCellData else { return } let events = bubbleCellData.allLinkedEvents() - // getting a random event for call id is enough - guard let randomEvent = bubbleCellData.events.randomElement() else { + guard let inviteEvent = events.first(where: { $0.eventType == .callInvite }) else { return } - guard let callEventContent = MXCallEventContent(fromJSON: randomEvent.content) else { return } - let callId = callEventContent.callId + guard let callInviteEventContent = MXCallInviteEventContent(fromJSON: inviteEvent.content) else { + return + } + self.isVideoCall = callInviteEventContent.isVideoCall() + self.callDurationString = readableCallDuration(from: events) + self.isIncoming = inviteEvent.sender != bubbleCellData.mxSession.myUserId + self.callInviteEvent = inviteEvent + + let callId = callInviteEventContent.callId guard let call = bubbleCellData.mxSession.callManager.call(withCallId: callId) else { // check events include a reject event @@ -162,46 +295,50 @@ class RoomDirectCallStatusBubbleCell: RoomBaseCallBubbleCell { return } - // there is no reject event, we can just say this call has ended - statusTextView.text = VectorL10n.eventFormatterCallHasEnded + // check events include an answer event + if !events.contains(where: { $0.eventType == .callAnswer }) { + configureForUnansweredCall() + return + } + + // check events include a hangup event + if let hangupEvent = events.first(where: { $0.eventType == .callHangup }) { + configureForHangupCall(withEvent: hangupEvent) + return + } + + // there is no reject or hangup event, we can just say this call has ended + viewState = .ended + statusText = VectorL10n.eventFormatterCallHasEnded(callDurationString) return } configure(withCall: call) } - override func prepareForReuse() { - statusTextView.isSelectable = false - statusTextView.text = nil - statusTextView.attributedText = nil - - super.prepareForReuse() - } - -} - -// MARK: - UITextViewDelegate - -extension RoomDirectCallStatusBubbleCell { - - override func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { - if URL == Constants.statusCallBackURL && interaction == .invokeDefaultAction { - let userInfo: [AnyHashable: Any]? - - guard let bubbleCellData = bubbleData as? RoomBubbleCellData else { - return false - } - let events = bubbleCellData.allLinkedEvents() - if let callInviteEvent = events.first(where: { $0.eventType == .callInvite }) { - userInfo = [kMXKRoomBubbleCellEventKey: callInviteEvent] - } else { - userInfo = nil - } - - self.delegate?.cell(self, didRecognizeAction: kMXKRoomBubbleCellCallBackButtonPressed, userInfo: userInfo) - return true + private func callDuration(from events: [MXEvent]) -> TimeInterval { + guard let startDate = events.first(where: { $0.eventType == .callAnswer })?.originServerTs else { + // never started + return 0 } - return false + guard let endDate = events.first(where: { $0.eventType == .callHangup })?.originServerTs + ?? events.first(where: { $0.eventType == .callReject })?.originServerTs else { + // not ended yet, compute the diff from now + return (NSTimeIntervalSince1970 - TimeInterval(startDate))/MSEC_PER_SEC + } + + // ended, compute the diff between two dates + return TimeInterval(endDate - startDate)/MSEC_PER_SEC + } + + private func readableCallDuration(from events: [MXEvent]) -> String { + let duration = callDuration(from: events) + + if duration <= 0 { + return "" + } + + return RoomDirectCallStatusBubbleCell.callDurationFormatter.string(from: duration) ?? "" } } From 7b7a7065f8e50afe62c640a841103ab24002e447 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Fri, 12 Mar 2021 14:22:46 +0300 Subject: [PATCH 042/194] Adjust callerName label, use super method --- Riot/Modules/Call/CallViewController.m | 17 +++++------------ Riot/Modules/Call/CallViewController.xib | 8 ++++---- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/Riot/Modules/Call/CallViewController.m b/Riot/Modules/Call/CallViewController.m index f1c32e843..b9b2d8f6a 100644 --- a/Riot/Modules/Call/CallViewController.m +++ b/Riot/Modules/Call/CallViewController.m @@ -413,26 +413,19 @@ - (void)updatePeerInfoDisplay { - NSString *peerDisplayName; - NSString *peerAvatarURL; + [super updatePeerInfoDisplay]; + NSString *peerAvatarURL; + if (self.peer) { - peerDisplayName = [self.peer displayname]; - if (!peerDisplayName.length) - { - peerDisplayName = self.peer.userId; - } peerAvatarURL = self.peer.avatarUrl; } else if (self.mxCall.isConferenceCall) { - peerDisplayName = self.mxCall.room.summary.displayname; peerAvatarURL = self.mxCall.room.summary.avatar; } - - self.callerNameLabel.text = peerDisplayName; - + self.blurredCallerImageView.contentMode = UIViewContentModeScaleAspectFill; self.callerImageView.contentMode = UIViewContentModeScaleAspectFill; if (peerAvatarURL) @@ -443,7 +436,7 @@ andImageOrientation:UIImageOrientationUp previewImage:self.picturePlaceholder mediaManager:self.mainSession.mediaManager]; - + // Retrieve the avatar in full resolution [self.callerImageView setImageURI:peerAvatarURL withType:nil diff --git a/Riot/Modules/Call/CallViewController.xib b/Riot/Modules/Call/CallViewController.xib index baff5fcd2..d66ec7aed 100644 --- a/Riot/Modules/Call/CallViewController.xib +++ b/Riot/Modules/Call/CallViewController.xib @@ -144,7 +144,6 @@ - @@ -156,8 +155,8 @@ -