From 7754d3d94f33b54ffcb35147667ccd49f40f7ce4 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Tue, 20 Mar 2018 17:26:55 -0400 Subject: [PATCH] Real assets // FREEBIE --- .../Contents.json | 23 ++++++++++++ .../icon_GIF@1x.png | Bin 0 -> 380 bytes .../icon_GIF@2x.png | Bin 0 -> 759 bytes .../icon_GIF@3x.png | Bin 0 -> 1083 bytes .../Contents.json | 23 ++++++++++++ .../icon_video@1x.png | Bin 0 -> 253 bytes .../icon_video@2x.png | Bin 0 -> 460 bytes .../icon_video@3x.png | Bin 0 -> 685 bytes .../MediaTileViewController.swift | 35 ++++++++++-------- .../AttachmentApprovalViewController.swift | 9 +++-- 10 files changed, 70 insertions(+), 20 deletions(-) create mode 100644 Signal/Images.xcassets/ic_gallery_badge_gif.imageset/Contents.json create mode 100644 Signal/Images.xcassets/ic_gallery_badge_gif.imageset/icon_GIF@1x.png create mode 100644 Signal/Images.xcassets/ic_gallery_badge_gif.imageset/icon_GIF@2x.png create mode 100644 Signal/Images.xcassets/ic_gallery_badge_gif.imageset/icon_GIF@3x.png create mode 100644 Signal/Images.xcassets/ic_gallery_badge_video.imageset/Contents.json create mode 100644 Signal/Images.xcassets/ic_gallery_badge_video.imageset/icon_video@1x.png create mode 100644 Signal/Images.xcassets/ic_gallery_badge_video.imageset/icon_video@2x.png create mode 100644 Signal/Images.xcassets/ic_gallery_badge_video.imageset/icon_video@3x.png 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 0000000000000000000000000000000000000000..58592c84638b334dca086a764b7a514058741373 GIT binary patch literal 380 zcmV-?0fYXDP)Px$Hc3Q5R45g#Q^Bf&KomXC9wiDPN|55(owVp51Q-2+_&I$>^Z~8>gO&aEJd zE(=1j@_C1pXS6Wr!e#E6LbO^5V-A7L2c@pwRzBv_V(+wF$K;Q-flvD@uBD0rTS<2e2Px2uvQ zK@bGkY&K971;^tNr_%|m)vANAmBg3J<)BBKUMNjd$g&JoRdKmoV45a4jw25Tq@pNL z*EK{@gr;fztQVrrY&K(qIF1oT5w6!OY}@X^ROES%^ZAU$V)0&x)XASL%U~D=BajcT zv0kqS0^Phnk*@2^56|=1b>{OqGn-y0000Px%u}MThR7efYS5He~Q4~K~shB1%TqL6Tr;Un8L_r{dxNse~@B_?zsKLH~A3$8p z2!e_Ox{ZQLkQP#+W-6wobAPvam*;zG&0yGp<2(P}J->U;dFMTe{?c?h)iD0XxXk#8 z@n;iqAQy6KBpm$847-efFCu)oQu@^74`jg#wq8$s`A!N~Od-O2J~WP$H2~nz_C?*UF5!T#l}M_|m-*%bs@LlRjNNXhNF+ko6-t-S=jrb5 zj;^k*$nAEM)9IAwQptY5p8|ovj2)X>L~{XEt5qJ4^2FnD+T45#Lk~rxQOaa8^z!mT z_xJbj0>TKp?Oj1{VRRQYtdc0SVX=i6gBt&E1 z+}sEqf=;KS{r&wJn^Hj^;w0r13WdnwaL7$URsj+oCdePa!C*keVo~nqfZqdzaRHW- z*Xxz5GqMVh$z&qwiF$l|6v0NLk&cdzxL&K(=;7gk^m@JUFA~uBN&q&SZBaO>0Ac8% z37gF(f6@Q~rIF?jR=T~ti`GJz1f5J}xcgb^<>`Q&Z p@|`eHU*;oU94$_Y@!J0e{Q(`(<$_uccUAxZ002ovPDHLkV1oB3X9EBL literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..df5f374ad4ea6bf08b32dafc46104a0621c9e5cc GIT binary patch literal 1083 zcmV-B1jPG^P)Px&^+`lQR9Fe!SxZYJK@hHJeBx^bpAi*A7DYuwP?2O8%ti5W@Q|ZFZ1LjF;~o^z zEI!tQ3Zkf}(UXt$jZqWCcecK9dzhXilVlAslY*kBs%x71x~8jZx-Arf0)apet6j_v zW*c)Jb25>io%zGOz&viTSbiBg$AIdY=a|h#@VQ$8!R@ChBGC_S%?=7sfB{&@!qGyaa6?ETaw1~LeyK(-L~NH) zeN8cB9su((sF?Pto0}W*dcE}U@IW~^IaF9!NCgE2l%AfREc4?Bus}54yuH2A-rgRq zudmbH-CfWt0M*#oNUg1{3Ru0t;^HECJRVg&JUmQAMMa7{Iy$QABR!Orl~I3xe7^Ho}Q+YlasLKudlDPxw%O@J3HibI;pz4TC&B&z($aEKDBz$AFhqoR;2rI z;}9I0nwkm;DkCF<($eH1US3|v?RL}E)m7Lr6VVYdVjCM9bar+o`O?zTLJbWK%G$!r zpP!%8%F2pr2XHepGvso)f`Cf{g%FC1i>bT2J4DaB3X>TP83IGt0ZdDFyIlb#biB(` zd3ibY_4U!j#DoG8eLkO$4i68hwzgK7M%89!W>Q5(MO3y%MuxzSkB^niCkDW5B2uBq zYPC{lXD2N$qcVG^`}=$GnDEvR*y-u1R|I!ltMTQZBQ>fm1dwU60g`V&`6ABbctGc>6y?H|AsHQYKJDUau29zkFDE9kt5F1R$ znCLo#n^?_%9SvMxUlSOm4Z5MV^KZ>}0Ss3#`1LjW`MrE8!3g&m)DSZ|%u4Vb*GRxZ>ITgU z+$(i3&!fX+1fOwz1Plr(pP~>%%VkmzKb!ih_AeH+7J7eAhim`<002ovPDHLkV1fZj B{DA-f literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d5435c6629e5a38ca258224aa647a4ac4437adcb GIT binary patch literal 253 zcmVPx#w@E}nR45g#lVJ*kAP|LLvUGxw4Dk|n$j;FrBIqvuERgQdIPx$hDk(0R7efYm%(bnKoExiNRP#Xh$smnc=Q${y_dd9`%r=pARZ+klICn5A(vbQ z2|=vqq%+YCsR!e3HpGEpHZ!|3UuLtg0j`p!sX_Wlx+DE1ty{PT*W#Ln;K(dF2BhDl zO$pZ?FbsEv={(YRb~GqH)&9t~i3alqL5iin7-&bHx1#snI7t$;TCICis>FUc^F$`Y za=Anh1YoclWWpUvWfITlm)&i*+i)BQS98;~xL%0Rk7ia=+2comK^Ygra-+m`-V%kp01XX)$5gNaqA zW!H~|>gpQSEx1EZb%o7dlAxaElAm{-J4M>~Z_po${a+%LnPx%XGugsR9Fe!na^t)K@`W|)}Ex7A}ScgQ;1hl$*F0fz2}(!&D@1WF9AUWE1NAI z>Phfot#~W=0})X?iS~V$JdqHR*4>@`@!;|1&B)CAIJ2{}^E7%v4u`{6uD)ZvVZC7e z!0IR2a4>&ZO;%mgwC}G5$3T~?25Zm+F<+j-Y2t9hCoVs*ew4a^*(Jw&%d__baa&+d zv_IJoDil~CfV*b6-|sA!=$>uRp@0Ggu#m>Hg^i*GCq(iMGltzSY;p%MZ0WY8*Xz-4 zx3k@kLmk`z4DTu1((QJsQmIhC-}eLH1)i~kZ7S}dTrMBGiAJN8&*v$Z%TXi}Io7Kz z$gb$nqy7I&XRd(Bz?;p6Ow+Ughr^*#Kv%&8aJ^oWVHi}c zR%tXEkwdFrx_{9s0h5tes};4|ZK~C3G#-y#1$-}qscB$Y}fN~KcLbhcIcjJ*}*bULMa zy>97bGI{IgueSRNOd{pa4k?~(eX$fJ`gA%?g+jqvl2UiB^#z!dK=Ma;3g!lor(kXZ zc><;aNGX^~ASGY`!jUPFNXU4~tSg&`mq7B*0Swp0j$C2mtcUlI7c(S4Pj-W=fdM;L z&l>*Qoy}%`0FtvOH zPB7RlE3y?q6-gt3g^u5242QhZHR~f90w#zV=_4yQhS;s8_#A>?0m#4vI#v4@7B+99 THaP{G00000NkvXXu0mjfY_C3l literal 0 HcmV?d00001 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 }