diff --git a/Signal/Images.xcassets/ic_gallery_badge_gif.imageset/Contents.json b/Signal/Images.xcassets/ic_gallery_badge_gif.imageset/Contents.json new file mode 100644 index 000000000..be7b71198 --- /dev/null +++ b/Signal/Images.xcassets/ic_gallery_badge_gif.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icon_GIF@1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "icon_GIF@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "icon_GIF@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Signal/Images.xcassets/ic_gallery_badge_gif.imageset/icon_GIF@1x.png b/Signal/Images.xcassets/ic_gallery_badge_gif.imageset/icon_GIF@1x.png new file mode 100644 index 000000000..58592c846 Binary files /dev/null and b/Signal/Images.xcassets/ic_gallery_badge_gif.imageset/icon_GIF@1x.png differ diff --git a/Signal/Images.xcassets/ic_gallery_badge_gif.imageset/icon_GIF@2x.png b/Signal/Images.xcassets/ic_gallery_badge_gif.imageset/icon_GIF@2x.png new file mode 100644 index 000000000..529bb11da Binary files /dev/null and b/Signal/Images.xcassets/ic_gallery_badge_gif.imageset/icon_GIF@2x.png differ diff --git a/Signal/Images.xcassets/ic_gallery_badge_gif.imageset/icon_GIF@3x.png b/Signal/Images.xcassets/ic_gallery_badge_gif.imageset/icon_GIF@3x.png new file mode 100644 index 000000000..df5f374ad Binary files /dev/null and b/Signal/Images.xcassets/ic_gallery_badge_gif.imageset/icon_GIF@3x.png differ diff --git a/Signal/Images.xcassets/ic_gallery_badge_video.imageset/Contents.json b/Signal/Images.xcassets/ic_gallery_badge_video.imageset/Contents.json new file mode 100644 index 000000000..e3cdd23b0 --- /dev/null +++ b/Signal/Images.xcassets/ic_gallery_badge_video.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icon_video@1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "icon_video@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "icon_video@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Signal/Images.xcassets/ic_gallery_badge_video.imageset/icon_video@1x.png b/Signal/Images.xcassets/ic_gallery_badge_video.imageset/icon_video@1x.png new file mode 100644 index 000000000..d5435c662 Binary files /dev/null and b/Signal/Images.xcassets/ic_gallery_badge_video.imageset/icon_video@1x.png differ diff --git a/Signal/Images.xcassets/ic_gallery_badge_video.imageset/icon_video@2x.png b/Signal/Images.xcassets/ic_gallery_badge_video.imageset/icon_video@2x.png new file mode 100644 index 000000000..e6880defb Binary files /dev/null and b/Signal/Images.xcassets/ic_gallery_badge_video.imageset/icon_video@2x.png differ diff --git a/Signal/Images.xcassets/ic_gallery_badge_video.imageset/icon_video@3x.png b/Signal/Images.xcassets/ic_gallery_badge_video.imageset/icon_video@3x.png new file mode 100644 index 000000000..b520831e4 Binary files /dev/null and b/Signal/Images.xcassets/ic_gallery_badge_video.imageset/icon_video@3x.png differ diff --git a/Signal/src/ViewControllers/MediaTileViewController.swift b/Signal/src/ViewControllers/MediaTileViewController.swift index 8bdfe5eb1..981c4a6de 100644 --- a/Signal/src/ViewControllers/MediaTileViewController.swift +++ b/Signal/src/ViewControllers/MediaTileViewController.swift @@ -555,29 +555,22 @@ fileprivate class MediaGalleryCell: UICollectionViewCell { private var tapGesture: UITapGestureRecognizer! private let badgeView: UIImageView + private let gradientView: GradientView private var item: MediaGalleryItem? public weak var delegate: MediaGalleryCellDelegate? - // TODO real icons - let videoBadgeImage = #imageLiteral(resourceName: "video-video-selected") - let animatedBadgeImage = #imageLiteral(resourceName: "video-mute-selected") + static let videoBadgeImage = #imageLiteral(resourceName: "ic_gallery_badge_video") + static let animatedBadgeImage = #imageLiteral(resourceName: "ic_gallery_badge_gif") override init(frame: CGRect) { self.imageView = UIImageView() imageView.contentMode = .scaleAspectFill self.badgeView = UIImageView() - badgeView.contentMode = .scaleAspectFit badgeView.isHidden = true - badgeView.backgroundColor = UIColor.white - let badgeLabel = UILabel() -// badgeLabel.text = "GIF" - badgeLabel.textColor = UIColor.gray - badgeLabel.adjustsFontSizeToFitWidth = true - badgeView.addSubview(badgeLabel) - badgeLabel.autoPinEdgesToSuperviewEdges() + self.gradientView = GradientView(from: .clear, to: UIColor.black.withAlphaComponent(0.5)) super.init(frame: frame) @@ -586,13 +579,20 @@ fileprivate class MediaGalleryCell: UICollectionViewCell { self.clipsToBounds = true self.contentView.addSubview(imageView) + self.contentView.addSubview(gradientView) self.contentView.addSubview(badgeView) + imageView.autoPinEdgesToSuperviewEdges() + + gradientView.autoPinEdgesToSuperviewEdges(with: .zero, excludingEdge: .top) + gradientView.autoSetDimension(.height, toSize: 16) + + // Note assets were rendered to match exactly. We don't want to re-size with + // content mode lest they become less legible. + let kBadgeSize = CGSize(width: 18, height: 12) badgeView.autoPinEdge(toSuperviewEdge: .leading, withInset: 3) badgeView.autoPinEdge(toSuperviewEdge: .bottom, withInset: 3) - badgeView.autoSetDimensions(to: CGSize(width: 15, height: 10)) - badgeView.layer.cornerRadius = 2 - imageView.autoPinEdgesToSuperviewEdges() + badgeView.autoSetDimensions(to: kBadgeSize) } @available(*, unavailable, message: "Unimplemented") @@ -604,13 +604,16 @@ fileprivate class MediaGalleryCell: UICollectionViewCell { self.item = item self.imageView.image = item.thumbnailImage if item.isVideo { + self.gradientView.isHidden = false self.badgeView.isHidden = false -// self.badgeView.image = self.videoBadgeImage + self.badgeView.image = MediaGalleryCell.videoBadgeImage } else if item.isAnimated { + self.gradientView.isHidden = false self.badgeView.isHidden = false -// self.badgeView.image = self.animatedBadgeImage + self.badgeView.image = MediaGalleryCell.animatedBadgeImage } else { assert(item.isImage) + self.gradientView.isHidden = true self.badgeView.isHidden = true } diff --git a/SignalMessaging/attachments/AttachmentApprovalViewController.swift b/SignalMessaging/attachments/AttachmentApprovalViewController.swift index 3d2da6289..6efb357c4 100644 --- a/SignalMessaging/attachments/AttachmentApprovalViewController.swift +++ b/SignalMessaging/attachments/AttachmentApprovalViewController.swift @@ -472,22 +472,23 @@ extension AttachmentApprovalViewController: UIScrollViewDelegate { } } -private class GradientView: UIView { +// TODO extract into it's own file +public class GradientView: UIView { let gradientLayer = CAGradientLayer() - required init(from fromColor: UIColor, to toColor: UIColor) { + public required init(from fromColor: UIColor, to toColor: UIColor) { gradientLayer.colors = [fromColor.cgColor, toColor.cgColor] super.init(frame: CGRect.zero) self.layer.addSublayer(gradientLayer) } - required init?(coder aDecoder: NSCoder) { + public required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } - override func layoutSubviews() { + public override func layoutSubviews() { super.layoutSubviews() gradientLayer.frame = self.bounds }