Merge branch 'charlesmchen/tweakSendFailed'

pull/1/head
Matthew Chen 7 years ago
commit 79f4a984ee

@ -2,17 +2,17 @@
"images" : [
{
"idiom" : "universal",
"filename" : "message_send_failure@1x.png",
"filename" : "error-20@1x.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "message_send_failure@2x.png",
"filename" : "error-20@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "message_send_failure@3x.png",
"filename" : "error-20@3x.png",
"scale" : "3x"
}
],

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 765 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

@ -273,7 +273,7 @@ class ContactViewController: OWSViewController, ContactShareViewHelperDelegate {
stackView.axis = .horizontal
stackView.distribution = .fillEqually
stackView.addArrangedSubview(createCircleActionButton(text: NSLocalizedString("ACTION_SEND_MESSAGE",
comment: "Label for 'sent message' button in contact view."),
comment: "Label for 'send message' button in contact view."),
imageName: "contact_view_message",
actionBlock: { [weak self] in
guard let strongSelf = self else { return }
@ -539,7 +539,7 @@ class ContactViewController: OWSViewController, ContactShareViewHelperDelegate {
if let e164 = phoneNumber.tryToConvertToE164() {
if contactShare.systemContactsWithSignalAccountPhoneNumbers(contactsManager).contains(e164) {
actionSheet.addAction(UIAlertAction(title: NSLocalizedString("ACTION_SEND_MESSAGE",
comment: "Label for 'sent message' button in contact view."),
comment: "Label for 'send message' button in contact view."),
style: .default) { _ in
SignalApp.shared().presentConversation(forRecipientId: e164, action: .compose)
})

@ -20,12 +20,15 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic) UIView *dateStrokeView;
@property (nonatomic) UILabel *dateHeaderLabel;
@property (nonatomic) AvatarImageView *avatarView;
@property (nonatomic, nullable) UIImageView *sendFailureBadgeView;
@property (nonatomic, nullable) NSMutableArray<NSLayoutConstraint *> *viewConstraints;
@property (nonatomic) BOOL isPresentingMenuController;
@end
#pragma mark -
@implementation OWSMessageCell
// `[UIView init]` invokes `[self initWithFrame:...]`.
@ -131,6 +134,15 @@ NS_ASSUME_NONNULL_BEGIN
return self.viewItem.interaction.interactionType == OWSInteractionType_OutgoingMessage;
}
- (BOOL)shouldHaveSendFailureBadge
{
if (![self.viewItem.interaction isKindOfClass:[TSOutgoingMessage class]]) {
return NO;
}
TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)self.viewItem.interaction;
return outgoingMessage.messageState == TSOutgoingMessageStateFailed;
}
#pragma mark - Load
- (void)loadForDisplayWithTransaction:(YapDatabaseReadTransaction *)transaction
@ -157,6 +169,34 @@ NS_ASSUME_NONNULL_BEGIN
withInset:self.conversationStyle.gutterTrailing
relation:NSLayoutRelationGreaterThanOrEqual],
]];
} else {
if (self.shouldHaveSendFailureBadge) {
self.sendFailureBadgeView = [UIImageView new];
self.sendFailureBadgeView.image =
[self.sendFailureBadge imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
self.sendFailureBadgeView.tintColor = [UIColor ows_destructiveRedColor];
[self.contentView addSubview:self.sendFailureBadgeView];
CGFloat sendFailureBadgeBottomMargin
= round(self.conversationStyle.lastTextLineAxis - self.sendFailureBadgeSize * 0.5f);
[self.viewConstraints addObjectsFromArray:@[
[self.messageBubbleView autoPinEdgeToSuperviewEdge:ALEdgeLeading
withInset:self.conversationStyle.gutterLeading
relation:NSLayoutRelationGreaterThanOrEqual],
[self.sendFailureBadgeView autoPinLeadingToTrailingEdgeOfView:self.messageBubbleView
offset:self.sendFailureBadgeSpacing],
// V-align the "send failure" badge with the
// last line of the text (if any, or where it
// would be).
[self.messageBubbleView autoPinEdge:ALEdgeBottom
toEdge:ALEdgeBottom
ofView:self.sendFailureBadgeView
withOffset:sendFailureBadgeBottomMargin],
[self.sendFailureBadgeView autoPinEdgeToSuperviewEdge:ALEdgeTrailing
withInset:self.conversationStyle.errorGutterTrailing],
[self.sendFailureBadgeView autoSetDimension:ALDimensionWidth toSize:self.sendFailureBadgeSize],
[self.sendFailureBadgeView autoSetDimension:ALDimensionHeight toSize:self.sendFailureBadgeSize],
]];
} else {
[self.viewConstraints addObjectsFromArray:@[
[self.messageBubbleView autoPinEdgeToSuperviewEdge:ALEdgeLeading
@ -166,6 +206,7 @@ NS_ASSUME_NONNULL_BEGIN
withInset:self.conversationStyle.gutterTrailing],
]];
}
}
[self updateDateHeader];
@ -184,6 +225,24 @@ NS_ASSUME_NONNULL_BEGIN
}
}
- (UIImage *)sendFailureBadge
{
UIImage *image = [UIImage imageNamed:@"message_send_failed"];
OWSAssert(image);
OWSAssert(image.size.width == self.sendFailureBadgeSize && image.size.height == self.sendFailureBadgeSize);
return image;
}
- (CGFloat)sendFailureBadgeSize
{
return 20.f;
}
- (CGFloat)sendFailureBadgeSpacing
{
return 8.f;
}
// * If cell is visible, lazy-load (expensive) view contents.
// * If cell is not visible, eagerly unload view contents.
- (void)ensureMediaLoadState
@ -362,6 +421,10 @@ NS_ASSUME_NONNULL_BEGIN
cellSize.height += self.dateHeaderHeight;
if (self.shouldHaveSendFailureBadge) {
cellSize.width += self.sendFailureBadgeSize + self.sendFailureBadgeSpacing;
}
cellSize = CGSizeCeil(cellSize);
return cellSize;
@ -404,6 +467,9 @@ NS_ASSUME_NONNULL_BEGIN
self.avatarView.image = nil;
[self.avatarView removeFromSuperview];
[self.sendFailureBadgeView removeFromSuperview];
self.sendFailureBadgeView = nil;
[self hideMenuControllerIfNecessary];
[[NSNotificationCenter defaultCenter] removeObserver:self];

@ -107,12 +107,11 @@ NS_ASSUME_NONNULL_BEGIN
statusIndicatorImage = [UIImage imageNamed:@"message_status_delivered"];
break;
case MessageReceiptStatusFailed:
// TODO:
statusIndicatorImage = [UIImage imageNamed:@"message_status_sending"];
// No status indicator icon.
break;
}
OWSAssert(statusIndicatorImage);
if (statusIndicatorImage) {
OWSAssert(statusIndicatorImage.size.width <= self.maxImageWidth);
self.statusIndicatorImageView.image =
[statusIndicatorImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
@ -126,6 +125,10 @@ NS_ASSUME_NONNULL_BEGIN
self.statusIndicatorImageView.image = nil;
self.statusIndicatorImageView.hidden = YES;
}
} else {
self.statusIndicatorImageView.image = nil;
self.statusIndicatorImageView.hidden = YES;
}
}
- (void)animateSpinningIcon
@ -141,14 +144,33 @@ NS_ASSUME_NONNULL_BEGIN
[self.statusIndicatorImageView.layer addAnimation:animation forKey:@"animation"];
}
- (BOOL)isFailedOutgoingMessage:(ConversationViewItem *)viewItem
{
OWSAssert(viewItem);
if (viewItem.interaction.interactionType != OWSInteractionType_OutgoingMessage) {
return NO;
}
TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)viewItem.interaction;
MessageReceiptStatus messageStatus =
[MessageRecipientStatusUtils recipientStatusWithOutgoingMessage:outgoingMessage];
return messageStatus == MessageReceiptStatusFailed;
}
- (void)configureLabelsWithConversationViewItem:(ConversationViewItem *)viewItem
{
OWSAssert(viewItem);
[self configureFonts];
if ([self isFailedOutgoingMessage:viewItem]) {
self.timestampLabel.text
= NSLocalizedString(@"MESSAGE_STATUS_SEND_FAILED", @"Label indicating that a message failed to send.");
} else {
self.timestampLabel.text = [DateUtil formatTimestampAsTimeShort:viewItem.interaction.timestamp];
}
}
- (CGSize)measureWithConversationViewItem:(ConversationViewItem *)viewItem
{
@ -158,10 +180,11 @@ NS_ASSUME_NONNULL_BEGIN
CGSize result = CGSizeZero;
result.height = MAX(self.timestampLabel.font.lineHeight, self.imageHeight);
if (viewItem.interaction.interactionType == OWSInteractionType_OutgoingMessage) {
result.width = ([self.timestampLabel sizeThatFits:CGSizeZero].width + self.maxImageWidth + self.hSpacing);
} else {
result.width = [self.timestampLabel sizeThatFits:CGSizeZero].width;
if (viewItem.interaction.interactionType == OWSInteractionType_OutgoingMessage) {
if (![self isFailedOutgoingMessage:viewItem]) {
result.width += (self.maxImageWidth + self.hSpacing);
}
}
return CGSizeCeil(result);
}

@ -58,14 +58,14 @@ public class MessageRecipientStatusUtils: NSObject {
switch recipientState.state {
case .failed:
let shortStatusMessage = NSLocalizedString("MESSAGE_STATUS_FAILED_SHORT", comment: "status message for failed messages")
let longStatusMessage = NSLocalizedString("MESSAGE_STATUS_FAILED", comment: "message footer for failed messages")
let longStatusMessage = NSLocalizedString("MESSAGE_STATUS_FAILED", comment: "status message for failed messages")
return (status:.failed, shortStatusMessage:shortStatusMessage, longStatusMessage:longStatusMessage)
case .sending:
if outgoingMessage.hasAttachments() {
assert(outgoingMessage.messageState == .sending)
let statusMessage = NSLocalizedString("MESSAGE_STATUS_UPLOADING",
comment: "message footer while attachment is uploading")
comment: "status message while attachment is uploading")
return (status:.uploading, shortStatusMessage:statusMessage, longStatusMessage:statusMessage)
} else {
assert(outgoingMessage.messageState == .sending)
@ -78,7 +78,7 @@ public class MessageRecipientStatusUtils: NSObject {
if let readTimestamp = recipientState.readTimestamp {
let timestampString = DateUtil.formatPastTimestampRelativeToNow(readTimestamp.uint64Value)
let shortStatusMessage = timestampString
let longStatusMessage = NSLocalizedString("MESSAGE_STATUS_READ", comment: "message footer for read messages").rtlSafeAppend(" ")
let longStatusMessage = NSLocalizedString("MESSAGE_STATUS_READ", comment: "status message for read messages").rtlSafeAppend(" ")
.rtlSafeAppend(timestampString)
return (status:.read, shortStatusMessage:shortStatusMessage, longStatusMessage:longStatusMessage)
}
@ -92,7 +92,7 @@ public class MessageRecipientStatusUtils: NSObject {
}
let statusMessage =
NSLocalizedString("MESSAGE_STATUS_SENT",
comment: "message footer for sent messages")
comment: "status message for sent messages")
return (status:.sent, shortStatusMessage:statusMessage, longStatusMessage:statusMessage)
case .skipped:
let statusMessage = NSLocalizedString("MESSAGE_STATUS_RECIPIENT_SKIPPED",
@ -107,29 +107,29 @@ public class MessageRecipientStatusUtils: NSObject {
switch outgoingMessage.messageState {
case .failed:
// Use the "long" version of this message here.
return (.failed, NSLocalizedString("MESSAGE_STATUS_FAILED", comment: "message footer for failed messages"))
return (.failed, NSLocalizedString("MESSAGE_STATUS_FAILED", comment: "status message for failed messages"))
case .sending:
if outgoingMessage.hasAttachments() {
return (.uploading, NSLocalizedString("MESSAGE_STATUS_UPLOADING",
comment: "message footer while attachment is uploading"))
comment: "status message while attachment is uploading"))
} else {
return (.sending, NSLocalizedString("MESSAGE_STATUS_SENDING",
comment: "message status while message is sending."))
}
case .sent:
if outgoingMessage.readRecipientIds().count > 0 {
return (.read, NSLocalizedString("MESSAGE_STATUS_READ", comment: "message footer for read messages"))
return (.read, NSLocalizedString("MESSAGE_STATUS_READ", comment: "status message for read messages"))
}
if outgoingMessage.wasDeliveredToAnyRecipient {
return (.delivered, NSLocalizedString("MESSAGE_STATUS_DELIVERED",
comment: "message status for message delivered to their recipient."))
}
return (.sent, NSLocalizedString("MESSAGE_STATUS_SENT",
comment: "message footer for sent messages"))
comment: "status message for sent messages"))
default:
owsFail("\(self.logTag) Message has unexpected status: \(outgoingMessage.messageState).")
return (.sent, NSLocalizedString("MESSAGE_STATUS_SENT",
comment: "message footer for sent messages"))
comment: "status message for sent messages"))
}
}

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "ارسال دعوة";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "إرسال رسالة";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Покани във Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Изпрати Съобщение";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invitér til Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Besked";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Zu Signal einladen";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Nachricht senden";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,8 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view.
Label for button that lets you send a message to a contact. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */
@ -511,7 +512,7 @@
/* Navbar title when viewing settings for a 1-on-1 thread */
"CONVERSATION_SETTINGS_CONTACT_INFO_TITLE" = "Contact Info";
/* Indicates that user's profile has been shared with a group. */
/* Label for table cell which leads to picking a new conversation color */
"CONVERSATION_SETTINGS_CONVERSATION_COLOR" = "Color";
/* Navbar title when viewing settings for a group thread */
@ -1205,25 +1206,28 @@
/* message status for message delivered to their recipient. */
"MESSAGE_STATUS_DELIVERED" = "Delivered";
/* message footer for failed messages */
"MESSAGE_STATUS_FAILED" = "Sending failed. Tap for info.";
/* status message for failed messages */
"MESSAGE_STATUS_FAILED" = "Sending failed.";
/* status message for failed messages */
"MESSAGE_STATUS_FAILED_SHORT" = "Failed";
/* message footer for read messages */
/* status message for read messages */
"MESSAGE_STATUS_READ" = "Read";
/* message status if message delivery to a recipient is skipped. We skip delivering group messages to users who have left the group or unregistered their Signal account. */
"MESSAGE_STATUS_RECIPIENT_SKIPPED" = "Skipped";
/* Label indicating that a message failed to send. */
"MESSAGE_STATUS_SEND_FAILED" = "Send Failed";
/* message status while message is sending. */
"MESSAGE_STATUS_SENDING" = "Sending...";
/* message footer for sent messages */
/* status message for sent messages */
"MESSAGE_STATUS_SENT" = "Sent";
/* message footer while attachment is uploading */
/* status message while attachment is uploading */
"MESSAGE_STATUS_UPLOADING" = "Uploading…";
/* Indicates that one member of this group conversation is no longer verified. Embeds {{user's name or phone number}}. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invitar a Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Enviar mensaje";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Kutsu Signalisse";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Saada sõnum";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "دعوت به سیگنال";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "ارسال پیام";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Kutsu Signaliin";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Lähetä viesti";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Inviter à Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Envoyer un message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "הזמן אל Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "שלח הודעה";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Undang gabung ke Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Kirim Pesan";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invita a Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Manda messaggio";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "招待する";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "メッセージ送信";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "អញ្ជើញចូលប្រើស៊ីហ្គណល";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "ផ្ញើសារ";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Pakviesti į Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Siųsti žinutę";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Inviter til Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send melding";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Nodig uit voor Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Stuur bericht";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Zaproś do Signala";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Wyślij wiadomość";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Convidar para o Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Enviar mensagem";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Convidar para o Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Enviar Mensagem";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invită pe Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Trimite mesaj";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Пригласить в Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Отправить сообщение";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Povabi k uporabi";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Pošlji sporočilo";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Bjud in till Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Skicka meddelande";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Invite to Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Send Message";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Signal'e davet et";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "Mesaj Gönder";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "邀请其使用 Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "发送消息";
/* Label for 'share contact' button. */

@ -10,7 +10,7 @@
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "邀請來使用 Signal";
/* Label for 'sent message' button in contact view. */
/* Label for 'send message' button in contact view. */
"ACTION_SEND_MESSAGE" = "傳送訊息";
/* Label for 'share contact' button. */

@ -79,7 +79,7 @@ NS_ASSUME_NONNULL_BEGIN
+ (UIColor *)ows_destructiveRedColor
{
return [UIColor colorWithRed:0.98639106750488281 green:0.10408364236354828 blue:0.33135244250297546 alpha:1.f];
return [UIColor colorWithRGBHex:0xF44336];
}
+ (UIColor *)ows_errorMessageBorderColor

@ -27,6 +27,7 @@ public class ConversationStyle: NSObject {
// like "date headers" and "unread indicator".
@objc public var fullWidthGutterLeading: CGFloat = 0
@objc public var fullWidthGutterTrailing: CGFloat = 0
@objc public var errorGutterTrailing: CGFloat = 0
// viewWidth - (gutterLeading + gutterTrailing)
@objc public var contentWidth: CGFloat = 0
@ -87,6 +88,7 @@ public class ConversationStyle: NSObject {
}
fullWidthGutterLeading = gutterLeading
fullWidthGutterTrailing = gutterTrailing
errorGutterTrailing = 16
contentWidth = viewWidth - (gutterLeading + gutterTrailing)

Loading…
Cancel
Save