diff --git a/CHANGES.rst b/CHANGES.rst index d8128c045..4e072709e 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,9 @@ +Changes in 0.8.6 (2019-xx-xx) +=============================================== + +Improvements: + * RoomVC: When replying, use a "Reply" button instead of "Send". + Changes in 0.8.5 (2019-xx-xx) =============================================== diff --git a/Riot/Assets/en.lproj/Vector.strings b/Riot/Assets/en.lproj/Vector.strings index adc590650..9e580c24f 100644 --- a/Riot/Assets/en.lproj/Vector.strings +++ b/Riot/Assets/en.lproj/Vector.strings @@ -282,6 +282,7 @@ "room_event_failed_to_send" = "Failed to send"; "room_action_send_photo_or_video" = "Send photo or video"; "room_action_send_sticker" = "Send sticker"; +"room_action_reply" = "Reply"; "room_replacement_information" = "This room has been replaced and is no longer active."; "room_replacement_link" = "The conversation continues here."; "room_predecessor_information" = "This room is a continuation of another conversation."; diff --git a/Riot/Generated/Strings.swift b/Riot/Generated/Strings.swift index 1239b656b..5932c9364 100644 --- a/Riot/Generated/Strings.swift +++ b/Riot/Generated/Strings.swift @@ -1338,6 +1338,10 @@ internal enum VectorL10n { internal static var retry: String { return VectorL10n.tr("Vector", "retry") } + /// Reply + internal static var roomActionReply: String { + return VectorL10n.tr("Vector", "room_action_reply") + } /// Send photo or video internal static var roomActionSendPhotoOrVideo: String { return VectorL10n.tr("Vector", "room_action_send_photo_or_video") diff --git a/Riot/Modules/Room/RoomViewController.m b/Riot/Modules/Room/RoomViewController.m index 49440b8da..97ec2831e 100644 --- a/Riot/Modules/Room/RoomViewController.m +++ b/Riot/Modules/Room/RoomViewController.m @@ -206,9 +206,6 @@ // Observe kThemeServiceDidChangeThemeNotification to handle user interface theme change. id kThemeServiceDidChangeThemeNotificationObserver; - // Tell whether the input text field is in send reply mode. If true typed message will be sent to highlighted event. - BOOL isInReplyMode; - // Listener for `m.room.tombstone` event type id tombstoneEventNotificationsListener; @@ -1098,7 +1095,7 @@ - (void)sendTextMessage:(NSString*)msgTxt { - if (isInReplyMode && customizedRoomDataSource.selectedEventId) + if (self.inputToolBarSendMode == RoomInputToolbarViewSendModeReply && customizedRoomDataSource.selectedEventId) { [self.roomDataSource sendReplyToEventWithId:customizedRoomDataSource.selectedEventId withTextMessage:msgTxt success:nil failure:^(NSError *error) { // Just log the error. The message will be displayed in red in the room history @@ -1440,17 +1437,27 @@ } } -- (void)enableReplyMode:(BOOL)enable +- (void)setInputToolBarSendMode:(RoomInputToolbarViewSendMode)sendMode { - isInReplyMode = enable; - if (self.inputToolbarView && [self.inputToolbarView isKindOfClass:[RoomInputToolbarView class]]) { RoomInputToolbarView *roomInputToolbarView = (RoomInputToolbarView*)self.inputToolbarView; - roomInputToolbarView.replyToEnabled = enable; + roomInputToolbarView.sendMode = sendMode; } } +- (RoomInputToolbarViewSendMode)inputToolBarSendMode +{ + RoomInputToolbarViewSendMode sendMode = RoomInputToolbarViewSendModeSend; + if (self.inputToolbarView && [self.inputToolbarView isKindOfClass:[RoomInputToolbarView class]]) + { + RoomInputToolbarView *roomInputToolbarView = (RoomInputToolbarView*)self.inputToolbarView; + sendMode = roomInputToolbarView.sendMode; + } + + return sendMode; +} + - (void)onSwipeGesture:(UISwipeGestureRecognizer*)swipeGestureRecognizer { UIView *view = swipeGestureRecognizer.view; @@ -2871,16 +2878,16 @@ - (void)selectEventWithId:(NSString*)eventId { - BOOL shouldEnableReplyMode = [self.roomDataSource canReplyToEventWithId:eventId];; - - [self enableReplyMode:shouldEnableReplyMode]; - + BOOL shouldEnableReplyMode = [self.roomDataSource canReplyToEventWithId:eventId]; + + [self setInputToolBarSendMode: shouldEnableReplyMode ? RoomInputToolbarViewSendModeReply : RoomInputToolbarViewSendModeSend]; + customizedRoomDataSource.selectedEventId = eventId; } - (void)cancelEventSelection { - [self enableReplyMode:NO]; + [self setInputToolBarSendMode:RoomInputToolbarViewSendModeSend]; if (currentAlert) { diff --git a/Riot/Modules/Room/Views/InputToolbar/RoomInputToolbarView.h b/Riot/Modules/Room/Views/InputToolbar/RoomInputToolbarView.h index 20c66fcaf..429727a96 100644 --- a/Riot/Modules/Room/Views/InputToolbar/RoomInputToolbarView.h +++ b/Riot/Modules/Room/Views/InputToolbar/RoomInputToolbarView.h @@ -18,6 +18,16 @@ #import "MediaPickerViewController.h" +/** + Destination of the message in the composer + */ +typedef enum : NSUInteger +{ + RoomInputToolbarViewSendModeSend, + RoomInputToolbarViewSendModeReply, +} RoomInputToolbarViewSendMode; + + @protocol RoomInputToolbarViewDelegate /** @@ -70,9 +80,9 @@ @property (nonatomic) BOOL isEncryptionEnabled; /** - Tell whether the input text will be a reply to a message. + Destination of the message in the composer. */ -@property (nonatomic, getter=isReplyToEnabled) BOOL replyToEnabled; +@property (nonatomic) RoomInputToolbarViewSendMode sendMode; /** Tell whether a call is active. diff --git a/Riot/Modules/Room/Views/InputToolbar/RoomInputToolbarView.m b/Riot/Modules/Room/Views/InputToolbar/RoomInputToolbarView.m index 0b483bd5c..66c182cc5 100644 --- a/Riot/Modules/Room/Views/InputToolbar/RoomInputToolbarView.m +++ b/Riot/Modules/Room/Views/InputToolbar/RoomInputToolbarView.m @@ -69,6 +69,7 @@ [super awakeFromNib]; _supportCallOption = YES; + _sendMode = RoomInputToolbarViewSendModeSend; self.rightInputToolbarButton.hidden = YES; @@ -154,11 +155,31 @@ self.placeholder = placeholder; } -- (void)setReplyToEnabled:(BOOL)isReplyToEnabled +- (void)setSendMode:(RoomInputToolbarViewSendMode)sendMode { - _replyToEnabled = isReplyToEnabled; - + _sendMode = sendMode; + [self updatePlaceholder]; + [self updateToolbarButtonLabel]; +} + +- (void)updateToolbarButtonLabel +{ + NSString *title; + + switch (_sendMode) + { + case RoomInputToolbarViewSendModeReply: + title = NSLocalizedStringFromTable(@"room_action_reply", @"Vector", nil); + break; + + default: + title = [NSBundle mxk_localizedStringForKey:@"send"]; + break; + } + + [self.rightInputToolbarButton setTitle:title forState:UIControlStateNormal]; + [self.rightInputToolbarButton setTitle:title forState:UIControlStateHighlighted]; } - (void)updatePlaceholder @@ -172,17 +193,44 @@ if (!shouldDisplayLargePlaceholder) { - placeholder = _replyToEnabled ? NSLocalizedStringFromTable(@"room_message_reply_to_short_placeholder", @"Vector", nil) : NSLocalizedStringFromTable(@"room_message_short_placeholder", @"Vector", nil); + switch (_sendMode) + { + case RoomInputToolbarViewSendModeReply: + placeholder = NSLocalizedStringFromTable(@"room_message_reply_to_short_placeholder", @"Vector", nil); + break; + + default: + placeholder = NSLocalizedStringFromTable(@"room_message_short_placeholder", @"Vector", nil); + break; + } } else { if (_isEncryptionEnabled) { - placeholder = _replyToEnabled ? NSLocalizedStringFromTable(@"encrypted_room_message_reply_to_placeholder", @"Vector", nil) : NSLocalizedStringFromTable(@"encrypted_room_message_placeholder", @"Vector", nil); + switch (_sendMode) + { + case RoomInputToolbarViewSendModeReply: + placeholder = NSLocalizedStringFromTable(@"encrypted_room_message_reply_to_placeholder", @"Vector", nil); + break; + + default: + placeholder = NSLocalizedStringFromTable(@"encrypted_room_message_placeholder", @"Vector", nil); + break; + } } else { - placeholder = _replyToEnabled ? NSLocalizedStringFromTable(@"room_message_reply_to_placeholder", @"Vector", nil) : NSLocalizedStringFromTable(@"room_message_placeholder", @"Vector", nil); + switch (_sendMode) + { + case RoomInputToolbarViewSendModeReply: + placeholder = NSLocalizedStringFromTable(@"room_message_reply_to_placeholder", @"Vector", nil); + break; + + default: + placeholder = NSLocalizedStringFromTable(@"room_message_placeholder", @"Vector", nil); + break; + } } }