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 000000000..a45e6b697 Binary files /dev/null and b/Signal/Images.xcassets/media_invalid.imageset/photo-error-36.png differ 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 000000000..cbdd8386e Binary files /dev/null and b/Signal/Images.xcassets/media_invalid.imageset/photo-error-36@2x.png differ diff --git a/Signal/Images.xcassets/media_invalid.imageset/photo-error-36@3x.png b/Signal/Images.xcassets/media_invalid.imageset/photo-error-36@3x.png new file mode 100644 index 000000000..d0bf627b8 Binary files /dev/null and b/Signal/Images.xcassets/media_invalid.imageset/photo-error-36@3x.png differ 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 000000000..77b4b3dfa Binary files /dev/null and b/Signal/Images.xcassets/media_retry.imageset/retry-36.png differ diff --git a/Signal/Images.xcassets/media_retry.imageset/retry-36@2x.png b/Signal/Images.xcassets/media_retry.imageset/retry-36@2x.png new file mode 100644 index 000000000..faf7d4cb9 Binary files /dev/null and b/Signal/Images.xcassets/media_retry.imageset/retry-36@2x.png differ diff --git a/Signal/Images.xcassets/media_retry.imageset/retry-36@3x.png b/Signal/Images.xcassets/media_retry.imageset/retry-36@3x.png new file mode 100644 index 000000000..f865bf993 Binary files /dev/null and b/Signal/Images.xcassets/media_retry.imageset/retry-36@3x.png differ 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?,