From 228e350e2aa674ca6343260a7c4a447e5e0cfe29 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Thu, 16 Nov 2017 16:08:14 -0500 Subject: [PATCH] message details shows failed bubble when appropriate // FREEBIE --- .../src/OWSMessagesBubbleImageFactory.swift | 34 ++++++++++++++----- .../ConversationView/Cells/OWSMessageCell.m | 14 +++----- .../MessageDetailViewController.swift | 2 +- 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/Signal/src/OWSMessagesBubbleImageFactory.swift b/Signal/src/OWSMessagesBubbleImageFactory.swift index b91a8b5a0..99cebb4cb 100644 --- a/Signal/src/OWSMessagesBubbleImageFactory.swift +++ b/Signal/src/OWSMessagesBubbleImageFactory.swift @@ -7,35 +7,53 @@ import Foundation @objc class OWSMessagesBubbleImageFactory: NSObject { - let jsqFactory = JSQMessagesBubbleImageFactory()! + private let jsqFactory = JSQMessagesBubbleImageFactory()! // TODO: UIView is a little bit expensive to instantiate. // Can we cache this value? - var isRTL: Bool { + private var isRTL: Bool { return UIView().isRTL() } - var incoming: JSQMessagesBubbleImage { + public var incoming: JSQMessagesBubbleImage { let color = UIColor.jsq_messageBubbleLightGray()! return incoming(color: color) } - var outgoing: JSQMessagesBubbleImage { + public var outgoing: JSQMessagesBubbleImage { let color = UIColor.ows_materialBlue() return outgoing(color: color) } - var currentlyOutgoing: JSQMessagesBubbleImage { + public var currentlyOutgoing: JSQMessagesBubbleImage { let color = UIColor.ows_fadedBlue() return outgoing(color: color) } - var outgoingFailed: JSQMessagesBubbleImage { + public var outgoingFailed: JSQMessagesBubbleImage { let color = UIColor.gray return outgoing(color: color) } - func outgoing(color: UIColor) -> JSQMessagesBubbleImage { + public func bubble(message: TSMessage) -> JSQMessagesBubbleImage { + if message is TSIncomingMessage { + return self.incoming + } else if let outgoingMessage = message as? TSOutgoingMessage { + switch outgoingMessage.messageState { + case .unsent: + return outgoingFailed + case .attemptingOut: + return currentlyOutgoing + default: + return outgoing + } + } else { + owsFail("Unexpected message type: \(message)") + return outgoing + } + } + + private func outgoing(color: UIColor) -> JSQMessagesBubbleImage { if isRTL { return jsqFactory.incomingMessagesBubbleImage(with: color) } else { @@ -43,7 +61,7 @@ class OWSMessagesBubbleImageFactory: NSObject { } } - func incoming(color: UIColor) -> JSQMessagesBubbleImage { + private func incoming(color: UIColor) -> JSQMessagesBubbleImage { if isRTL { return jsqFactory.outgoingMessagesBubbleImage(with: color) } else { diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m index a2b65564e..dc42f6c38 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m @@ -372,16 +372,10 @@ NS_ASSUME_NONNULL_BEGIN self.payloadConstraints = [self.payloadView autoPinWidthToSuperview]; } - JSQMessagesBubbleImage *bubbleImageData; - if ([self.viewItem.interaction isKindOfClass:[TSOutgoingMessage class]]) { - TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)self.viewItem.interaction; - if (outgoingMessage.messageState == TSOutgoingMessageStateUnsent) { - bubbleImageData = self.bubbleFactory.outgoingFailed; - } else { - bubbleImageData = self.bubbleFactory.outgoing; - } - } else { - bubbleImageData = self.bubbleFactory.incoming; + JSQMessagesBubbleImage *_Nullable bubbleImageData; + if ([self.viewItem.interaction isKindOfClass:[TSMessage class]]) { + TSMessage *message = (TSMessage *)self.viewItem.interaction; + bubbleImageData = [self.bubbleFactory bubbleWithMessage:message]; } self.bubbleImageView.image = bubbleImageData.messageBubbleImage; diff --git a/Signal/src/ViewControllers/MessageDetailViewController.swift b/Signal/src/ViewControllers/MessageDetailViewController.swift index 2c20f4371..d9e0ec686 100644 --- a/Signal/src/ViewControllers/MessageDetailViewController.swift +++ b/Signal/src/ViewControllers/MessageDetailViewController.swift @@ -353,7 +353,7 @@ class MessageDetailViewController: OWSViewController, UIScrollViewDelegate { messageTextView.textColor = isIncoming ? UIColor.black : UIColor.white messageTextView.text = messageBody - let bubbleImageData = isIncoming ? bubbleFactory.incoming : bubbleFactory.outgoing + let bubbleImageData = bubbleFactory.bubble(message: message) let messageTextProxyView = UIView() messageTextProxyView.layoutMargins = UIEdgeInsets.zero