Respond to CR.

// FREEBIE
pull/1/head
Matthew Chen 8 years ago
parent bcf83a4c8e
commit 9cc4521d07

@ -75,7 +75,7 @@
34C6B0AC1FA0E46F00D35993 /* test-mp4.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 34C6B0A81FA0E46F00D35993 /* test-mp4.mp4 */; }; 34C6B0AC1FA0E46F00D35993 /* test-mp4.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 34C6B0A81FA0E46F00D35993 /* test-mp4.mp4 */; };
34C6B0AE1FA0E4AA00D35993 /* test-jpg.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 34C6B0AD1FA0E4AA00D35993 /* test-jpg.jpg */; }; 34C6B0AE1FA0E4AA00D35993 /* test-jpg.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 34C6B0AD1FA0E4AA00D35993 /* test-jpg.jpg */; };
34CA1C251F706B5400E51C51 /* NSAttributedString+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CA1C241F706B5400E51C51 /* NSAttributedString+OWS.m */; }; 34CA1C251F706B5400E51C51 /* NSAttributedString+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CA1C241F706B5400E51C51 /* NSAttributedString+OWS.m */; };
34CA1C271F7156F300E51C51 /* MessageMetadataViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34CA1C261F7156F300E51C51 /* MessageMetadataViewController.swift */; }; 34CA1C271F7156F300E51C51 /* MessageDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34CA1C261F7156F300E51C51 /* MessageDetailViewController.swift */; };
34CA1C291F7164F700E51C51 /* MediaMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34CA1C281F7164F700E51C51 /* MediaMessageView.swift */; }; 34CA1C291F7164F700E51C51 /* MediaMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34CA1C281F7164F700E51C51 /* MediaMessageView.swift */; };
34CCAF381F0C0599004084F4 /* AppUpdateNag.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CCAF371F0C0599004084F4 /* AppUpdateNag.m */; }; 34CCAF381F0C0599004084F4 /* AppUpdateNag.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CCAF371F0C0599004084F4 /* AppUpdateNag.m */; };
34CCAF3B1F0C2748004084F4 /* OWSAddToContactViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CCAF3A1F0C2748004084F4 /* OWSAddToContactViewController.m */; }; 34CCAF3B1F0C2748004084F4 /* OWSAddToContactViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CCAF3A1F0C2748004084F4 /* OWSAddToContactViewController.m */; };
@ -239,8 +239,8 @@
45DF5DF31DDB843F00C936C7 /* CompareSafetyNumbersActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45DF5DF11DDB843F00C936C7 /* CompareSafetyNumbersActivity.swift */; }; 45DF5DF31DDB843F00C936C7 /* CompareSafetyNumbersActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45DF5DF11DDB843F00C936C7 /* CompareSafetyNumbersActivity.swift */; };
45E2E9201E153B3D00457AA0 /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E2E91F1E153B3D00457AA0 /* Strings.swift */; }; 45E2E9201E153B3D00457AA0 /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E2E91F1E153B3D00457AA0 /* Strings.swift */; };
45E5A6991F61E6DE001E4A8A /* MarqueeLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E5A6981F61E6DD001E4A8A /* MarqueeLabel.swift */; }; 45E5A6991F61E6DE001E4A8A /* MarqueeLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E5A6981F61E6DD001E4A8A /* MarqueeLabel.swift */; };
45E615161E8C590B0018AD52 /* DisplayableTextFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E615151E8C590B0018AD52 /* DisplayableTextFilter.swift */; }; 45E615161E8C590B0018AD52 /* DisplayableText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E615151E8C590B0018AD52 /* DisplayableText.swift */; };
45E615171E8C59100018AD52 /* DisplayableTextFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E615151E8C590B0018AD52 /* DisplayableTextFilter.swift */; }; 45E615171E8C59100018AD52 /* DisplayableText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E615151E8C590B0018AD52 /* DisplayableText.swift */; };
45E7A6A81E71CA7E00D44FB5 /* DisplayableTextFilterTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E7A6A61E71CA7E00D44FB5 /* DisplayableTextFilterTest.swift */; }; 45E7A6A81E71CA7E00D44FB5 /* DisplayableTextFilterTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E7A6A61E71CA7E00D44FB5 /* DisplayableTextFilterTest.swift */; };
45F170AC1E2F0351003FC1F2 /* CallAudioSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F170AB1E2F0351003FC1F2 /* CallAudioSession.swift */; }; 45F170AC1E2F0351003FC1F2 /* CallAudioSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F170AB1E2F0351003FC1F2 /* CallAudioSession.swift */; };
45F170AD1E2F0351003FC1F2 /* CallAudioSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F170AB1E2F0351003FC1F2 /* CallAudioSession.swift */; }; 45F170AD1E2F0351003FC1F2 /* CallAudioSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F170AB1E2F0351003FC1F2 /* CallAudioSession.swift */; };
@ -519,7 +519,7 @@
34C6B0AD1FA0E4AA00D35993 /* test-jpg.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "test-jpg.jpg"; sourceTree = "<group>"; }; 34C6B0AD1FA0E4AA00D35993 /* test-jpg.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "test-jpg.jpg"; sourceTree = "<group>"; };
34CA1C231F706B5400E51C51 /* NSAttributedString+OWS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSAttributedString+OWS.h"; sourceTree = "<group>"; }; 34CA1C231F706B5400E51C51 /* NSAttributedString+OWS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSAttributedString+OWS.h"; sourceTree = "<group>"; };
34CA1C241F706B5400E51C51 /* NSAttributedString+OWS.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSAttributedString+OWS.m"; sourceTree = "<group>"; }; 34CA1C241F706B5400E51C51 /* NSAttributedString+OWS.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSAttributedString+OWS.m"; sourceTree = "<group>"; };
34CA1C261F7156F300E51C51 /* MessageMetadataViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageMetadataViewController.swift; sourceTree = "<group>"; }; 34CA1C261F7156F300E51C51 /* MessageDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageDetailViewController.swift; sourceTree = "<group>"; };
34CA1C281F7164F700E51C51 /* MediaMessageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaMessageView.swift; sourceTree = "<group>"; }; 34CA1C281F7164F700E51C51 /* MediaMessageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaMessageView.swift; sourceTree = "<group>"; };
34CCAF361F0C0599004084F4 /* AppUpdateNag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppUpdateNag.h; sourceTree = "<group>"; }; 34CCAF361F0C0599004084F4 /* AppUpdateNag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppUpdateNag.h; sourceTree = "<group>"; };
34CCAF371F0C0599004084F4 /* AppUpdateNag.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppUpdateNag.m; sourceTree = "<group>"; }; 34CCAF371F0C0599004084F4 /* AppUpdateNag.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppUpdateNag.m; sourceTree = "<group>"; };
@ -707,7 +707,7 @@
45E2E91E1E13EE3500457AA0 /* OWSCallNotificationsAdaptee.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = OWSCallNotificationsAdaptee.h; path = UserInterface/OWSCallNotificationsAdaptee.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 45E2E91E1E13EE3500457AA0 /* OWSCallNotificationsAdaptee.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = OWSCallNotificationsAdaptee.h; path = UserInterface/OWSCallNotificationsAdaptee.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
45E2E91F1E153B3D00457AA0 /* Strings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = Strings.swift; path = UserInterface/Strings.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 45E2E91F1E153B3D00457AA0 /* Strings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = Strings.swift; path = UserInterface/Strings.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
45E5A6981F61E6DD001E4A8A /* MarqueeLabel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MarqueeLabel.swift; sourceTree = "<group>"; }; 45E5A6981F61E6DD001E4A8A /* MarqueeLabel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MarqueeLabel.swift; sourceTree = "<group>"; };
45E615151E8C590B0018AD52 /* DisplayableTextFilter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisplayableTextFilter.swift; sourceTree = "<group>"; }; 45E615151E8C590B0018AD52 /* DisplayableText.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisplayableText.swift; sourceTree = "<group>"; };
45E7A6A61E71CA7E00D44FB5 /* DisplayableTextFilterTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisplayableTextFilterTest.swift; sourceTree = "<group>"; }; 45E7A6A61E71CA7E00D44FB5 /* DisplayableTextFilterTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisplayableTextFilterTest.swift; sourceTree = "<group>"; };
45F170AB1E2F0351003FC1F2 /* CallAudioSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallAudioSession.swift; sourceTree = "<group>"; }; 45F170AB1E2F0351003FC1F2 /* CallAudioSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallAudioSession.swift; sourceTree = "<group>"; };
45F170AE1E2F0393003FC1F2 /* CallAudioSessionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallAudioSessionTest.swift; sourceTree = "<group>"; }; 45F170AE1E2F0393003FC1F2 /* CallAudioSessionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallAudioSessionTest.swift; sourceTree = "<group>"; };
@ -1034,7 +1034,7 @@
34B3F84D1E8DF1700035BE1A /* LockInteractionController.h */, 34B3F84D1E8DF1700035BE1A /* LockInteractionController.h */,
34B3F84E1E8DF1700035BE1A /* LockInteractionController.m */, 34B3F84E1E8DF1700035BE1A /* LockInteractionController.m */,
34CA1C281F7164F700E51C51 /* MediaMessageView.swift */, 34CA1C281F7164F700E51C51 /* MediaMessageView.swift */,
34CA1C261F7156F300E51C51 /* MessageMetadataViewController.swift */, 34CA1C261F7156F300E51C51 /* MessageDetailViewController.swift */,
34D9134C1F66DB7C00722898 /* ModalActivityIndicatorViewController.swift */, 34D9134C1F66DB7C00722898 /* ModalActivityIndicatorViewController.swift */,
34B3F84F1E8DF1700035BE1A /* NewContactThreadViewController.h */, 34B3F84F1E8DF1700035BE1A /* NewContactThreadViewController.h */,
34B3F8501E8DF1700035BE1A /* NewContactThreadViewController.m */, 34B3F8501E8DF1700035BE1A /* NewContactThreadViewController.m */,
@ -1457,7 +1457,7 @@
B90418E4183E9DD40038554A /* DateUtil.h */, B90418E4183E9DD40038554A /* DateUtil.h */,
B90418E5183E9DD40038554A /* DateUtil.m */, B90418E5183E9DD40038554A /* DateUtil.m */,
348F2EAD1F0D21BC00D4ECE0 /* DeviceSleepManager.swift */, 348F2EAD1F0D21BC00D4ECE0 /* DeviceSleepManager.swift */,
45E615151E8C590B0018AD52 /* DisplayableTextFilter.swift */, 45E615151E8C590B0018AD52 /* DisplayableText.swift */,
76EB04EA18170B33006006FC /* FunctionalUtil.h */, 76EB04EA18170B33006006FC /* FunctionalUtil.h */,
76EB04EB18170B33006006FC /* FunctionalUtil.m */, 76EB04EB18170B33006006FC /* FunctionalUtil.m */,
455AC69A1F4F79E500134004 /* ImageCache.swift */, 455AC69A1F4F79E500134004 /* ImageCache.swift */,
@ -2283,7 +2283,7 @@
45855F371D9498A40084F340 /* OWSContactAvatarBuilder.m in Sources */, 45855F371D9498A40084F340 /* OWSContactAvatarBuilder.m in Sources */,
45A6DAD61EBBF85500893231 /* ReminderView.swift in Sources */, 45A6DAD61EBBF85500893231 /* ReminderView.swift in Sources */,
45666EC61D99483D008FE134 /* OWSAvatarBuilder.m in Sources */, 45666EC61D99483D008FE134 /* OWSAvatarBuilder.m in Sources */,
45E615161E8C590B0018AD52 /* DisplayableTextFilter.swift in Sources */, 45E615161E8C590B0018AD52 /* DisplayableText.swift in Sources */,
34B3F88A1E8DF1700035BE1A /* OWSLinkDeviceViewController.m in Sources */, 34B3F88A1E8DF1700035BE1A /* OWSLinkDeviceViewController.m in Sources */,
34D1F0881F8678AA0066283D /* ConversationViewLayout.m in Sources */, 34D1F0881F8678AA0066283D /* ConversationViewLayout.m in Sources */,
76EB068618170B34006006FC /* ContactTableViewCell.m in Sources */, 76EB068618170B34006006FC /* ContactTableViewCell.m in Sources */,
@ -2291,7 +2291,7 @@
452314A01F7E9E18003A428C /* DirectionalPanGestureRecognizer.swift in Sources */, 452314A01F7E9E18003A428C /* DirectionalPanGestureRecognizer.swift in Sources */,
34330AA31E79686200DF2FB9 /* OWSProgressView.m in Sources */, 34330AA31E79686200DF2FB9 /* OWSProgressView.m in Sources */,
34B3F8A21E8EA6040035BE1A /* ViewControllerUtils.m in Sources */, 34B3F8A21E8EA6040035BE1A /* ViewControllerUtils.m in Sources */,
34CA1C271F7156F300E51C51 /* MessageMetadataViewController.swift in Sources */, 34CA1C271F7156F300E51C51 /* MessageDetailViewController.swift in Sources */,
34D5CCA91EAE3D30005515DB /* AvatarViewHelper.m in Sources */, 34D5CCA91EAE3D30005515DB /* AvatarViewHelper.m in Sources */,
45F170AC1E2F0351003FC1F2 /* CallAudioSession.swift in Sources */, 45F170AC1E2F0351003FC1F2 /* CallAudioSession.swift in Sources */,
34D1F0B71F87F8850066283D /* OWSGenericAttachmentView.m in Sources */, 34D1F0B71F87F8850066283D /* OWSGenericAttachmentView.m in Sources */,
@ -2466,7 +2466,7 @@
451DA3CB1F148AAD008E2423 /* CallViewController.swift in Sources */, 451DA3CB1F148AAD008E2423 /* CallViewController.swift in Sources */,
456F6E201E2411A000FD2210 /* CallService.swift in Sources */, 456F6E201E2411A000FD2210 /* CallService.swift in Sources */,
45A663C61F92EC760027B59E /* GroupTableViewCell.swift in Sources */, 45A663C61F92EC760027B59E /* GroupTableViewCell.swift in Sources */,
45E615171E8C59100018AD52 /* DisplayableTextFilter.swift in Sources */, 45E615171E8C59100018AD52 /* DisplayableText.swift in Sources */,
B660F6BB1C29868000687D6E /* OWSContactsManagerTest.m in Sources */, B660F6BB1C29868000687D6E /* OWSContactsManagerTest.m in Sources */,
45A6DAD71EBBF85500893231 /* ReminderView.swift in Sources */, 45A6DAD71EBBF85500893231 /* ReminderView.swift in Sources */,
B660F6D21C29868000687D6E /* PushManagerTest.m in Sources */, B660F6D21C29868000687D6E /* PushManagerTest.m in Sources */,

@ -2044,12 +2044,13 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
{ {
OWSAssert([NSThread isMainThread]); OWSAssert([NSThread isMainThread]);
OWSAssert(conversationItem); OWSAssert(conversationItem);
OWSAssert([conversationItem.interaction isKindOfClass:[TSMessage class]]);
TSMessage *message = (TSMessage *)conversationItem.interaction; TSMessage *message = (TSMessage *)conversationItem.interaction;
MessageMetadataViewController *view = MessageDetailViewController *view =
[[MessageMetadataViewController alloc] initWithViewItem:conversationItem [[MessageDetailViewController alloc] initWithViewItem:conversationItem
message:message message:message
mode:MessageMetadataViewModeFocusOnMessage]; mode:MessageMetadataViewModeFocusOnMessage];
[self.navigationController pushViewController:view animated:YES]; [self.navigationController pushViewController:view animated:YES];
} }
@ -2077,12 +2078,13 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
{ {
OWSAssert([NSThread isMainThread]); OWSAssert([NSThread isMainThread]);
OWSAssert(conversationItem); OWSAssert(conversationItem);
OWSAssert([conversationItem.interaction isKindOfClass:[TSMessage class]]);
TSMessage *message = (TSMessage *)conversationItem.interaction; TSMessage *message = (TSMessage *)conversationItem.interaction;
MessageMetadataViewController *view = MessageDetailViewController *view =
[[MessageMetadataViewController alloc] initWithViewItem:conversationItem [[MessageDetailViewController alloc] initWithViewItem:conversationItem
message:message message:message
mode:MessageMetadataViewModeFocusOnMetadata]; mode:MessageMetadataViewModeFocusOnMetadata];
[self.navigationController pushViewController:view animated:YES]; [self.navigationController pushViewController:view animated:YES];
} }
@ -4088,10 +4090,10 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
// want to inadvertently clobber it here. // want to inadvertently clobber it here.
OWSAssert(self.navigationController.delegate == nil) self.navigationController.delegate = self; OWSAssert(self.navigationController.delegate == nil) self.navigationController.delegate = self;
TSMessage *message = (TSMessage *)interaction; TSMessage *message = (TSMessage *)interaction;
MessageMetadataViewController *view = MessageDetailViewController *view =
[[MessageMetadataViewController alloc] initWithViewItem:conversationItem [[MessageDetailViewController alloc] initWithViewItem:conversationItem
message:message message:message
mode:MessageMetadataViewModeFocusOnMetadata]; mode:MessageMetadataViewModeFocusOnMetadata];
[self.navigationController pushViewController:view animated:YES]; [self.navigationController pushViewController:view animated:YES];
} else { } else {
OWSFail(@"%@ Can't show message metadata for message of type: %@", self.tag, [interaction class]); OWSFail(@"%@ Can't show message metadata for message of type: %@", self.tag, [interaction class]);

@ -24,19 +24,8 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType);
#pragma mark - #pragma mark -
@interface DisplayableText : NSObject
@property (nonatomic) NSString *fullText;
@property (nonatomic) NSString *displayText;
@property (nonatomic) BOOL isTextTruncated;
@end
#pragma mark -
@class ConversationViewCell; @class ConversationViewCell;
@class DisplayableText;
@class OWSAudioMessageView; @class OWSAudioMessageView;
@class TSAttachmentPointer; @class TSAttachmentPointer;
@class TSAttachmentStream; @class TSAttachmentStream;

@ -39,12 +39,6 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
#pragma mark - #pragma mark -
@implementation DisplayableText
@end
#pragma mark -
@interface ConversationViewItem () @interface ConversationViewItem ()
@property (nonatomic, nullable) NSValue *cachedCellSize; @property (nonatomic, nullable) NSValue *cachedCellSize;
@ -312,28 +306,31 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
// Only show up to 2kb of text. // Only show up to 2kb of text.
const NSUInteger kMaxTextDisplayLength = 2 * 1024; const NSUInteger kMaxTextDisplayLength = 2 * 1024;
text = [text ows_stripped]; text = [text ows_stripped];
NSString *fullText = [[[DisplayableTextFilter new] displayableText:text] ows_stripped]; NSString *_Nullable fullText = [DisplayableText displayableText:text];
displayableText = [DisplayableText new]; BOOL isTextTruncated = NO;
if (!fullText) { if (!fullText) {
displayableText.fullText = @""; fullText = @"";
} else { } else {
displayableText.fullText = fullText; fullText = fullText;
} }
NSString *displayText = fullText; NSString *_Nullable displayText = fullText;
if (displayText.length > kMaxTextDisplayLength) { if (displayText.length > kMaxTextDisplayLength) {
// Trim whitespace before _AND_ after slicing the snipper from the string. // Trim whitespace before _AND_ after slicing the snipper from the string.
NSString *snippet = [[displayText substringWithRange:NSMakeRange(0, kMaxTextDisplayLength)] ows_stripped]; NSString *snippet = [[displayText substringWithRange:NSMakeRange(0, kMaxTextDisplayLength)] ows_stripped];
displayText = [NSString stringWithFormat:NSLocalizedString(@"OVERSIZE_TEXT_DISPLAY_FORMAT", displayText = [NSString stringWithFormat:NSLocalizedString(@"OVERSIZE_TEXT_DISPLAY_FORMAT",
@"A display format for oversize text messages."), @"A display format for oversize text messages."),
snippet]; snippet];
displayableText.isTextTruncated = YES; isTextTruncated = YES;
} }
if (!displayText) { if (!displayText) {
displayableText.displayText = @""; displayText = @"";
} else { } else {
displayableText.displayText = displayText; displayText = displayText;
} }
displayableText =
[[DisplayableText alloc] initWithFullText:fullText displayText:displayText isTextTruncated:isTextTruncated];
[[self displayableTextCache] setObject:displayableText forKey:interactionId]; [[self displayableTextCache] setObject:displayableText forKey:interactionId];
} }
return displayableText; return displayableText;

@ -188,7 +188,7 @@ const NSUInteger kAvatarViewDiameter = 52;
: [UIColor lightGrayColor]), : [UIColor lightGrayColor]),
}]]; }]];
} }
NSString *displayableText = [[DisplayableTextFilter new] displayableText:thread.lastMessageLabel]; NSString *displayableText = [DisplayableText displayableText:thread.lastMessageLabel];
if (displayableText) { if (displayableText) {
[snippetText appendAttributedString:[[NSAttributedString alloc] [snippetText appendAttributedString:[[NSAttributedString alloc]
initWithString:displayableText initWithString:displayableText

@ -10,10 +10,10 @@ enum MessageMetadataViewMode: UInt {
case focusOnMetadata case focusOnMetadata
} }
class MessageMetadataViewController: OWSViewController { class MessageDetailViewController: OWSViewController {
static let TAG = "[MessageMetadataViewController]" static let TAG = "[MessageDetailViewController]"
let TAG = "[MessageMetadataViewController]" let TAG = "[MessageDetailViewController]"
// MARK: Properties // MARK: Properties

@ -4,12 +4,26 @@
import Foundation import Foundation
@objc class DisplayableTextFilter: NSObject { @objc class DisplayableText: NSObject {
let TAG = "[DisplayableTextFilter]" static let TAG = "[DisplayableText]"
let fullText: String
let displayText: String
let isTextTruncated: Bool
// MARK: Initializers
init(fullText: String, displayText: String, isTextTruncated: Bool) {
self.fullText = fullText
self.displayText = displayText
self.isTextTruncated = isTextTruncated
}
// MARK: Filter Methods
@objc @objc
func displayableText(_ text: String?) -> String? { class func displayableText(_ text: String?) -> String? {
guard let text = text else { guard let text = text else {
return nil return nil
} }
@ -17,13 +31,13 @@ import Foundation
if (self.hasExcessiveDiacriticals(text: text)) { if (self.hasExcessiveDiacriticals(text: text)) {
Logger.warn("\(TAG) filtering text for excessive diacriticals.") Logger.warn("\(TAG) filtering text for excessive diacriticals.")
let filteredText = text.folding(options: .diacriticInsensitive, locale: .current) let filteredText = text.folding(options: .diacriticInsensitive, locale: .current)
return filteredText return filteredText.ows_stripped()
} }
return text return text.ows_stripped()
} }
private func hasExcessiveDiacriticals(text: String) -> Bool { private class func hasExcessiveDiacriticals(text: String) -> Bool {
// discard any zalgo style text, by detecting maximum number of glyphs per character // discard any zalgo style text, by detecting maximum number of glyphs per character
for char in text.characters.enumerated() { for char in text.characters.enumerated() {
let scalarCount = String(char.element).unicodeScalars.count let scalarCount = String(char.element).unicodeScalars.count

@ -4,7 +4,7 @@
import XCTest import XCTest
class DisplayableTextFilterTest: XCTestCase { class DisplayableTextTest: XCTestCase {
override func setUp() { override func setUp() {
super.setUp() super.setUp()
@ -18,7 +18,7 @@ class DisplayableTextFilterTest: XCTestCase {
func testDisplayableText() { func testDisplayableText() {
// Ignore default byte size limitations to test other filtering behaviors // Ignore default byte size limitations to test other filtering behaviors
let filter = DisplayableTextFilter() let filter = DisplayableText()
// show plain text // show plain text
let boringText = "boring text" let boringText = "boring text"

Loading…
Cancel
Save