From a15d11c3e6b99f26e966fa0619309f102d328d3d Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 11 May 2017 16:17:21 -0400 Subject: [PATCH] Rework appearance of voice messages and audio attachments. // FREEBIE --- .../Contents.json | 23 ++++++ .../voice-message-large-white@1x.png | Bin 0 -> 2072 bytes .../voice-message-large-white@2x.png | Bin 0 -> 3308 bytes .../voice-message-large-white@3x.png | Bin 0 -> 4751 bytes .../TSGenericAttachmentAdapter.m | 2 +- .../ViewControllers/MessagesViewController.m | 72 +++++++++++++++--- 6 files changed, 84 insertions(+), 13 deletions(-) create mode 100644 Signal/Images.xcassets/voice-message-large-white.imageset/Contents.json create mode 100644 Signal/Images.xcassets/voice-message-large-white.imageset/voice-message-large-white@1x.png create mode 100644 Signal/Images.xcassets/voice-message-large-white.imageset/voice-message-large-white@2x.png create mode 100644 Signal/Images.xcassets/voice-message-large-white.imageset/voice-message-large-white@3x.png diff --git a/Signal/Images.xcassets/voice-message-large-white.imageset/Contents.json b/Signal/Images.xcassets/voice-message-large-white.imageset/Contents.json new file mode 100644 index 000000000..d6b5d5cc2 --- /dev/null +++ b/Signal/Images.xcassets/voice-message-large-white.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "voice-message-large-white@1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "voice-message-large-white@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "voice-message-large-white@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Signal/Images.xcassets/voice-message-large-white.imageset/voice-message-large-white@1x.png b/Signal/Images.xcassets/voice-message-large-white.imageset/voice-message-large-white@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0d580f7595cd55f8add77d74357d57da922f69 GIT binary patch literal 2072 zcmZ`)2~ZPf6y9*DSV0YP7elaC1+s*jB*Z`>!Uz~ngNP8q0zt@z&C-NYI)J4j4g+{| zC{TnVigH#_C@@p7a;a?@3do^CJvgLR0Uapa4X7!Dnc3|BfA9PL_rACLlH**@y&Kf^ z)d2w5;O5Hl#_lZqTC0YAmkVQuu$xMRlZO)kRAsK8=c{7-bz;{52>?(`@QWZT+5Hv9 z*(UVmp*#trdW`f>Le10frN$Ayg4q*a%|^Fjzm#04Fsi9DMe~UfsqK1>fqo2 zT3CXXmgX44ToNxr`7(2n#ANA^_vdgRi2xCbQ6VfM;pg&0;W*ThOvV#^_$<|l3d28U z5=oYAVFp1w0#Yd!;A%2RCj5j9k9<-VCivh=9EU{9J%tHCC>n}^M5qMQQCCfe_4b4C ze?`jp;-zHrCN6nn;FZ(7AqgBEhqu5_Bt)5(47s6|@W+lUsn~Fg7=a`bOvbcXmMCH? z`Mi&5m{t}R%L+wwrD8uK#H{l1!kE-$z9P1gAFyf$MN~n7H=o88%AjZ-M~Jml?!(ra z0j?TYDP+UZFybTT3n08QxkLe4$(E-H_*5E&fPyegK$FCUMnM8p;dxxb-hR1XGD8#h1pxV(aY-m&}iE4{4Z0#7}3XVbrc!Z5Wd=y4}VK|y8 zcM*ecNmdlwC8c6~S;_$MIZ~LbrJD5tw|oP1@3$=uzM zT25MRk_U63@lK^pW+^Hv)Qwl2+mj~!oYPTiW8KEI5MpIzrTZCjNkxTiO2&?pk=$A@ z4rh`xPn@1ltWGey(>*jc(>Rckvt}!u4i6;^e`D2`cf0F8x3-MsOWL(@OPV@IRjq_| zrAJ@cV_Nr8=}+(4)LM&A(%i**4S?|}xPCKoaZiq~@Ws6x*n(yUu@Vke_YB>k3Q?d34ME2f*L7B|A?45CCZ~Q_<7(%hVwIX~47Nb8+Ua z{j8i~*zQGpg?>2{dR8ev<$>GC+duq8JzR5QjaH$mNy~uyI8S}VG4|ZN7oZcM>Gj)9 zWsL`+_1p}4GuQv#y+zO5@H#VTvmMV!IRI&*=gh_ybQL`;FFLqAd}lLT_xY70GpbJy zOwI1I@Vkm!DqW5wbw4{;bV4s2j%@0DxV82&Z_L%B-j7}9-sznbq$_OI_6g5$VGl^@ zjW3_vx-ja>))AI{AJx+_mrMK1C|R>`A%c~lG?8*NH?;qyO62&W`sqL$Go5Zv*R%?t zFUr<*_Med&L&w~ zwNA+9F1{cSOl;dTyzQpy;pD`u-2NA*V9PH>R(gLC(Hlm}oJ)&g7B8j0 zIJs(kF3ceQ--9zw{!N21gub9GdOi77x?5=de8<>KpkPzx&xu(^1nDnE32N6;h=ZG> z+%5g7mSf^XyZaeFJ9m$sYfc~y5bRpW=Lr$SvI^!~YnRgVCEl&$n>#tB%^ND$RL`Uu z7$4CuuJSoLQn2v&@!?Fj=Q@K9V!cC3y-CsQCz79r9Q%D3ytde6{Hsq?c;w5y!RED$~k_;AZQ@u7#QqcOt<^Yi?itAt}&Vixe~$03B$=ciPVPcHHRE6sHe* gC1cYu@@&Vn&c(K@LA95p0sOz(ZI37CnsZ3Xf3I^7N&o-= literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/voice-message-large-white.imageset/voice-message-large-white@2x.png b/Signal/Images.xcassets/voice-message-large-white.imageset/voice-message-large-white@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8fa4e511e30efde785d2fb47c8e3b42ca43ee63d GIT binary patch literal 3308 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 eX+}exE0#jR;i-s2K7FF)p=hLpnk6B zh20e(mDTOyp-j+wv=djD0Uy#yURyokzVW)oN1oD*&MY$j59{3UKRMnRmlOChZ6MJM z)Qc};eE;t1;?K)uT|Pzg9{!M>wqu*%GflHIsLPP~eBz0p>v6GZ?&$i)BHZB@o8Ej1 vY=q1tr6hB)9TV@*uMwyJ%kMXsGGzPcfc=Ftlb(F({|{FuPsdXGy$SyXn5|wl literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/voice-message-large-white.imageset/voice-message-large-white@3x.png b/Signal/Images.xcassets/voice-message-large-white.imageset/voice-message-large-white@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..da148a182aba1ee8917a1b5a930f16895bd635af GIT binary patch literal 4751 zcmb_g3pkVQ|KGHgQwqH$pV>i52WUA@=!|Ns8~UDvbce!kz&=X<*E`?Hp?fy;&o-EalP^n=E7%VC(N-xSt zk3=TG4B&7$Oy3Y@Xs8PybScrHR2)q=l%oF4$iMB_;VJ%PVi=W33RPLMi#tq;pjxV_ zEjjw@^DRy)G4O9sp_K1w0SUsEG%y1_eb~=vcpC8^XiJ)Zqy_l@l~q^-Ie0mz0Dl-h z7$1TUrBVQ%!B5=*wf&3uA3@S^Vc(oB7x7ze$fd{;E_ezlIAW;;uAxLK$`HAn(2wH3 zEAowHO9}}i<0%w?hBEn1StR zJ*2D{?rvS2F%;?`nSOmU@OE(*iX?&U^O5xqyS=Iv>lF$M;YoHm?88{ z5C#S+2BymcVCH_ntcYMqV@t;4s3h_M5-Aw9oJPpfql%H9={M#|{dX!7wzQL0?5uCw zc3BGSTa-A!{P#NmCH`@$tQmOSETZjp9-x6IazaWJT{m-&-R$%%+9(edk@FFk`DMq( zSP4x{dYW$G#}ny=1ug}8_ZS~=}dLV$1Vyq|%oH92v`cdBv08A9BfMy~JNI)!6kZT1@r zn%+3qbdx@-cSBxeziqocUm5*b`_0a9h;d_J0Spa$rg`Wrc4A=l8PdEK^8^=DE>*0k z8dj@h>cG{K`h6j8*IiDZoXCdza@Iax^_j2p3y*3Zv^?SZT1zW*(AzI|J1tAGqXimv z)lE=OorDw@-hCuN9!{!F4L!D9iuGa5Cr}2y=@bf%iQj`ym@qRv4ua~7q-^5#EXr60 z%T;*ZN{%xOUc9qfWP|l8rsu3lOuT1lPWOI6$ak4s)L0LNrKES6Z0UY?;Ie!82knhA z`5+rL%8N}!HIbq2k-CCU=H;SbaTO6(Z$v|`z*~h-v6!+dd3`=e&G{wk;p#=7>I=TU z-fm6Z>nFn4+Vqi^f<0p_MTEH&Hwg;aMhDrK^2Db2o)+&5Q<6kZ2c(Lew!T>#i#bp7 zbvX|I8$>kK37W{xLr9Ugw5m9(Io~RK7ZYnc^|s{F3QHcGqlZc@UKFyLy3uOe=uY~E z_GN$%FQZcfIY2~+#uk+tAb#=_#rP;2y2uBJdeX21U8Kc?GWSXhES@iWPBL8wNak7F zn3s(KjO1?wq>t4zrF|}Wfz%%aN<&hB zGBd@JG_Aps2q6Ru)?c$4Ll=>wei6$R@spCw1Qy_jX;~!nzM`BlSlq9Zr$rN|!}X5< zYdpUj`{xD_#jg`6{LaF>L2b~;{d_TJP?D2X<9<+E;!fFo(CVD{E@1lbfNTHNA)<2H_TYKrILd|8aNr`Ub#klHIXhc$hm!LzQ4ls zGvW=aZWNwkDr?@X-8^MdUV}OV%{;o}>OjYdEkVl4yrZL&1@O*F{fc<*A2*o(*@uxv z55r2>fInI8Np`^#tG9E^dEYbx@;F&Bq#b-108j!9xbM>?{Km5F8OH5T7kx4E73(%D zoj;f6e|d=cVSUkCO5oNOxsH~g=m-pA^W@pl)76XT%!TnYIWjy(#Kivh41Wp3af)IJ zLB>d#BCgwP`ws zGUAba(F+vcBydc<)7|4EJ$*iC!COLE;hxRv$K#wK=F_%iSVlwA(`v_s=vL^UdjmU3 zaxPB_CiX=>E2d|f@O~B@g4#(`BuQ`V`y{w!uKB8d{?|oOVoD81cJ~mh3UpyQ>8v@Q z+y0Da2jlO;Zb(HWY@Z17WYRdoszq6krgyb1kJh;()srVbZm$B}s+{wE<16kmoM4?d zr*D5|;Kt0usC2)UfUGF@1?*^k4HNsStwS-nvP)u68b863nYFa+LcA7Q16JY1zmTIfrq8g2IepueHbE7bS@Sr!tTS2p zg3VFk*)nk1MgGZE8ogBs%0XGMkP5gAHz|aR6GFtc-7(vhF1YZeoj6uj^?X~s%x2gL zJ;A;3v&{BCB1feAF(KT;OR(Z%mNzc4r=g~l-5+>!8pCtd)~K-J>mW}mD_pCpfy&V1=oDbB&mf(?#B6P~=!tTBAzJxFoM+Lcstv7B<`dpBq8QC3A?@jHs>W0D58!Y2 zZNOV?zd~@lQ$1g${L6y!g=U1$my^?XE14t07mPlWul^agCQNr_n-x}YL)*mX*E`z~ z3i^uqMx(xFn63Tor)={wBJGoLuW!!|d@1LC4q`{758ZyDYSN}%r+8T2E;vI5tTCfV zWN+y2=(!W?>3eU2)g^Svi{wOZj6Z4-F4`YiGyI#aQC_dI)ZRLOH!m*{hmWhZk%^W? z4KT<3oKfP7i~^W_hl2zWID6ql&-DJ@PbX8Jg+F`ZWxCfw?*-o4S}bysR7|LkS-7Tj zn@JLtA42kubx~Z*8=sn7j8qfjZ^R{pBfGk*J-k6uGF9=%n z5a+DTd8Bima(CL5=fgu2<)v8(+>RH#z3F)~P`1Xvw;g$^3 z}feR z@qi(&&x+{yjx^r**s&Lx82)-f^!dVp_~#rZT#0)x zSe4(wgi3dAg*#1Z$YRkLe%;142UM%q1@t?in;@^}x{zqdeM9@Lt|mXacJS(v2PGHd z)z9Bu<@w>^Ssj*BL+O@H%-Q`D9fFyKJy(Rj7NL7D*{V2LXAmw{?u*$iPe|w#AGnO# zxFt9@N2ywVK(Lv>e-BZz!wS&8(JDQZyp89&nc|%6rsY>)^Q>1Cou1i~v zt+QvIQ^{BRvtSy(D(`at*VE0iLi+Hr^B*t8KDO~4tH6>u9jad`yE&eMxSj-L_|g;|5Wjhm{#r>v*!i!`%+S#kJx zgaRzOp_cOUO`6-4>Un*xJ7dAV*1NyVJ&wcn(*+Jb-NYt0chxz4d`+cKtq;O|@|9+7 zU1`gd{3jxh)Rof(V+k|oP<0P(Y_$gO6$^bDxLs74?WLuR-+N+*us(feWgWG5Jq^ir@$FVBG9VH-O z%Ljq(Jn4K;*JClI8GE3=k~U>KFhI~$AE!Ty_5e*Lqx`vR3~;amMuh|Wb0vHB3d+)rXb zx?L3&MNBfh`s=nm)>vvnWwy}+&%H5-naYgbp{<+iRJ0$I;}?+XB^D<0G8?{lVjr5@ lma-=4|M2rE(NOg3x~aQtcjL*T(xtzM(7T-M%540O{|jxx=(GR; literal 0 HcmV?d00001 diff --git a/Signal/src/Models/TSMessageAdapaters/TSGenericAttachmentAdapter.m b/Signal/src/Models/TSMessageAdapaters/TSGenericAttachmentAdapter.m index cc5fca1a0..ae629f735 100644 --- a/Signal/src/Models/TSMessageAdapaters/TSGenericAttachmentAdapter.m +++ b/Signal/src/Models/TSMessageAdapaters/TSGenericAttachmentAdapter.m @@ -78,7 +78,7 @@ NS_ASSUME_NONNULL_BEGIN - (CGFloat)bubbleHeight { - return 35.f; + return 45.f; } - (CGFloat)iconSize diff --git a/Signal/src/ViewControllers/MessagesViewController.m b/Signal/src/ViewControllers/MessagesViewController.m index f011f7afd..be592cedb 100644 --- a/Signal/src/ViewControllers/MessagesViewController.m +++ b/Signal/src/ViewControllers/MessagesViewController.m @@ -346,6 +346,8 @@ typedef enum : NSUInteger { @property (nonatomic) UIView *voiceMemoUI; +@property (nonatomic) UIView *voiceMemoContentView; + @property (nonatomic) NSDate *voiceMemoStartTime; @property (nonatomic) NSTimer *voiceMemoUpdateTimer; @@ -387,25 +389,70 @@ typedef enum : NSUInteger { [self addSubview:self.voiceMemoUI]; self.voiceMemoUI.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height); + self.voiceMemoContentView = [UIView new]; + [self.voiceMemoUI addSubview:self.voiceMemoContentView]; + [self.voiceMemoContentView autoPinWidthToSuperview]; + [self.voiceMemoContentView autoPinHeightToSuperview]; + self.recordingLabel = [UILabel new]; - self.recordingLabel.textColor = [UIColor ows_materialBlueColor]; + self.recordingLabel.textColor = [UIColor ows_destructiveRedColor]; self.recordingLabel.font = [UIFont ows_mediumFontWithSize:14.f]; - [self.voiceMemoUI addSubview:self.recordingLabel]; + [self.voiceMemoContentView addSubview:self.recordingLabel]; [self updateVoiceMemo]; UIImage *icon = [UIImage imageNamed:@"voice-memo-button"]; OWSAssert(icon); UIImageView *imageView = [[UIImageView alloc] initWithImage:[icon imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; - imageView.tintColor = [UIColor ows_materialBlueColor]; - [self.voiceMemoUI addSubview:imageView]; + imageView.tintColor = [UIColor ows_destructiveRedColor]; + [self.voiceMemoContentView addSubview:imageView]; + NSMutableAttributedString *cancelString = [NSMutableAttributedString new]; + const CGFloat cancelArrowFontSize = ScaleFromIPhone5To7Plus(18.4, 20.f); + const CGFloat cancelFontSize = ScaleFromIPhone5To7Plus(14.f, 16.f); + [cancelString + appendAttributedString:[[NSAttributedString alloc] + initWithString:@"\uf104 " + attributes:@{ + NSFontAttributeName : [UIFont ows_fontAwesomeFont:cancelArrowFontSize], + NSForegroundColorAttributeName : [UIColor ows_destructiveRedColor], + NSBaselineOffsetAttributeName : @(-1.f), + }]]; + [cancelString + appendAttributedString:[[NSAttributedString alloc] + initWithString:NSLocalizedString(@"VOICE_MESSAGE_CANCEL_INSTRUCTIONS", + @"Indicates how to cancel a voice message.") + attributes:@{ + NSFontAttributeName : [UIFont ows_mediumFontWithSize:cancelFontSize], + NSForegroundColorAttributeName : [UIColor ows_destructiveRedColor], + }]]; + [cancelString + appendAttributedString:[[NSAttributedString alloc] + initWithString:@" \uf104" + attributes:@{ + NSFontAttributeName : [UIFont ows_fontAwesomeFont:cancelArrowFontSize], + NSForegroundColorAttributeName : [UIColor ows_destructiveRedColor], + NSBaselineOffsetAttributeName : @(-1.f), + }]]; UILabel *cancelLabel = [UILabel new]; - cancelLabel.textColor = [UIColor ows_destructiveRedColor]; - cancelLabel.font = [UIFont ows_mediumFontWithSize:14.f]; - cancelLabel.text - = NSLocalizedString(@"VOICE_MESSAGE_CANCEL_INSTRUCTIONS", @"Indicates how to cancel a voice message."); - [self.voiceMemoUI addSubview:cancelLabel]; + cancelLabel.attributedText = cancelString; + [self.voiceMemoContentView addSubview:cancelLabel]; + + const CGFloat kRedCircleSize = 100.f; + UIView *redCircleView = [UIView new]; + redCircleView.backgroundColor = [UIColor ows_destructiveRedColor]; + redCircleView.layer.cornerRadius = kRedCircleSize * 0.5f; + [redCircleView autoSetDimension:ALDimensionWidth toSize:kRedCircleSize]; + [redCircleView autoSetDimension:ALDimensionHeight toSize:kRedCircleSize]; + [self.voiceMemoContentView addSubview:redCircleView]; + [redCircleView autoAlignAxis:ALAxisHorizontal toSameAxisOfView:self.contentView.rightBarButtonItem]; + [redCircleView autoAlignAxis:ALAxisVertical toSameAxisOfView:self.contentView.rightBarButtonItem]; + + UIImage *whiteIcon = [UIImage imageNamed:@"voice-message-large-white"]; + OWSAssert(whiteIcon); + UIImageView *whiteIconView = [[UIImageView alloc] initWithImage:whiteIcon]; + [redCircleView addSubview:whiteIconView]; + [whiteIconView autoCenterInSuperview]; [imageView autoVCenterInSuperview]; [imageView autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:10]; @@ -491,9 +538,7 @@ typedef enum : NSUInteger { // Fade out the voice message views as the cancel gesture // proceeds as feedback. - for (UIView *subview in self.voiceMemoUI.subviews) { - subview.layer.opacity = MAX(0.f, MIN(1.f, 1.f - (float)cancelAlpha)); - } + self.voiceMemoContentView.layer.opacity = MAX(0.f, MIN(1.f, 1.f - (float)cancelAlpha)); } - (void)updateVoiceMemo @@ -3504,6 +3549,7 @@ typedef enum : NSUInteger { DDLogInfo(@"voiceMemoGestureDidStart"); [((OWSMessagesInputToolbar *)self.inputToolbar)showVoiceMemoUI]; + AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); [self startRecordingVoiceMemo]; } @@ -3515,6 +3561,7 @@ typedef enum : NSUInteger { [((OWSMessagesInputToolbar *)self.inputToolbar) hideVoiceMemoUI:YES]; [self endRecordingVoiceMemo]; + AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); } - (void)voiceMemoGestureDidCancel @@ -3525,6 +3572,7 @@ typedef enum : NSUInteger { [((OWSMessagesInputToolbar *)self.inputToolbar) hideVoiceMemoUI:NO]; [self cancelRecordingVoiceMemo]; + AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); } - (void)voiceMemoGestureDidChange:(CGFloat)cancelAlpha