diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index f02203de2..d5125205d 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -224,7 +224,7 @@ 34D8C0271ED3673300188D7C /* DebugUIMessages.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D8C0241ED3673300188D7C /* DebugUIMessages.m */; }; 34D8C0281ED3673300188D7C /* DebugUITableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D8C0261ED3673300188D7C /* DebugUITableViewController.m */; }; 34D8C02B1ED3685800188D7C /* DebugUIContacts.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D8C02A1ED3685800188D7C /* DebugUIContacts.m */; }; - 34D920E220DD39EA00D51158 /* ConversationLayoutInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D920E120DD39E900D51158 /* ConversationLayoutInfo.swift */; }; + 34D920E220DD39EA00D51158 /* ConversationStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D920E120DD39E900D51158 /* ConversationStyle.swift */; }; 34D99C931F2937CC00D284D6 /* OWSAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D99C911F2937CC00D284D6 /* OWSAnalytics.swift */; }; 34DB0BED2011548B007B313F /* OWSDatabaseConverterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 34DB0BEC2011548B007B313F /* OWSDatabaseConverterTest.m */; }; 34DBF003206BD5A500025978 /* OWSMessageTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 34DBEFFF206BD5A400025978 /* OWSMessageTextView.m */; }; @@ -882,7 +882,7 @@ 34D8C0291ED3685800188D7C /* DebugUIContacts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebugUIContacts.h; sourceTree = ""; }; 34D8C02A1ED3685800188D7C /* DebugUIContacts.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DebugUIContacts.m; sourceTree = ""; }; 34D913491F62D4A500722898 /* SignalAttachment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignalAttachment.swift; sourceTree = ""; }; - 34D920E120DD39E900D51158 /* ConversationLayoutInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConversationLayoutInfo.swift; sourceTree = ""; }; + 34D920E120DD39E900D51158 /* ConversationStyle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConversationStyle.swift; sourceTree = ""; }; 34D99C8A1F27B13B00D284D6 /* OWSViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSViewController.h; sourceTree = ""; }; 34D99C8B1F27B13B00D284D6 /* OWSViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSViewController.m; sourceTree = ""; }; 34D99C911F2937CC00D284D6 /* OWSAnalytics.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OWSAnalytics.swift; sourceTree = ""; }; @@ -1503,9 +1503,9 @@ 34D1F0681F8678AA0066283D /* ConversationInputTextView.m */, 34D1F0691F8678AA0066283D /* ConversationInputToolbar.h */, 34D1F06A1F8678AA0066283D /* ConversationInputToolbar.m */, - 34D920E120DD39E900D51158 /* ConversationLayoutInfo.swift */, 343A65971FC4CFE7000477A1 /* ConversationScrollButton.h */, 343A65961FC4CFE6000477A1 /* ConversationScrollButton.m */, + 34D920E120DD39E900D51158 /* ConversationStyle.swift */, 34D1F06D1F8678AA0066283D /* ConversationViewController.h */, 34D1F06E1F8678AA0066283D /* ConversationViewController.m */, 34D1F06F1F8678AA0066283D /* ConversationViewItem.h */, @@ -3313,7 +3313,7 @@ 34D1F0C01F8EC1760066283D /* MessageRecipientStatusUtils.swift in Sources */, 45F659731E1BD99C00444429 /* CallKitCallUIAdaptee.swift in Sources */, 34277A5E20751BDC006049F2 /* OWSQuotedMessageView.m in Sources */, - 34D920E220DD39EA00D51158 /* ConversationLayoutInfo.swift in Sources */, + 34D920E220DD39EA00D51158 /* ConversationStyle.swift in Sources */, 458DE9D61DEE3FD00071BB03 /* PeerConnectionClient.swift in Sources */, 45DDA6242090CEB500DE97F8 /* ConversationHeaderView.swift in Sources */, 45F32C242057297A00A300D5 /* MessageDetailViewController.swift in Sources */, diff --git a/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.h b/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.h index 8bda025ca..b092f241e 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.h +++ b/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.h @@ -4,7 +4,7 @@ NS_ASSUME_NONNULL_BEGIN -@class ConversationLayoutInfo; +@class ConversationStyle; @class ConversationViewCell; @class ConversationViewItem; @class OWSContactOffersInteraction; @@ -75,7 +75,7 @@ NS_ASSUME_NONNULL_BEGIN // * Users enters another view (e.g. conversation settings view, call screen, etc.). @property (nonatomic) BOOL isCellVisible; -@property (nonatomic, nullable) ConversationLayoutInfo *layoutInfo; +@property (nonatomic, nullable) ConversationStyle *conversationStyle; - (void)loadForDisplayWithTransaction:(YapDatabaseReadTransaction *)transaction; diff --git a/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.m b/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.m index df7f78a8d..0737f4feb 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.m @@ -16,7 +16,7 @@ NS_ASSUME_NONNULL_BEGIN self.viewItem = nil; self.delegate = nil; self.isCellVisible = NO; - self.layoutInfo = nil; + self.conversationStyle = nil; } - (void)loadForDisplayWithTransaction:(YapDatabaseReadTransaction *)transaction diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSContactOffersCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSContactOffersCell.m index 14b96d413..adfc7894a 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSContactOffersCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSContactOffersCell.m @@ -114,8 +114,8 @@ NS_ASSUME_NONNULL_BEGIN - (void)loadForDisplayWithTransaction:(YapDatabaseReadTransaction *)transaction { - OWSAssert(self.layoutInfo); - OWSAssert(self.layoutInfo.viewWidth > 0); + OWSAssert(self.conversationStyle); + OWSAssert(self.conversationStyle.viewWidth > 0); OWSAssert(self.viewItem); OWSAssert([self.viewItem.interaction isKindOfClass:[OWSContactOffersInteraction class]]); @@ -135,8 +135,10 @@ NS_ASSUME_NONNULL_BEGIN [self.stackView autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:self.topVMargin], [self.stackView autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:self.bottomVMargin], // TODO: Honor "full-width gutters"? - [self.stackView autoPinEdgeToSuperviewEdge:ALEdgeLeading withInset:self.layoutInfo.fullWidthGutterLeading], - [self.stackView autoPinEdgeToSuperviewEdge:ALEdgeTrailing withInset:self.layoutInfo.fullWidthGutterTrailing], + [self.stackView autoPinEdgeToSuperviewEdge:ALEdgeLeading + withInset:self.conversationStyle.fullWidthGutterLeading], + [self.stackView autoPinEdgeToSuperviewEdge:ALEdgeTrailing + withInset:self.conversationStyle.fullWidthGutterTrailing], ]; } @@ -167,8 +169,8 @@ NS_ASSUME_NONNULL_BEGIN - (CGSize)cellSizeWithTransaction:(YapDatabaseReadTransaction *)transaction { - OWSAssert(self.layoutInfo); - OWSAssert(self.layoutInfo.viewWidth > 0); + OWSAssert(self.conversationStyle); + OWSAssert(self.conversationStyle.viewWidth > 0); OWSAssert(self.viewItem); OWSAssert([self.viewItem.interaction isKindOfClass:[OWSContactOffersInteraction class]]); @@ -176,7 +178,7 @@ NS_ASSUME_NONNULL_BEGIN OWSContactOffersInteraction *interaction = (OWSContactOffersInteraction *)self.viewItem.interaction; - CGSize result = CGSizeMake(self.layoutInfo.viewWidth, 0); + CGSize result = CGSizeMake(self.conversationStyle.viewWidth, 0); result.height += self.topVMargin; result.height += self.bottomVMargin; diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.h b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.h index 2a8e3748d..fc036b8da 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.h +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.h @@ -5,7 +5,7 @@ NS_ASSUME_NONNULL_BEGIN @class ContactShareViewModel; -@class ConversationLayoutInfo; +@class ConversationStyle; @class ConversationViewItem; @class OWSContact; @class OWSQuotedReplyModel; @@ -60,7 +60,7 @@ typedef NS_ENUM(NSUInteger, OWSMessageGestureLocation) { @property (nonatomic, nullable) ConversationViewItem *viewItem; -@property (nonatomic) ConversationLayoutInfo *layoutInfo; +@property (nonatomic) ConversationStyle *conversationStyle; @property (nonatomic) NSCache *cellMediaCache; diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m index e2ed14ca6..87b47b9d4 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m @@ -237,7 +237,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)configureViews { - OWSAssert(self.layoutInfo); + OWSAssert(self.conversationStyle); OWSAssert(self.viewItem); OWSAssert(self.viewItem.interaction); OWSAssert([self.viewItem.interaction isKindOfClass:[TSMessage class]]); @@ -390,7 +390,7 @@ NS_ASSUME_NONNULL_BEGIN } } - OWSDirectionalEdgeInsets *textInsets = self.layoutInfo.textInsets; + OWSDirectionalEdgeInsets *textInsets = self.conversationStyle.textInsets; OWSAssert(textInsets); OWSMessageTextView *_Nullable bodyTextView = nil; @@ -855,19 +855,19 @@ NS_ASSUME_NONNULL_BEGIN // Size of "message body" text, not quoted reply text. - (CGSize)bodyTextSizeWithIncludeMargins:(BOOL)includeMargins { - OWSAssert(self.layoutInfo); - OWSAssert(self.layoutInfo.maxMessageWidth > 0); + OWSAssert(self.conversationStyle); + OWSAssert(self.conversationStyle.maxMessageWidth > 0); if (!self.hasBodyText) { return CGSizeZero; } - OWSDirectionalEdgeInsets *textInsets = self.layoutInfo.textInsets; + OWSDirectionalEdgeInsets *textInsets = self.conversationStyle.textInsets; OWSAssert(textInsets); CGFloat hMargins = textInsets.leading + textInsets.trailing; - const int maxTextWidth = (int)floor(self.layoutInfo.maxMessageWidth - hMargins); + const int maxTextWidth = (int)floor(self.conversationStyle.maxMessageWidth - hMargins); OWSMessageTextView *bodyTextView = [self configureBodyTextView]; CGSize textSize = CGSizeCeil([bodyTextView sizeThatFits:CGSizeMake(maxTextWidth, CGFLOAT_MAX)]); @@ -884,10 +884,10 @@ NS_ASSUME_NONNULL_BEGIN - (CGSize)bodyMediaSize { - OWSAssert(self.layoutInfo); - OWSAssert(self.layoutInfo.maxMessageWidth > 0); + OWSAssert(self.conversationStyle); + OWSAssert(self.conversationStyle.maxMessageWidth > 0); - CGFloat maxMessageWidth = self.layoutInfo.maxMessageWidth; + CGFloat maxMessageWidth = self.conversationStyle.maxMessageWidth; CGSize result = CGSizeZero; switch (self.cellType) { @@ -956,8 +956,8 @@ NS_ASSUME_NONNULL_BEGIN - (CGSize)quotedMessageSize { - OWSAssert(self.layoutInfo); - OWSAssert(self.layoutInfo.maxMessageWidth > 0); + OWSAssert(self.conversationStyle); + OWSAssert(self.conversationStyle.maxMessageWidth > 0); OWSAssert(self.viewItem); OWSAssert([self.viewItem.interaction isKindOfClass:[TSMessage class]]); @@ -973,14 +973,14 @@ NS_ASSUME_NONNULL_BEGIN [OWSQuotedMessageView quotedMessageViewForConversation:self.viewItem.quotedReply displayableQuotedText:displayableQuotedText isOutgoing:isOutgoing]; - CGSize result = [quotedMessageView sizeForMaxWidth:self.layoutInfo.maxMessageWidth]; + CGSize result = [quotedMessageView sizeForMaxWidth:self.conversationStyle.maxMessageWidth]; return CGSizeCeil(result); } - (CGSize)measureSize { - OWSAssert(self.layoutInfo); - OWSAssert(self.layoutInfo.viewWidth > 0); + OWSAssert(self.conversationStyle); + OWSAssert(self.conversationStyle.viewWidth > 0); OWSAssert(self.viewItem); OWSAssert([self.viewItem.interaction isKindOfClass:[TSMessage class]]); diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m index 39729d483..176a41725 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m @@ -108,11 +108,11 @@ NS_ASSUME_NONNULL_BEGIN [[NSNotificationCenter defaultCenter] removeObserver:self]; } -- (void)setLayoutInfo:(nullable ConversationLayoutInfo *)layoutInfo +- (void)setConversationStyle:(nullable ConversationStyle *)conversationStyle { - [super setLayoutInfo:layoutInfo]; + [super setConversationStyle:conversationStyle]; - self.messageBubbleView.layoutInfo = layoutInfo; + self.messageBubbleView.conversationStyle = conversationStyle; } + (NSString *)cellReuseIdentifier @@ -148,7 +148,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)loadForDisplayWithTransaction:(YapDatabaseReadTransaction *)transaction { - OWSAssert(self.layoutInfo); + OWSAssert(self.conversationStyle); OWSAssert(self.viewItem); OWSAssert(self.viewItem.interaction); OWSAssert([self.viewItem.interaction isKindOfClass:[TSMessage class]]); @@ -165,17 +165,19 @@ NS_ASSUME_NONNULL_BEGIN if (self.isIncoming) { [self.viewConstraints addObjectsFromArray:@[ - [self.messageBubbleView autoPinEdgeToSuperviewEdge:ALEdgeLeading withInset:self.layoutInfo.gutterLeading], + [self.messageBubbleView autoPinEdgeToSuperviewEdge:ALEdgeLeading + withInset:self.conversationStyle.gutterLeading], [self.messageBubbleView autoPinEdgeToSuperviewEdge:ALEdgeTrailing - withInset:self.layoutInfo.gutterTrailing + withInset:self.conversationStyle.gutterTrailing relation:NSLayoutRelationGreaterThanOrEqual], ]]; } else { [self.viewConstraints addObjectsFromArray:@[ [self.messageBubbleView autoPinEdgeToSuperviewEdge:ALEdgeLeading - withInset:self.layoutInfo.gutterLeading + withInset:self.conversationStyle.gutterLeading relation:NSLayoutRelationGreaterThanOrEqual], - [self.messageBubbleView autoPinEdgeToSuperviewEdge:ALEdgeTrailing withInset:self.layoutInfo.gutterTrailing], + [self.messageBubbleView autoPinEdgeToSuperviewEdge:ALEdgeTrailing + withInset:self.conversationStyle.gutterTrailing], ]]; } @@ -183,7 +185,7 @@ NS_ASSUME_NONNULL_BEGIN [self updateFooter]; if ([self updateAvatarView]) { - CGFloat avatarBottomMargin = round(self.layoutInfo.lastTextLineAxis - self.avatarSize * 0.5f); + CGFloat avatarBottomMargin = round(self.conversationStyle.lastTextLineAxis - self.avatarSize * 0.5f); [self.viewConstraints addObjectsFromArray:@[ // V-align the "group sender" avatar with the // last line of the text (if any, or where it @@ -214,7 +216,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)updateDateHeader { - OWSAssert(self.layoutInfo); + OWSAssert(self.conversationStyle); static NSDateFormatter *dateHeaderDateFormatter = nil; static NSDateFormatter *dateHeaderTimeFormatter = nil; @@ -262,8 +264,8 @@ NS_ASSUME_NONNULL_BEGIN [self.viewConstraints addObjectsFromArray:@[ // TODO: Are data headers symmetric or are they asymmetric? gutters are asymmetric? - [self.dateHeaderLabel autoPinLeadingToSuperviewMarginWithInset:self.layoutInfo.gutterLeading], - [self.dateHeaderLabel autoPinTrailingToSuperviewMarginWithInset:self.layoutInfo.gutterTrailing], + [self.dateHeaderLabel autoPinLeadingToSuperviewMarginWithInset:self.conversationStyle.gutterLeading], + [self.dateHeaderLabel autoPinTrailingToSuperviewMarginWithInset:self.conversationStyle.gutterTrailing], [self.dateHeaderLabel autoPinEdgeToSuperviewEdge:ALEdgeTop], [self.dateHeaderLabel autoSetDimension:ALDimensionHeight toSize:self.dateHeaderHeight], ]]; @@ -309,7 +311,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)updateFooter { - OWSAssert(self.layoutInfo); + OWSAssert(self.conversationStyle); OWSAssert(self.viewItem.interaction.interactionType == OWSInteractionType_IncomingMessage || self.viewItem.interaction.interactionType == OWSInteractionType_OutgoingMessage); @@ -339,8 +341,9 @@ NS_ASSUME_NONNULL_BEGIN } [self.viewConstraints addObjectsFromArray:@[ - (self.isIncoming ? [self.footerView autoPinLeadingToSuperviewMarginWithInset:self.layoutInfo.gutterLeading] - : [self.footerView autoPinTrailingToSuperviewMarginWithInset:self.layoutInfo.gutterTrailing]), + (self.isIncoming + ? [self.footerView autoPinLeadingToSuperviewMarginWithInset:self.conversationStyle.gutterLeading] + : [self.footerView autoPinTrailingToSuperviewMarginWithInset:self.conversationStyle.gutterTrailing]), ]]; [self.viewConstraints addObject:[self.footerView autoPinEdge:ALEdgeTop @@ -364,7 +367,7 @@ NS_ASSUME_NONNULL_BEGIN // we want to leave spaces for an expiration timer and // include padding so that they still visually "cling" to the // appropriate incoming/outgoing edge. - const CGFloat maxFooterLabelWidth = self.layoutInfo.maxFooterWidth; + const CGFloat maxFooterLabelWidth = self.conversationStyle.maxFooterWidth; if (hasExpirationTimer && attributedText) { [self.viewConstraints addObjectsFromArray:@[ @@ -483,8 +486,8 @@ NS_ASSUME_NONNULL_BEGIN - (CGSize)cellSizeWithTransaction:(YapDatabaseReadTransaction *)transaction { - OWSAssert(self.layoutInfo); - OWSAssert(self.layoutInfo.viewWidth > 0); + OWSAssert(self.conversationStyle); + OWSAssert(self.conversationStyle.viewWidth > 0); OWSAssert(self.viewItem); OWSAssert([self.viewItem.interaction isKindOfClass:[TSMessage class]]); OWSAssert(self.messageBubbleView); diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m index bcbcf2d92..cf80d4939 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m @@ -90,7 +90,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)loadForDisplayWithTransaction:(YapDatabaseReadTransaction *)transaction { - OWSAssert(self.layoutInfo); + OWSAssert(self.conversationStyle); OWSAssert(self.viewItem); OWSAssert(transaction); @@ -112,10 +112,10 @@ NS_ASSUME_NONNULL_BEGIN // H-center the stack. [self.stackView autoHCenterInSuperview], [self.stackView autoPinEdgeToSuperviewEdge:ALEdgeLeading - withInset:self.layoutInfo.fullWidthGutterLeading + withInset:self.conversationStyle.fullWidthGutterLeading relation:NSLayoutRelationGreaterThanOrEqual], [self.stackView autoPinEdgeToSuperviewEdge:ALEdgeTrailing - withInset:self.layoutInfo.fullWidthGutterTrailing + withInset:self.conversationStyle.fullWidthGutterTrailing relation:NSLayoutRelationGreaterThanOrEqual], ]; } @@ -266,23 +266,23 @@ NS_ASSUME_NONNULL_BEGIN - (CGSize)titleSize { - OWSAssert(self.layoutInfo); + OWSAssert(self.conversationStyle); OWSAssert(self.viewItem); - CGFloat hMargins = (self.layoutInfo.fullWidthGutterLeading + self.layoutInfo.fullWidthGutterTrailing); + CGFloat hMargins = (self.conversationStyle.fullWidthGutterLeading + self.conversationStyle.fullWidthGutterTrailing); CGFloat maxTitleWidth - = (CGFloat)floor(self.layoutInfo.fullWidthContentWidth - (hMargins + self.iconSize + self.hSpacing)); + = (CGFloat)floor(self.conversationStyle.fullWidthContentWidth - (hMargins + self.iconSize + self.hSpacing)); return [self.titleLabel sizeThatFits:CGSizeMake(maxTitleWidth, CGFLOAT_MAX)]; } - (CGSize)cellSizeWithTransaction:(YapDatabaseReadTransaction *)transaction { - OWSAssert(self.layoutInfo); + OWSAssert(self.conversationStyle); OWSAssert(self.viewItem); TSInteraction *interaction = self.viewItem.interaction; - CGSize result = CGSizeMake(self.layoutInfo.viewWidth, 0); + CGSize result = CGSizeMake(self.conversationStyle.viewWidth, 0); [self applyTitleForInteraction:interaction label:self.titleLabel transaction:transaction]; diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSUnreadIndicatorCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSUnreadIndicatorCell.m index 6dba74621..c8d5918b1 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSUnreadIndicatorCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSUnreadIndicatorCell.m @@ -72,7 +72,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)loadForDisplayWithTransaction:(YapDatabaseReadTransaction *)transaction { - OWSAssert(self.layoutInfo); + OWSAssert(self.conversationStyle); OWSAssert(self.viewItem); OWSAssert([self.viewItem.interaction isKindOfClass:[TSUnreadIndicatorInteraction class]]); @@ -87,13 +87,13 @@ NS_ASSUME_NONNULL_BEGIN [NSLayoutConstraint deactivateConstraints:self.layoutConstraints]; self.layoutConstraints = @[ [self.titleLabel autoVCenterInSuperview], - [self.titleLabel autoPinLeadingToSuperviewMarginWithInset:self.layoutInfo.fullWidthGutterLeading], - [self.titleLabel autoPinTrailingToSuperviewMarginWithInset:self.layoutInfo.fullWidthGutterTrailing], + [self.titleLabel autoPinLeadingToSuperviewMarginWithInset:self.conversationStyle.fullWidthGutterLeading], + [self.titleLabel autoPinTrailingToSuperviewMarginWithInset:self.conversationStyle.fullWidthGutterTrailing], // TODO: offset. [self.strokeView autoPinEdge:ALEdgeBottom toEdge:ALEdgeTop ofView:self.titleLabel withOffset:0.f], - [self.strokeView autoPinLeadingToSuperviewMarginWithInset:self.layoutInfo.fullWidthGutterLeading], - [self.strokeView autoPinTrailingToSuperviewMarginWithInset:self.layoutInfo.fullWidthGutterTrailing], + [self.strokeView autoPinLeadingToSuperviewMarginWithInset:self.conversationStyle.fullWidthGutterLeading], + [self.strokeView autoPinTrailingToSuperviewMarginWithInset:self.conversationStyle.fullWidthGutterTrailing], [self.strokeView autoSetDimension:ALDimensionHeight toSize:1.f], ]; } @@ -106,7 +106,7 @@ NS_ASSUME_NONNULL_BEGIN - (CGSize)cellSizeWithTransaction:(YapDatabaseReadTransaction *)transaction { - OWSAssert(self.layoutInfo); + OWSAssert(self.conversationStyle); OWSAssert(self.viewItem); OWSAssert([self.viewItem.interaction isKindOfClass:[TSUnreadIndicatorInteraction class]]); @@ -114,7 +114,8 @@ NS_ASSUME_NONNULL_BEGIN // TODO: offset. CGFloat vOffset = 24.f; - CGSize result = CGSizeMake(self.layoutInfo.fullWidthContentWidth, self.titleLabel.font.lineHeight + vOffset * 2); + CGSize result + = CGSizeMake(self.conversationStyle.fullWidthContentWidth, self.titleLabel.font.lineHeight + vOffset * 2); return CGSizeCeil(result); } diff --git a/Signal/src/ViewControllers/ConversationView/ConversationLayoutInfo.swift b/Signal/src/ViewControllers/ConversationView/ConversationStyle.swift similarity index 98% rename from Signal/src/ViewControllers/ConversationView/ConversationLayoutInfo.swift rename to Signal/src/ViewControllers/ConversationView/ConversationStyle.swift index 4ff22fa21..cd06b232c 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationLayoutInfo.swift +++ b/Signal/src/ViewControllers/ConversationView/ConversationStyle.swift @@ -33,7 +33,7 @@ public class OWSDirectionalEdgeInsets: NSObject { } @objc -public class ConversationLayoutInfo: NSObject { +public class ConversationStyle: NSObject { private let thread: TSThread diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index f866e5a90..40a2bfb84 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -174,7 +174,7 @@ typedef enum : NSUInteger { @property (nonatomic, readonly) ConversationInputToolbar *inputToolbar; @property (nonatomic, readonly) ConversationCollectionView *collectionView; @property (nonatomic, readonly) ConversationViewLayout *layout; -@property (nonatomic, readonly) ConversationLayoutInfo *layoutInfo; +@property (nonatomic, readonly) ConversationStyle *conversationStyle; @property (nonatomic) NSArray *viewItems; @property (nonatomic) NSMutableDictionary *viewItemCache; @@ -447,7 +447,7 @@ typedef enum : NSUInteger { _cellMediaCache = [NSCache new]; // Cache the cell media for ~24 cells. self.cellMediaCache.countLimit = 24; - _layoutInfo = [[ConversationLayoutInfo alloc] initWithThread:thread]; + _conversationStyle = [[ConversationStyle alloc] initWithThread:thread]; // We need to update the "unread indicator" _before_ we determine the initial range // size, since it depends on where the unread indicator is placed. @@ -533,11 +533,11 @@ typedef enum : NSUInteger { - (void)createContents { - OWSAssert(self.layoutInfo); + OWSAssert(self.conversationStyle); - _layout = [[ConversationViewLayout alloc] initWithLayoutInfo:self.layoutInfo - uiDatabaseConnection:self.uiDatabaseConnection]; - self.layoutInfo.viewWidth = self.view.width; + _layout = [[ConversationViewLayout alloc] initWithConversationStyle:self.conversationStyle + uiDatabaseConnection:self.uiDatabaseConnection]; + self.conversationStyle.viewWidth = self.view.width; self.layout.delegate = self; // We use the root view bounds as the initial frame for the collection @@ -4768,7 +4768,7 @@ typedef enum : NSUInteger { OWSAssertIsOnMainThread(); [self updateLastVisibleTimestamp]; - self.layoutInfo.viewWidth = self.collectionView.width; + self.conversationStyle.viewWidth = self.collectionView.width; } #pragma mark - View Items @@ -4815,7 +4815,7 @@ typedef enum : NSUInteger { viewItem = [[ConversationViewItem alloc] initWithInteraction:interaction isGroupThread:isGroupThread transaction:transaction - layoutInfo:self.layoutInfo]; + conversationStyle:self.conversationStyle]; } viewItem.row = (NSInteger)row; [viewItems addObject:viewItem]; @@ -4980,7 +4980,7 @@ typedef enum : NSUInteger { OWSMessageCell *messageCell = (OWSMessageCell *)cell; messageCell.messageBubbleView.delegate = self; } - cell.layoutInfo = self.layoutInfo; + cell.conversationStyle = self.conversationStyle; [self.uiDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { [cell loadForDisplayWithTransaction:transaction]; diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h index cf3b0de71..6293589ee 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h @@ -67,13 +67,13 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType); // previous update. @property (nonatomic) NSInteger previousRow; -@property (nonatomic, readonly) ConversationLayoutInfo *layoutInfo; +@property (nonatomic, readonly) ConversationStyle *conversationStyle; - (instancetype)init NS_UNAVAILABLE; - (instancetype)initWithInteraction:(TSInteraction *)interaction isGroupThread:(BOOL)isGroupThread transaction:(YapDatabaseReadTransaction *)transaction - layoutInfo:(ConversationLayoutInfo *)layoutInfo; + conversationStyle:(ConversationStyle *)conversationStyle; - (ConversationViewCell *)dequeueCellForCollectionView:(UICollectionView *)collectionView indexPath:(NSIndexPath *)indexPath; diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m index cf4b9eea2..adaaa8ecf 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m @@ -77,11 +77,11 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) - (instancetype)initWithInteraction:(TSInteraction *)interaction isGroupThread:(BOOL)isGroupThread transaction:(YapDatabaseReadTransaction *)transaction - layoutInfo:(ConversationLayoutInfo *)layoutInfo + conversationStyle:(ConversationStyle *)conversationStyle { OWSAssert(interaction); OWSAssert(transaction); - OWSAssert(layoutInfo); + OWSAssert(conversationStyle); self = [super init]; @@ -91,7 +91,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) _interaction = interaction; _isGroupThread = isGroupThread; - _layoutInfo = layoutInfo; + _conversationStyle = conversationStyle; self.row = NSNotFound; self.previousRow = NSNotFound; @@ -182,12 +182,12 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) { OWSAssert(transaction); OWSAssertIsOnMainThread(); - OWSAssert(self.layoutInfo); + OWSAssert(self.conversationStyle); if (!self.cachedCellSize) { ConversationViewCell *_Nullable measurementCell = [self measurementCell]; measurementCell.viewItem = self; - measurementCell.layoutInfo = self.layoutInfo; + measurementCell.conversationStyle = self.conversationStyle; CGSize cellSize = [measurementCell cellSizeWithTransaction:transaction]; self.cachedCellSize = [NSValue valueWithCGSize:cellSize]; [measurementCell prepareForReuse]; diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewLayout.h b/Signal/src/ViewControllers/ConversationView/ConversationViewLayout.h index f7f0910ad..5f81c9c37 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewLayout.h +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewLayout.h @@ -13,7 +13,7 @@ typedef NS_ENUM(NSInteger, ConversationViewLayoutAlignment) { ConversationViewLayoutAlignment_Center, }; -@class ConversationLayoutInfo; +@class ConversationStyle; @class YapDatabaseConnection; @class YapDatabaseReadTransaction; @@ -46,12 +46,12 @@ typedef NS_ENUM(NSInteger, ConversationViewLayoutAlignment) { @property (nonatomic, weak) id delegate; @property (nonatomic, readonly) BOOL hasLayout; @property (nonatomic, readonly) BOOL hasEverHadLayout; -@property (nonatomic, readonly) ConversationLayoutInfo *layoutInfo; +@property (nonatomic, readonly) ConversationStyle *conversationStyle; - (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithLayoutInfo:(ConversationLayoutInfo *)layoutInfo - uiDatabaseConnection:(YapDatabaseConnection *)uiDatabaseConnection; +- (instancetype)initWithConversationStyle:(ConversationStyle *)conversationStyle + uiDatabaseConnection:(YapDatabaseConnection *)uiDatabaseConnection; @end diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewLayout.m b/Signal/src/ViewControllers/ConversationView/ConversationViewLayout.m index 102a3213f..305b9686b 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewLayout.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewLayout.m @@ -30,12 +30,12 @@ NS_ASSUME_NONNULL_BEGIN @implementation ConversationViewLayout -- (instancetype)initWithLayoutInfo:(ConversationLayoutInfo *)layoutInfo - uiDatabaseConnection:(YapDatabaseConnection *)uiDatabaseConnection +- (instancetype)initWithConversationStyle:(ConversationStyle *)conversationStyle + uiDatabaseConnection:(YapDatabaseConnection *)uiDatabaseConnection { if (self = [super init]) { _itemAttributesMap = [NSMutableDictionary new]; - _layoutInfo = layoutInfo; + _conversationStyle = conversationStyle; _uiDatabaseConnection = uiDatabaseConnection; } @@ -107,11 +107,11 @@ NS_ASSUME_NONNULL_BEGIN { OWSAssert(transaction); - const CGFloat viewWidth = self.layoutInfo.viewWidth; + const CGFloat viewWidth = self.conversationStyle.viewWidth; NSArray> *layoutItems = self.delegate.layoutItems; - CGFloat y = self.layoutInfo.contentMarginTop + self.delegate.layoutHeaderHeight; + CGFloat y = self.conversationStyle.contentMarginTop + self.delegate.layoutHeaderHeight; CGFloat contentBottom = y; NSInteger row = 0; @@ -142,7 +142,7 @@ NS_ASSUME_NONNULL_BEGIN previousLayoutItem = layoutItem; } - contentBottom += self.layoutInfo.contentMarginBottom; + contentBottom += self.conversationStyle.contentMarginBottom; self.contentSize = CGSizeMake(viewWidth, contentBottom); } diff --git a/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m b/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m index b12de896f..cc87772e4 100644 --- a/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m +++ b/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m @@ -1963,8 +1963,8 @@ NS_ASSUME_NONNULL_BEGIN [prepareBlocks addObject:replyAssetLoader.prepareBlock]; } - // We don't need to configure ConversationLayoutInfo's view width in this case. - ConversationLayoutInfo *layoutInfo = [[ConversationLayoutInfo alloc] initWithThread:thread]; + // We don't need to configure ConversationStyle's view width in this case. + ConversationStyle *conversationStyle = [[ConversationStyle alloc] initWithThread:thread]; return [DebugUIMessagesSingleAction actionWithLabel:label @@ -1986,7 +1986,7 @@ NS_ASSUME_NONNULL_BEGIN ConversationViewItem *viewItem = [[ConversationViewItem alloc] initWithInteraction:messageToQuote isGroupThread:thread.isGroupThread transaction:transaction - layoutInfo:layoutInfo]; + conversationStyle:conversationStyle]; quotedMessage = [[OWSQuotedReplyModel quotedReplyForConversationViewItem:viewItem transaction:transaction] buildQuotedMessage]; } else { TSOutgoingMessage *_Nullable messageToQuote = [self createFakeOutgoingMessage:thread @@ -2003,7 +2003,7 @@ NS_ASSUME_NONNULL_BEGIN ConversationViewItem *viewItem = [[ConversationViewItem alloc] initWithInteraction:messageToQuote isGroupThread:thread.isGroupThread transaction:transaction - layoutInfo:layoutInfo]; + conversationStyle:conversationStyle]; quotedMessage = [[OWSQuotedReplyModel quotedReplyForConversationViewItem:viewItem transaction:transaction] buildQuotedMessage]; } OWSAssert(quotedMessage); diff --git a/Signal/src/ViewControllers/MediaPageViewController.swift b/Signal/src/ViewControllers/MediaPageViewController.swift index 3f25def71..d6b842607 100644 --- a/Signal/src/ViewControllers/MediaPageViewController.swift +++ b/Signal/src/ViewControllers/MediaPageViewController.swift @@ -479,11 +479,11 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou self.uiDatabaseConnection.read { transaction in let message = galleryItem.message let thread = message.thread(with: transaction) - let conversationLayoutInfo = ConversationLayoutInfo(thread: thread) + let conversationStyle = ConversationStyle(thread: thread) fetchedItem = ConversationViewItem(interaction: message, isGroupThread: thread.isGroupThread(), transaction: transaction, - layoutInfo: conversationLayoutInfo) + conversationStyle: conversationStyle) } guard let viewItem = fetchedItem else { diff --git a/Signal/src/ViewControllers/MessageDetailViewController.swift b/Signal/src/ViewControllers/MessageDetailViewController.swift index e1645a857..b3fb85b30 100644 --- a/Signal/src/ViewControllers/MessageDetailViewController.swift +++ b/Signal/src/ViewControllers/MessageDetailViewController.swift @@ -40,7 +40,7 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele var attachmentStream: TSAttachmentStream? var messageBody: String? - var conversationLayoutInfo: ConversationLayoutInfo + var conversationStyle: ConversationStyle private var contactShareViewHelper: ContactShareViewHelper @@ -59,7 +59,7 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele self.mode = mode self.uiDatabaseConnection = OWSPrimaryStorage.shared().newDatabaseConnection() self.contactShareViewHelper = ContactShareViewHelper(contactsManager: contactsManager) - self.conversationLayoutInfo = ConversationLayoutInfo(thread: thread) + self.conversationStyle = ConversationStyle(thread: thread) super.init(nibName: nil, bundle: nil) @@ -74,7 +74,7 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele self.uiDatabaseConnection.beginLongLivedReadTransaction() updateDBConnectionAndMessageToLatest() - self.conversationLayoutInfo.viewWidth = view.width() + self.conversationStyle.viewWidth = view.width() self.navigationItem.title = NSLocalizedString("MESSAGE_METADATA_VIEW_TITLE", comment: "Title for the 'message metadata' view.") @@ -94,7 +94,7 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele super.viewWillTransition(to: size, with: coordinator) - self.conversationLayoutInfo.viewWidth = size.width + self.conversationStyle.viewWidth = size.width } override func viewWillAppear(_ animated: Bool) { @@ -345,7 +345,7 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele self.messageBubbleView = messageBubbleView messageBubbleView.viewItem = viewItem messageBubbleView.cellMediaCache = NSCache() - messageBubbleView.layoutInfo = conversationLayoutInfo + messageBubbleView.conversationStyle = conversationStyle messageBubbleView.configureViews() messageBubbleView.loadContent()