From fe12a8c7afbaa1eb123d76281809cd1270cedf03 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Fri, 2 Oct 2020 14:44:33 +1000 Subject: [PATCH] Add explicit pause/play button --- .../Loki V2/Pause.imageset/Contents.json | 12 + .../Loki V2/Pause.imageset/Pause.pdf | 85 ++++ .../Loki V2/Play.imageset/Play.pdf | 371 +++++++----------- .../Loki/Components/VoiceMessageView.swift | 33 +- Signal/src/Loki/Utilities/UIView+Glow.swift | 2 +- .../ConversationView/ConversationViewItem.m | 3 +- 6 files changed, 273 insertions(+), 233 deletions(-) create mode 100644 Signal/Images.xcassets/Loki V2/Pause.imageset/Contents.json create mode 100644 Signal/Images.xcassets/Loki V2/Pause.imageset/Pause.pdf diff --git a/Signal/Images.xcassets/Loki V2/Pause.imageset/Contents.json b/Signal/Images.xcassets/Loki V2/Pause.imageset/Contents.json new file mode 100644 index 000000000..30578391a --- /dev/null +++ b/Signal/Images.xcassets/Loki V2/Pause.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Pause.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Signal/Images.xcassets/Loki V2/Pause.imageset/Pause.pdf b/Signal/Images.xcassets/Loki V2/Pause.imageset/Pause.pdf new file mode 100644 index 000000000..d77d655c3 --- /dev/null +++ b/Signal/Images.xcassets/Loki V2/Pause.imageset/Pause.pdf @@ -0,0 +1,85 @@ +%PDF-1.7 + +1 0 obj + << >> +endobj + +2 0 obj + << /Length 3 0 R >> +stream +/DeviceRGB CS +/DeviceRGB cs +q +1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm +0.000000 0.000000 0.000000 scn +5.142858 0.000000 m +1.714286 0.000000 l +0.767857 0.000000 0.000000 0.767857 0.000000 1.714285 c +0.000000 14.285714 l +0.000000 15.232142 0.767857 16.000000 1.714286 16.000000 c +5.142858 16.000000 l +6.089286 16.000000 6.857143 15.232142 6.857143 14.285714 c +6.857143 1.714285 l +6.857143 0.767857 6.089286 0.000000 5.142858 0.000000 c +h +16.000000 1.714285 m +16.000000 14.285714 l +16.000000 15.232142 15.232143 16.000000 14.285715 16.000000 c +10.857143 16.000000 l +9.910715 16.000000 9.142858 15.232142 9.142858 14.285714 c +9.142858 1.714285 l +9.142858 0.767857 9.910715 0.000000 10.857143 0.000000 c +14.285715 0.000000 l +15.232143 0.000000 16.000000 0.767857 16.000000 1.714285 c +h +f +n +Q + +endstream +endobj + +3 0 obj + 804 +endobj + +4 0 obj + << /Annots [] + /Type /Page + /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ] + /Resources 1 0 R + /Contents 2 0 R + /Parent 5 0 R + >> +endobj + +5 0 obj + << /Kids [ 4 0 R ] + /Count 1 + /Type /Pages + >> +endobj + +6 0 obj + << /Type /Catalog + /Pages 5 0 R + >> +endobj + +xref +0 7 +0000000000 65535 f +0000000010 00000 n +0000000034 00000 n +0000000894 00000 n +0000000916 00000 n +0000001089 00000 n +0000001163 00000 n +trailer +<< /ID [ (some) (id) ] + /Root 6 0 R + /Size 7 +>> +startxref +1222 +%%EOF \ No newline at end of file diff --git a/Signal/Images.xcassets/Loki V2/Play.imageset/Play.pdf b/Signal/Images.xcassets/Loki V2/Play.imageset/Play.pdf index 92b44ad06..b7b47cfa1 100644 --- a/Signal/Images.xcassets/Loki V2/Play.imageset/Play.pdf +++ b/Signal/Images.xcassets/Loki V2/Play.imageset/Play.pdf @@ -1,228 +1,143 @@ -%PDF-1.5 % -1 0 obj <>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - - - - - Adobe Illustrator 24.0 (Macintosh) - 2019-12-11T15:57:39+11:00 - 2019-12-11T15:57:39+11:00 - 2019-12-11T15:57:39+11:00 - - - - 232 - 256 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADoAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9Pavq2m6Pplzqmp3CWmn 2cbTXNzIaKiKKkn+g64q+NfzX/5yz826/dz6f5NkfQtDUlFu0oL6cD9svv6IPYJ8Xi3bFXhWoanq WpXDXOo3c15cNUtNcSPK5J61ZyTiqvpHmLX9FmE2j6ndadMDyElpPJA1fGsbLir2LyH/AM5c/mRo MscGvmPzJpooGWcCK6Vf8ieNfiP/ABkVvmMVfU35a/nV5C/MG3UaLe+lqYXlNpF1SO6SnUhKkSKP 5kJHjQ7YqzvFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXyT/zmX+Z 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 7FXYq7FXYq7FX//Z - - - - 1 - False - False - - 163.860992 - 163.860992 - Points - - - - Cyan - Magenta - Yellow - Black - - - - - - Default Swatch Group - 0 - - - - application/pdf - - - play-button-arrowhead - - - proof:pdf - uuid:8126d959-1947-9b44-a237-45907b82f9b5 - uuid:57cea73e-7a67-3f40-a634-b8f7db8c6d54 - Adobe Illustrator - Adobe PDF library 15.00 - - - - - - - - - - - - - - - - - - - - - - - - - endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/Properties<>>>/Thumb 11 0 R/TrimBox[0.0 0.0 163.861 163.861]/Type/Page>> endobj 8 0 obj <>stream -HDAnB1 D>/qb;ɖߪ+T!tQK5H"xg\yٮ7o+ӕ2Wtםfp_8-̧;]YpUthF^x~ϔDZmʩ8jIGz *ʿuH+< -&Du.yF;&PM'yo6dG 8 endstream endobj 11 0 obj <>stream -8;X.hYmg[e#Qld\rugc0*GH@PRaD3E.6#dEWW>[;PuIj31RZ@4=Pd8)cJNYpeY\=d -!!<3'pNRS~> endstream endobj 12 0 obj [/Indexed/DeviceRGB 255 13 0 R] endobj 13 0 obj <>stream -8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 -b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` -E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn -6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( -l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <> endobj 14 0 obj [/View/Design] endobj 15 0 obj <>>> endobj 10 0 obj <> endobj 9 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <>stream -%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 24.0 %%AI8_CreatorVersion: 24.0.1 %%For: (jiosh) () %%Title: (play-button-arrowhead.svg) %%CreationDate: 11/12/19 3:57 pm %%Canvassize: 16383 %%BoundingBox: 8 -1 156 164 %%HiResBoundingBox: 8.10700035095215 -0.000301661795675 155.753498077393 163.861001247196 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 14.0 %AI12_BuildNumber: 341 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 0 163.860992431641 163.860992431641 %AI3_TemplateBox: 82.5 81.3609924316406 82.5 81.3609924316406 %AI3_TileBox: -224.06950378418 -314.06950378418 387.93049621582 477.93049621582 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 2 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -750 516.860992431641 1 1668 921 26 0 0 6 43 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:-223 -315.139007568359 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 18 0 obj <>stream -%AI24_ZStandard_Data(/XZ*`𻯓:SSy@X/,sYt -O]Z-緆c3_ yTSr y$Zv x|KT= q6neUKy-VVwߖ9FKr8U+c8Ҝ}\nۢC_!=r*~ɪ[Czo7ҰᐞTx՟a7iV2ԗWYU>~w{N jN[2ֱJEWVE[ Bvˡ]NV3] UU -?v+9^ڻ*}S)rpY ~:&U;o&+yUy}ZXo}R5RX+lkI:cҬWûaV,R<$YY^6_}?[Xj5@WOl#j3~Smh>giuLvſN)-,ӯKkYU;qk H륵vЋ$bpJڗaYjEReiuL]$vwv;g~ò*{}4X'y~iӑ?h koT%뷙- m,mhںnN~1NdD)k7^SD-s+ҸƳHۙ6h\Kж6lHۙDm#/7%7n 5K,;i(ɓ$͒3:ra[+MDII@IFVmzՈTñv)]brL fԞKPtTz4ۖGs~0ga ^__^yb~۰-\2y_e`dsbYscdXe etKVx̓ Ψc_-\$?Kn2P3Xb%g>~j!QHB\H+%V{K6y$~xrK2:$ pH|t~!9Ħ\qܐ,,x&v>"eCe*?~8æѫCYJ˓e . -'$7n x #!82N:H0h8d9 7P9Ħ =Y/8\!B0/MC.$(&0]꽒0YA,ե~IKb&}I`f˔Nԃ5~M:e;L:he]z↺,CY=.YA7z* -TnMI+-_邺RBXO͜N?ʹ AhW^6s9~@ xk@( M:ps"vj/:pd4@sencU)<$ˆ$L`\v]Af#5o@ \dQmp`l.JA4"M[hH39D/|Nׂd+2+"lDq'3#"3`y $F! sSG NTUNʮH(PF ȧ&j1q\6񤕛't[v^Td)uO#pҥP$6j'6Wowi(pObBL!(wmI9z2O;B FI*ŁJ 樫i5\&AY=@=6Ph[B\7ve""lgdR=Թ6{= V$p1[BB: 9 XL*—i -r~ㆈT۫*eٝJ0dt9r eͤoQL9W蹉VI!}k ֵVA=Yͺ;# M: -+nh5M.cB; Գ1e5_ -jQ*\F!:O"izAe-m4| - wLg['`gB\X܏Ġx &]gT*Ha\VjB)@H.Ba8S90M{^Jԃ==SbOG&z3Zp7u]Adq!Mp¤n-Sd1@:{bH)NI64$ >Q[H!wR+6*=}j -}۹B)6O 5Dȕ@r4J̟$H2՟,ݣC@y`9SB(eeN -u+C="|pRlmF RoNBeTl-z:+J,.]Q&2: -F3Ǻ'n1x Tz\iޕURꑈZC!W6N=\$*keC#l!_}ρ}/gwBtꀷ6c9C֬5wֱw/n,uJ唤w: e_icUߺԱ\~?ex?~8>n=_X~5c2ſRɱya:֍1$H<'/FC)oPme~S" crcd1 ncJ|Vkbzyn:&ha}5jYk>b/k߫oZ,kq ZLi -'n5x3P r9%Є 8^{ED-zŋ@ԿP]IP'>v;SvG UF*-_(҈u&2ȈZ L7l" -Y*S؁͠O2JT겥rPy$zwy[poS -E3D'RW -w/ˠ:T9Fוb 2m(rHwlSM)%rLqDPJܟe&ՒprtQᢑ{||"RaOPpىB1"MUJĬB)z' -bF~w{e }]8"p#,o --?1&e초p@wXqRWPD/SY70`AZ. -F֭e $4F~I7 -sֺZR5<'?ROa)SoSv{/0a2Rgaө"n.e.[OX+o-6(m(7I9lPmB $DpD&FqJFjӘWF'Fh۩ Ōa4fժ'ʎ$FO =P$ڰmQn.4`r47LBhZ攩>d2؆E P©`CBsM`y8bcBl, &!ݝPc!/. ш9dڛB`w!`Іګ ڡ얇7zaIsl-`7+$-&]u -K$n-)I):Ol54 GoGBOGZx64~oO ~t}q#z,[*DY#  AƭA0 Hi@хFE%AѹEz$P:ݰC0'oXM3Ĭ6-$8N"!8݇p7d5PcSӀ?YJ@XolMDg)UfU -hD ȢUv"gil& *tQ\Ck!Aom.<J㞾͔|=}6۸`ܸ J͓6ơm}RSbMzDv>F ,p DBFbIl -D*,%V(L=X;9'p2Tm2D2D T 4b?em{G:J?pr(DbQ.Jő,X!<8"E2 -TesXP*>| AUP^Rc9X8h\~TZ&,gH&PaFǷEGM|)|(;Kq#gL C,1 VhL 4TG)n:p;׽>̃b(\"Y*[ f} 8RGX|Y8YBSpERhWQD<]ƸqYL`hrTHa61G)dN -aR(&7J (f E -T7&-ƒ ?ڂ߈ M*So<ѥeaH4bRh9Gp FAZyg@Y6v#eo.*YHZ(#+z!6.SD-TE2.[hla{.򐍮x']*ӵaJ}$E3 kU|RkPmQBCǹ^. \e㺀P86_gѠLTW(IJBh -TȞ?f41X'e\e']SulfĊR@8 CZ>FD(aqĵ53< xP̰o݁ oqY;6MBޡ|#SD3lZl\e\eR?RN-#81QO˃ !c%JZ -D Rbɀpt UJ)Lb -yPl,x;\q޶M nd2ARo$Dp$p듅BS6 Ue&|$q'(=̬e\F'!'\U[3-Fl# I48L _?չK_'@I[i@j1L V (5( U%#qdtf- -)1]HG`m$w -ըTTUJ! 0 J&:{F:&JJL22" 8, a$A1唃GHNcPŞ˒ej.CPi4dCG{ūPF$םi -]i 6 .;w&sqFy)ŀs*d{8UtT=I 1#UNhUb)|8$ۑmJm s'No]M7[38DLк܄UQ%5 HdMz\dՃQ, }-qtIf|L"|J7{aJ*LyG6i;-}ZRaib;u?pvZJZϽ@b䠨[?-hiCi -cg>Ӓا%-:-t# evZ~ZhN+J :FﻩTgz{)ݦ{(ebNclەw9,0qC9ާD 7S;ssH|izQyD'qM|$=@n8V0DZռl͆`#祥?!)'Po,7;& -ѾqBcΘГ"]FImB3I9-ѣ6P#3dBKv㊬7)PH$c+7u+c̙s(|szWJ@wBV!S6n"ڔu\FOB(f - CZk'X@.7Ct)3#X-X\^5Kݵ|YXDw-k=)ʙq /ZKqֶ%k8]qW`~_R? ,XxXQ6] IDŽE<=A`a!gʩ~dp^Cat1Jp*EPaz/wBts D7%O&&=ҷB W,)F/lfk1;$E~~7CHJQXtf2kvf' _6r3r@}K=2Bs^XĮ^;bFYuh3: aXlO9$?BƌK)_M͵@J!: w{g&%%9DrpI䶢5xOعZ%rT -||G||E9G+rQߘA !M*ogލp.q/ uW6HZF%,(.bgp)3Uf -25O*1<6g8 BP>C3Hf@&orB@pSZP4oBB5@T 3(}R5{W zT=PM§i9I; t:\ΰ2H z+ \͗Ob~5[3Rbtv]oI8U -;Q5 -e$ uX`$ms;? -D%tx]M00gӗWޔ+[Vȇ08 + 8u7Rnz7 6\.) s=F#nRRzNc>^0|x&+2{ejţeFEӻ]ƪ{ ʻFΧ D9{7̧m:-^Ieo 6K,wq(PGکZFѥK!6Rѻæ7US$ߊ!8W7K>$VVՖ6 @Z^S3|*>\̿D'U{R5#j'5@.>ipSd9N"끾etWF"*:~?t+2 OU2#Y!M7lH18)/%pY =]: ھDS7k!,kr_os\ȭp 4BNƒ?,ջc]]|K0 Tݠ\t.R d%l rh ru_^A+K,M$Z#bv)@ۄ.(FoYrLFͽ:D7iQKZavXEVH%A֚ǪHhV/GŇ{=!c^q!:6ɮG:bPlYo+lQΪ`j6=_Slc4؛Xg(vaIWDLj'ZV7f͕ /}؄Pd{N_179P?-q^4fdɏI]!~Ԗ:e0jU5~Cڙ%ZRͨX51̐Ұ/b3pZJp_L2~ _kQK饻&QKKq@3oh= -ٯؠc_! }z-2gW_[G;>Xwb.ߡxue~'u|m:1=dc@d)y 1\|I~|޷8p.dOZP)RE~ e50ptV~]E\kmWU?qٟ\[ =,p0xe߶NVg>&-߸i$nۯ#r] !~7Ȣd4w-2/HHy}g2m+S@nZzWuu}5& J8*8ns< -(i+ۯ~Ut+p!9Xi)miMf;3H2_RGv EPsœ۷.T42hMod:(v̛g/wAZI~c=Qچ2lB ۯDaU~O1n M)daY70pR|fwBWlKL͖~Jqc:|N/dpښV^RK:g‘Ci{m\ԸR9e1u7 4¤h#wLΓNOi؉rb5Ɉ?!Hb:|Fo8o4X "+|Ne궗,-@Dwf0|"BkTz4%4j2RPU#\.A*mՎ -`v@7}sfQL j|,;"Ï<60vQYvO -c@χg-o9sHQ$ ?c$e=DT8j* (:<]^;ODwsʡq.h"9>e\AW0ySee@^ϟjҽ8!ytbo3xzg%2e*SA Y4O30D\oK3Ȉw`CQcx\^7BCjڶT>/7:A얋DwĹ-_cюOJtֱ'87Kv`;zMlF,LT(E)prww"t]T)cŠ箚d5L$؂=:,>xˌӘLfd2"Ƅu>w )M1I|igIfS&W*#P|c+Qmq(a7/f|UuvZr?RkWjⵢn9(KA.wJ+77A _ƛ e"n7ſ!?"!}؟H/u !h6vE8}4lLbe4î#1x0'#-Њ!,36a.C4Lz f*& u+2gTw8v3 Rp4K%fOd+RkX_o9}Ge!R )ԅ|$Le7_xҌE9Ffͫc*d!;fw.AK'塙 -쮷;'QCGbQt>8>䀢hi_ZGHħJ!]PcAq 'ABp3T MF+ *ýٜwJA0*N_PT-"ⷰ(0"P+L)a zk> 9tEp:ԆS1.CW)T={14i]f!runP+*.~]ftcQ\ )݅zcĘ$ J^'R.1+ktZӖ:nEOp,t$z>/3LރĀ cDb@1S6Ng {X볓~||!)K+5@<!XJĔw\cf|tI0FV$|}kj>]"RQ7UIY:kzM|VaԽes˱nQwtJV%.np4ϸ48!.\ZE=QWue(C'&vUBVԨfvuo,2 =G݄є;Vr,8" }0EQ73q ->F$(QgF=%]T)S, ]=#tfBl D1 bǘ6&dɩ -1B*5͔ʚY&O\v"?lNJتi\&u\r\$Xљ%sn% ->*2ƀObaxKpXeԶ!:.~+`;O= 3C/XR\pTdl~Q)k* w7Sس*_צe~qkT:}Xjbe| %p .HӸu4N)e}ya֕\ 3khw*2m1y ;2U*gٶ' -+) EOBan\fDh r* m=됗v.:\VRuD0@ uOC85ɓ(aGՒ/&8U.ӣlu| -& BS#Zu냦eӎ8\>WrXn:ĽR7b&kkWx\آޒ=}`Ղ+^:`EJnDwye-(V1PAK80_c) -Tu-;.#d1E,w$Q_'*⸢u)RUd j+DD@0,CR{Ża;$[l5>!0N}>xqU#T3H\9ňY7c $Ї.6 -NB72r6/ѯsP2juη|%ܞ [8ӏ{3NHy*CPM\t&Y3:[L9ĕiy*w^1y_L,Uj -v$E]M3cW~7$#cORw׌tĩA}}:]m?38ә0HNкf@ދIņmmÉ?-XՒc8.&e"`Qw }Vi3{yaw1 jO}PGm*VGstTҹ8S(p Ox,M~ -;We1 V_߁FJD`܅ 8f*os2]LVQS*F-?#nhs==t.ڋ+;JxVAc͸+p~[%aM.gCIXWyRn.ֳ#3"/)!5iM&.1)wqx -C~>*hSDkAu3]J5ˍv$,ŠE'J, -}xdAfa21oPH5B5c4+P 7sz}ij*NDžStZvAw3ʯ*@pVLyPL%˗|bF9^b`FGKg:xza3~;*10uЗA@tڑdc#>­!{s -2c.TJ!ֳ"vo1Tzܺ?Ia[`%-re-+2pm;0N -P|fS!eݫh)2S&AU)Y`*tBb6Lǐ"6`&Ԋ`A|x:bp%ލ"Ȩ -WZLUǀ5m}X tP2/?K2eYtѵyk]Nnn vPt랣+8+6eo%m6Y >oG;tE˶縣^)G]#v{ -Pt;e^Ϯ.Ozh*71hNn'>& lL,6/})ՂpV@-#9#"S%!Y88yCdqS\/[ә/5F X!k[Mp:$n濞0zh -^Uإg1oo% -ט|( ^eBwXPZN3mڼV=K|,O/$Ih! P;bִ_0H@x8|8$uʴ=tkIшa"ϊ)0oޑ\(*K)O业OUVb"Uc|ۋ%|]^ oDqd׈3,T (\^Z˄-'RS%ѦWԇ+vK0 ({v,@Z1t/u!DR"=N"vIޏcj5cPQZ9<|)؏ܪJ#?I-ك48[ET"]<.εd\MDM@~5YjPGɻ@4g -Bs|&TC2 -C #OJ%X/;!!  !Tw};AJ*MuԈ5^(G{A"Ê^_^6Wc8671..1 {܄;&=0ڋg͕[_ -SslY槚17R#h^9@jhhDL1XQ!,=ӿ!x -k5qlԔ5 y:/36y%cG$^pW۟l*p=7IHnwC 5UyMo>#:7ěP,>! -F|O(;Д{Pӑz-0}x$1SB)gԡ&ɍ[AU)&%E7{j 7?s FgJ+m鑟џhL>@"MHaG:$DC헨`wdR<.J骐!iks%<Km0CձlE΅M5rdnoޕvh]5v5JbA#$MEh%ѱw݊%|xGMd0*j'0ޕ7s.+͓ t;L%\0[Ԧ;dj aGuլ]Ĝ۝Sop_z3x4OICҀ%Z=:Ӝ鳟qX\2 -t}=Sa#~?:@j=8i^©NTl:EnX Dy[/ <^>{ -xɳ@ 4ξ8oķ'yO6ϯ&`97I v[@:~g/64~BU[8IW5v>jK o< ;r bk*e@I@dl`=aR\x^4 @ᫀ}xXwvUk e,7LϑꪰF e;`S6WXtd8%7))=XB9 I<IS2ۅO ~-ik(Ȧd%Xg>z2_#n M_x.v3sq*,k?G$vͨb@g^q()_m*1vlVXdK[ 2udZH6૨ CdiNِBAGPWbbȍ eU01=n IJ8:'L I-I+µ(xl`Ql'(gW iQE2ᗹ_ -_iG*SY* sk >0򊸘 SI#npaV -LheQW? N !sL!0fВ m3~1iɑKj|jk : 9/T3 GE -r[mHsO4&Aa^m]gY#v,Ӂ% >fan5b'y̵k1𹑖pPTrYA95\& ʵU> 3F)i)Betk;:.'/lUa=oS8UIJ׋O/3oIJ s8)%euN:Fiz(Jr(e&6SKX%@kQ*= - dRZ ˦` :~7VjJ>\V&RӔ,pۣس:;Ob)8t99/"b9[1C[~dpCRV$݊`.k49=D`/v;FMm"=9[ ߿^oB!iݟ|wj endstream endobj 6 0 obj [5 0 R] endobj 19 0 obj <> endobj xref -0 20 -0000000000 65535 f -0000000016 00000 n -0000000144 00000 n -0000012777 00000 n -0000000000 00000 f -0000014241 00000 n -0000038668 00000 n -0000012828 00000 n -0000013203 00000 n -0000014539 00000 n -0000014426 00000 n -0000013463 00000 n -0000013680 00000 n -0000013728 00000 n -0000014310 00000 n -0000014341 00000 n -0000014612 00000 n -0000014756 00000 n -0000015998 00000 n -0000038691 00000 n -trailer <]>> startxref 38892 %%EOF \ No newline at end of file +%PDF-1.7 + +1 0 obj + << /BBox [ 0.000000 0.000000 16.000000 16.000000 ] + /Resources << >> + /Subtype /Form + /Length 2 0 R + /Group << /Type /Group + /S /Transparency + >> + /Type /XObject + >> +stream +/DeviceRGB CS +/DeviceRGB cs +q +1.000000 0.000000 -0.000000 1.000000 2.000000 -0.701019 cm +0.000000 0.000000 0.000000 scn +13.262500 9.991639 m +2.262500 16.494764 l +1.368750 17.022888 0.000000 16.510389 0.000000 15.204139 c +0.000000 2.201014 l +0.000000 1.029139 1.271875 0.322889 2.262500 0.910389 c +13.262500 7.410389 l +14.243750 7.988514 14.246875 9.413514 13.262500 9.991639 c +13.262500 9.991639 l +h +f +n +Q + +endstream +endobj + +2 0 obj + 406 +endobj + +3 0 obj + << /BBox [ 0.000000 0.000000 16.000000 16.000000 ] + /Resources << >> + /Subtype /Form + /Length 4 0 R + /Group << /Type /Group + /S /Transparency + >> + /Type /XObject + >> +stream +/DeviceRGB CS +/DeviceRGB cs +q +1.000000 0.000000 -0.000000 1.000000 2.000000 0.000000 cm +0.000000 0.000000 0.000000 scn +0.000000 16.000000 m +14.000000 16.000000 l +14.000000 0.000000 l +0.000000 0.000000 l +0.000000 16.000000 l +h +f +n +Q + +endstream +endobj + +4 0 obj + 232 +endobj + +5 0 obj + << /XObject << /X1 1 0 R >> + /ExtGState << /E1 << /SMask << /Type /Mask + /G 3 0 R + /S /Alpha + >> + /Type /ExtGState + >> >> + >> +endobj + +6 0 obj + << /Length 7 0 R >> +stream +/DeviceRGB CS +/DeviceRGB cs +q +/E1 gs +/X1 Do +Q + +endstream +endobj + +7 0 obj + 46 +endobj + +8 0 obj + << /Annots [] + /Type /Page + /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ] + /Resources 5 0 R + /Contents 6 0 R + /Parent 9 0 R + >> +endobj + +9 0 obj + << /Kids [ 8 0 R ] + /Count 1 + /Type /Pages + >> +endobj + +10 0 obj + << /Type /Catalog + /Pages 9 0 R + >> +endobj + +xref +0 11 +0000000000 65535 f +0000000010 00000 n +0000000664 00000 n +0000000686 00000 n +0000001166 00000 n +0000001188 00000 n +0000001486 00000 n +0000001588 00000 n +0000001609 00000 n +0000001782 00000 n +0000001856 00000 n +trailer +<< /ID [ (some) (id) ] + /Root 10 0 R + /Size 11 +>> +startxref +1916 +%%EOF \ No newline at end of file diff --git a/Signal/src/Loki/Components/VoiceMessageView.swift b/Signal/src/Loki/Components/VoiceMessageView.swift index 6e429458f..6f603622e 100644 --- a/Signal/src/Loki/Components/VoiceMessageView.swift +++ b/Signal/src/Loki/Components/VoiceMessageView.swift @@ -15,8 +15,11 @@ final class VoiceMessageView : UIView { private var progress: CGFloat = 0 @objc var delegate: VoiceMessageViewDelegate? @objc var duration: Int = 0 { didSet { updateDurationLabel() } } + @objc var isPlaying = false { didSet { updateToggleImageView() } } // MARK: Components + private lazy var toggleImageView = UIImageView(image: #imageLiteral(resourceName: "Play")) + private lazy var durationLabel: UILabel = { let result = UILabel() result.textColor = Colors.text @@ -39,8 +42,10 @@ final class VoiceMessageView : UIView { // MARK: Settings private let vMargin: CGFloat = 0 private let sampleSpacing: CGFloat = 1 + private let toggleContainerSize: CGFloat = 32 + private let leadingInset: CGFloat = 0 - @objc public static let contentHeight: CGFloat = 32 + @objc public static let contentHeight: CGFloat = 40 // MARK: Initialization @objc(initWithVoiceMessage:isOutgoing:) @@ -93,6 +98,23 @@ final class VoiceMessageView : UIView { set(.height, to: VoiceMessageView.contentHeight) layer.insertSublayer(backgroundShapeLayer, at: 0) layer.insertSublayer(foregroundShapeLayer, at: 1) + let toggleContainer = UIView() + toggleContainer.clipsToBounds = false + toggleContainer.addSubview(toggleImageView) + toggleImageView.set(.width, to: 12) + toggleImageView.set(.height, to: 12) + toggleImageView.center(in: toggleContainer) + toggleContainer.set(.width, to: toggleContainerSize) + toggleContainer.set(.height, to: toggleContainerSize) + toggleContainer.layer.cornerRadius = toggleContainerSize / 2 + toggleContainer.backgroundColor = UIColor.white + let glowRadius: CGFloat = isLightMode ? 1 : 2 + let glowColor = isLightMode ? UIColor.black.withAlphaComponent(0.4) : UIColor.black + let glowConfiguration = UIView.CircularGlowConfiguration(size: toggleContainerSize, color: glowColor, radius: glowRadius) + toggleContainer.setCircularGlow(with: glowConfiguration) + addSubview(toggleContainer) + toggleContainer.center(.vertical, in: self) + toggleContainer.pin(.leading, to: .leading, of: self, withInset: leadingInset) addSubview(durationLabel) durationLabel.center(.vertical, in: self) durationLabel.pin(.trailing, to: .trailing, of: self) @@ -111,16 +133,17 @@ final class VoiceMessageView : UIView { } private func updateShapeLayers() { + clipsToBounds = false // Bit of a hack to do this here, but the containing stack view turns this off all the time guard !volumeSamples.isEmpty else { return } let sMin = CGFloat(volumeSamples.min()!) let sMax = CGFloat(volumeSamples.max()!) - let w = width() - durationLabel.width() - Values.smallSpacing + let w = width() - leadingInset - toggleContainerSize - durationLabel.width() - 2 * Values.smallSpacing let h = height() - 2 * vMargin let sW = (w - sampleSpacing * CGFloat(volumeSamples.count - 1)) / CGFloat(volumeSamples.count) let backgroundPath = UIBezierPath() let foregroundPath = UIBezierPath() for (i, value) in volumeSamples.enumerated() { - let x = CGFloat(i) * (sW + sampleSpacing) + let x = leadingInset + toggleContainerSize + Values.smallSpacing + CGFloat(i) * (sW + sampleSpacing) let fraction = (CGFloat(value) - sMin) / (sMax - sMin) let sH = max(8, h * fraction) let y = vMargin + (h - sH) / 2 @@ -138,4 +161,8 @@ final class VoiceMessageView : UIView { durationLabel.text = OWSFormat.formatDurationSeconds(duration) updateShapeLayers() } + + private func updateToggleImageView() { + toggleImageView.image = isPlaying ? #imageLiteral(resourceName: "Pause") : #imageLiteral(resourceName: "Play") + } } diff --git a/Signal/src/Loki/Utilities/UIView+Glow.swift b/Signal/src/Loki/Utilities/UIView+Glow.swift index 8cc8767d4..a50952fd7 100644 --- a/Signal/src/Loki/Utilities/UIView+Glow.swift +++ b/Signal/src/Loki/Utilities/UIView+Glow.swift @@ -10,7 +10,7 @@ extension UIView { let opacity: Float let radius: CGFloat - init(size: CGFloat, color: UIColor, isAnimated: Bool, animationDuration: TimeInterval = 0.25, offset: CGSize = CGSize(width: 0, height: 0.8), opacity: Float = isLightMode ? 0.4 : 1, radius: CGFloat) { + init(size: CGFloat, color: UIColor, isAnimated: Bool = false, animationDuration: TimeInterval = 0.25, offset: CGSize = CGSize(width: 0, height: 0.8), opacity: Float = isLightMode ? 0.4 : 1, radius: CGFloat) { self.size = size self.color = color self.isAnimated = isAnimated diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m index 986f9b618..ffe6064b6 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m @@ -475,7 +475,8 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) { _audioPlaybackState = audioPlaybackState; - // No need to update the voice message view here + BOOL isPlaying = (audioPlaybackState == AudioPlaybackState_Playing); + [self.lastAudioMessageView setIsPlaying:isPlaying]; } - (void)setAudioProgress:(CGFloat)progress duration:(CGFloat)duration