|
|
|
@ -123,7 +123,7 @@ public class AttachmentApprovalViewController: OWSViewController, CaptioningTool
|
|
|
|
|
containerView.addSubview(mediaMessageView)
|
|
|
|
|
mediaMessageView.autoPinEdgesToSuperviewEdges()
|
|
|
|
|
|
|
|
|
|
if attachment.isImage || attachment.isVideo {
|
|
|
|
|
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)
|
|
|
|
@ -211,6 +211,14 @@ public class AttachmentApprovalViewController: OWSViewController, CaptioningTool
|
|
|
|
|
|
|
|
|
|
// MARK: CaptioningToolbarDelegate
|
|
|
|
|
|
|
|
|
|
func captioningToolbarDidBeginEditing(_ captioningToolbar: CaptioningToolbar) {
|
|
|
|
|
self.shouldShrinkAttachment = true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func captioningToolbarDidEndEditing(_ captioningToolbar: CaptioningToolbar) {
|
|
|
|
|
self.shouldShrinkAttachment = false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func captioningToolbarDidTapSend(_ captioningToolbar: CaptioningToolbar, captionText: String?) {
|
|
|
|
|
self.sendAttachment(captionText: captionText)
|
|
|
|
|
}
|
|
|
|
@ -221,6 +229,10 @@ public class AttachmentApprovalViewController: OWSViewController, CaptioningTool
|
|
|
|
|
|
|
|
|
|
// MARK: Helpers
|
|
|
|
|
|
|
|
|
|
var isZoomable: Bool {
|
|
|
|
|
return attachment.isImage || attachment.isVideo
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private func sendAttachment(captionText: String?) {
|
|
|
|
|
// disable controls after send was tapped.
|
|
|
|
|
self.bottomToolbar.isUserInteractionEnabled = false
|
|
|
|
@ -236,12 +248,36 @@ public class AttachmentApprovalViewController: OWSViewController, CaptioningTool
|
|
|
|
|
attachment.captionText = captionText
|
|
|
|
|
self.delegate?.didApproveAttachment(attachment: attachment)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// When the keyboard is popped, it can obscure the attachment view.
|
|
|
|
|
private var shouldShrinkAttachment: Bool = false {
|
|
|
|
|
didSet {
|
|
|
|
|
UIView.animate(withDuration: 0.2) {
|
|
|
|
|
if self.shouldShrinkAttachment {
|
|
|
|
|
let kScaleFactor: CGFloat = 0.7
|
|
|
|
|
let scale = CGAffineTransform(scaleX: kScaleFactor, y: kScaleFactor)
|
|
|
|
|
|
|
|
|
|
let originalHeight = self.scrollView.bounds.size.height
|
|
|
|
|
|
|
|
|
|
// Position the new scaled item to be centered with respect
|
|
|
|
|
// to it's new size.
|
|
|
|
|
let heightDelta = originalHeight * (1 - kScaleFactor)
|
|
|
|
|
let translate = CGAffineTransform(translationX: 0, y: -heightDelta / 2)
|
|
|
|
|
|
|
|
|
|
self.scrollView.transform = scale.concatenating(translate)
|
|
|
|
|
} else {
|
|
|
|
|
self.scrollView.transform = CGAffineTransform.identity
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extension AttachmentApprovalViewController: UIScrollViewDelegate {
|
|
|
|
|
|
|
|
|
|
public func viewForZooming(in scrollView: UIScrollView) -> UIView? {
|
|
|
|
|
if attachment.isImage || attachment.isVideo {
|
|
|
|
|
if isZoomable {
|
|
|
|
|
return mediaMessageView
|
|
|
|
|
} else {
|
|
|
|
|
// don't zoom for audio or generic attachments.
|
|
|
|
@ -330,6 +366,8 @@ private class GradientView: UIView {
|
|
|
|
|
protocol CaptioningToolbarDelegate: class {
|
|
|
|
|
func captioningToolbarDidTapSend(_ captioningToolbar: CaptioningToolbar, captionText: String?)
|
|
|
|
|
func captioningToolbar(_ captioningToolbar: CaptioningToolbar, didChangeTextViewHeight newHeight: CGFloat)
|
|
|
|
|
func captioningToolbarDidBeginEditing(_ captioningToolbar: CaptioningToolbar)
|
|
|
|
|
func captioningToolbarDidEndEditing(_ captioningToolbar: CaptioningToolbar)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class CaptioningToolbar: UIView, UITextViewDelegate {
|
|
|
|
@ -480,6 +518,14 @@ class CaptioningToolbar: UIView, UITextViewDelegate {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public func textViewDidBeginEditing(_ textView: UITextView) {
|
|
|
|
|
self.captioningToolbarDelegate?.captioningToolbarDidBeginEditing(self)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public func textViewDidEndEditing(_ textView: UITextView) {
|
|
|
|
|
self.captioningToolbarDelegate?.captioningToolbarDidEndEditing(self)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MARK: - Helpers
|
|
|
|
|
|
|
|
|
|
private func clampedTextViewHeight(fixedWidth: CGFloat) -> CGFloat {
|
|
|
|
|