diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.h b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.h index 83b9dd688..b899ed1b1 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 kOWSAllowedDataDetectorTypes; + @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..27f0567ce 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 kOWSAllowedDataDetectorTypes + = 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 = kOWSAllowedDataDetectorTypes; self.bodyTextView.hidden = YES; self.footerView = [OWSMessageFooterView new]; diff --git a/Signal/src/ViewControllers/LongTextViewController.swift b/Signal/src/ViewControllers/LongTextViewController.swift index 3f0c324df..4a3940e1c 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,28 @@ public class LongTextViewController: OWSViewController { messageTextView.showsVerticalScrollIndicator = true messageTextView.isUserInteractionEnabled = true messageTextView.textColor = Theme.primaryColor + messageTextView.dataDetectorTypes = kOWSAllowedDataDetectorTypes 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: .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)