From 15c42642e04186c379fc6ae649aeea6b66d38e5f Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 8 Nov 2018 16:11:53 -0500 Subject: [PATCH] Apply invalid and rety assets. --- .../media_invalid.imageset/Contents.json | 23 ++++++++++++++ .../media_invalid.imageset/photo-error-36.png | Bin 0 -> 485 bytes .../photo-error-36@2x.png | Bin 0 -> 766 bytes .../photo-error-36@3x.png | Bin 0 -> 1161 bytes .../media_retry.imageset/Contents.json | 23 ++++++++++++++ .../media_retry.imageset/retry-36.png | Bin 0 -> 561 bytes .../media_retry.imageset/retry-36@2x.png | Bin 0 -> 1164 bytes .../media_retry.imageset/retry-36@3x.png | Bin 0 -> 1798 bytes .../Cells/ConversationMediaView.swift | 29 ++++++++++++++++-- 9 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 Signal/Images.xcassets/media_invalid.imageset/Contents.json create mode 100644 Signal/Images.xcassets/media_invalid.imageset/photo-error-36.png create mode 100644 Signal/Images.xcassets/media_invalid.imageset/photo-error-36@2x.png create mode 100644 Signal/Images.xcassets/media_invalid.imageset/photo-error-36@3x.png create mode 100644 Signal/Images.xcassets/media_retry.imageset/Contents.json create mode 100644 Signal/Images.xcassets/media_retry.imageset/retry-36.png create mode 100644 Signal/Images.xcassets/media_retry.imageset/retry-36@2x.png create mode 100644 Signal/Images.xcassets/media_retry.imageset/retry-36@3x.png diff --git a/Signal/Images.xcassets/media_invalid.imageset/Contents.json b/Signal/Images.xcassets/media_invalid.imageset/Contents.json new file mode 100644 index 000000000..01c88da49 --- /dev/null +++ b/Signal/Images.xcassets/media_invalid.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "photo-error-36.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "photo-error-36@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "photo-error-36@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Signal/Images.xcassets/media_invalid.imageset/photo-error-36.png b/Signal/Images.xcassets/media_invalid.imageset/photo-error-36.png new file mode 100644 index 0000000000000000000000000000000000000000..a45e6b6977283c8ebd895f097f03df685bdb6fb0 GIT binary patch literal 485 zcmV7i)u4Mape5uGN3Try1ndH@4YG1ee! zvqo9_r*FvX|_BBBFJ8Lx&xEs%h4(jkP}3R49Xz;vQP+)7|d`$daYKoN|O&by^N+M`z1 z+0g#twbr5ZAx)#W@*P~8^g~|rmNw0~xOHTliNia?dXF7k>QoVEB@CD8M;y9VL20%H zCHt)`lfO5fd-3C1&Lzi>l5#LbX*st7Rm1E7v9JS00000NkvXXu0mjfS(DGh literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/media_invalid.imageset/photo-error-36@2x.png b/Signal/Images.xcassets/media_invalid.imageset/photo-error-36@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cbdd8386e08e12ed484b1b8426b3ff5f72ec349a GIT binary patch literal 766 zcmVQb))L86hL28*~J3 zKt)6%WR9l|++j|-AH~Eyf1>z-8zH5H5$^bKZW-~60ThS<6o|tE2_Yt{(TGC>X`H(d z;%aStg*uDnBmkTMK<#)@yCIs3uJN=!MgUMa52NlY=3q6%Bmm6BVb-Z?ojo{G|2%C5 z(j$ix&MOyPdo)fi&~>%*8vvZKzAaPLq-$H(8jX_+WR9L2)`u9>8Yvn_Wztzp&-$N6 z(~s4OUbt%f)gyngwivPLG%uyRTaEPM52+{$2U3Azc1S7oh`;6HBm*(TQ6v1zXima` zUV-+)fgXYO#DU&`_QrvpfMRfj5Etu%p};PVd}&^2`TAA97!2M%0Kg@uW~+f4Pzp{? z&B+h#g%Ix#NGXNYp<=|&Ia_LGI|r4Rkg;G1R0{_<0@cI;Za}qhfD=#)9B2ikRuQ}_ z33mS`IM2Y&{l46K9khC6i>@T3Ugwmo*=i{I%k1abUZg#6*Z?_joJf1&umB3+SV)n# z578?rq=6!F-bjh}R@TVFk}Oan&MVi8k}e!;`PLJ6?7l4|U(MBk3jbL>wjjA`t_Dv z_-qDL8)tK3$K*@zMl3nwZ~|(A!v&}r4hNv7IMjif<4^`7fkPFD3=TygQaIFr$l*`| zB8fuu1Y&_x97sQ`VvAE0DD`d9Ljm=IQv|3doZW$X!%^%0*m3&O zxv@hWi7hH-0d1koA+M=W$C)vJ+!181C84jqasO(H*mV9gi+)XauJWoa w;cx7f?UDPkU)Z9dENJlb7poXgCqp|1%xjMiE|E&oqV8`tq{yu2xcq#D53TR8YywPi)$B~C2RZm@cNm_pNP6ISe9;&4Xq&bh&_7Y{Jqy79E<}#YHpDeAr7Zwr^P2KAO#+uB5d1E0KnD3k4W7@sV z^TetJVS$6canm0gRAwBE1%ky(4lEEXPI6&^VByJ$1%iboHx>xypAuLgm|sd^fneL? zgC!zQqi1@CU>g#E6>ZdqU@H@dwKNdCIs{vhTChN{<~ zo9SB5d@AMb_i`lr_p^NCoRb*yv3wz^8LXJG3bsou7zNuc77T*z8Vkn2c8>)^V8m); z0gPC^)DA|hL23pgmXcb*h&7QK!H6}J+Q5jlkea}VwIa2E5o={?03+6hlm;W##*_pj zmPbl~5z8|rz=#!)++f5COinOjMMy3%Vns^IA1&=dtcVE)>)l#G3$bD+@M_=9zpd|i zMXveM`sdYiZ6dMam)65=jHW-J6V7J?ZI!Hk7q bmIB~6h>s}n303FC00000NkvXXu0mjf;%pym literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/media_retry.imageset/Contents.json b/Signal/Images.xcassets/media_retry.imageset/Contents.json new file mode 100644 index 000000000..939049743 --- /dev/null +++ b/Signal/Images.xcassets/media_retry.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "retry-36.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "retry-36@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "retry-36@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Signal/Images.xcassets/media_retry.imageset/retry-36.png b/Signal/Images.xcassets/media_retry.imageset/retry-36.png new file mode 100644 index 0000000000000000000000000000000000000000..77b4b3dfacadb712c4a8f8d4002c9da18fe66c8a GIT binary patch literal 561 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 literal 0 HcmV?d00001 diff --git a/Signal/src/ViewControllers/ConversationView/Cells/ConversationMediaView.swift b/Signal/src/ViewControllers/ConversationView/Cells/ConversationMediaView.swift index aa2ffeb8e..6cf805808 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/ConversationMediaView.swift +++ b/Signal/src/ViewControllers/ConversationView/Cells/ConversationMediaView.swift @@ -265,10 +265,33 @@ public class ConversationMediaView: UIView { } } + private func isFailedDownload() -> Bool { + guard let attachmentPointer = attachment as? TSAttachmentPointer else { + return false + } + return attachmentPointer.state == .failed + } + private func configureForMissingOrInvalid() { - // TODO: Get final value from design. - backgroundColor = UIColor.ows_gray45 - // TODO: Add error icon. + backgroundColor = UIColor.ows_gray05 + let icon: UIImage + if isFailedDownload() { + guard let asset = UIImage(named: "media_retry") else { + owsFailDebug("Missing image") + return + } + icon = asset + } else { + guard let asset = UIImage(named: "media_invalid") else { + owsFailDebug("Missing image") + return + } + icon = asset + } + let iconView = UIImageView(image: icon.withRenderingMode(.alwaysTemplate)) + iconView.tintColor = Theme.primaryColor.withAlphaComponent(0.6) + self.addSubview(iconView) + iconView.autoCenterInSuperview() } private func tryToLoadMedia(loadMediaBlock: @escaping () -> AnyObject?,