From 5b93b13190c7feb2b7bd18df827c968e36889b9d Mon Sep 17 00:00:00 2001 From: manuroe Date: Thu, 19 Oct 2017 10:03:23 +0200 Subject: [PATCH] Callkit: Show the Riot icon (in B&W) on the system call screen --- Riot.xcodeproj/project.pbxproj | 12 ++++++++++++ Riot/AppDelegate.m | 8 +++++--- Riot/Assets/Images/riot_icon_callkit.png | Bin 0 -> 2145 bytes Riot/Assets/Images/riot_icon_callkit@2.png | Bin 0 -> 5119 bytes Riot/Assets/Images/riot_icon_callkit@3.png | Bin 0 -> 5933 bytes 5 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 Riot/Assets/Images/riot_icon_callkit.png create mode 100644 Riot/Assets/Images/riot_icon_callkit@2.png create mode 100644 Riot/Assets/Images/riot_icon_callkit@3.png diff --git a/Riot.xcodeproj/project.pbxproj b/Riot.xcodeproj/project.pbxproj index ca5b9a63d..aa0179028 100755 --- a/Riot.xcodeproj/project.pbxproj +++ b/Riot.xcodeproj/project.pbxproj @@ -69,6 +69,9 @@ 32918EAA1F473BDB0076CA16 /* Vector.strings in Resources */ = {isa = PBXBuildFile; fileRef = 32918EA71F473BDB0076CA16 /* Vector.strings */; }; 32935CB11F6056FD006888C8 /* IntegrationManagerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 32935CB01F6056FD006888C8 /* IntegrationManagerViewController.m */; }; 32935CB41F628BCE006888C8 /* IntegrationManager.js in Resources */ = {isa = PBXBuildFile; fileRef = 32935CB31F628BCE006888C8 /* IntegrationManager.js */; }; + 329DCE191F988F8100468420 /* riot_icon_callkit.png in Resources */ = {isa = PBXBuildFile; fileRef = 329DCE161F988F8100468420 /* riot_icon_callkit.png */; }; + 329DCE1A1F988F8100468420 /* riot_icon_callkit@2.png in Resources */ = {isa = PBXBuildFile; fileRef = 329DCE171F988F8100468420 /* riot_icon_callkit@2.png */; }; + 329DCE1B1F988F8100468420 /* riot_icon_callkit@3.png in Resources */ = {isa = PBXBuildFile; fileRef = 329DCE181F988F8100468420 /* riot_icon_callkit@3.png */; }; 32AE61E41F0A971B007255F4 /* RoomMembershipBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 32AE61E21F0A971B007255F4 /* RoomMembershipBubbleCell.m */; }; 32AE61E51F0A971B007255F4 /* RoomMembershipBubbleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 32AE61E31F0A971B007255F4 /* RoomMembershipBubbleCell.xib */; }; 32AE61E91F0CE099007255F4 /* RoomMembershipWithPaginationTitleBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 32AE61E71F0CE099007255F4 /* RoomMembershipWithPaginationTitleBubbleCell.m */; }; @@ -670,6 +673,9 @@ 32935CAF1F6056FD006888C8 /* IntegrationManagerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IntegrationManagerViewController.h; sourceTree = ""; }; 32935CB01F6056FD006888C8 /* IntegrationManagerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IntegrationManagerViewController.m; sourceTree = ""; }; 32935CB31F628BCE006888C8 /* IntegrationManager.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = IntegrationManager.js; sourceTree = ""; }; + 329DCE161F988F8100468420 /* riot_icon_callkit.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = riot_icon_callkit.png; sourceTree = ""; }; + 329DCE171F988F8100468420 /* riot_icon_callkit@2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "riot_icon_callkit@2.png"; sourceTree = ""; }; + 329DCE181F988F8100468420 /* riot_icon_callkit@3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "riot_icon_callkit@3.png"; sourceTree = ""; }; 32AE61E11F0A971B007255F4 /* RoomMembershipBubbleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomMembershipBubbleCell.h; sourceTree = ""; }; 32AE61E21F0A971B007255F4 /* RoomMembershipBubbleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomMembershipBubbleCell.m; sourceTree = ""; }; 32AE61E31F0A971B007255F4 /* RoomMembershipBubbleCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoomMembershipBubbleCell.xib; sourceTree = ""; }; @@ -1845,6 +1851,9 @@ F083BBAD1E7009EC00A9B29C /* remove_icon_pink.png */, F083BBAE1E7009EC00A9B29C /* remove_icon_pink@2x.png */, F083BBAF1E7009EC00A9B29C /* remove_icon_pink@3x.png */, + 329DCE161F988F8100468420 /* riot_icon_callkit.png */, + 329DCE171F988F8100468420 /* riot_icon_callkit@2.png */, + 329DCE181F988F8100468420 /* riot_icon_callkit@3.png */, F083BBB01E7009EC00A9B29C /* riot_icon.png */, F083BBB11E7009EC00A9B29C /* riot_icon@2x.png */, F083BBB21E7009EC00A9B29C /* riot_icon@3x.png */, @@ -2714,6 +2723,7 @@ F083BD3D1E7009ED00A9B29C /* call_hangup_icon@2x.png in Resources */, F083BE551E7009ED00A9B29C /* RoomOutgoingEncryptedTextMsgWithoutSenderNameBubbleCell.xib in Resources */, 32471CDD1F1373A100BDF50A /* RoomMembershipCollapsedWithPaginationTitleBubbleCell.xib in Resources */, + 329DCE191F988F8100468420 /* riot_icon_callkit.png in Resources */, 3233F7321F31F4BF006ACA81 /* JitsiViewController.xib in Resources */, F083BD301E7009ED00A9B29C /* bubbles_bg_landscape.png in Resources */, F083BDA41E7009ED00A9B29C /* notifications.png in Resources */, @@ -2777,6 +2787,7 @@ F083BE751E7009ED00A9B29C /* RoomOutgoingTextMsgWithoutSenderNameBubbleCell.xib in Resources */, F04AF26A1F83A4C100D20F4D /* InfoPlist.strings in Resources */, F083BD261E7009ED00A9B29C /* admin_icon@2x.png in Resources */, + 329DCE1B1F988F8100468420 /* riot_icon_callkit@3.png in Resources */, 3205ED851E97725E003D65FA /* DirectoryServerTableViewCell.xib in Resources */, F083BD761E7009ED00A9B29C /* e2e_verified@3x.png in Resources */, F083BE181E7009ED00A9B29C /* MediaPickerViewController.xib in Resources */, @@ -2871,6 +2882,7 @@ F083BDB11E7009ED00A9B29C /* priorityHigh@2x.png in Resources */, F0614A0E1EDDCCE700F5DC9A /* jump_to_unread@2x.png in Resources */, F083BDC21E7009ED00A9B29C /* scrollup.png in Resources */, + 329DCE1A1F988F8100468420 /* riot_icon_callkit@2.png in Resources */, F083BD521E7009ED00A9B29C /* camera_stop@2x.png in Resources */, 327382C21F276AED00356143 /* InfoPlist.strings in Resources */, 327382B81F276AD200356143 /* InfoPlist.strings in Resources */, diff --git a/Riot/AppDelegate.m b/Riot/AppDelegate.m index d91bc48c2..b9feae4fe 100644 --- a/Riot/AppDelegate.m +++ b/Riot/AppDelegate.m @@ -1098,7 +1098,7 @@ NSString *const kAppDelegateNetworkStatusDidChangeNotification = @"kAppDelegateN } else { - NSLog(@"[AppDelegate] didReceiveIncomingPushWithPayload - Unexpected payload %@", dictionaryPayload); + NSLog(@"[AppDelegate] didReceiveIncomingPushWithPayload - Unexpected payload %@", payload.dictionaryPayload); } // Handle the local notifications by triggering a background sync. @@ -2336,8 +2336,10 @@ NSString *const kAppDelegateNetworkStatusDidChangeNotification = @"kAppDelegateN { if (enable) { - // Create adapter with default configuration for a while - MXCallKitAdapter *callKitAdapter = [[MXCallKitAdapter alloc] init]; + // Create adapter for Riot + MXCallKitConfiguration *callKitConfiguration = [[MXCallKitConfiguration alloc] init]; + callKitConfiguration.iconName = @"riot_icon_callkit"; + MXCallKitAdapter *callKitAdapter = [[MXCallKitAdapter alloc] initWithConfiguration:callKitConfiguration]; id audioSessionConfigurator; diff --git a/Riot/Assets/Images/riot_icon_callkit.png b/Riot/Assets/Images/riot_icon_callkit.png new file mode 100644 index 0000000000000000000000000000000000000000..250f0bc6477f968c31911604dafdf260c0f36f58 GIT binary patch literal 2145 zcmV-n2%h(eP)YtKzPc-Qrad^OCezfTWm{_M_Sb36(!Uv9fr2HR1%Q9 z7Iq_$)ES|cRtprufPxG#1glktDJVloj1@|hHwu~z&m_B>-Mjamdw%^R-~c5dBw@yx z`kVRvv*-No{p|Pr&hK~b0lv1cu)T6(ZKt2X?ld9q=@OK#%?AJ!u3M8zsg5LdQm>GG zI7BdHD^b!2WaeDG@t0}aw&C^Z)4LWhclt7T`ny=P-k8ozdWGWB2Lf0h2ek3YVEvtO z0Mtsj#=x2hw3C3B8E_GdSJAkrnMTmYH3m|O2Msex8{+FmO z4s%l-d4gWl*0J?0BQ>kZX6#RGY7@h zo4ZEAMY94!DPkXQb%G>xD;Nf*@tbs%ke6b%^{$g^#{`L2{TZ`QF00y7AfyOLpp+TS zi=`)#v`8HOho0=1f&f5q%5QUA64<^_ZOCDKGh)Zmu6x*u{m8-9asfGrGk&7@(54eU z-L;o9mZUH~4^GeDOGafwc+`$BaSH(rX;XgAV1$f5iMG2aL3QU}_hg5!Nat#I6@1wv zgTJq9Ts?Nxh#X*G59)+e20U6=S)LypJsWxNuj@D<^QjkG-2&IlcF}QR3uci(i`$6W zaS^r6xq|F7+fP?j_jD&_>s*~=gLXqvevzQLCjbZ*RF)6$I-DH`R3@gJYcpEs==GEP zUXnyX03|I>B|2B1PtaV`(h>(IGw`$Zk%q8Ocf~ZO&NHQWi6D17q-fORC^}T$ zu}xA~vuPDoho77L_#i^e6Ju#p$Aw7A0 z{>YguB14X_Y}CWDQE##v^i*#T{eEBXA(Eu`Wax`Ci$+eH$r(FLL`89FWplFCOZ}VcTo|4 zR@m~7#K;`qdnCPA_wl)qWh5wIr3|d7t#_+;*&6K|675=E5)^R!GVS3VH%?quwPk~@ zXmi7sk?-VMdQI%Kk?!tmY&ibT&jAPqK!OMW%l-GiQ1-yM&I1xi+%8KjDe&S)yVem% zr;rWHGUG8RpK5X&{gUANy^~2;9$Nd(|-DTQRSxPU|_-0H|#26V1s%jBn?ovT-hG|%V$I7X9lQAfI=xEc>HxEc>FFor7AnOnJYup~5|x%yY@lChOIrUWu`-Y!1030(?!-2};W zjq{!!)yX_5-moVv=?Emz(# zAp0&JJFhcKY!Zl6t~dxJ!y+1MIl?eE5xC0ueFU;@y33hZfYJ*8J^;_Q6R>}00Bbp8 z1Adh@v0P)S!>u@XE&pKaY7hnu@TBaG33E6DJ9^VnzZpbs)>0_I8URPy0a)9q+pVI? za-ni{hC@~N#w@c;5~*%g|C38`(3N<&MluWzX3Rc&+smh{rTrM_e47d}?pd+BD0#mK57fVdps&{e=YGRVql1Xfz`=1o}fTWA@pC+qA6QtfeTcDE^$lrrz|a zaN`vYFk{8;qUhqEE$f(q1&7KJ%*a7u<;Gzk_5$Z@62Kryeh6TJ%J_ak5`oMdw4xx& zDvFVpRs3CmEe9~++B^RNU`c6(|8QQGAEg!kj+c+Z$_;IOmfkTwH>;?PF+aYx|9kr{ XX|t{Xqzz5#00000NkvXXu0mjfGw1yX literal 0 HcmV?d00001 diff --git a/Riot/Assets/Images/riot_icon_callkit@2.png b/Riot/Assets/Images/riot_icon_callkit@2.png new file mode 100644 index 0000000000000000000000000000000000000000..33ba6e019c2f7bd58c4a7c5bc1ce4b676b721296 GIT binary patch literal 5119 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 hh(}M|V|yuhU67Nx!P@&ikG7 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