From 745ec2adb8574263f0066002b07aa7197d719752 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 13 Mar 2019 12:10:56 -0400 Subject: [PATCH 1/3] Remove top gradient from attachment approval. --- .../Contents.json | 23 ++++++++++++++++++ .../chevron-left-shadow-24@1x.png | Bin 0 -> 452 bytes .../chevron-left-shadow-24@2x.png | Bin 0 -> 972 bytes .../chevron-left-shadow-24@3x.png | Bin 0 -> 1680 bytes .../Contents.json | 23 ++++++++++++++++++ .../chevron-right-shadow-24@1x.png | Bin 0 -> 1548 bytes .../chevron-right-shadow-24@2x.png | Bin 0 -> 2106 bytes .../chevron-right-shadow-24@3x.png | Bin 0 -> 2810 bytes .../AttachmentApprovalViewController.swift | 19 +++++++++++---- .../AttachmentPrepViewController.swift | 10 -------- 10 files changed, 60 insertions(+), 15 deletions(-) create mode 100644 Signal/Images.xcassets/NavBarBackWithShadow.imageset/Contents.json create mode 100644 Signal/Images.xcassets/NavBarBackWithShadow.imageset/chevron-left-shadow-24@1x.png create mode 100644 Signal/Images.xcassets/NavBarBackWithShadow.imageset/chevron-left-shadow-24@2x.png create mode 100644 Signal/Images.xcassets/NavBarBackWithShadow.imageset/chevron-left-shadow-24@3x.png create mode 100644 Signal/Images.xcassets/NavBarBackWithShadowRTL.imageset/Contents.json create mode 100644 Signal/Images.xcassets/NavBarBackWithShadowRTL.imageset/chevron-right-shadow-24@1x.png create mode 100644 Signal/Images.xcassets/NavBarBackWithShadowRTL.imageset/chevron-right-shadow-24@2x.png create mode 100644 Signal/Images.xcassets/NavBarBackWithShadowRTL.imageset/chevron-right-shadow-24@3x.png diff --git a/Signal/Images.xcassets/NavBarBackWithShadow.imageset/Contents.json b/Signal/Images.xcassets/NavBarBackWithShadow.imageset/Contents.json new file mode 100644 index 000000000..82a078d60 --- /dev/null +++ b/Signal/Images.xcassets/NavBarBackWithShadow.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "chevron-left-shadow-24@1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "chevron-left-shadow-24@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "chevron-left-shadow-24@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Signal/Images.xcassets/NavBarBackWithShadow.imageset/chevron-left-shadow-24@1x.png b/Signal/Images.xcassets/NavBarBackWithShadow.imageset/chevron-left-shadow-24@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..373826d47d1bd3b957ddbd321c5d8f41a2b00579 GIT binary patch literal 452 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 a`2PSHX0T;VHzd0N0000!lvI6;>1s;*b z3=G`DAk4@xYYtEci%MolL`j6Nk5zJhu3lnFep0GlMQ#C5H3Nf9g%yyQn_7~nP?4LH zS8P>bs{~eI1!RMS^_3LBN=mYAl_Got6rA&mQWZ?~O!N$t?6?#Z6l{u8(yW49+@RWl zJX@uVl9B=|ef{$Ca=mh6z5JqdeM3u2OML?)eIp}XpbFjM%Dj@q3f;V7Wr!g#b6ir3 zlZ!G7N;32F6hP)CCgqow*eWT3EP?}wJ4-Ut5H{r%L%jv`pgu@O-%!s$ADgz+icB2Z zKr%SBr6j|BRZv=#1NKu&vVLk#YHn&?Nik5LAy(^vVGGxY;>e1`0*GbcK!o_s2IO+9 zpw#00oKjE_gyvx zocyBTg2d!hki)=Qkc7}xgRP0gWet)9lE#!|tK!n6tkmQZq}T$+8941bC8p~m3ESvn zRc!-I30A)ODVb@NE{P?nc18wgx1hC`MvXVZ_z`$7N z>EamT!TUDstY5Q(gh;l|3Q;E$sl^%h58e>}@TR-+tDujMso~Wl-=1t#XPR!-x}~6D zxq{3ZV_!v+fZLnCJe%&5a5J^-efoaaTakG}%Q|8ctd8@qla74bf3}XnD@JQSx=k~v(N9~6na-Ue=aLV=4k;N_Z6$=zopr07kh($ literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/NavBarBackWithShadowRTL.imageset/chevron-right-shadow-24@2x.png b/Signal/Images.xcassets/NavBarBackWithShadowRTL.imageset/chevron-right-shadow-24@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..24002aa78882e7c907d2c87ef31f2d39197c4230 GIT binary patch literal 2106 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 literal 0 HcmV?d00001 diff --git a/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentApprovalViewController.swift b/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentApprovalViewController.swift index 690d044ed..285cb9331 100644 --- a/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentApprovalViewController.swift +++ b/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentApprovalViewController.swift @@ -190,10 +190,19 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC let hasCancel = (mode != .sharedNavigation) if hasCancel { - let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, - target: self, action: #selector(cancelPressed)) - cancelButton.tintColor = .white - self.navigationItem.leftBarButtonItem = cancelButton + // Mimic a UIBarButtonItem of type .cancel, but with a shadow. + let cancelButton = OWSButton(title: CommonStrings.cancelButton) { [weak self] in + self?.cancelPressed() + } + cancelButton.setTitleColor(.white, for: .normal) + if let titleLabel = cancelButton.titleLabel { + titleLabel.font = UIFont.systemFont(ofSize: 18.0) + titleLabel.layer.shadowColor = UIColor.black.cgColor + titleLabel.layer.shadowRadius = 2.0 + titleLabel.layer.shadowOpacity = 0.66 + titleLabel.layer.shadowOffset = .zero + } + navigationItem.leftBarButtonItem = UIBarButtonItem(customView: cancelButton) } else { // Note: using a custom leftBarButtonItem breaks the interactive pop gesture. self.navigationItem.leftBarButtonItem = self.createOWSBackButton() @@ -507,7 +516,7 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC // MARK: - Event Handlers - @objc func cancelPressed(sender: UIButton) { + private func cancelPressed() { self.approvalDelegate?.attachmentApproval(self, didCancelAttachments: attachments) } } diff --git a/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentPrepViewController.swift b/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentPrepViewController.swift index 1e273776a..46527237a 100644 --- a/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentPrepViewController.swift +++ b/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentPrepViewController.swift @@ -140,16 +140,6 @@ public class AttachmentPrepViewController: OWSViewController, PlayerProgressBarD } #endif - if isZoomable { - // Add top and bottom gradients to ensure toolbar controls are legible - // when placed over image/video preview which may be a clashing color. - let topGradient = GradientView(from: backgroundColor, to: UIColor.clear) - self.view.addSubview(topGradient) - topGradient.autoPinWidthToSuperview() - topGradient.autoPinEdge(toSuperviewEdge: .top) - topGradient.autoSetDimension(.height, toSize: ScaleFromIPhone5(60)) - } - // Hide the play button embedded in the MediaView and replace it with our own. // This allows us to zoom in on the media view without zooming in on the button if attachment.isVideo { From 4fd16a76140915a8ee17f3213627147a9007da0f Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 13 Mar 2019 12:25:02 -0400 Subject: [PATCH 2/3] Remove top gradient from attachment approval. --- .../AttachmentApprovalViewController.swift | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentApprovalViewController.swift b/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentApprovalViewController.swift index 285cb9331..be3493c8a 100644 --- a/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentApprovalViewController.swift +++ b/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentApprovalViewController.swift @@ -201,11 +201,56 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC titleLabel.layer.shadowRadius = 2.0 titleLabel.layer.shadowOpacity = 0.66 titleLabel.layer.shadowOffset = .zero + } else { + owsFailDebug("Missing titleLabel.") } + cancelButton.sizeToFit() navigationItem.leftBarButtonItem = UIBarButtonItem(customView: cancelButton) } else { + // Mimic a UIBarButtonItem of type .cancel, but with a shadow. + let isRTL = CurrentAppContext().isRTL + let imageName = isRTL ? "NavBarBackRTL" : "NavBarBack" + let backButton = OWSButton(imageName: imageName, tintColor: .white) { [weak self] in + self?.navigationController?.popViewController(animated: true) + } + + // Nudge closer to the left edge to match default back button item. + let kExtraLeftPadding: CGFloat = isRTL ? +0 : -8 + + // Give some extra hit area to the back button. This is a little smaller + // than the default back button, but makes sense for our left aligned title + // view in the MessagesViewController + let kExtraRightPadding: CGFloat = isRTL ? -0 : +10 + + // Extra hit area above/below + let kExtraHeightPadding: CGFloat = 4 + + // Matching the default backbutton placement is tricky. + // We can't just adjust the imageEdgeInsets on a UIBarButtonItem directly, + // so we adjust the imageEdgeInsets on a UIButton, then wrap that + // in a UIBarButtonItem. + + backButton.contentHorizontalAlignment = .left + + // Default back button is 1.5 pixel lower than our extracted image. + let kTopInsetPadding: CGFloat = 1.5 + backButton.imageEdgeInsets = UIEdgeInsets(top: kTopInsetPadding, left: kExtraLeftPadding, bottom: 0, right: 0) + + var backImageSize = CGSize.zero + if let backImage = UIImage(named: imageName) { + backImageSize = backImage.size + } else { + owsFailDebug("Missing backImage.") + } + backButton.frame = CGRect(origin: .zero, size: CGSize(width: backImageSize.width + kExtraRightPadding, + height: backImageSize.height + kExtraHeightPadding)) + + backButton.layer.shadowColor = UIColor.black.cgColor + backButton.layer.shadowRadius = 2.0 + backButton.layer.shadowOpacity = 0.66 + backButton.layer.shadowOffset = .zero // Note: using a custom leftBarButtonItem breaks the interactive pop gesture. - self.navigationItem.leftBarButtonItem = self.createOWSBackButton() + navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButton) } } From 581d0a7bff1db54a6b3fed7a90556d101cd4f872 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 13 Mar 2019 12:43:27 -0400 Subject: [PATCH 3/3] Respond to CR. --- .../AttachmentApproval/AttachmentApprovalViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentApprovalViewController.swift b/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentApprovalViewController.swift index be3493c8a..2606edf99 100644 --- a/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentApprovalViewController.swift +++ b/SignalMessaging/ViewControllers/AttachmentApproval/AttachmentApprovalViewController.swift @@ -207,7 +207,7 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC cancelButton.sizeToFit() navigationItem.leftBarButtonItem = UIBarButtonItem(customView: cancelButton) } else { - // Mimic a UIBarButtonItem of type .cancel, but with a shadow. + // Mimic a conventional back button, but with a shadow. let isRTL = CurrentAppContext().isRTL let imageName = isRTL ? "NavBarBackRTL" : "NavBarBack" let backButton = OWSButton(imageName: imageName, tintColor: .white) { [weak self] in