From 5148747c1267244ef437d18cd4c9d6bb99171952 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Wed, 22 Aug 2018 13:38:17 -0600 Subject: [PATCH 1/3] clean up long text VC --- .../ConversationView/Cells/OWSMessageBubbleView.h | 2 ++ .../ConversationView/Cells/OWSMessageBubbleView.m | 6 ++++-- .../ViewControllers/LongTextViewController.swift | 14 ++++++++------ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.h b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.h index 83b9dd688..6a89afc2b 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.h +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.h @@ -21,6 +21,8 @@ typedef NS_ENUM(NSUInteger, OWSMessageGestureLocation) { OWSMessageGestureLocation_QuotedReply, }; +extern const UIDataDetectorTypes OWSAllowedDataDetectorTypes; + @protocol OWSMessageBubbleViewDelegate - (void)didTapImageViewItem:(ConversationViewItem *)viewItem diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m index 430bb92cf..93da4de9f 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m @@ -21,6 +21,9 @@ NS_ASSUME_NONNULL_BEGIN +const UIDataDetectorTypes OWSAllowedDataDetectorTypes + = UIDataDetectorTypeLink | UIDataDetectorTypeAddress | UIDataDetectorTypeCalendarEvent; + @interface OWSMessageBubbleView () @property (nonatomic) OWSBubbleView *bubbleView; @@ -94,8 +97,7 @@ NS_ASSUME_NONNULL_BEGIN self.bodyTextView = [self newTextView]; // Setting dataDetectorTypes is expensive. Do it just once. - self.bodyTextView.dataDetectorTypes - = (UIDataDetectorTypeLink | UIDataDetectorTypeAddress | UIDataDetectorTypeCalendarEvent); + self.bodyTextView.dataDetectorTypes = OWSAllowedDataDetectorTypes; self.bodyTextView.hidden = YES; self.footerView = [OWSMessageFooterView new]; diff --git a/Signal/src/ViewControllers/LongTextViewController.swift b/Signal/src/ViewControllers/LongTextViewController.swift index 3f0c324df..80cafd5ca 100644 --- a/Signal/src/ViewControllers/LongTextViewController.swift +++ b/Signal/src/ViewControllers/LongTextViewController.swift @@ -15,7 +15,7 @@ public class LongTextViewController: OWSViewController { let messageBody: String - var messageTextView: UITextView? + var messageTextView: UITextView! // MARK: Initializers @@ -53,6 +53,8 @@ public class LongTextViewController: OWSViewController { comment: "Title for the 'long text message' view.") createViews() + + self.messageTextView.contentOffset = CGPoint(x: 0, y: self.messageTextView.contentInset.top) } // MARK: - Create Views @@ -72,17 +74,17 @@ public class LongTextViewController: OWSViewController { messageTextView.showsVerticalScrollIndicator = true messageTextView.isUserInteractionEnabled = true messageTextView.textColor = Theme.primaryColor + messageTextView.dataDetectorTypes = OWSAllowedDataDetectorTypes messageTextView.text = messageBody view.addSubview(messageTextView) - messageTextView.autoPinEdge(toSuperviewEdge: .leading) - messageTextView.autoPinEdge(toSuperviewEdge: .trailing) - messageTextView.textContainerInset = UIEdgeInsets(top: 0, left: view.layoutMargins.left, bottom: 0, right: view.layoutMargins.right) - messageTextView.autoPin(toTopLayoutGuideOf: self, withInset: 0) + messageTextView.autoPinEdge(toSuperviewEdge: .top) + messageTextView.autoPinEdge(toSuperviewMargin: .leading) + messageTextView.autoPinEdge(toSuperviewMargin: .trailing) let footer = UIToolbar() view.addSubview(footer) - footer.autoPinWidthToSuperview(withMargin: 0) + footer.autoPinWidthToSuperview() footer.autoPinEdge(.top, to: .bottom, of: messageTextView) footer.autoPin(toBottomLayoutGuideOf: self, withInset: 0) From 9c9f3875a7b0b51011b410c6dd1fb275aa645fae Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Wed, 22 Aug 2018 15:07:05 -0600 Subject: [PATCH 2/3] Link styling --- .../src/ViewControllers/LongTextViewController.swift | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Signal/src/ViewControllers/LongTextViewController.swift b/Signal/src/ViewControllers/LongTextViewController.swift index 80cafd5ca..843c4f3d8 100644 --- a/Signal/src/ViewControllers/LongTextViewController.swift +++ b/Signal/src/ViewControllers/LongTextViewController.swift @@ -77,6 +77,17 @@ public class LongTextViewController: OWSViewController { messageTextView.dataDetectorTypes = OWSAllowedDataDetectorTypes messageTextView.text = messageBody + // RADAR #18669 + // https://github.com/lionheart/openradar-mirror/issues/18669 + // + // UITextView’s linkTextAttributes property has type [String : Any]! but should be [NSAttributedStringKey : Any]! in Swift 4. + let linkTextAttributes: [String: Any] = [ + NSAttributedStringKey.foregroundColor.rawValue: Theme.primaryColor, + NSAttributedStringKey.underlineColor.rawValue: Theme.primaryColor, + NSAttributedStringKey.underlineStyle.rawValue: NSUnderlineStyle.styleSingle.rawValue + ] + messageTextView.linkTextAttributes = linkTextAttributes + view.addSubview(messageTextView) messageTextView.autoPinEdge(toSuperviewEdge: .top) messageTextView.autoPinEdge(toSuperviewMargin: .leading) From 464b854eb1adb89512b4bfcddb5e1e8ad6deee61 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Thu, 23 Aug 2018 10:38:54 -0600 Subject: [PATCH 3/3] CR: follow naming conventions --- .../ConversationView/Cells/OWSMessageBubbleView.h | 2 +- .../ConversationView/Cells/OWSMessageBubbleView.m | 4 ++-- Signal/src/ViewControllers/LongTextViewController.swift | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.h b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.h index 6a89afc2b..b899ed1b1 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.h +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.h @@ -21,7 +21,7 @@ typedef NS_ENUM(NSUInteger, OWSMessageGestureLocation) { OWSMessageGestureLocation_QuotedReply, }; -extern const UIDataDetectorTypes OWSAllowedDataDetectorTypes; +extern const UIDataDetectorTypes kOWSAllowedDataDetectorTypes; @protocol OWSMessageBubbleViewDelegate diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m index 93da4de9f..27f0567ce 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m @@ -21,7 +21,7 @@ NS_ASSUME_NONNULL_BEGIN -const UIDataDetectorTypes OWSAllowedDataDetectorTypes +const UIDataDetectorTypes kOWSAllowedDataDetectorTypes = UIDataDetectorTypeLink | UIDataDetectorTypeAddress | UIDataDetectorTypeCalendarEvent; @interface OWSMessageBubbleView () @@ -97,7 +97,7 @@ const UIDataDetectorTypes OWSAllowedDataDetectorTypes self.bodyTextView = [self newTextView]; // Setting dataDetectorTypes is expensive. Do it just once. - self.bodyTextView.dataDetectorTypes = OWSAllowedDataDetectorTypes; + self.bodyTextView.dataDetectorTypes = kOWSAllowedDataDetectorTypes; self.bodyTextView.hidden = YES; self.footerView = [OWSMessageFooterView new]; diff --git a/Signal/src/ViewControllers/LongTextViewController.swift b/Signal/src/ViewControllers/LongTextViewController.swift index 843c4f3d8..4a3940e1c 100644 --- a/Signal/src/ViewControllers/LongTextViewController.swift +++ b/Signal/src/ViewControllers/LongTextViewController.swift @@ -74,7 +74,7 @@ public class LongTextViewController: OWSViewController { messageTextView.showsVerticalScrollIndicator = true messageTextView.isUserInteractionEnabled = true messageTextView.textColor = Theme.primaryColor - messageTextView.dataDetectorTypes = OWSAllowedDataDetectorTypes + messageTextView.dataDetectorTypes = kOWSAllowedDataDetectorTypes messageTextView.text = messageBody // RADAR #18669