From 04a300784f9ef73ead6a0c41e652fcf005e75fe5 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Mon, 14 Jan 2019 16:17:59 -0500 Subject: [PATCH] Respond to CR. --- .../Cells/MediaAlbumCellView.swift | 16 +++++++++----- .../Cells/OWSMessageBubbleView.m | 22 ++++++++++++++----- .../ConversationView/ConversationViewItem.h | 2 ++ .../ConversationView/ConversationViewItem.m | 10 +++++++++ 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/Signal/src/ViewControllers/ConversationView/Cells/MediaAlbumCellView.swift b/Signal/src/ViewControllers/ConversationView/Cells/MediaAlbumCellView.swift index 9319a2938..146dd9075 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/MediaAlbumCellView.swift +++ b/Signal/src/ViewControllers/ConversationView/Cells/MediaAlbumCellView.swift @@ -1,5 +1,5 @@ // -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// Copyright (c) 2019 Open Whisper Systems. All rights reserved. // import Foundation @@ -11,6 +11,9 @@ public class MediaAlbumCellView: UIStackView { @objc public let itemViews: [ConversationMediaView] + @objc + public var moreItemsView: ConversationMediaView? + private static let kSpacingPts: CGFloat = 2 private static let kMaxItems = 5 @@ -41,8 +44,6 @@ public class MediaAlbumCellView: UIStackView { } private func createContents(maxMessageWidth: CGFloat) { - var moreItemViews = [ConversationMediaView]() - switch itemViews.count { case 0: owsFailDebug("No item views.") @@ -129,7 +130,7 @@ public class MediaAlbumCellView: UIStackView { return } - moreItemViews.append(lastView) + moreItemsView = lastView let tintView = UIView() tintView.backgroundColor = UIColor(white: 0, alpha: 0.4) @@ -151,7 +152,7 @@ public class MediaAlbumCellView: UIStackView { } for itemView in itemViews { - guard !moreItemViews.contains(itemView) else { + guard moreItemsView == itemView else { // Don't display the caption indicator on // the "more" item, if any. continue @@ -277,4 +278,9 @@ public class MediaAlbumCellView: UIStackView { } return bestMediaView } + + @objc + public func isMoreItemsView(mediaView: ConversationMediaView) -> Bool { + return moreItemsView == mediaView + } } diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m index d9a40f81b..72291134b 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m @@ -1388,16 +1388,28 @@ const UIDataDetectorTypes kOWSAllowedDataDetectorTypes return; } - TSAttachment *attachment = mediaView.attachment; - if (![attachment isKindOfClass:[TSAttachmentStream class]]) { - if ([attachment isKindOfClass:[TSAttachmentPointer class]]) { - TSAttachmentPointer *attachmentPointer = (TSAttachmentPointer *)attachment; - if (attachmentPointer.state == TSAttachmentPointerStateFailed) { + if ([mediaAlbumCellView isMoreItemsViewWithMediaView:mediaView]) { + for (ConversationMediaAlbumItem *mediaAlbumItem in self.viewItem.mediaAlbumItems) { + if (mediaAlbumItem.isFailedDownload) { + // Treat the tap as a "retry" tap if: + // + // a) the user tapped on the "more items" cell. + // b) there are any failed downloads in the album. [self.delegate didTapFailedIncomingAttachment:self.viewItem]; return; } } + } + TSAttachment *attachment = mediaView.attachment; + if ([attachment isKindOfClass:[TSAttachmentPointer class]]) { + TSAttachmentPointer *attachmentPointer = (TSAttachmentPointer *)attachment; + if (attachmentPointer.state == TSAttachmentPointerStateFailed) { + // Treat the tap as a "retry" tap if the user taps on a failed download. + [self.delegate didTapFailedIncomingAttachment:self.viewItem]; + return; + } + } else if (![attachment isKindOfClass:[TSAttachmentStream class]]) { OWSLogWarn(@"Media attachment not yet downloaded."); return; } diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h index 8bccb0604..9d88e7e37 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h @@ -47,6 +47,8 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType); @property (nonatomic, readonly, nullable) NSString *caption; +@property (nonatomic, readonly) BOOL isFailedDownload; + @end #pragma mark - diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m index 11d520eb9..7733b873f 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m @@ -64,6 +64,16 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) return self; } + +- (BOOL)isFailedDownload +{ + if (![self.attachment isKindOfClass:[TSAttachmentPointer class]]) { + return NO; + } + TSAttachmentPointer *attachmentPointer = (TSAttachmentPointer *)self.attachment; + return attachmentPointer.state == TSAttachmentPointerStateFailed; +} + @end #pragma mark -