From d42ff03ecd358e144dfb658eb4472a87593858de Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Tue, 10 Jul 2018 13:27:35 -0400 Subject: [PATCH] Tweak disappearing messages indicator. --- Signal.xcodeproj/project.pbxproj | 6 + .../Contents.json | 23 +++ .../timer00_12@1x.png | Bin 0 -> 217 bytes .../timer00_12@2x.png | Bin 0 -> 318 bytes .../timer00_12@3x.png | Bin 0 -> 656 bytes .../Contents.json | 23 +++ .../timer05_12@1x.png | Bin 0 -> 249 bytes .../timer05_12@2x.png | Bin 0 -> 432 bytes .../timer05_12@3x.png | Bin 0 -> 758 bytes .../Contents.json | 23 +++ .../timer10_12@1x.png | Bin 0 -> 255 bytes .../timer10_12@2x.png | Bin 0 -> 433 bytes .../timer10_12@3x.png | Bin 0 -> 759 bytes .../Contents.json | 23 +++ .../timer15_12@1x.png | Bin 0 -> 244 bytes .../timer15_12@2x.png | Bin 0 -> 398 bytes .../timer15_12@3x.png | Bin 0 -> 685 bytes .../Contents.json | 23 +++ .../timer20_12@1x.png | Bin 0 -> 268 bytes .../timer20_12@2x.png | Bin 0 -> 486 bytes .../timer20_12@3x.png | Bin 0 -> 815 bytes .../Contents.json | 23 +++ .../timer25_12@1x.png | Bin 0 -> 272 bytes .../timer25_12@2x.png | Bin 0 -> 504 bytes .../timer25_12@3x.png | Bin 0 -> 860 bytes .../Contents.json | 23 +++ .../timer30_12@1x.png | Bin 0 -> 267 bytes .../timer30_12@2x.png | Bin 0 -> 446 bytes .../timer30_12@3x.png | Bin 0 -> 782 bytes .../Contents.json | 23 +++ .../timer35_12@1x.png | Bin 0 -> 282 bytes .../timer35_12@2x.png | Bin 0 -> 545 bytes .../timer35_12@3x.png | Bin 0 -> 862 bytes .../Contents.json | 23 +++ .../timer40_12@1x.png | Bin 0 -> 289 bytes .../timer40_12@2x.png | Bin 0 -> 554 bytes .../timer40_12@3x.png | Bin 0 -> 900 bytes .../Contents.json | 23 +++ .../timer45_12@1x.png | Bin 0 -> 251 bytes .../timer45_12@2x.png | Bin 0 -> 482 bytes .../timer45_12@3x.png | Bin 0 -> 759 bytes .../Contents.json | 23 +++ .../timer50_12@1x.png | Bin 0 -> 302 bytes .../timer50_12@2x.png | Bin 0 -> 599 bytes .../timer50_12@3x.png | Bin 0 -> 932 bytes .../Contents.json | 23 +++ .../timer55_12@1x.png | Bin 0 -> 312 bytes .../timer55_12@2x.png | Bin 0 -> 621 bytes .../timer55_12@3x.png | Bin 0 -> 962 bytes .../Contents.json | 23 +++ .../timer60_12@1x.png | Bin 0 -> 272 bytes .../timer60_12@2x.png | Bin 0 -> 539 bytes .../timer60_12@3x.png | Bin 0 -> 864 bytes .../Cells/OWSMessageFooterView.m | 23 +++ .../Cells/OWSMessageTimerView.h | 22 +++ .../Cells/OWSMessageTimerView.m | 169 ++++++++++++++++++ 56 files changed, 519 insertions(+) create mode 100644 Signal/Images.xcassets/disappearing_message_00.imageset/Contents.json create mode 100644 Signal/Images.xcassets/disappearing_message_00.imageset/timer00_12@1x.png create mode 100644 Signal/Images.xcassets/disappearing_message_00.imageset/timer00_12@2x.png create mode 100644 Signal/Images.xcassets/disappearing_message_00.imageset/timer00_12@3x.png create mode 100644 Signal/Images.xcassets/disappearing_message_05.imageset/Contents.json create mode 100644 Signal/Images.xcassets/disappearing_message_05.imageset/timer05_12@1x.png create mode 100644 Signal/Images.xcassets/disappearing_message_05.imageset/timer05_12@2x.png create mode 100644 Signal/Images.xcassets/disappearing_message_05.imageset/timer05_12@3x.png create mode 100644 Signal/Images.xcassets/disappearing_message_10.imageset/Contents.json create mode 100644 Signal/Images.xcassets/disappearing_message_10.imageset/timer10_12@1x.png create mode 100644 Signal/Images.xcassets/disappearing_message_10.imageset/timer10_12@2x.png create mode 100644 Signal/Images.xcassets/disappearing_message_10.imageset/timer10_12@3x.png create mode 100644 Signal/Images.xcassets/disappearing_message_15.imageset/Contents.json create mode 100644 Signal/Images.xcassets/disappearing_message_15.imageset/timer15_12@1x.png create mode 100644 Signal/Images.xcassets/disappearing_message_15.imageset/timer15_12@2x.png create mode 100644 Signal/Images.xcassets/disappearing_message_15.imageset/timer15_12@3x.png create mode 100644 Signal/Images.xcassets/disappearing_message_20.imageset/Contents.json create mode 100644 Signal/Images.xcassets/disappearing_message_20.imageset/timer20_12@1x.png create mode 100644 Signal/Images.xcassets/disappearing_message_20.imageset/timer20_12@2x.png create mode 100644 Signal/Images.xcassets/disappearing_message_20.imageset/timer20_12@3x.png create mode 100644 Signal/Images.xcassets/disappearing_message_25.imageset/Contents.json create mode 100644 Signal/Images.xcassets/disappearing_message_25.imageset/timer25_12@1x.png create mode 100644 Signal/Images.xcassets/disappearing_message_25.imageset/timer25_12@2x.png create mode 100644 Signal/Images.xcassets/disappearing_message_25.imageset/timer25_12@3x.png create mode 100644 Signal/Images.xcassets/disappearing_message_30.imageset/Contents.json create mode 100644 Signal/Images.xcassets/disappearing_message_30.imageset/timer30_12@1x.png create mode 100644 Signal/Images.xcassets/disappearing_message_30.imageset/timer30_12@2x.png create mode 100644 Signal/Images.xcassets/disappearing_message_30.imageset/timer30_12@3x.png create mode 100644 Signal/Images.xcassets/disappearing_message_35.imageset/Contents.json create mode 100644 Signal/Images.xcassets/disappearing_message_35.imageset/timer35_12@1x.png create mode 100644 Signal/Images.xcassets/disappearing_message_35.imageset/timer35_12@2x.png create mode 100644 Signal/Images.xcassets/disappearing_message_35.imageset/timer35_12@3x.png create mode 100644 Signal/Images.xcassets/disappearing_message_40.imageset/Contents.json create mode 100644 Signal/Images.xcassets/disappearing_message_40.imageset/timer40_12@1x.png create mode 100644 Signal/Images.xcassets/disappearing_message_40.imageset/timer40_12@2x.png create mode 100644 Signal/Images.xcassets/disappearing_message_40.imageset/timer40_12@3x.png create mode 100644 Signal/Images.xcassets/disappearing_message_45.imageset/Contents.json create mode 100644 Signal/Images.xcassets/disappearing_message_45.imageset/timer45_12@1x.png create mode 100644 Signal/Images.xcassets/disappearing_message_45.imageset/timer45_12@2x.png create mode 100644 Signal/Images.xcassets/disappearing_message_45.imageset/timer45_12@3x.png create mode 100644 Signal/Images.xcassets/disappearing_message_50.imageset/Contents.json create mode 100644 Signal/Images.xcassets/disappearing_message_50.imageset/timer50_12@1x.png create mode 100644 Signal/Images.xcassets/disappearing_message_50.imageset/timer50_12@2x.png create mode 100644 Signal/Images.xcassets/disappearing_message_50.imageset/timer50_12@3x.png create mode 100644 Signal/Images.xcassets/disappearing_message_55.imageset/Contents.json create mode 100644 Signal/Images.xcassets/disappearing_message_55.imageset/timer55_12@1x.png create mode 100644 Signal/Images.xcassets/disappearing_message_55.imageset/timer55_12@2x.png create mode 100644 Signal/Images.xcassets/disappearing_message_55.imageset/timer55_12@3x.png create mode 100644 Signal/Images.xcassets/disappearing_message_60.imageset/Contents.json create mode 100644 Signal/Images.xcassets/disappearing_message_60.imageset/timer60_12@1x.png create mode 100644 Signal/Images.xcassets/disappearing_message_60.imageset/timer60_12@2x.png create mode 100644 Signal/Images.xcassets/disappearing_message_60.imageset/timer60_12@3x.png create mode 100644 Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTimerView.h create mode 100644 Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTimerView.m diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index a403a3ff3..896c0ba8b 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -43,6 +43,7 @@ 340FC8D0205BF2FA007AEB0F /* OWSBackupIO.m in Sources */ = {isa = PBXBuildFile; fileRef = 340FC8CE205BF2FA007AEB0F /* OWSBackupIO.m */; }; 341F2C0F1F2B8AE700D07D6B /* DebugUIMisc.m in Sources */ = {isa = PBXBuildFile; fileRef = 341F2C0E1F2B8AE700D07D6B /* DebugUIMisc.m */; }; 34277A5E20751BDC006049F2 /* OWSQuotedMessageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 34277A5C20751BDC006049F2 /* OWSQuotedMessageView.m */; }; + 3427C64320F500E000EEC730 /* OWSMessageTimerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3427C64220F500DF00EEC730 /* OWSMessageTimerView.m */; }; 3430FE181F7751D4000EC51B /* GiphyAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3430FE171F7751D4000EC51B /* GiphyAPI.swift */; }; 34330A5A1E7875FB00DF2FB9 /* fontawesome-webfont.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34330A591E7875FB00DF2FB9 /* fontawesome-webfont.ttf */; }; 34330A5C1E787A9800DF2FB9 /* dripicons-v2.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34330A5B1E787A9800DF2FB9 /* dripicons-v2.ttf */; }; @@ -641,6 +642,8 @@ 341F2C0E1F2B8AE700D07D6B /* DebugUIMisc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DebugUIMisc.m; sourceTree = ""; }; 34277A5C20751BDC006049F2 /* OWSQuotedMessageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSQuotedMessageView.m; sourceTree = ""; }; 34277A5D20751BDC006049F2 /* OWSQuotedMessageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSQuotedMessageView.h; sourceTree = ""; }; + 3427C64120F500DE00EEC730 /* OWSMessageTimerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSMessageTimerView.h; sourceTree = ""; }; + 3427C64220F500DF00EEC730 /* OWSMessageTimerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSMessageTimerView.m; sourceTree = ""; }; 3430FE171F7751D4000EC51B /* GiphyAPI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GiphyAPI.swift; sourceTree = ""; }; 34330A591E7875FB00DF2FB9 /* fontawesome-webfont.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "fontawesome-webfont.ttf"; sourceTree = ""; }; 34330A5B1E787A9800DF2FB9 /* dripicons-v2.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "dripicons-v2.ttf"; sourceTree = ""; }; @@ -1771,6 +1774,8 @@ 34D920E620E179C200D51158 /* OWSMessageFooterView.m */, 34DBF000206BD5A400025978 /* OWSMessageTextView.h */, 34DBEFFF206BD5A400025978 /* OWSMessageTextView.m */, + 3427C64120F500DE00EEC730 /* OWSMessageTimerView.h */, + 3427C64220F500DF00EEC730 /* OWSMessageTimerView.m */, 34277A5D20751BDC006049F2 /* OWSQuotedMessageView.h */, 34277A5C20751BDC006049F2 /* OWSQuotedMessageView.m */, 34D1F0A51F867BFC0066283D /* OWSSystemMessageCell.h */, @@ -3363,6 +3368,7 @@ 45A663C51F92EC760027B59E /* GroupTableViewCell.swift in Sources */, 34CA631B2097806F00E526A0 /* OWSContactShareView.m in Sources */, 34D1F0861F8678AA0066283D /* ConversationViewController.m in Sources */, + 3427C64320F500E000EEC730 /* OWSMessageTimerView.m in Sources */, B90418E6183E9DD40038554A /* DateUtil.m in Sources */, 340FC8BD204DAC8D007AEB0F /* ShowGroupMembersViewController.m in Sources */, 459311FC1D75C948008DD4F0 /* OWSDeviceTableViewCell.m in Sources */, diff --git a/Signal/Images.xcassets/disappearing_message_00.imageset/Contents.json b/Signal/Images.xcassets/disappearing_message_00.imageset/Contents.json new file mode 100644 index 000000000..c028a06a6 --- /dev/null +++ b/Signal/Images.xcassets/disappearing_message_00.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "timer00_12@1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "timer00_12@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "timer00_12@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Signal/Images.xcassets/disappearing_message_00.imageset/timer00_12@1x.png b/Signal/Images.xcassets/disappearing_message_00.imageset/timer00_12@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..8a4ec9164c3d799e08bf5bb7bc1063df7dcb416c GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k#^NA%Cx&(BWL^R}lRaG=Lo`I! zP735|cHnUdZL#&*C?Dj1wW(ZS{l(x))#po(u^B#SZ=CVwOp5cPu&ejGE+ty~by={n zrC+O9^kYK(Hsc+|2?e_Y@4jCiZ>0U;;sues%2UTrs94TgcQt+De&N6tUuX8V)yk8f zWT?sOT)e}w`T6_S-52&;n7j7tntRuzI2qm_Y1qfH;c@*YE2~KFqhB)Dgx2yLJgS<+ Q2Xr2Tr>mdKI;Vst0MP(g)c^nh literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_00.imageset/timer00_12@2x.png b/Signal/Images.xcassets/disappearing_message_00.imageset/timer00_12@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..34e3d69692e0f46010aaba6cc9da713cde8054fb GIT binary patch literal 318 zcmV-E0m1%>P)Px#_(?=TR7efYmf;G*Fbsr;KYR&=<;4|L(0AM)y$`z4m3Ag<6A!}L?Q%&P+OF$j z7(~ZbqnE-%W`)vQb1a8x0v8`Qu3{qeEIeufUWt1txQo-1zTRZ#f>jFu2QEIVQ46pr zdPrY;Jz175vOohZG$+s`vZK@`cq+I{03MnXOe30AuK7er15W@n(6ZzcdUyiN1jioC zUT!)0NdUG!r5`uU94$15-7APD9d2?o!2j}1sc~|C+i0E&&_K&_viGRSeOlw{QPGRN z>tWZ*X1DjP3#S&4H4k4ntt*oqiscxuOnls+Cp6v)kJ?6q0~epw2>-Tx0Iy>?*yZh{ QL;wH)07*qoM6N<$g5mvurT_o{ literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_00.imageset/timer00_12@3x.png b/Signal/Images.xcassets/disappearing_message_00.imageset/timer00_12@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..74e7720d85159b927f69c1be1d71e2b6e37c1097 GIT binary patch literal 656 zcmV;B0&o3^P)Px%N=ZaPR9Fe^n7vH{K@f$_uM;E!gj*n@0VG14QUFu{6(9m131kpK1yBGf4G<6_ zxd1{C5=cm3BLwd=H`e)nynC$eBk+@+ZfBSUW+r%h*<|TXo<0v?Jn1{D)$fZJLYbVJWBLqr-8=w@3M(m z2-gffNqHKpU-eurj8xo#1}!)fi5Y|?sV~H$zbsOp%>Z^D&=P}KLoq+J_qX#+k3A2+ zVJ^&ySB&(M70tr1WTAZnIg9Bo4 z4%3ml_nopCT2X_Y1fDH%+#p9XCu6ADrhb&YA?}DA)8M127%q_GP-IY7BD2*W5H<~$ z7!$;KI+rb3y1laZ>402Q&!(n^v9jSrcE=?eaX-1Oj_T#6xMD-YMX@X*2~3Y&7UVR2 z_uuUymaHY(lKrIsD?1};e{vqhjU5KWzNr%Io2beGOmhd#K=NwB=At0q6z_tf`iuAF zx+ZcX89+mCw<6zz7jdA9)B89;4swx`+>D`*kOHkAq@AEQTWMLNAGb6dpu&3}3|Lo`H_ z6C4=I6fO&#TFZP%zww8GfI5RAw?Hz3?Sd0ND>RfRJY#*7q41CSh(U9M4;$NrlL|*~ zILHSSu!S%!VOt`$Mmo(XgwJOs^T}`r9WGIpm4*$QHU`~pSk!tW#X*i`r=;WzW=r#i z8KRy7OP2LCycYO(~ll9ox=ce!+IgwpTx5qUphAQ8f;shMO#(6m%3E vk`yd?7&dW=om()0IZ=SYQc@;SfscW^S9l(e|J&0*=QDV^`njxgN@xNAMg~vb literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_05.imageset/timer05_12@2x.png b/Signal/Images.xcassets/disappearing_message_05.imageset/timer05_12@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f54c4d939fdb07723cfb9f6484360fc007cf0da4 GIT binary patch literal 432 zcmV;h0Z;ykP)Px$YDq*vR7ef&lrc&KF&KqaP%Le1RG5H;rB|@9(OSHMhp_SjTW=+(xPk|;7Ej;} zw%bArtt=GL?^|YeV_aqu6e}M*@+W!!OD388^K)f*MJ}JnP9QMn}dD^P0cF0Dlz=xOopQaNOlw zA@Eq-c`l9+YCeR^QIZ~d={bRyq}XH0!3v@WXwE^Ba9)q=IYA)0f?a3cB=iV0zikGh zRu8>GG*%RDq4q8K_iPtsW{Pjnx%+;mzDTxLn?KX8=4AS-`MK`M2h@fAT5v-9*do?T zPrZv4P`?Wo4O;MJffn8W)bs=b;Q;17v}xw|NDsY2JXKmM;@mWzSt=@2rNu5aZu&Ee zT{HP-t-G+Y=G=)IwI!u~d|bXnFDr%*NXD>os`ZGo;hlK#A<584#t3xOn)72=TgLSz a*Xa|pZ%p6YZK0b00000Px%ut`KgR9Fe^m_JMuQ4q!v6euhRMjA|{Ai2uWT3`%?B-+?WXDn-_Cq9`~J>eUthi~ ziQ+)m6TS!^gmvMua9#K(G9cEm1an>OzY;i6`&(g7=oc!HS+Q&jo5F<%V_j{jgu-@u zZaU)cYPu@xAA%7-jCc>JZLk2nI3p|y^vsc9zFZH5YeJT+$Q!b6!h(}&Qug5stvdaq z=9ksFCeT}6c_s(zpNlg2)S0jnw5 zje6Ei=4D`k_N9*}9Ed?IY>7<{Ey5VH&v=)1NHU@uR+A;P96pTb#3E*Dennh-O)q3_ z$?QlU_PJMUT@xLLtR?iIT6#a*n;@BYe)noU?ghylOP?xBe^HLqGeZTzb6tNHdasvD zGGy+Uyp;0EZhE*9n;eiv>~P#UwY|dfwc#qWWf0Tm9l5kj#4-uNf!q~X!d_`fh#`9- z*pTJy2OHi@3VUKcEp+d6DH-zI?JV~|c;qv=SS7cFty6kw4%eFSxjkN$b_(7 zQDuRaN}#=cO%1joZc7hGt6@tS$tTN-kXynw2)q1P2}{hsN?7yFsT7UFd;K3Vy*YNa zr)wGSoHxN2j!LEibBf8wNnWPj#>a|zxUz&d3%|`{r#S~RCpNG{T5419vDL&kSWZtj zNN4rSvfLD6)j(bC77)E%@WB_37t3Y|%QF=)T0*LtD oiU~Cg|N9`RdM4%j$1C{#4Xuf;CLn*BF8}}l07*qoM6N<$fPx#xk*GpR45glkTD9vKoCWv7z7(Z5G?Ek1<_M@3=d%C1=8Btdl4&Z!OAvg5b+GY zw``&$B#0kgCOh+Yc6XBGqdvduxXg%8xWW!nsA);&6tf-T05))eJ4_(R&YIhFpy;Nw z%V!QA+oUmt5lmsxWHRr)_waxt3?aw|dgpK1F^4nEVnI*Vi;HS_k=VkmTKH@2?2B=> zHPExt@XJ{BIeNXNOcW>iz+w>QtkvZ1a3s;miSo*2=Qllr6aGCk`*8pO002ovPDHLk FV1jX9YbXE! literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_10.imageset/timer10_12@2x.png b/Signal/Images.xcassets/disappearing_message_10.imageset/timer10_12@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2ef4e25c03eb903771fa3317641bd31747746507 GIT binary patch literal 433 zcmV;i0Z#sjP)Px$Ye_^wR7ef&mAy*DKomw7L9r7AZ4@$vXz3%^*jOw002Y>F?JI~DHWnhNur^{L zXze5T1{QV-VkIj0bB>a19N0M7tl0R$fjh~)-%Rf8%(hzf^g{Y0+`u`k!6?*LM#T|? zsPdh0%oEQJU_8pL9Paa0qjr=v#8{?a8BX9C%)Ns}NYVsZu4*zNJCJhC6o!xV0SU!d0>6beMgkka#_s1(?eYtUHE zU>X{07Kcm7jjxF3pt0=lF68aFC0>OAXrw`^*Wm$NwI_QEMxd)qGT8(4ljcdt+i^iW z)1^SKd;y=UNS#2x9au1^(63y`N|w-K?@aKvI^su({SG%l^4ZA*#?w$_fn3wWhJW bwPx%u}MThR9Fe^mpf?HU>Jt$tqKYbYDIK#a}oy^7ZC>wPA<9?9g8>#F2%u9kh(fZ zL2z>uX9sm~kt!kxLUD5yK~PY@MLb9mWSdJLHvW(+ibO3op*_oF;X>@P6shrTH10GY(Ui zvZrGBesF)N7|eafr5ztRXS$MG$60WXig?ba+?FyygZqphxSF~ex+D00n#GA^yt+s2 zft<{63hFNHoRf-&y|mwkUyvr^QF9&~px{!!T-G%+o zn_MxEAng(FU%)ZwO)i9+knS-i@)o9HJ*+4v@(jdod5wFQV_mrzZa{iId63#R3m>3L z#x@5vjBRlh-Rr5{L?j zsm@{Ors`1Dkue=s)nvN-wOsqV)&p4&q=%Z5%l+giJj>p9eeoc7d+@Z+sju=Q4eHMB zs&va)0CQMUp9NY3o#!U@zeVoT(HeeZ3G4r0bI^4OYd~Wd%b3P4Racc_X|SyEf5coa zpZf3YTF1N1FVR*XBbf@0vy;yi(WKtiCRUTaTFGDLq>I(yK2?+l^LR!a(&;zaguS(N zo1Px}o#d~}(!HXr8W_+X0lhCu8*TMbxthYr@?$04=YxZ=0}NbO+MI%SV0pW&R+Eqp pbYyK@CTp0efvW16D%*ej{Q(a7zk5up6%zme002ovPDHLkV1g!8Ymfi{ literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_15.imageset/Contents.json b/Signal/Images.xcassets/disappearing_message_15.imageset/Contents.json new file mode 100644 index 000000000..fe7ff22dc --- /dev/null +++ b/Signal/Images.xcassets/disappearing_message_15.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "timer15_12@1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "timer15_12@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "timer15_12@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Signal/Images.xcassets/disappearing_message_15.imageset/timer15_12@1x.png b/Signal/Images.xcassets/disappearing_message_15.imageset/timer15_12@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..7db85f05eaffacdd2e4ef419c4f30d380c78b46f GIT binary patch literal 244 zcmVPx#u1Q2eR45gdkxdQ(K@diVNNgNH+<|Zo&SBvYB4O(QPGVzWA$Cr~p7$!uBwmvxU&?lv3EGa61woC37JF6cCbU3!v)STf{>jpZj#-1a06@O7`d}? zN$z-pRcWy)w_xGg+IVuZ9{9OI&EXMMmhQz uYeXrLcXEuP%oX3szhg_RlN05U-<@B#GZS1_{~o;n0000Px$NJ&INR7efomP<;+Komu7wRNB?@IwmJy*PB@$TjFha4XJ4TkwPE65NFgaG*mc zB8cMW9EnX)q@`k|5xj7cROP*!u9xJcdlT*SQitEMzkzEwgL`PDis)kqN!ADBlsD!M zVF9vrK%_<|NyZH0d02xjIEPm-_7OH9ON&Gu!BR%_3NcsUMc!c>#-cr3EtjmPSE!h< zEdKHm?UL+D9$+~(@`ifCvXtr)1HJZRqrl)4a%vvuH5~^gpKD4h(&Ya&cfr`aXe zDLc_4eG{I_Y({6Va>^ClPP6g#@55|;%x?LjX+|4wZ_IM&=Q+^Vs;MC;h}$@H@s%PwrJIoYy) s-lULZXe6-$17po8mVN8{uS=HMC;ZYufWcPx%XGugsR9Fe^m_2J0Q51&bM`EEMVoV@f3ReDt7!bi&TBh*_2%t&qF@vJ{&=2sj@%t*bZ74FjzwO0cV_O+dC!@9&%O7|OiktEG7_H) zzUBB7-hmh4JRA%5pgLEh+@t+R4ZqU<0ItAYa3okpWfQK$D$yS8bpfUA&$w?9X5k3d zA7Kbzs8HKS+YCGakHaOn2A@ECC~V_+i?+S6HLhc+*n7CzP{jwj2|vIH$m1h;2)2Sx zej6&@7Dq9>2h*T7xIWlca1?gt-xc^BMqu|jugXiBe<7zALgQaYXWTa!L0zjea5g#C z=8VHMPFzAf0l%2WGIJM&@b7tJQi-YjzVmg31u3Trl!Pzv4p*x13?ZT&iPs0J2 zT&^=sr}ltI!wd5#dda1rb1V=+n&9)hI}T|J|BsUxPMOSIW0nBU6+yi2x`&M8MG=gL zMK?L?88=9A1AgkCHUH@~H|blX+sCXk%i?Of5Hm2Z+rZh9i&y`{kfjeX?T}rCF=X~w zTezmQ#s0$3t!oE6J&@G{=}K)vySXmG=UJ-58@rL8fG^7?U6db|IF>rDU+d5qexr*5 z%_1;Lk4?_g(dq|wmS5k&CQ-ub&@x$H`qXzNCQ&Jt9e3fg97EpqC|(rp1#@O3Z!?aw z$=Bvp8nb?l9<==o7_CJb7mP4r=@E}RW;C~Jsf&ohBn%& zQ9GN$Xqe9;54rgyJPdW*6xy7J@1SoOf5k8XDWK4s8YN5KFU5a#%zD7Y%5AMj!OSlB4*(3uf4>Bf<}4NdNjLJIs%cY65FTx3yc{BzzXqsd^M zz=Vwg9orcVv||G1Cb zbU5SSv!Urqqtj&3BMppSI+|HoPL!gTe~DWM4fRTN&R literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_20.imageset/timer20_12@2x.png b/Signal/Images.xcassets/disappearing_message_20.imageset/timer20_12@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4a5d97c64d76c0270a2a6492e3dd3ae8aa47f00a GIT binary patch literal 486 zcmV@P)Px$ph-kQR7efQl}jrHVH}4Ya$;pAxzw2rR^l7j*x0X&Rq8y`V77P3)tD=U$$ zBp<-W#>P@9A*I|s&*_}goJnKGO!?Jw&ivp1ZRUOFeW%cnPOpT&z&%{R8SKCfq*96K zEeIl6U)WLJ7&Epr5*ur7;I+_RB&vul1278*U;|?xVGVX!6tRJ0tQ^rBy&z!tcLK~;2l!E zS+P|k&J%2#EHp(Nd6{m=ad^(FV6;vj13tl}4!dc%fs$yIpwV9fTk%`7`~+zlj8qa$ zK8AkyN!12-KRM&ZnsLs<1K7lyTY)wRs~1E6Rd_JXbvwc9@BtROg=uI6H3g0zX=KqL z$){j3@dzJ={fa%qe^~*)yYSbIHbL$+R2%tZp0c&0$Malg-S);#qZWdfz&FQQYfw{( zt2_=n3kKjPx%=}AOER9Fesn9GZeaTv#kVJO$!nzEp%$wD?3l$uheDA|zG)a-0rvQ^3;`~#Yj zjk2_`a*aA=F)2x8QWmlkDWZ(K&u2Q%^gHjIcgB0(_Z)oddw$RF@?6gE`kd3%RUXGN z@fCi6uizti2@b(Eur27u>Z%;e!?gd(;ZNFc!#z+Nm0$oXV{jDCYGQGiw!DDS_9u+n z+C;xl(@I8J#{*Z{qQKf1HZ%2wRFZtpyOM{IW#r)9v&)a#V>RgeuQaY zHR?-YOIV1O-%8`H!kN1U)1aPFU(u?;s`L(H=m(6zYRGe8F3QY8uF*`#0qW`Aa`u~I z2d$r>d&XsICyrn|X326})|q$2STZO#>a1dk`qjkWL*#}l#ZBiuW3-;8PApw7em>QG z>UTeEfDwAn6g}DvMhaF=Gd`B?Rzcmi40o1dgIo4i_P(?ju1n^IUI%Bx7k>P0+)M)4 z@Gk`PGzqA04i)nmA4qW?ewmPpe|R!Iq2CIs`h*1f6ilvSr68AKShybdS6E#*u|1A6U}orJMu4Y%b?mXiME$fmGM>TSCyeTpu?Q_#LVEJ!-u zC30!eJ#-PKuer1J1|EcY2WUHeF}wGXE5{}*)?he^@-c1wFpFa}#F)$3&MNDBG4>LM zvnYL3*TTSEgy`EBjqNJuWB3G2A5ooqn$E!WFqYWUz8FrTosa8kyj+1M`7s-o<4OG< z@+3Nyer&hTvNm!PJnaz_iHy^JUO`%BN;C zYzps^PQ(56f1`>Yiq5?IvXWmj?kP8)sYNUKwmRx+LtCZbH%sq|!6w#xn0xAsM>-v* zPMjt$#M1k803%)rqtGLp#V`%wP&o^A)YXP3d0Lo$%mn{d*$7QBbX*kb_=lCLh0nya t_>+J%pdr(UW-#TAv^6jN&C{J??>E#g)&!vJD>wiE002ovPDHLkV1gbHi&g*t literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_25.imageset/Contents.json b/Signal/Images.xcassets/disappearing_message_25.imageset/Contents.json new file mode 100644 index 000000000..2b621a91c --- /dev/null +++ b/Signal/Images.xcassets/disappearing_message_25.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "timer25_12@1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "timer25_12@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "timer25_12@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Signal/Images.xcassets/disappearing_message_25.imageset/timer25_12@1x.png b/Signal/Images.xcassets/disappearing_message_25.imageset/timer25_12@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..7868a6e0253061712dec7d63813522b737a756ed GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k#^NA%Cx&(BWL^R}r#xL8Lo`Hd zC))BkI*PcpyQqk`c)W2?H_2&?%4gP+-oVg$&rQTh)x$*Sw7|t14WDhVOPsffFEaYB z|NY$D!gq_6(yrf;e9l{D&?NI`g>On`py-qYj%o`>R-u)fyZ&eT6>+nQzLa`@?o;xm zBc?scC)dm>zON!&^wm|4{`urzQz`NO U+WtpJfxcq!boFyt=akR{0EK~S!TPx$vPnciR7efAmCGvyQ5?r7a$`d&6f#pp+4vJ|Y;4hGuUK-e{Rv`WrKC`#cXwUH~F%|cb)=i*3N1s|Ss(|jT zTpGt)fzRN(VubjaSI-5T>=6>S9Gfr?DoB&Izw^Otqzv71}b_Folut= zh`t0RT!t0X|E8S;uR?z~qhwJ5ZMbb`y_tPx&7D+@wR9FekmphD2Q51#;<4uHNNQMj=i9{3>su2>Cs5Eqw2!%%!NHh|OE6k|8 z8kJ5*qd~$%G%}_j63Hm1P#9B*AztJ0{bR3W-Rqot&pwYEEBWtP`|S0)d#}CrIvpLw z=`1F`gHK=rya2brG0+Vvp*dJhGhSovcM25fJ+KeRMk&;fl`${^W+hmx@h&YO|NbR% z+Y|JoUadmd*&QwV%9}j`~d)4Tyn-{7x63}UC$JVXE z&&S|Xe)oVnQq-z5u}8bkNaWxO^0rEkB6TYfUx(EnE~uW_mAJ`n^ev*Q=tg~|U3g|O z$Fmom-9c~ie+Wpqdng3dsVb>{Mi->$GWa&bweM%#xmqq>J&R?!Ztc9Z7saG*pq0HY z1kC??2^S4WHS0kznx}>>3c3nvN?Udw*p_KOV@W}53`)y*UIItMILpHq;i)VNS!A?b zw(Po_wq{WZGG2GMtU9E7N!uop%^NdZwx7*T?2Y3KvzxHs^KpMhi^Is->K@6clUeMl zGd>Q#poQjI=B+nUxmoGu%eY*X)RVye@j34xfxqBn@A&yL+Yc?f1*GP_$2)SoR_8M? z*}C?l%mz(Kt%l1S-G)yht%%9IhX1GJD8jN@*qzRqn))5U(-{U9jM|TFe$w;4Ncs19 z_`4{X(@}U^fdlZC$eOQ#w$OUKd;u2JL3pi<4@RFsb3qgp`B2m~Vgcz`8?Waxpi>!5 z`Ye(G-C42y_F{ASEiYZQAFW8ACtE-lkmFcV66;Ud)-~175|9kYsIG)0 mQnIR+h|=2McYmi_|Na3Grs0VZHt)Lt0000xg5?l%;XVvUhe2;#dO5;h0u>5_Z&{HRbW-%Z(5_uqSC-MFZru&z#_)3 zMiH3?-c-h-*$2_*$YG@HT2fTegFZXh$LAgkXntKlqM(c95!L`lzbl z)@PwGy^+1cQIMUh-d~}QJxPS2%Yk`?2lE6r)!t->Ijlz%EDabK^fyW^cKKDj1n40K MPgg&ebxsLQ0NZ?3@&Et; literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_30.imageset/timer30_12@2x.png b/Signal/Images.xcassets/disappearing_message_30.imageset/timer30_12@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f17acc8ca94572426382e7b320b14987ca1cf1dd GIT binary patch literal 446 zcmV;v0YUzWP)Px$cu7P-R7efAmb*#>F%*Vf6}9jMyfMMsBlrv!B4Qyv#A37Ps|XgN2;M+jI~zND z8?65bN)$&oY}@eUVN7FN5(t2hEsTgtSC?)fs3+! zxsLhf-T_R4IrdSi&~cP8!u1#|!X})9RwZp4*1!}~s19M;pq@o@2{QSCE$B;ZQ&rm~ zR$_;O8`>5;rW+3fsQ)s6odv`DUO*Ky&h z4^GO!k$eIAO$JSPx%$Vo&&R9FekmrqL-VHCzSty~CJkY=_Bzd-A1Q5XtB`-1!cfvem^L^KgtP^*aO z6SS#Tx$uG;%M$tkZCz?4@%SENLGhM+1Y64wN)#(lA;~ zhSNIabf3`yDLjBXb*;RgWpAiK>AGB54Rval4Q;|U{~Z!VkTXtih^$xG z01vj)N^b>CudwDM%S|!BI88u_mwYRk1+;2Po1`Z33uq@o4P9*wgac~4@Dv?>y7Xts zp1IM7;!CKnSQ}Fx6<48_dn!!R+g4xHeLHaPqgL5T-f4ksd41IH4YWms`VTtGlAx?i zxeju$nbetg>N5h*z;Sp9T1HUof9yUoa5^GAwEC1@?Ne5J-^(K&Y*Hu51^Ox2LZIDL z-)>Q87SJ3<7o!ZL+M1QjY&7w{*h5HeyLZ2k;u_R3@D3^~pJB`R3-3Px#)Ja4^R45gFk#A=p|rCW z|I?W809h?k8}FS}Cuu>@O$y_DwYO8C1FC0RCA%>5D&s936Xfu;Q`5=r)KA9?%OTGo zCg|YJ<=clYQ=g%xz>->CLQkH3t-7tLOh*&yHK^T4`qBe*bv{&}4O`GZD8iTY_5k*9 gfh%aSdXH}L1=cwpEFV?`IsgCw07*qoM6N<$f)Sf^0ssI2 literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_35.imageset/timer35_12@2x.png b/Signal/Images.xcassets/disappearing_message_35.imageset/timer35_12@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6382a8b85bfca77abd821bdbf666b9a8b522b40b GIT binary patch literal 545 zcmV++0^a?JP)Px$+et)0R7ef2mOC#*K^TTDAv6>sVu?M8APR|ppwUQZTpKkVv5m%05RF1K68F$p zL@OeGz_v6Sm4vuOBJMoz<{a6bU2|r$`zDW_%lm!bp4pi>B4vf?9s3(RKoZVi3$CFc z#c*$cXGHzbH~C;p-X_Cq?XEJbL_3D7ioWQEX-I$y$omAN;G||;YtZ80RSIS7gjnH6FTXj$~li_rqXD)J1`%tV|1gqEck=}8VjMY3{v4Cn`SS#xYw^)Raf zpHR@wvSu|VPw1;iyuz3$RaXac7+y=2(9F}tfS%w|6RM_;4vY;7war{D5P}fC=Bf@8Z|K{sJv!r%M2y zUC`5NS<~|PyAAmc+9~5QFM^9aOgdzGZ$u$2-RDY@b-d}1_~SQx)`5!-Fe#Vrwm-#a znU`HPV=0h%5?mDQv^&h97w0@CB~L;*gei_eevxxso53CfIwUgpf=#VV9)Y~t3{wy) zy~u-rJ=$Z?4mzQt1I9tyFgU39wB>VBBd%o#-nT0DA1bg8iph~)5H{(D8iWDRx2^|0 jK?*J)__yVjc3%Agh242-G=-fO00000NkvXXu0mjfKPx&7)eAyR9Fekm^o-vQ51&bzTk#Sh=@duAPRzog@PCm4Jt?~QA7w>*tlXR3I^9o zZ6uAQrG;9!qVl>ZsECk&T8NFHHg0ItxO{)|PB?FPFEjVfO!S9;?lSlM@4R#GJ@?Ku zG*pknNc?~w;cNH=UW6U68P)}3P;D$w?xg=u0e{nf8@5Af)C6s)^ulg9Do3%Cz9NTw z|1-v|&an^bn#1TmXu>;ltS8VnKBc1A3irc1upgSON=2*-YJ4Y+V5RfqEX{smoA#PDpxu*1C$`QS8P@&hQhE=pLyXQTko=GWMbjmaGR=a5=rml(S zd`X|F=Wc@;$V26s(5;;j32Yo^yiMJ$K-;9M+8*-DQ&g|#y`NhlJNv9ssv5U$E0 z<3J?IuUJ(C9y)-DGynMw#Vp9#ORe1ITs_6+RUf? z>9po~tx6BqqfX!*bz9V4tJ3;er==eSLujPd4HdfKt{-{>e`VNBI~F=vKS7%=T@Z&* z=>_c)7AEkNdhF4o*|=GvMKg;wn!{aTSMj}mSD8btS@WRQL8qhCp{<{bqMM@L=pi&` zbp4FQE)0GCQgRJO2NvdxqPQSfVbI_Jg^%(B+Bz+QFq6^mp*eIS$a-*aGli0;X{c1h zr5%h5SeQ^B^~C`S3mK~y@H6IHm&7#xccB*MI;ia{ad9qO4-din&`*zS z`{8*w2}WZjmI<^d#g_UbOIkI<7L@Kmf1xYqoT7UbwnOE*ve0%8#WV~y!p*P+YGLY< or6c4Gd=6j09(WDvc&QkF0j-4ql&WRsiU0rr07*qoM6N<$f(DC`cmMzZ literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_40.imageset/Contents.json b/Signal/Images.xcassets/disappearing_message_40.imageset/Contents.json new file mode 100644 index 000000000..7826d3b5f --- /dev/null +++ b/Signal/Images.xcassets/disappearing_message_40.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "timer40_12@1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "timer40_12@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "timer40_12@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Signal/Images.xcassets/disappearing_message_40.imageset/timer40_12@1x.png b/Signal/Images.xcassets/disappearing_message_40.imageset/timer40_12@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4e49b5c3ae55553897f590e0b88da4619af618c7 GIT binary patch literal 289 zcmV++0p9+JP)Px#+et)0R45gFkueSdK@^6EL?jdvOQO>1gvu4rZtnsr7jOWDUg-i`DuhZTqER`4 zZc(iR`2NZ6lCkSgzRbLNFK_1kW6Vcow*5Gqvp(PeJ`~_bT~1cq%F*!4vM_O3#q3x;03WEjAa}!4TTuft-<@`h)c2 n*juT?6i)Dh2xNe~SI+7UzS|%stog&<00000NkvXXu0mjfi}QK^ literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_40.imageset/timer40_12@2x.png b/Signal/Images.xcassets/disappearing_message_40.imageset/timer40_12@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c7576f226c9a50faad06e56dbcf36358ee366ca4 GIT binary patch literal 554 zcmV+_0@eMAP)Px$YCJxp(HC8wA;OiTf$+ z!8**tL&&TGGd@8vHuHvl9Fu;8$1&f;?t82TT8Vi*pf3Y30jppFeGg$A>QXOWA0S_c zcOO1$V3I#D2TjpyqK4Zy63Sx|c1Y6;989oX&9RliS@;DydHml( zmZ~}VZ|*n#Z|NnyEikZb!XRXoMbP<{^NODG8x|}LJ1|zUWdE`Fxvdhd`W+nuyB!PQ zcYI%k59%Ee$xPOBlPpG~*&AU+HP)RA$SrXNCRu{43M;8GYF<1u7_Y%3U!eeLD&i1U zQ0JvyIHNfI2A$903wS*~2M8FyIONgdgB4_Mxi&0xKbYag$8@pa1{>07*qoM6N<$f|{f3@Bjb+ literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_40.imageset/timer40_12@3x.png b/Signal/Images.xcassets/disappearing_message_40.imageset/timer40_12@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d596ab63945da9b4094aabd602bf08b2e5b75cc1 GIT binary patch literal 900 zcmV-~1AF|5P)Px&K1oDDR9Fekmpf<_Q51%w#z%aRXf!G@tf?e|SeU|UMInJy0nttnEksdB#5AH{ zBt9yMAP9n;oi=Gy)F6u@nnDo;u}dL>#==K@zrSDR$k}ywoI5)!9{6@1EPQ0485U1}?(O zmHu9{Nds78M%`3P>qp!YQgZpy#_Nj zJ8z;k)ovFQnX=Y86FRkvL;@d9;BRl~YG746}{)dD#cDF?d)oYd1c}5$g>^OY-b(j2SI<8IdB6&!W=eT>CuX~+YY@}<~ z4zV7bAH$`Ppc3C^o~`}os!Nm53gSvPOC^`aW)oxyO{&WdfpwYsGtL^Rl>Z)3SDC%$ zM*lR8`9*j#seqP;9WVj*Z*Y*ajjL~2rS9(sX_|h4`v!ip~v_0rUYN&NNNh_gQ8?4RiR4h}=e z^l!so=VpJHmzK1Hzgo3Q$ a*nR?gw-9&k??Ord0000|30b-?Ut@0;YweF{bFI0@^h0$cx3mb~h?_0dU$&zJlw}}ef5XPOwc=e9rG3u6>!|^HfWgz%&t;ucLK6UAs$Yiy literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_45.imageset/timer45_12@2x.png b/Signal/Images.xcassets/disappearing_message_45.imageset/timer45_12@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0c963ac8fb6e7931131d75c9ce36b675870bf13 GIT binary patch literal 482 zcmV<80UiE{P)Px$oJmAMR7efAmAgsz@h6&04<+=F#7vD=Zq)Hump!JSDxaXVQtrk(mQn6KK&hX?X+a)OtT-DMRr5bUYV zKp3q!!APx%u}MThR9Fecmpf|}Q51#a8zJBWj8Riu#NJv&A^{a4y@LJ#!OBJv5v~?uVPPTS ze^4unC!%C+W+QYjrJGd9M}YgVy9tw58i-Iq)poM1f}h7>31BIvVC~} z06~1Q1KSSTwu5cpFqi^Yz#RAu!Z*qXv~2~2?GB!jeF2vTWO17Bf>jWLEN8(UP{>B{ zdI%h?qBeo!6Of8>8SE}fI4r*#5d8rm>^XHeOsqNb^@GgW)e z47#<~kqr3Y`UydvTN`f9#2QePk4%;dyYR!U>z_c(VVN@F9jNLd9C5!nWxob;ueh^QmI}Jh^Vf=Fw$qO% z4ND4I292!o8Rg5YURTjtH(9Vnr!2ikj@G3jiE}Kee^Ah?q~UB*udABgVg3-bepOhNxRL3d+4)PbPv^s87@&s%QGKkcfI*u^>~Ot_hm)r$CzPUbC?x z>zTqvT-Q&mB^S5}`LOLggz1O7j&jYR^l%JOI{G!Xmo+)$O2zd24KnC1@D7A1OXu4~ zSk&}Q*NmLT==(>}j;c>ZnUFiYo*n&~ef3F`c{%0oTMT_$W;U6g6CuvrcOF~?C%_Rf zn!&nlzO#>g!!JrXOJ%B)5P07OVbM|!xrS!bFwKEZU!5n?zWV6fmlfGP{;GHhp8*YE p`Y;Z(C16VW5qMF~fX|?B`v;BG`2a3fH*^31002ovPDHLkV1hBtUn2kj literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_50.imageset/Contents.json b/Signal/Images.xcassets/disappearing_message_50.imageset/Contents.json new file mode 100644 index 000000000..bfbb47f13 --- /dev/null +++ b/Signal/Images.xcassets/disappearing_message_50.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "timer50_12@1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "timer50_12@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "timer50_12@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Signal/Images.xcassets/disappearing_message_50.imageset/timer50_12@1x.png b/Signal/Images.xcassets/disappearing_message_50.imageset/timer50_12@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..73b8c3aa4cafd47231a250b46208cbf879ba9962 GIT binary patch literal 302 zcmV+}0nz@6P)Px#=t)FDR45gFk-ZK9K@^1-5jyc#Xq0pkiNrGyD!r1%6DT}@P9c(J3Tq zrGixozO$KSHY-l@?LGJI+&jB7j`LLlTQ%v3=)x9y5QmT|RA#0cAr_zw2e?29JgM8C zY)XL;CELIiG{_mi12jDkzoaHLOk+GIFoYbaNzHqBg0B}Q34IlAkd{GZn8Oh=V5>&r z4bf@n2W{2u#CUyyt50gd$w2UQ_Kg)A_^k2{tYrR3r?Y^r)+pJ**my!ndbfnn1*S|v zQ?#SDEPx%5lKWrR7ef2mCZ|4K^TWMC<`(-hG0>bBEwCgu7b!-i(0giu!#1x&24+3jSJi8 zMyW_L1j(=Ur9U9rBostMAyM?P3N$sJ=QsoBp6mTM*ZYI#oO$QG?>l#9-kICll204B zufrOAgk^XIUm=%HD9^^tgb^^mG{)LBd7#h_Y zf#&)U6S&_0U<=|pexiL78qsBfTqa3oai4~Xt%yN*8*KZEa1rv#b7B0PflI*{)<6f~ z9()I#oY^EChk7-Rqp{x%aIG}XX{6LadkkWo|DpW=4ni$m!@-=M`j(%;IHIwK&eOL7 z2FO*YrA{35bsv(-(Wo?lKI%F=PFl4e&fc8Ab$u5MkAJh|>2`q6Zs_}vwJ*Gz@wya} zym5fn!MNRw%pu2(@J@1DepZT{3Lp0KDiG`yZUuEiqNhAvv&CI=Ur+yl%r%wH;$`Bc8$l3OsnB3C$3M!E&*}Bz1$Gq}~87o7Tg1sW5lT$5Ja!mERZ!WEIUMuFPDo2l} z+s&GVyKn}Mfd{e|th#xKSBXm;?=za!<@&ivRzjRnrMClEB<^FGTFZJ$J1nzXa0LdS l9ooR_comA^Kj9D9Q#%UZjyn^3zVHA5002ovPDHLkV1ghP7Wn`G literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_50.imageset/timer50_12@3x.png b/Signal/Images.xcassets/disappearing_message_50.imageset/timer50_12@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..fff2f9b6c8cafdc970efcd2e2ddac1826742e1b7 GIT binary patch literal 932 zcmV;V16%xwP)Px&UP(kjR9Fecm`#X{Q5eUs?{7jT8oFbFg`{LLn_*JaEHo)uVKE!U!qk+~Y^Hpa z1vVlJMYa}`&xmm&aV@0OV4>Oh%n(8t{C|_@_S`$~d*^-Md+zwx-+AtH&iS9`J?A+e zBbTck`z7&1{472fZ;R)|9pYTEE|?(Ih8X1@`TxZ5r~G~57BLt$NvU7FFOG{)?U64o zAn$*ucDp0`r*bV&>+hloZ;$9bMZU@6OmVr`Dt3u?#Uau9T3M8j_L*^5JrVmT?n$Y_ zG9MBBN10YrO080JzWk)fY-Pn7b$lh-EKz1U`lVwxmvBp#1yZ?1>2zMKM}FONyn_uZ%}7zQ?p!rlvD9@OtPE(Cs~jt{ z#SK&>pnm7zP8(~ia|7PNZV;Jv){!jtQ>dSH1^HuRGk&9u)+@sj>wr1Opgiivz2V1e zcNJWsd0$y4n?v}MXcMu~kHh1Lr=(S0@s)M3dH7v(<8fDx08fEmq6M{gM2m2aPB+ew zY@gU=qa1e)N$`%c+Au%RBnbO(-d?eorka9ijp@kOgnC;u>wKu`Kaf39tP1Y4qG+8c zS?|$a0%{VAylTixugMsR|GJ?e(R%@Q1lyFeBPlr3I7ZmHUaO$re0VA_m4`&X-iUIL zT^GAWl92$pv8Ri9u}$m}`$WGy^kvhKr=&(^Feuy7e_;jXrfGsPx#@<~KNR45gFk+Dt!Q4mF!ES3huSlHOw+1gMULkumwKVStP;0O3Yniy>eBm^6+ z^b-UMAV?_Tob|nRvoYM{F!#;A9cE_JPx%CrLy>R7ef2l|5@zK@^79h@gc=5fxN41ToP@(9TASAXwNWqQM9jK`c^8to0v= z7FI$KOecsMMQd4WApt89gn%g$OvDIA@#}fkGjf;Qo!vG2!h2`V=X{-+yS~ysmI=8G zPr+UA1N;oz!VbJA;K7opU+8`p_?`ZJxCgd`vv@5+lRPbn*oN*HyZ~RoG~g2bb1;ih ztUsa2Q+pyCQK=lj{ybtFY^;(05Qa3HoAj?k2bzXmFo$&*Z@@GuccBhDkrto{Z--?g z?fcMO30<=$P3jYl`-;w!2qu42RMK}Q>gQoMYz9~2xfpXVId7-465OAZh4v+V18x;` zxvrI`{|{JO#nn(eq%Fe{lRVsU3^|g(&N!~qDj^E&H<{C@k}Q&M~?L9y;9x{zd88a|8{loxz;FkY!~UC_^hNeSe3(P zIlbvFwf0!8@~T(#AiA|_a!sFhM|X(^cu`5=&0;#t%d00000NkvXX Hu0mjfY#bW` literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_55.imageset/timer55_12@3x.png b/Signal/Images.xcassets/disappearing_message_55.imageset/timer55_12@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0c26dfe75d7849c280d7ea0c125e1ffc053a23b2 GIT binary patch literal 962 zcmV;z13mnSP)Px&d`Uz>R9FeUmq}<;K@f&#j1m__G42baAhe-um2#AV%Vi5J91oR+YJZYi`abM%|e~(wD=8?CJlPUP;Rd-eYRj<3c`%SS> zJ^3K2x58`Txo|VYfSy&Cq8R6;u>O|)&nW0s-&O&Rsz{Sq?g>wXx&+3!ge=LY8rzaE zKGjq&k2AusV5IvJMopA$zOY8<5UvP61slurm(VHTn@gt1`-b4j&<6!+W0_dWo#v={$8o^@NN5leWrC~^1WSe~J}B&VeP5+77V--9 zcTzBJp2Q+%tQ?lb29V5-(32hV(Ah48{gpg+YLMRmr{YMOW$;DF%y?O?h9_F*jXCub z^0ya34tIzB+rF;(!6f(1rBphll1WW34 zl5>h}w(LJbE@IOz>$tGZS0n`0WtOsjw9G@uUtndW>8%BSvU5X^u$v)hGe

h4vWuCQMQE_ zMZIg#o~sy^&>*{P$OT>E^jfJ)U7!IH;uFARttmBpHoI8;B=qmdmfqrwwNm{Z#wSj2 zRoEI*RJE)lO2j^CIPrt4L(jr>!IJ8vqegO6aV&1PkGaVi_`^r#kF}H(z<)S-&)4sqGb4@+Ma$IV|Hb0oR;ILH6!htmp~ zSY1h6<7MPrvZNTu+f+j+0cPE=LXX;$ghZJkE9ZeF#gp|e36%<)gu3*c#NcAhBslg6 zo`4;}HqCRraHesLuyZ{ZtH6ur5~h;%rRY2v%XnKjAhZf4fzKAc6iA>&;E%vHfrHkM zWx1$RN~2<72e2(YaV0v(3dvSQI3wDGZXx>CX~}U5aPVf5N)A8nn{7g)uu@ndP;*~G k4CzUY^a*!`mqKRw3!sub4!aW#IsgCw07*qoM6N<$f-d*Uy#N3J literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_60.imageset/Contents.json b/Signal/Images.xcassets/disappearing_message_60.imageset/Contents.json new file mode 100644 index 000000000..96fc1606d --- /dev/null +++ b/Signal/Images.xcassets/disappearing_message_60.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "timer60_12@1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "timer60_12@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "timer60_12@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Signal/Images.xcassets/disappearing_message_60.imageset/timer60_12@1x.png b/Signal/Images.xcassets/disappearing_message_60.imageset/timer60_12@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..910d08785ca92954e5dbeed05ea9d130dc65a73e GIT binary patch literal 272 zcmV+r0q_2aP)Px#%1J~)R45gN&^-~ zzLP=XCv%d=J#+7O=0^~`D^1(M78jf`LklTH6~=3xbq+%#lwfVph64?po|9uPmMFu) zYi!C|!44CI4m6QL4|jZ)dtF3Xf9e?EhJWSI5H$x1*dwV91k46UWNi}4%+V(}Sxg9f zY{qQ#(Q8(R|CMKEn$N(BrjK7k?s;bBRXI90yh|0nuk79P%*Px$)k#D_R7ef2mb*#=K@^4)u@S^tK|#FLR=$9hA_^8F_zJO5!DkU|EEO*h8yjE5 zSZa|{N#iZ*|HVD)>}E1E3m*8gGjq=TC$l?qcI&mUP076>mc^nN6C>hD+>1MLF504! zA$%m>#CL>G`A@~TNU{}0Jqv_i#f8`sbHb9%tGz8Q#d|jXqU)vz+OE7^fzXwh7Oq(W zcZ}6G1wQ7Y;k7l55&#F@h`$y1-1{2*%2+Q4Olp87@-Gg{PN(l%f#a_2sY47}tSq-< zwQyYLBmPD#0khB`?t~6TrjLwS1_G9nU`F#zueXYZ2AIfxj#)|qG|mLEjUoN8EwP*5 z%fI}Z)+%Zbf^6*bn5C}3&P)rzj$q;_ort9-K#SPUa73`|u9pX5eV&08s)<-|1;1&v zNzl7bx-L}^h=rO~iv+h>bl>rgsRaC{)zhwW&;pvdi^EztXn0afMXnNPSgAlWx71>n zPZ-dkP_jKKc4!vNE!UxnTA1W?nA6Qb%WLinho#1fA0ouqZ6U$H7Y@M~+3nrH!=ec8 z2wsz%P@v5iK4R>)4E*PcDH!*Uhh&qjMEI`65ZiapHCBrqeYP;4EmYhEVP6iM{+3{$ dH^rmy+7GPIj7w$;v`_#5002ovPDHLkV1n|2_ZR>G literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/disappearing_message_60.imageset/timer60_12@3x.png b/Signal/Images.xcassets/disappearing_message_60.imageset/timer60_12@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..099455efb0153837744fa55cf73c3e804ece0451 GIT binary patch literal 864 zcmV-m1E2hfP)Px&8c9S!R9FeUmrH9DK@^3J;x0b$nemy0KS2Z+5)?56f=hMdj}S#yLW{UE;7b35 zC@6+R#YM#DPJ}FU6E|X15G05TpXY1m#xs-dnd(fY51g)BRrl5P=&BxARUKPoa#%bf z?iV+RgW@{ztN2!YBfb)Ei=V~5;HbRLh`+@@iTokGN%4d@Ag%})jVEGi5@mWX<>Npv z8LgJ_m4ZZmsqKMyMr7KqiID^{BY8ob648x5N=EmFxK^wL)&)cD&c3OBN!%eiGF3tk z*|A5J%i@9N^4eh2RBvURbri)E^-letMRVrK3}W8wMg09)~GTqh9N`F z@OMI{&d^8h1g6I@B}ug=6GY zY?mTCH*Ak%$hQWZ|5xPC>w3PodcVYva?Cd=a5jWZ5`KzgO4)TQO2?6@5^srI1>2+? z3!K=S8KE&Tw%#+zeLD>0yB(j@z}f}mFh)Y7)S9>#LXG95#X3ep!`855wOe1m#24mx zF9|iQ;e*L_i5{~-LPHjL-sHMOkC_jSpTyk!>IN}mmo6|uo}rIcU5R&p0Uy=nr(Fy#EQ7& zun2}NI;vhj7M)ZSxZ)5i;`-F(u9ka2tC&Zw&IOH2U?dXTfEQ$R8G3ftl&v4ZbN zhLYHY@Hyp@f2vTcw?=&Wp9e8Z(f%8RA#cMF_X>RA%afT_J?>(q{)>JTneQt1>~`na z`kG;yW<_Ep0Y$R+d1gm2yj8Ba=wjo$37_~*PDZ*p7)oDLksKeg$09!lhs1s2V3WwS z(T7fa^um@BpIxU(I;9v1C q*bs+Az}<@L%sY{Ta!ULnCgU#+117%u*+wY<0000 @@ -13,6 +14,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic) UILabel *timestampLabel; @property (nonatomic) UIImageView *statusIndicatorImageView; +@property (nonatomic, nullable) OWSMessageTimerView *messageTimerView; @end @@ -160,6 +162,19 @@ NS_ASSUME_NONNULL_BEGIN return messageStatus == MessageReceiptStatusFailed; } +- (BOOL)isDisappearingMessage:(ConversationViewItem *)viewItem +{ + OWSAssert(viewItem); + + if (viewItem.interaction.interactionType != OWSInteractionType_OutgoingMessage + && viewItem.interaction.interactionType != OWSInteractionType_IncomingMessage) { + return NO; + } + + TSMessage *message = (TSMessage *)viewItem.interaction; + return message.shouldStartExpireTimer; +} + - (void)configureLabelsWithConversationViewItem:(ConversationViewItem *)viewItem { OWSAssert(viewItem); @@ -218,6 +233,11 @@ NS_ASSUME_NONNULL_BEGIN result.width += (self.maxImageWidth + self.hSpacing); } } + + if ([self isDisappearingMessage:viewItem]) { + result.width += ([OWSMessageTimerView measureSize].width + self.hSpacing); + } + return CGSizeCeil(result); } @@ -236,6 +256,9 @@ NS_ASSUME_NONNULL_BEGIN - (void)prepareForReuse { [self.statusIndicatorImageView.layer removeAllAnimations]; + + [self.messageTimerView removeFromSuperview]; + self.messageTimerView = nil; } @end diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTimerView.h b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTimerView.h new file mode 100644 index 000000000..2a40d4b6c --- /dev/null +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTimerView.h @@ -0,0 +1,22 @@ +// +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface OWSMessageTimerView : UIView + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; + +- (instancetype)initWithExpiration:(uint64_t)expirationTimestamp + initialDurationSeconds:(uint32_t)initialDurationSeconds NS_DESIGNATED_INITIALIZER; + ++ (CGSize)measureSize; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTimerView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTimerView.m new file mode 100644 index 000000000..29bf545dd --- /dev/null +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageTimerView.m @@ -0,0 +1,169 @@ +// +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// + +#import "OWSMessageTimerView.h" +#import "ConversationViewController.h" +#import "NSDate+OWS.h" +#import "OWSMath.h" +#import "UIColor+OWS.h" +#import "UIView+OWS.h" +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +const CGFloat kDisappearingMessageIconSize = 12.f; + +@interface OWSMessageTimerView () + +@property (nonatomic) uint32_t initialDurationSeconds; +@property (nonatomic) uint64_t expirationTimestamp; +@property (nonatomic) UIColor *tintColor; + +@property (nonatomic) UIImageView *imageView; + +@property (nonatomic, nullable) NSTimer *animationTimer; + +@property (nonatomic) NSInteger progress12; + + +@end + +#pragma mark - + +@implementation OWSMessageTimerView + +- (void)dealloc +{ + [self.animationTimer invalidate]; + self.animationTimer = nil; +} + +- (instancetype)initWithExpiration:(uint64_t)expirationTimestamp + initialDurationSeconds:(uint32_t)initialDurationSeconds + tintColor:(UIColor *)tintColor; +{ + self = [super initWithFrame:CGRectZero]; + if (!self) { + return self; + } + + self.expirationTimestamp = expirationTimestamp; + self.initialDurationSeconds = initialDurationSeconds; + self.tintColor = tintColor; + + [self commonInit]; + + return self; +} + +- (void)commonInit +{ + self.imageView = [UIImageView new]; + [self addSubview:self.imageView]; + [self.imageView autoPinToSuperviewEdges]; + [self.imageView autoSetDimension:ALDimensionWidth toSize:kDisappearingMessageIconSize]; + [self.imageView autoSetDimension:ALDimensionHeight toSize:kDisappearingMessageIconSize]; + + [self updateProgress12]; + [self updateIcon]; + + self.animationTimer = [NSTimer weakScheduledTimerWithTimeInterval:1.f + target:self + selector:@selector(updateProgress12) + userInfo:nil + repeats:YES]; +} + +- (void)updateProgress12 +{ + CGFloat secondsLeft = MAX(0, (self.expirationTimestamp - [NSDate ows_millisecondTimeStamp]) / 1000.f); + CGFloat progress = 0.f; + if (self.initialDurationSeconds > 0) { + progress = CGFloatClamp(1.f - (secondsLeft / self.initialDurationSeconds), 0.f, 1.f); + } + OWSAssert(progress >= 0.f); + OWSAssert(progress <= 1.f); + + self.progress12 = (NSInteger)round(CGFloatClamp(progress, 0.f, 1.f) * 12); +} + +- (void)setProgress12:(NSInteger)progress12 +{ + if (_progress12 == progress12) { + return; + } + _progress12 = progress12; + + [self updateIcon]; +} + +- (void)updateIcon +{ + self.imageView.image = [[self progressIcon] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + self.imageView.tintColor = self.tintColor; +} + +- (UIImage *)progressIcon +{ + OWSAssert(self.progress12 >= 0); + OWSAssert(self.progress12 <= 12); + + UIImage *_Nullable image; + switch (self.progress12) { + default: + case 0: + image = [UIImage imageNamed:@"disappearing_message_00"]; + break; + case 1: + image = [UIImage imageNamed:@"disappearing_message_05"]; + break; + case 2: + image = [UIImage imageNamed:@"disappearing_message_10"]; + break; + case 3: + image = [UIImage imageNamed:@"disappearing_message_15"]; + break; + case 4: + image = [UIImage imageNamed:@"disappearing_message_20"]; + break; + case 5: + image = [UIImage imageNamed:@"disappearing_message_25"]; + break; + case 6: + image = [UIImage imageNamed:@"disappearing_message_30"]; + break; + case 7: + image = [UIImage imageNamed:@"disappearing_message_35"]; + break; + case 8: + image = [UIImage imageNamed:@"disappearing_message_40"]; + break; + case 9: + image = [UIImage imageNamed:@"disappearing_message_45"]; + break; + case 10: + image = [UIImage imageNamed:@"disappearing_message_50"]; + break; + case 11: + image = [UIImage imageNamed:@"disappearing_message_55"]; + break; + case 12: + image = [UIImage imageNamed:@"disappearing_message_60"]; + break; + } + OWSAssert(image); + OWSAssert(image.size.width == kDisappearingMessageIconSize); + OWSAssert(image.size.height == kDisappearingMessageIconSize); + return image; +} + ++ (CGSize)measureSize +{ + return CGSizeMake(kDisappearingMessageIconSize, kDisappearingMessageIconSize); +} + +@end + +NS_ASSUME_NONNULL_END